diff options
author | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-12-13 22:53:06 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-13 22:53:06 -0800 |
commit | 03fead10f4761f25873786bff3f5d55d423f47a6 (patch) | |
tree | df9b66fd137408d2c1b7bb04c7d78d4c2c2c2185 | |
parent | e6c9d717dfad90e5423ebfc6aef53e0b19ef808d (diff) | |
parent | 6a675e2c9f472ac46823ddd54fd69e277ba8bd41 (diff) |
Merge pull request #127 from marijnvdwerf/decompile/berry-tag-screen
Decompile berry tag screen
-rw-r--r-- | asm/berry_tag_screen.s | 1115 | ||||
-rw-r--r-- | asm/item_menu.s | 4 | ||||
-rw-r--r-- | include/asm.inc.h | 10 | ||||
-rw-r--r-- | include/berry_tag_screen.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/berry_tag_screen.c | 877 |
6 files changed, 896 insertions, 1118 deletions
diff --git a/asm/berry_tag_screen.s b/asm/berry_tag_screen.s deleted file mode 100644 index 7f26885e6..000000000 --- a/asm/berry_tag_screen.s +++ /dev/null @@ -1,1115 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8146014 -sub_8146014: @ 8146014 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - bl RunTasks - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8146014 - - thumb_func_start sub_814602C -sub_814602C: @ 814602C - push {lr} - ldr r2, _0814604C @ =REG_BG0VOFS - ldr r0, _08146050 @ =gUnknown_030041B4 - ldrh r1, [r0] - strh r1, [r2] - ldr r0, _08146054 @ =REG_BG1VOFS - strh r1, [r0] - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - .align 2, 0 -_0814604C: .4byte REG_BG0VOFS -_08146050: .4byte gUnknown_030041B4 -_08146054: .4byte REG_BG1VOFS - thumb_func_end sub_814602C - - thumb_func_start sub_8146058 -sub_8146058: @ 8146058 - push {r4,lr} - sub sp, 0x4 - ldr r0, _08146074 @ =gMain - ldr r1, _08146078 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xC - bls _0814606A - b _08146250 -_0814606A: - lsls r0, 2 - ldr r1, _0814607C @ =_08146080 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08146074: .4byte gMain -_08146078: .4byte 0x0000043c -_0814607C: .4byte _08146080 - .align 2, 0 -_08146080: - .4byte _081460B4 - .4byte _081460CC - .4byte _081460F0 - .4byte _081460F6 - .4byte _08146110 - .4byte _0814611C - .4byte _0814613C - .4byte _0814615C - .4byte _08146170 - .4byte _08146190 - .4byte _081461B4 - .4byte _08146204 - .4byte _08146224 -_081460B4: - bl sub_80F9438 - bl sub_80F9368 - bl sub_8146288 - ldr r1, _081460C8 @ =REG_BLDCNT - movs r0, 0 - strh r0, [r1] - b _0814620C - .align 2, 0 -_081460C8: .4byte REG_BLDCNT -_081460CC: - bl ResetPaletteFade - ldr r2, _081460E4 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r1, _081460E8 @ =gMain - ldr r0, _081460EC @ =0x0000043c - adds r1, r0 - b _08146212 - .align 2, 0 -_081460E4: .4byte gPaletteFade -_081460E8: .4byte gMain -_081460EC: .4byte 0x0000043c -_081460F0: - bl ResetSpriteData - b _0814620C -_081460F6: - ldr r0, _08146104 @ =gWindowConfig_81E6E18 - bl SetUpWindowConfig - ldr r1, _08146108 @ =gMain - ldr r0, _0814610C @ =0x0000043c - adds r1, r0 - b _08146212 - .align 2, 0 -_08146104: .4byte gWindowConfig_81E6E18 -_08146108: .4byte gMain -_0814610C: .4byte 0x0000043c -_08146110: - ldr r0, _08146118 @ =gWindowConfig_81E6E18 - bl MultistepInitMenuWindowBegin - b _0814620C - .align 2, 0 -_08146118: .4byte gWindowConfig_81E6E18 -_0814611C: - bl MultistepInitMenuWindowContinue - cmp r0, 0 - bne _08146126 - b _08146250 -_08146126: - ldr r0, _08146134 @ =0x02000000 - ldr r1, _08146138 @ =0x0001ffff - adds r0, r1 - movs r1, 0 - strb r1, [r0] - b _0814620C - .align 2, 0 -_08146134: .4byte 0x02000000 -_08146138: .4byte 0x0001ffff -_0814613C: - bl sub_81462B8 - lsls r0, 24 - cmp r0, 0 - bne _08146148 - b _08146250 -_08146148: - ldr r0, _08146154 @ =0x02000000 - ldr r1, _08146158 @ =0x0001ffff - adds r0, r1 - movs r1, 0 - strb r1, [r0] - b _0814620C - .align 2, 0 -_08146154: .4byte 0x02000000 -_08146158: .4byte 0x0001ffff -_0814615C: - bl sub_81464E4 - ldr r1, _08146168 @ =gMain - ldr r0, _0814616C @ =0x0000043c - adds r1, r0 - b _08146212 - .align 2, 0 -_08146168: .4byte gMain -_0814616C: .4byte 0x0000043c -_08146170: - ldr r0, _08146188 @ =gScriptItemId - ldrb r0, [r0] - adds r0, 0x7B - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x38 - movs r2, 0x40 - bl sub_80A7D8C - ldr r1, _0814618C @ =gUnknown_0203932C - strb r0, [r1] - b _0814620C - .align 2, 0 -_08146188: .4byte gScriptItemId -_0814618C: .4byte gUnknown_0203932C -_08146190: - ldr r0, _081461A8 @ =gScriptItemId - ldrb r0, [r0] - adds r0, 0x7B - lsls r0, 24 - lsrs r0, 24 - bl sub_8146600 - ldr r1, _081461AC @ =gMain - ldr r0, _081461B0 @ =0x0000043c - adds r1, r0 - b _08146212 - .align 2, 0 -_081461A8: .4byte gScriptItemId -_081461AC: .4byte gMain -_081461B0: .4byte 0x0000043c -_081461B4: - ldr r3, _081461EC @ =0x04000208 - ldrh r2, [r3] - movs r0, 0 - strh r0, [r3] - ldr r4, _081461F0 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _081461F4 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - ldr r0, _081461F8 @ =sub_814602C - bl SetVBlankCallback - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xFA - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _081461FC @ =gMain - ldr r0, _08146200 @ =0x0000043c - adds r1, r0 - b _08146212 - .align 2, 0 -_081461EC: .4byte 0x04000208 -_081461F0: .4byte 0x04000200 -_081461F4: .4byte REG_DISPSTAT -_081461F8: .4byte sub_814602C -_081461FC: .4byte gMain -_08146200: .4byte 0x0000043c -_08146204: - bl sub_8055870 - cmp r0, 0x1 - beq _08146250 -_0814620C: - ldr r1, _0814621C @ =gMain - ldr r2, _08146220 @ =0x0000043c - adds r1, r2 -_08146212: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08146250 - .align 2, 0 -_0814621C: .4byte gMain -_08146220: .4byte 0x0000043c -_08146224: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r2, _08146248 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - ldr r0, _0814624C @ =sub_8146014 - bl SetMainCallback2 - movs r0, 0x1 - b _08146252 - .align 2, 0 -_08146248: .4byte gPaletteFade -_0814624C: .4byte sub_8146014 -_08146250: - movs r0, 0 -_08146252: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8146058 - - thumb_func_start sub_814625C -sub_814625C: @ 814625C - push {lr} -_0814625E: - bl sub_8146058 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08146278 - ldr r0, _08146274 @ =sub_8146480 - movs r1, 0 - bl CreateTask - b _08146284 - .align 2, 0 -_08146274: .4byte sub_8146480 -_08146278: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0814625E -_08146284: - pop {r0} - bx r0 - thumb_func_end sub_814625C - - thumb_func_start sub_8146288 -sub_8146288: @ 8146288 - ldr r1, _081462A8 @ =REG_BG1CNT - ldr r2, _081462AC @ =0x00000502 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - adds r2, 0xFE - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _081462B0 @ =0x00000703 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _081462B4 @ =gUnknown_030041B4 - movs r0, 0 - strh r0, [r1] - bx lr - .align 2, 0 -_081462A8: .4byte REG_BG1CNT -_081462AC: .4byte 0x00000502 -_081462B0: .4byte 0x00000703 -_081462B4: .4byte gUnknown_030041B4 - thumb_func_end sub_8146288 - - thumb_func_start sub_81462B8 -sub_81462B8: @ 81462B8 - push {r4-r7,lr} - ldr r1, _081462D4 @ =0x02000000 - ldr r2, _081462D8 @ =0x0001ffff - adds r0, r1, r2 - ldrb r0, [r0] - mov r12, r1 - cmp r0, 0x6 - bls _081462CA - b _08146404 -_081462CA: - lsls r0, 2 - ldr r1, _081462DC @ =_081462E0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081462D4: .4byte 0x02000000 -_081462D8: .4byte 0x0001ffff -_081462DC: .4byte _081462E0 - .align 2, 0 -_081462E0: - .4byte _081462FC - .4byte _0814630C - .4byte _0814632C - .4byte _08146340 - .4byte _081463A4 - .4byte _081463C4 - .4byte _081463E4 -_081462FC: - ldr r0, _08146308 @ =gBerryCheck_Gfx - movs r1, 0xC0 - lsls r1, 19 - bl LZDecompressVram - b _081463CA - .align 2, 0 -_08146308: .4byte gBerryCheck_Gfx -_0814630C: - ldr r0, _0814631C @ =gUnknown_08E788E4 - ldr r1, _08146320 @ =0x06002800 - bl LZDecompressVram - ldr r1, _08146324 @ =0x02000000 - ldr r2, _08146328 @ =0x0001ffff - adds r1, r2 - b _081463D0 - .align 2, 0 -_0814631C: .4byte gUnknown_08E788E4 -_08146320: .4byte 0x06002800 -_08146324: .4byte 0x02000000 -_08146328: .4byte 0x0001ffff -_0814632C: - ldr r0, _08146338 @ =gUnknown_08E78A84 - ldr r1, _0814633C @ =0x06003000 - bl LZDecompressVram - b _081463CA - .align 2, 0 -_08146338: .4byte gUnknown_08E78A84 -_0814633C: .4byte 0x06003000 -_08146340: - movs r1, 0 - ldr r7, _0814635C @ =gBGTilemapBuffers + 0x1000 - adds r2, r7, 0 - ldr r6, _08146360 @ =0x00004042 - ldr r5, _08146364 @ =gSaveBlock2 - ldr r4, _08146368 @ =0x00005042 - ldr r3, _0814636C @ =0x000003ff -_0814634E: - ldrb r0, [r5, 0x8] - cmp r0, 0 - bne _08146370 - lsls r0, r1, 1 - adds r0, r2 - strh r6, [r0] - b _08146376 - .align 2, 0 -_0814635C: .4byte gBGTilemapBuffers + 0x1000 -_08146360: .4byte 0x00004042 -_08146364: .4byte gSaveBlock2 -_08146368: .4byte 0x00005042 -_0814636C: .4byte 0x000003ff -_08146370: - lsls r0, r1, 1 - adds r0, r2 - strh r4, [r0] -_08146376: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, r3 - bls _0814634E - ldr r1, _08146394 @ =0x06003800 - ldr r0, _08146398 @ =0x040000d4 - str r7, [r0] - str r1, [r0, 0x4] - ldr r1, _0814639C @ =0x80000400 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - ldr r1, _081463A0 @ =0x0001ffff - add r1, r12 - b _081463D0 - .align 2, 0 -_08146394: .4byte 0x06003800 -_08146398: .4byte 0x040000d4 -_0814639C: .4byte 0x80000400 -_081463A0: .4byte 0x0001ffff -_081463A4: - ldr r0, _081463B8 @ =gBerryCheck_Pal - movs r1, 0 - movs r2, 0xC0 - bl LoadCompressedPalette - ldr r1, _081463BC @ =0x02000000 - ldr r2, _081463C0 @ =0x0001ffff - adds r1, r2 - b _081463D0 - .align 2, 0 -_081463B8: .4byte gBerryCheck_Pal -_081463BC: .4byte 0x02000000 -_081463C0: .4byte 0x0001ffff -_081463C4: - ldr r0, _081463D8 @ =gUnknown_083C1F74 - bl LoadCompressedObjectPic -_081463CA: - ldr r1, _081463DC @ =0x02000000 - ldr r0, _081463E0 @ =0x0001ffff - adds r1, r0 -_081463D0: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08146404 - .align 2, 0 -_081463D8: .4byte gUnknown_083C1F74 -_081463DC: .4byte 0x02000000 -_081463E0: .4byte 0x0001ffff -_081463E4: - ldr r0, _081463F8 @ =gUnknown_083C1F7C - bl LoadCompressedObjectPalette - ldr r0, _081463FC @ =0x02000000 - ldr r1, _08146400 @ =0x0001ffff - adds r0, r1 - movs r1, 0 - strb r1, [r0] - movs r0, 0x1 - b _08146406 - .align 2, 0 -_081463F8: .4byte gUnknown_083C1F7C -_081463FC: .4byte 0x02000000 -_08146400: .4byte 0x0001ffff -_08146404: - movs r0, 0 -_08146406: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81462B8 - - thumb_func_start sub_814640C -sub_814640C: @ 814640C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08146438 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08146432 - ldr r0, _0814643C @ =sub_80A5B40 - bl SetMainCallback2 - bl sub_80A7DD4 - bl gpu_pal_allocator_reset__manage_upper_four - adds r0, r4, 0 - bl DestroyTask -_08146432: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08146438: .4byte gPaletteFade -_0814643C: .4byte sub_80A5B40 - thumb_func_end sub_814640C - - thumb_func_start sub_8146440 -sub_8146440: @ 8146440 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08146478 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0814647C @ =sub_814640C - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08146478: .4byte gTasks -_0814647C: .4byte sub_814640C - thumb_func_end sub_8146440 - - thumb_func_start sub_8146480 -sub_8146480: @ 8146480 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r7, r4, 0 - ldr r0, _081464DC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081464D6 - ldr r5, _081464E0 @ =gMain - ldrh r1, [r5, 0x30] - movs r6, 0xF0 - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0x40 - bne _081464AC - movs r1, 0x1 - negs r1, r1 - adds r0, r4, 0 - bl sub_81466E8 -_081464AC: - ldrh r1, [r5, 0x30] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0x80 - bne _081464BE - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81466E8 -_081464BE: - ldrh r1, [r5, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _081464D0 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081464D6 -_081464D0: - adds r0, r7, 0 - bl sub_8146440 -_081464D6: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081464DC: .4byte gPaletteFade -_081464E0: .4byte gMain - thumb_func_end sub_8146480 - - thumb_func_start sub_81464E4 -sub_81464E4: @ 81464E4 - push {r4-r7,lr} - ldr r4, _0814659C @ =gScriptItemId - ldrb r0, [r4] - adds r0, 0x7C - lsls r0, 24 - lsrs r0, 24 - bl GetBerryInfo - adds r5, r0, 0 - ldr r7, _081465A0 @ =gStringVar1 - ldrh r1, [r4] - subs r1, 0x84 - adds r0, r7, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r0, r7, 0 - movs r1, 0xC - movs r2, 0x4 - bl MenuPrint - adds r0, r5, 0 - movs r1, 0xE - movs r2, 0x4 - bl MenuPrint - ldr r0, [r5, 0xC] - movs r1, 0x4 - movs r2, 0xE - bl MenuPrint - ldr r0, [r5, 0x10] - movs r1, 0x4 - movs r2, 0x10 - bl MenuPrint - ldrh r1, [r5, 0x8] - lsls r0, r1, 5 - subs r0, r1 - lsls r0, 2 - adds r0, r1 - lsls r0, 3 - movs r1, 0xFE - bl __divsi3 - adds r4, r0, 0 - movs r1, 0xA - bl __umodsi3 - cmp r0, 0x4 - bls _0814654E - adds r4, 0xA -_0814654E: - adds r0, r4, 0 - movs r1, 0x64 - bl __umodsi3 - movs r1, 0xA - bl __udivsi3 - adds r6, r0, 0 - adds r0, r4, 0 - movs r1, 0x64 - bl __udivsi3 - adds r4, r0, 0 - ldr r0, _081465A4 @ =gOtherText_Size - movs r1, 0xB - movs r2, 0x7 - bl MenuPrint - ldrh r0, [r5, 0x8] - cmp r0, 0 - beq _081465B0 - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _081465A8 @ =gStringVar2 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _081465AC @ =gContestStatsText_Unknown1 - movs r1, 0x10 - movs r2, 0x7 - bl MenuPrint - b _081465BA - .align 2, 0 -_0814659C: .4byte gScriptItemId -_081465A0: .4byte gStringVar1 -_081465A4: .4byte gOtherText_Size -_081465A8: .4byte gStringVar2 -_081465AC: .4byte gContestStatsText_Unknown1 -_081465B0: - ldr r0, _081465E0 @ =gOtherText_ThreeQuestions2 - movs r1, 0x10 - movs r2, 0x7 - bl MenuPrint -_081465BA: - ldr r0, _081465E4 @ =gOtherText_Firm - movs r1, 0xB - movs r2, 0x9 - bl MenuPrint - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _081465EC - ldr r0, _081465E8 @ =gUnknown_0841192C - ldrb r1, [r5, 0x7] - subs r1, 0x1 - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - movs r1, 0x10 - movs r2, 0x9 - bl MenuPrint - b _081465F6 - .align 2, 0 -_081465E0: .4byte gOtherText_ThreeQuestions2 -_081465E4: .4byte gOtherText_Firm -_081465E8: .4byte gUnknown_0841192C -_081465EC: - ldr r0, _081465FC @ =gOtherText_ThreeQuestions2 - movs r1, 0x10 - movs r2, 0x9 - bl MenuPrint -_081465F6: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081465FC: .4byte gOtherText_ThreeQuestions2 - thumb_func_end sub_81464E4 - - thumb_func_start sub_8146600 -sub_8146600: @ 8146600 - push {r4,r5,lr} - lsls r0, 24 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r0, 24 - bl GetBerryInfo - adds r4, r0, 0 - movs r2, 0 - ldr r5, _08146698 @ =gUnknown_0203932E - ldr r0, _0814669C @ =0x0000ffff - adds r3, r0, 0 -_0814661A: - lsls r0, r2, 1 - adds r0, r5 - ldrh r1, [r0] - orrs r1, r3 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x4 - bls _0814661A - ldrb r0, [r4, 0x15] - cmp r0, 0 - beq _08146642 - movs r0, 0x30 - bl sub_80A7E5C - ldr r1, _08146698 @ =gUnknown_0203932E - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] -_08146642: - ldrb r0, [r4, 0x16] - cmp r0, 0 - beq _08146656 - movs r0, 0x58 - bl sub_80A7E5C - ldr r1, _08146698 @ =gUnknown_0203932E - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x2] -_08146656: - ldrb r0, [r4, 0x17] - cmp r0, 0 - beq _0814666A - movs r0, 0x80 - bl sub_80A7E5C - ldr r1, _08146698 @ =gUnknown_0203932E - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x4] -_0814666A: - ldrb r0, [r4, 0x18] - cmp r0, 0 - beq _0814667E - movs r0, 0xA8 - bl sub_80A7E5C - ldr r1, _08146698 @ =gUnknown_0203932E - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x6] -_0814667E: - ldrb r0, [r4, 0x19] - cmp r0, 0 - beq _08146692 - movs r0, 0xD0 - bl sub_80A7E5C - ldr r1, _08146698 @ =gUnknown_0203932E - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x8] -_08146692: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08146698: .4byte gUnknown_0203932E -_0814669C: .4byte 0x0000ffff - thumb_func_end sub_8146600 - - thumb_func_start sub_81466A0 -sub_81466A0: @ 81466A0 - push {r4-r7,lr} - movs r5, 0 - movs r7, 0x1 - negs r7, r7 - ldr r6, _081466DC @ =gUnknown_0203932E -_081466AA: - lsls r0, r5, 1 - adds r4, r0, r6 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, r7 - beq _081466CA - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081466E0 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r0, _081466E4 @ =0x0000ffff - strh r0, [r4] -_081466CA: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x4 - bls _081466AA - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081466DC: .4byte gUnknown_0203932E -_081466E0: .4byte gSprites -_081466E4: .4byte 0x0000ffff - thumb_func_end sub_81466A0 - - thumb_func_start sub_81466E8 -sub_81466E8: @ 81466E8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r2, r1, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _08146748 @ =gTasks + 0x8 - adds r6, r0, r1 - ldr r4, _0814674C @ =gUnknown_03005D10 - movs r0, 0xC - adds r0, r4 - mov r8, r0 - ldrb r1, [r0, 0x1] - ldrb r0, [r4, 0xC] - adds r1, r0 - cmp r1, 0 - bne _08146718 - lsls r0, r2, 24 - cmp r0, 0 - blt _0814678C -_08146718: - adds r0, r1, 0x1 - lsls r5, r2, 24 - mov r1, r8 - ldrb r1, [r1, 0x2] - cmp r0, r1 - bne _08146728 - cmp r5, 0 - bgt _0814678C -_08146728: - movs r0, 0x5 - bl PlaySE - mov r2, r8 - ldrb r3, [r2, 0x1] - ldrb r4, [r4, 0xC] - mov r12, r4 - adds r0, r3, r4 - asrs r2, r5, 24 - adds r1, r0, r2 - cmp r1, 0 - bge _08146750 - negs r0, r0 - strh r0, [r6, 0x2] - b _08146766 - .align 2, 0 -_08146748: .4byte gTasks + 0x8 -_0814674C: .4byte gUnknown_03005D10 -_08146750: - mov r4, r8 - ldrb r0, [r4, 0x2] - cmp r1, r0 - blt _08146764 - subs r0, r3 - mov r1, r12 - subs r0, r1 - subs r0, 0x1 - strh r0, [r6, 0x2] - b _08146766 -_08146764: - strh r2, [r6, 0x2] -_08146766: - ldr r0, _08146780 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _08146784 @ =sub_8146798 - str r0, [r1] - cmp r5, 0 - bge _08146788 - movs r2, 0x10 - negs r2, r2 - adds r0, r2, 0 - b _0814678A - .align 2, 0 -_08146780: .4byte gTasks -_08146784: .4byte sub_8146798 -_08146788: - movs r0, 0x10 -_0814678A: - strh r0, [r6] -_0814678C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81466E8 - - thumb_func_start sub_8146798 -sub_8146798: @ 8146798 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08146800 @ =gTasks + 0x8 - adds r0, r1 - ldr r2, _08146804 @ =gUnknown_030041B4 - ldrh r1, [r0] - ldrh r5, [r2] - adds r3, r1, r5 - movs r1, 0xFF - ands r3, r1 - strh r3, [r2] - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - ble _081467C2 - cmp r3, 0x90 - beq _081467CA -_081467C2: - cmp r0, 0 - bge _081467E0 - cmp r3, 0x70 - bne _081467E0 -_081467CA: - ldr r0, _08146808 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - movs r0, 0xA - ldrsb r0, [r1, r0] - bl sub_8146810 - bl sub_81468BC -_081467E0: - ldr r0, _08146804 @ =gUnknown_030041B4 - ldrh r2, [r0] - cmp r2, 0 - bne _081467FA - ldr r0, _08146808 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - strh r2, [r1, 0x8] - strh r2, [r1, 0xA] - ldr r0, _0814680C @ =sub_8146480 - str r0, [r1] -_081467FA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08146800: .4byte gTasks + 0x8 -_08146804: .4byte gUnknown_030041B4 -_08146808: .4byte gTasks -_0814680C: .4byte sub_8146480 - thumb_func_end sub_8146798 - - thumb_func_start sub_8146810 -sub_8146810: @ 8146810 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - adds r4, r3, 0 - lsls r0, r3, 24 - asrs r1, r0, 24 - cmp r1, 0 - ble _08146848 - ldr r0, _08146840 @ =gUnknown_03005D10 - adds r4, r0, 0 - adds r4, 0xC - ldrb r2, [r0, 0xC] - adds r1, r2, r1 - adds r6, r0, 0 - cmp r1, 0x7 - ble _08146844 - adds r0, r3, 0 - adds r0, 0xF9 - adds r0, r2, r0 - ldrb r1, [r4, 0x1] - adds r0, r1 - strb r0, [r4, 0x1] - movs r0, 0x7 - b _0814686E - .align 2, 0 -_08146840: .4byte gUnknown_03005D10 -_08146844: - adds r0, r2, r3 - b _0814686E -_08146848: - ldr r0, _08146868 @ =gUnknown_03005D10 - adds r5, r0, 0 - adds r5, 0xC - ldrb r2, [r0, 0xC] - adds r1, r2, r1 - adds r6, r0, 0 - cmp r1, 0 - bge _0814686C - adds r0, r2, r3 - ldrb r1, [r5, 0x1] - adds r0, r1 - movs r1, 0 - strb r0, [r5, 0x1] - strb r1, [r6, 0xC] - b _08146870 - .align 2, 0 -_08146868: .4byte gUnknown_03005D10 -_0814686C: - adds r0, r2, r4 -_0814686E: - strb r0, [r6, 0xC] -_08146870: - ldr r2, _081468AC @ =gScriptItemId - movs r0, 0x3 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0, 0x1] - ldrb r0, [r0] - adds r1, r0 - ldr r0, _081468B0 @ =gUnknown_03005D24 - ldr r0, [r0] - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1] - strh r0, [r2] - ldr r0, _081468B4 @ =gUnknown_0203932C - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081468B8 @ =gSprites - adds r0, r1 - bl DestroySprite - bl sub_81466A0 - bl sub_80A7DD4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081468AC: .4byte gScriptItemId -_081468B0: .4byte gUnknown_03005D24 -_081468B4: .4byte gUnknown_0203932C -_081468B8: .4byte gSprites - thumb_func_end sub_8146810 - - thumb_func_start sub_81468BC -sub_81468BC: @ 81468BC - push {r4,lr} - movs r0, 0 - movs r1, 0x4 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - bl sub_81464E4 - ldr r4, _081468F8 @ =gScriptItemId - ldrb r0, [r4] - adds r0, 0x7B - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x38 - movs r2, 0x40 - bl sub_80A7D8C - ldr r1, _081468FC @ =gUnknown_0203932C - strb r0, [r1] - ldrb r0, [r4] - adds r0, 0x7B - lsls r0, 24 - lsrs r0, 24 - bl sub_8146600 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081468F8: .4byte gScriptItemId -_081468FC: .4byte gUnknown_0203932C - thumb_func_end sub_81468BC - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/item_menu.s b/asm/item_menu.s index e2abfe960..85375a87a 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -6105,7 +6105,7 @@ sub_80A6178: @ 80A6178 adds r0, r4 lsls r0, 3 adds r0, r1 - ldr r2, _080A61A4 @ =sub_814625C + ldr r2, _080A61A4 @ =BerryTagScreen_814625C lsrs r1, r2, 16 strh r1, [r0, 0x18] strh r2, [r0, 0x1A] @@ -6114,7 +6114,7 @@ sub_80A6178: @ 80A6178 bx r0 .align 2, 0 _080A61A0: .4byte gTasks -_080A61A4: .4byte sub_814625C +_080A61A4: .4byte BerryTagScreen_814625C thumb_func_end sub_80A6178 thumb_func_start sub_80A61A8 diff --git a/include/asm.inc.h b/include/asm.inc.h index 80fe5fa00..ab90826d7 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -91,6 +91,7 @@ void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *); void sub_805BCF0(u8, u8, u8, u8); void sub_805BD48(u8, u8, u8); void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); +void gpu_pal_allocator_reset__manage_upper_four(void); void npc_coords_shift(struct MapObject *pObject, s16 x, s16 y); void sub_805C0F8(u8, u8, u8, s16, s16); void npc_coords_shift_still(struct MapObject *pObject); @@ -252,7 +253,11 @@ void HideMapNamePopUpWindow(); void sub_80A3684(void); void sub_80A3714(void); void sub_80A53F8(void); +void sub_80A5B40(void); void sub_80A68CC(); +u8 sub_80A7D8C(u8 berry, int i, int i1); +void sub_80A7DD4(void); +u8 sub_80A7E5C(u8); // src/matsuda_debug_menu.o void sub_80AA280(u8); @@ -370,6 +375,11 @@ void sub_80EBA5C(void); void sub_80F7AA4(void); void sub_80F7F30(void); +// asm/menu_helpers.o +bool8 sub_80F9344(void); +void sub_80F9368(void); +void sub_80F9438(void); + // asm/script_pokemon_util_80F99CC.o void sub_80F99CC(void); diff --git a/include/berry_tag_screen.h b/include/berry_tag_screen.h new file mode 100644 index 000000000..60932ff80 --- /dev/null +++ b/include/berry_tag_screen.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BERRY_TAG_SCREEN_H +#define GUARD_BERRY_TAG_SCREEN_H + +void BerryTagScreen_814625C(u8 taskId); + +#endif // GUARD_BERRY_TAG_SCREEN_H diff --git a/ld_script.txt b/ld_script.txt index 119690d73..cec7089ef 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -188,7 +188,7 @@ SECTIONS { asm/rom_813BA94.o(.text); src/lottery_corner.o(.text); src/diploma.o(.text); - asm/berry_tag_screen.o(.text); + src/berry_tag_screen.o(.text); asm/mystery_event_menu.o(.text); asm/save_failed_screen.o(.text); asm/rom_81473B8.o(.text); diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c new file mode 100644 index 000000000..e7ef9ca76 --- /dev/null +++ b/src/berry_tag_screen.c @@ -0,0 +1,877 @@ +#include "global.h" +#include "berry_tag_screen.h" +#include "asm.h" +#include "berry.h" +#include "decompress.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "rom4.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +#define OFFSET_7B (123) +#define FIRST_BERRY (0x85) // ITEM_CHERI_BERRY + +struct Struct2000000 { + /*0x00*/ u8 filler_0[0x1FFFF]; + /*0x1FFFF*/ bool8 var_1FFFF; +}; + +struct BerryTagStatus { + s16 circles[5]; +}; + +extern struct Struct2000000 unk_2000000; +extern u16 gBGTilemapBuffers[4][0x400]; +extern u8 gUnknown_0203932C; +extern struct BerryTagStatus gUnknown_0203932E; +extern u16 gScriptItemId; +extern u16 gUnknown_030041B4; + +extern const struct SpriteSheet gUnknown_083C1F74; +extern const struct SpritePalette gUnknown_083C1F7C; + +extern u8 gOtherText_ThreeQuestions2[]; +extern u8 gOtherText_Size[]; +extern u8 gOtherText_Firm[]; +extern u8 gContestStatsText_Unknown1[]; +extern u8 *gUnknown_0841192C[]; + +extern u8 gBerryCheck_Gfx[]; +extern u8 gBerryCheck_Pal[]; +extern u8 gUnknown_08E788E4[]; +extern u8 gUnknown_08E78A84[]; + +static void sub_8146014(void); +static void sub_814602C(void); +static bool8 sub_8146058(void); +static void sub_8146288(void); +static bool8 sub_81462B8(void); +static void sub_814640C(u8 taskId); +static void sub_8146440(u8 taskId); +static void sub_8146480(u8 taskid); +static void sub_81464E4(void); +static void sub_8146600(u8 berry); +// static void sub_81466A0(void); +static void sub_81466E8(u8 taskId, s32 direction); +// static void sub_8146798(u8 berry); +// static void sub_8146810(u8 berry); +// static void sub_81468BC(void); + +static void sub_8146014(void) { + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +static void sub_814602C(void) { + REG_BG0VOFS = gUnknown_030041B4; + REG_BG1VOFS = gUnknown_030041B4; + + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static bool8 sub_8146058(void) { + u8 berry; + u16 backup; + + switch (gMain.state) { + case 0: + sub_80F9438(); + sub_80F9368(); + sub_8146288(); + REG_BLDCNT = 0; + gMain.state += 1; + break; + + case 1: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = 1; + gMain.state += 1; + break; + + case 2: + ResetSpriteData(); + gMain.state += 1; + break; + + case 3: + SetUpWindowConfig(&gWindowConfig_81E6E18); + gMain.state += 1; + break; + + case 4: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E18); + gMain.state += 1; + break; + + case 5: + if (!MultistepInitMenuWindowContinue()) { + return FALSE; + } + unk_2000000.var_1FFFF = 0; + gMain.state += 1; + break; + + case 6: + if (!sub_81462B8()) { + break; + } + + unk_2000000.var_1FFFF = 0; + gMain.state += 1; + break; + + case 7: + sub_81464E4(); + gMain.state += 1; + break; + + case 8: + berry = gScriptItemId + OFFSET_7B; + gUnknown_0203932C = sub_80A7D8C(berry, 56, 64); + gMain.state += 1; + break; + + case 9: + sub_8146600(gScriptItemId + OFFSET_7B); + gMain.state += 1; + break; + + case 10: + backup = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = backup; + + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(sub_814602C); + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; + gMain.state += 1; + break; + + case 11: + if (sub_8055870() == TRUE) { + break; + } + gMain.state += 1; + break; + + case 12: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gPaletteFade.bufferTransferDisabled = 0; + SetMainCallback2(sub_8146014); + return TRUE; + + } + + return FALSE; +} + +void BerryTagScreen_814625C(u8 taskId) { + do { + if (sub_8146058() == TRUE) { + CreateTask(sub_8146480, 0); + return; + } + + } while (sub_80F9344() != TRUE); +} + +static void sub_8146288(void) { + REG_BG1CNT = 0x502; + REG_BG2CNT = 0x600; + REG_BG3CNT = 0x703; + gUnknown_030041B4 = 0; +} + +#ifdef NONMATCHING +bool8 sub_81462B8(void) { + u16 i; + + switch (unk_2000000.var_1FFFF) { + case 0: + LZDecompressVram(gBerryCheck_Gfx, (void *) VRAM); + unk_2000000.var_1FFFF += 1; + break; + + case 1: + LZDecompressVram(gUnknown_08E788E4, (void *) VRAM + 0x2800); + unk_2000000.var_1FFFF += 1; + break; + + case 2: + LZDecompressVram(gUnknown_08E78A84, (void *) VRAM + 0x3000); + unk_2000000.var_1FFFF += 1; + break; + + case 3: + for (i = 0; i < 0x400; i++) { + u16 (*buffer)[0x400] = &gBGTilemapBuffers[3]; + if (gSaveBlock2.playerGender == MALE) { + (*buffer)[i] = 0x4042; + } else { + (*buffer)[i] = 0x5042; + } + } + unk_2000000.var_1FFFF += 1; + break; + + case 4: + LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2); + unk_2000000.var_1FFFF += 1; + break; + + case 5: + LoadCompressedObjectPic(&gUnknown_083C1F74); + unk_2000000.var_1FFFF += 1; + break; + + case 6: + LoadCompressedObjectPalette(&gUnknown_083C1F7C); + unk_2000000.var_1FFFF = 0; + return TRUE; + } + + return FALSE; +} +#else +__attribute__((naked)) +static bool8 sub_81462B8(void) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r1, _081462D4 @ =0x02000000\n\ + ldr r2, _081462D8 @ =0x0001ffff\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + mov r12, r1\n\ + cmp r0, 0x6\n\ + bls _081462CA\n\ + b _08146404\n\ +_081462CA:\n\ + lsls r0, 2\n\ + ldr r1, _081462DC @ =_081462E0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_081462D4: .4byte 0x02000000\n\ +_081462D8: .4byte 0x0001ffff\n\ +_081462DC: .4byte _081462E0\n\ + .align 2, 0\n\ +_081462E0:\n\ + .4byte _081462FC\n\ + .4byte _0814630C\n\ + .4byte _0814632C\n\ + .4byte _08146340\n\ + .4byte _081463A4\n\ + .4byte _081463C4\n\ + .4byte _081463E4\n\ +_081462FC:\n\ + ldr r0, _08146308 @ =gBerryCheck_Gfx\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl LZDecompressVram\n\ + b _081463CA\n\ + .align 2, 0\n\ +_08146308: .4byte gBerryCheck_Gfx\n\ +_0814630C:\n\ + ldr r0, _0814631C @ =gUnknown_08E788E4\n\ + ldr r1, _08146320 @ =0x06002800\n\ + bl LZDecompressVram\n\ + ldr r1, _08146324 @ =0x02000000\n\ + ldr r2, _08146328 @ =0x0001ffff\n\ + adds r1, r2\n\ + b _081463D0\n\ + .align 2, 0\n\ +_0814631C: .4byte gUnknown_08E788E4\n\ +_08146320: .4byte 0x06002800\n\ +_08146324: .4byte 0x02000000\n\ +_08146328: .4byte 0x0001ffff\n\ +_0814632C:\n\ + ldr r0, _08146338 @ =gUnknown_08E78A84\n\ + ldr r1, _0814633C @ =0x06003000\n\ + bl LZDecompressVram\n\ + b _081463CA\n\ + .align 2, 0\n\ +_08146338: .4byte gUnknown_08E78A84\n\ +_0814633C: .4byte 0x06003000\n\ +_08146340:\n\ + movs r1, 0\n\ + ldr r7, _0814635C @ =gBGTilemapBuffers + 0x1000\n\ + adds r2, r7, 0\n\ + ldr r6, _08146360 @ =0x00004042\n\ + ldr r5, _08146364 @ =gSaveBlock2\n\ + ldr r4, _08146368 @ =0x00005042\n\ + ldr r3, _0814636C @ =0x000003ff\n\ +_0814634E:\n\ + ldrb r0, [r5, 0x8]\n\ + cmp r0, 0\n\ + bne _08146370\n\ + lsls r0, r1, 1\n\ + adds r0, r2\n\ + strh r6, [r0]\n\ + b _08146376\n\ + .align 2, 0\n\ +_0814635C: .4byte gBGTilemapBuffers + 0x1000\n\ +_08146360: .4byte 0x00004042\n\ +_08146364: .4byte gSaveBlock2\n\ +_08146368: .4byte 0x00005042\n\ +_0814636C: .4byte 0x000003ff\n\ +_08146370:\n\ + lsls r0, r1, 1\n\ + adds r0, r2\n\ + strh r4, [r0]\n\ +_08146376:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, r3\n\ + bls _0814634E\n\ + ldr r1, _08146394 @ =0x06003800\n\ + ldr r0, _08146398 @ =0x040000d4\n\ + str r7, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, _0814639C @ =0x80000400\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + ldr r1, _081463A0 @ =0x0001ffff\n\ + add r1, r12\n\ + b _081463D0\n\ + .align 2, 0\n\ +_08146394: .4byte 0x06003800\n\ +_08146398: .4byte 0x040000d4\n\ +_0814639C: .4byte 0x80000400\n\ +_081463A0: .4byte 0x0001ffff\n\ +_081463A4:\n\ + ldr r0, _081463B8 @ =gBerryCheck_Pal\n\ + movs r1, 0\n\ + movs r2, 0xC0\n\ + bl LoadCompressedPalette\n\ + ldr r1, _081463BC @ =0x02000000\n\ + ldr r2, _081463C0 @ =0x0001ffff\n\ + adds r1, r2\n\ + b _081463D0\n\ + .align 2, 0\n\ +_081463B8: .4byte gBerryCheck_Pal\n\ +_081463BC: .4byte 0x02000000\n\ +_081463C0: .4byte 0x0001ffff\n\ +_081463C4:\n\ + ldr r0, _081463D8 @ =gUnknown_083C1F74\n\ + bl LoadCompressedObjectPic\n\ +_081463CA:\n\ + ldr r1, _081463DC @ =0x02000000\n\ + ldr r0, _081463E0 @ =0x0001ffff\n\ + adds r1, r0\n\ +_081463D0:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _08146404\n\ + .align 2, 0\n\ +_081463D8: .4byte gUnknown_083C1F74\n\ +_081463DC: .4byte 0x02000000\n\ +_081463E0: .4byte 0x0001ffff\n\ +_081463E4:\n\ + ldr r0, _081463F8 @ =gUnknown_083C1F7C\n\ + bl LoadCompressedObjectPalette\n\ + ldr r0, _081463FC @ =0x02000000\n\ + ldr r1, _08146400 @ =0x0001ffff\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + movs r0, 0x1\n\ + b _08146406\n\ + .align 2, 0\n\ +_081463F8: .4byte gUnknown_083C1F7C\n\ +_081463FC: .4byte 0x02000000\n\ +_08146400: .4byte 0x0001ffff\n\ +_08146404:\n\ + movs r0, 0\n\ +_08146406:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +static void sub_814640C(u8 taskId) { + if (gPaletteFade.active) { + return; + } + + SetMainCallback2(sub_80A5B40); + sub_80A7DD4(); + gpu_pal_allocator_reset__manage_upper_four(); + DestroyTask(taskId); +} + +static void sub_8146440(u8 taskId) { + PlaySE(SE_SELECT); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + + gTasks[taskId].func = sub_814640C; +} + +static void sub_8146480(u8 taskid) { + register u16 keys asm("r1"); + + if (gPaletteFade.active) { + return; + } + + keys = gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN); + if (keys == DPAD_UP) { + sub_81466E8(taskid, -1); + } + + keys = gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN); + if (keys == DPAD_DOWN) { + sub_81466E8(taskid, 1); + } + + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { + sub_8146440(taskid); + } +} + +static void sub_81464E4(void) { + struct Berry *berryInfo; + u32 size; + s32 sizeMajor; + s32 sizeMinor; + + berryInfo = GetBerryInfo(gScriptItemId + OFFSET_7B + 1); + + ConvertIntToDecimalStringN(gStringVar1, gScriptItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2); + MenuPrint(gStringVar1, 12, 4); + + MenuPrint(berryInfo->name, 14, 4); + MenuPrint(berryInfo->description1, 4, 14); + MenuPrint(berryInfo->description2, 4, 16); + + size = (berryInfo->size * 1000) / 254; + if (size % 10 >= 5) { + size += 10; + } + sizeMinor = (size % 100) / 10; + sizeMajor = size / 100; + + MenuPrint(gOtherText_Size, 11, 7); + if (berryInfo->size != 0) { + ConvertIntToDecimalStringN(gStringVar1, sizeMajor, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, sizeMinor, STR_CONV_MODE_LEFT_ALIGN, 2); + MenuPrint(gContestStatsText_Unknown1, 16, 7); + } else { + MenuPrint(gOtherText_ThreeQuestions2, 16, 7); + } + + MenuPrint(gOtherText_Firm, 11, 9); + if (berryInfo->firmness != 0) { + MenuPrint(gUnknown_0841192C[berryInfo->firmness - 1], 16, 9); + } else { + MenuPrint(gOtherText_ThreeQuestions2, 16, 9); + } +} + +#ifdef NONMATCHING +static void sub_8146600(u8 berry) { + struct Berry *berryInfo; + u16 i; + + berryInfo = GetBerryInfo(berry +1); + + for (i = 0; i < 5; i++) { + gUnknown_0203932E.circles[i] |= 0xFFFF; + } + + if (berryInfo->spicy) { + // argument is the center of the circle + gUnknown_0203932E.circles[0] = sub_80A7E5C(48); + } + + if (berryInfo->dry) { + gUnknown_0203932E.circles[1] = sub_80A7E5C(88); + } + + if (berryInfo->sweet) { + gUnknown_0203932E.circles[2] = sub_80A7E5C(128); + } + + if (berryInfo->bitter) { + gUnknown_0203932E.circles[3] = sub_80A7E5C(168); + } + + if (berryInfo->sour) { + gUnknown_0203932E.circles[4] = sub_80A7E5C(208); + } +} +#else +__attribute__((naked)) +static void sub_8146600(u8 berry) { + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r0, 24\n\ + bl GetBerryInfo\n\ + adds r4, r0, 0\n\ + movs r2, 0\n\ + ldr r5, _08146698 @ =gUnknown_0203932E\n\ + ldr r0, _0814669C @ =0x0000ffff\n\ + adds r3, r0, 0\n\ +_0814661A:\n\ + lsls r0, r2, 1\n\ + adds r0, r5\n\ + ldrh r1, [r0]\n\ + orrs r1, r3\n\ + strh r1, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x4\n\ + bls _0814661A\n\ + ldrb r0, [r4, 0x15]\n\ + cmp r0, 0\n\ + beq _08146642\n\ + movs r0, 0x30\n\ + bl sub_80A7E5C\n\ + ldr r1, _08146698 @ =gUnknown_0203932E\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r1]\n\ +_08146642:\n\ + ldrb r0, [r4, 0x16]\n\ + cmp r0, 0\n\ + beq _08146656\n\ + movs r0, 0x58\n\ + bl sub_80A7E5C\n\ + ldr r1, _08146698 @ =gUnknown_0203932E\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r1, 0x2]\n\ +_08146656:\n\ + ldrb r0, [r4, 0x17]\n\ + cmp r0, 0\n\ + beq _0814666A\n\ + movs r0, 0x80\n\ + bl sub_80A7E5C\n\ + ldr r1, _08146698 @ =gUnknown_0203932E\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r1, 0x4]\n\ +_0814666A:\n\ + ldrb r0, [r4, 0x18]\n\ + cmp r0, 0\n\ + beq _0814667E\n\ + movs r0, 0xA8\n\ + bl sub_80A7E5C\n\ + ldr r1, _08146698 @ =gUnknown_0203932E\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r1, 0x6]\n\ +_0814667E:\n\ + ldrb r0, [r4, 0x19]\n\ + cmp r0, 0\n\ + beq _08146692\n\ + movs r0, 0xD0\n\ + bl sub_80A7E5C\n\ + ldr r1, _08146698 @ =gUnknown_0203932E\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r1, 0x8]\n\ +_08146692:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08146698: .4byte gUnknown_0203932E\n\ +_0814669C: .4byte 0x0000ffff\n\ + .syntax divided\n"); +} +#endif + + +void sub_81466A0(void) { + u16 i; + + for (i = 0; i < 5; i++) { + if (gUnknown_0203932E.circles[i] != -1) { + DestroySprite(&gSprites[gUnknown_0203932E.circles[i]]); + gUnknown_0203932E.circles[i] = -1; + } + } +} + + +__attribute__((naked)) +static void sub_81466E8(u8 taskId, s32 direction) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r1, 24\n\ + lsrs r2, r1, 24\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + ldr r1, _08146748 @ =gTasks + 0x8\n\ + adds r6, r0, r1\n\ + ldr r4, _0814674C @ =gUnknown_03005D10\n\ + movs r0, 0xC\n\ + adds r0, r4\n\ + mov r8, r0\n\ + ldrb r1, [r0, 0x1]\n\ + ldrb r0, [r4, 0xC]\n\ + adds r1, r0\n\ + cmp r1, 0\n\ + bne _08146718\n\ + lsls r0, r2, 24\n\ + cmp r0, 0\n\ + blt _0814678C\n\ +_08146718:\n\ + adds r0, r1, 0x1\n\ + lsls r5, r2, 24\n\ + mov r1, r8\n\ + ldrb r1, [r1, 0x2]\n\ + cmp r0, r1\n\ + bne _08146728\n\ + cmp r5, 0\n\ + bgt _0814678C\n\ +_08146728:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + mov r2, r8\n\ + ldrb r3, [r2, 0x1]\n\ + ldrb r4, [r4, 0xC]\n\ + mov r12, r4\n\ + adds r0, r3, r4\n\ + asrs r2, r5, 24\n\ + adds r1, r0, r2\n\ + cmp r1, 0\n\ + bge _08146750\n\ + negs r0, r0\n\ + strh r0, [r6, 0x2]\n\ + b _08146766\n\ + .align 2, 0\n\ +_08146748: .4byte gTasks + 0x8\n\ +_0814674C: .4byte gUnknown_03005D10\n\ +_08146750:\n\ + mov r4, r8\n\ + ldrb r0, [r4, 0x2]\n\ + cmp r1, r0\n\ + blt _08146764\n\ + subs r0, r3\n\ + mov r1, r12\n\ + subs r0, r1\n\ + subs r0, 0x1\n\ + strh r0, [r6, 0x2]\n\ + b _08146766\n\ +_08146764:\n\ + strh r2, [r6, 0x2]\n\ +_08146766:\n\ + ldr r0, _08146780 @ =gTasks\n\ + lsls r1, r7, 2\n\ + adds r1, r7\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _08146784 @ =sub_8146798\n\ + str r0, [r1]\n\ + cmp r5, 0\n\ + bge _08146788\n\ + movs r2, 0x10\n\ + negs r2, r2\n\ + adds r0, r2, 0\n\ + b _0814678A\n\ + .align 2, 0\n\ +_08146780: .4byte gTasks\n\ +_08146784: .4byte sub_8146798\n\ +_08146788:\n\ + movs r0, 0x10\n\ +_0814678A:\n\ + strh r0, [r6]\n\ +_0814678C:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +__attribute__((naked)) +void sub_8146798(u8 berry) { + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + ldr r1, _08146800 @ =gTasks + 0x8\n\ + adds r0, r1\n\ + ldr r2, _08146804 @ =gUnknown_030041B4\n\ + ldrh r1, [r0]\n\ + ldrh r5, [r2]\n\ + adds r3, r1, r5\n\ + movs r1, 0xFF\n\ + ands r3, r1\n\ + strh r3, [r2]\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + ble _081467C2\n\ + cmp r3, 0x90\n\ + beq _081467CA\n\ +_081467C2:\n\ + cmp r0, 0\n\ + bge _081467E0\n\ + cmp r3, 0x70\n\ + bne _081467E0\n\ +_081467CA:\n\ + ldr r0, _08146808 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + movs r0, 0xA\n\ + ldrsb r0, [r1, r0]\n\ + bl sub_8146810\n\ + bl sub_81468BC\n\ +_081467E0:\n\ + ldr r0, _08146804 @ =gUnknown_030041B4\n\ + ldrh r2, [r0]\n\ + cmp r2, 0\n\ + bne _081467FA\n\ + ldr r0, _08146808 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + strh r2, [r1, 0x8]\n\ + strh r2, [r1, 0xA]\n\ + ldr r0, _0814680C @ =sub_8146480\n\ + str r0, [r1]\n\ +_081467FA:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08146800: .4byte gTasks + 0x8\n\ +_08146804: .4byte gUnknown_030041B4\n\ +_08146808: .4byte gTasks\n\ +_0814680C: .4byte sub_8146480\n\ + .syntax divided\n"); +} + +__attribute__((naked)) +void sub_8146810(u8 berry) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + adds r4, r3, 0\n\ + lsls r0, r3, 24\n\ + asrs r1, r0, 24\n\ + cmp r1, 0\n\ + ble _08146848\n\ + ldr r0, _08146840 @ =gUnknown_03005D10\n\ + adds r4, r0, 0\n\ + adds r4, 0xC\n\ + ldrb r2, [r0, 0xC]\n\ + adds r1, r2, r1\n\ + adds r6, r0, 0\n\ + cmp r1, 0x7\n\ + ble _08146844\n\ + adds r0, r3, 0\n\ + adds r0, 0xF9\n\ + adds r0, r2, r0\n\ + ldrb r1, [r4, 0x1]\n\ + adds r0, r1\n\ + strb r0, [r4, 0x1]\n\ + movs r0, 0x7\n\ + b _0814686E\n\ + .align 2, 0\n\ +_08146840: .4byte gUnknown_03005D10\n\ +_08146844:\n\ + adds r0, r2, r3\n\ + b _0814686E\n\ +_08146848:\n\ + ldr r0, _08146868 @ =gUnknown_03005D10\n\ + adds r5, r0, 0\n\ + adds r5, 0xC\n\ + ldrb r2, [r0, 0xC]\n\ + adds r1, r2, r1\n\ + adds r6, r0, 0\n\ + cmp r1, 0\n\ + bge _0814686C\n\ + adds r0, r2, r3\n\ + ldrb r1, [r5, 0x1]\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strb r0, [r5, 0x1]\n\ + strb r1, [r6, 0xC]\n\ + b _08146870\n\ + .align 2, 0\n\ +_08146868: .4byte gUnknown_03005D10\n\ +_0814686C:\n\ + adds r0, r2, r4\n\ +_0814686E:\n\ + strb r0, [r6, 0xC]\n\ +_08146870:\n\ + ldr r2, _081468AC @ =gScriptItemId\n\ + movs r0, 0x3\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0, 0x1]\n\ + ldrb r0, [r0]\n\ + adds r1, r0\n\ + ldr r0, _081468B0 @ =gUnknown_03005D24\n\ + ldr r0, [r0]\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + strh r0, [r2]\n\ + ldr r0, _081468B4 @ =gUnknown_0203932C\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _081468B8 @ =gSprites\n\ + adds r0, r1\n\ + bl DestroySprite\n\ + bl sub_81466A0\n\ + bl sub_80A7DD4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081468AC: .4byte gScriptItemId\n\ +_081468B0: .4byte gUnknown_03005D24\n\ +_081468B4: .4byte gUnknown_0203932C\n\ +_081468B8: .4byte gSprites\n\ + .syntax divided\n"); +} + +void sub_81468BC(void) { + MenuZeroFillWindowRect(0, 4, 29, 19); + sub_81464E4(); + + // center of berry sprite + gUnknown_0203932C = sub_80A7D8C(gScriptItemId + OFFSET_7B, 56, 64); + + sub_8146600(gScriptItemId + OFFSET_7B); +} |