summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <YamaArashi@users.noreply.github.com>2016-12-13 22:53:06 -0800
committerGitHub <noreply@github.com>2016-12-13 22:53:06 -0800
commit03fead10f4761f25873786bff3f5d55d423f47a6 (patch)
treedf9b66fd137408d2c1b7bb04c7d78d4c2c2c2185
parente6c9d717dfad90e5423ebfc6aef53e0b19ef808d (diff)
parent6a675e2c9f472ac46823ddd54fd69e277ba8bd41 (diff)
Merge pull request #127 from marijnvdwerf/decompile/berry-tag-screen
Decompile berry tag screen
-rw-r--r--asm/berry_tag_screen.s1115
-rw-r--r--asm/item_menu.s4
-rw-r--r--include/asm.inc.h10
-rw-r--r--include/berry_tag_screen.h6
-rw-r--r--ld_script.txt2
-rw-r--r--src/berry_tag_screen.c877
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);
+}