summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-03-04 17:21:41 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-03-04 17:21:41 -0500
commite9c3b78d9f7142fda849ea2fe420459480fdf989 (patch)
treebe2b43df4128f9f741a92e5ec785edbfa20a3e06
parentff13649f473ecf8e052c77a5bd464a6149a0922c (diff)
through sub_8154A2C; reorganize dbp files a bit
-rw-r--r--asm/dodrio_berry_picking.s2546
-rw-r--r--asm/dodrio_berry_picking_3.s (renamed from asm/dodrio_berry_picking_2.s)0
-rw-r--r--include/dodrio_berry_picking.h49
-rw-r--r--ld_script.txt6
-rw-r--r--src/data/dodrio_berry_picking.h247
-rw-r--r--src/dodrio_berry_picking.c1000
-rw-r--r--src/dodrio_berry_picking_2.c1043
-rw-r--r--src/dodrio_berry_picking_3.c23
-rw-r--r--sym_ewram.txt2
9 files changed, 1459 insertions, 3457 deletions
diff --git a/asm/dodrio_berry_picking.s b/asm/dodrio_berry_picking.s
index 18a7bb88f..6758ca71b 100644
--- a/asm/dodrio_berry_picking.s
+++ b/asm/dodrio_berry_picking.s
@@ -5,2552 +5,6 @@
.text
- thumb_func_start IsDodrioInParty
-IsDodrioInParty: @ 81537C0
- push {r4-r6,lr}
- movs r5, 0
- ldr r6, _081537F0 @ =gSpecialVar_Result
-_081537C6:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _081537F4 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x5
- bl GetMonData
- cmp r0, 0
- beq _081537F8
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0x55
- bne _081537F8
- movs r0, 0x1
- strh r0, [r6]
- b _08153804
- .align 2, 0
-_081537F0: .4byte gSpecialVar_Result
-_081537F4: .4byte gPlayerParty
-_081537F8:
- adds r5, 0x1
- cmp r5, 0x5
- ble _081537C6
- ldr r1, _0815380C @ =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
-_08153804:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0815380C: .4byte gSpecialVar_Result
- thumb_func_end IsDodrioInParty
-
- thumb_func_start ShowDodrioBerryPickingRecords
-ShowDodrioBerryPickingRecords: @ 8153810
- push {r4,lr}
- ldr r4, _0815382C @ =sub_8153830
- adds r0, r4, 0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0815382C: .4byte sub_8153830
- thumb_func_end ShowDodrioBerryPickingRecords
-
- thumb_func_start sub_8153830
-sub_8153830: @ 8153830
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08153854 @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0815387C
- cmp r0, 0x1
- bgt _08153858
- cmp r0, 0
- beq _08153862
- b _081538CA
- .align 2, 0
-_08153854: .4byte gTasks+0x8
-_08153858:
- cmp r0, 0x2
- beq _08153888
- cmp r0, 0x3
- beq _081538B0
- b _081538CA
-_08153862:
- ldr r0, _08153878 @ =sUnknown_84755E0
- bl AddWindow
- strh r0, [r4, 0x2]
- lsls r0, 24
- lsrs r0, 24
- bl sub_81538D0
- ldrb r0, [r4, 0x2]
- movs r1, 0x3
- b _0815389E
- .align 2, 0
-_08153878: .4byte sUnknown_84755E0
-_0815387C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _081538CA
- b _081538A2
-_08153888:
- ldr r0, _081538AC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _081538CA
- ldrb r0, [r4, 0x2]
- bl rbox_fill_rectangle
- ldrb r0, [r4, 0x2]
- movs r1, 0x1
-_0815389E:
- bl CopyWindowToVram
-_081538A2:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _081538CA
- .align 2, 0
-_081538AC: .4byte gMain
-_081538B0:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _081538CA
- ldrb r0, [r4, 0x2]
- bl RemoveWindow
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_081538CA:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8153830
-
- thumb_func_start sub_81538D0
-sub_81538D0: @ 81538D0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x30
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _081539CC @ =gSaveBlock2Ptr
- ldr r1, [r0]
- ldr r2, _081539D0 @ =0x00000b14
- adds r0, r1, r2
- ldrh r0, [r0]
- str r0, [sp, 0xC]
- subs r2, 0x4
- adds r0, r1, r2
- ldr r0, [r0]
- str r0, [sp, 0x10]
- ldr r0, _081539D4 @ =0x00000b16
- adds r1, r0
- ldrh r0, [r1]
- str r0, [sp, 0x14]
- ldr r4, _081539D8 @ =0x0000021d
- adds r0, r7, 0
- adds r1, r4, 0
- movs r2, 0xD0
- bl TextWindow_SetStdFrame0_WithPal
- adds r0, r7, 0
- adds r1, r4, 0
- movs r2, 0xD
- bl DrawTextBorderOuter
- adds r0, r7, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r0, _081539DC @ =sUnknown_84755E8
- ldr r2, [r0]
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- adds r0, r7, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized
- movs r4, 0
- add r2, sp, 0x18
- mov r8, r2
- movs r0, 0xFF
- mov r10, r0
- mov r9, r4
- mov r2, sp
- adds r2, 0xC
- str r2, [sp, 0x2C]
-_08153946:
- ldr r0, [sp, 0x2C]
- ldm r0!, {r1}
- str r0, [sp, 0x2C]
- ldr r0, _081539E0 @ =sUnknown_84755F8
- adds r0, r4, r0
- ldrb r3, [r0]
- mov r0, r8
- movs r2, 0
- bl ConvertIntToDecimalStringN
- movs r0, 0x2
- mov r1, r8
- movs r2, 0x1
- negs r2, r2
- bl GetStringWidth
- adds r5, r0, 0
- ldr r1, _081539DC @ =sUnknown_84755E8
- adds r6, r4, 0x1
- lsls r0, r6, 2
- adds r0, r1
- ldr r2, [r0]
- ldr r0, _081539E4 @ =sUnknown_84755FC
- lsls r4, 1
- adds r0, r4, r0
- ldrb r0, [r0]
- str r0, [sp]
- mov r0, r10
- str r0, [sp, 0x4]
- mov r0, r9
- str r0, [sp, 0x8]
- adds r0, r7, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized
- movs r3, 0xE0
- subs r3, r5
- lsls r3, 24
- lsrs r3, 24
- ldr r0, _081539E8 @ =sUnknown_8475602
- adds r4, r0
- ldrb r0, [r4]
- str r0, [sp]
- mov r2, r10
- str r2, [sp, 0x4]
- mov r0, r9
- str r0, [sp, 0x8]
- adds r0, r7, 0
- movs r1, 0x2
- mov r2, r8
- bl AddTextPrinterParameterized
- adds r4, r6, 0
- cmp r4, 0x2
- ble _08153946
- adds r0, r7, 0
- bl PutWindowTilemap
- add sp, 0x30
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081539CC: .4byte gSaveBlock2Ptr
-_081539D0: .4byte 0x00000b14
-_081539D4: .4byte 0x00000b16
-_081539D8: .4byte 0x0000021d
-_081539DC: .4byte sUnknown_84755E8
-_081539E0: .4byte sUnknown_84755F8
-_081539E4: .4byte sUnknown_84755FC
-_081539E8: .4byte sUnknown_8475602
- thumb_func_end sub_81538D0
-
- thumb_func_start sub_81539EC
-sub_81539EC: @ 81539EC
- push {lr}
- bl GetLinkPlayerCount
- ldr r1, _08153A00 @ =gUnknown_203F3E0
- ldr r1, [r1]
- adds r1, 0x24
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08153A00: .4byte gUnknown_203F3E0
- thumb_func_end sub_81539EC
-
- thumb_func_start sub_8153A04
-sub_8153A04: @ 8153A04
- push {r4-r7,lr}
- ldr r0, _08153A8C @ =gUnknown_203F3E0
- ldr r0, [r0]
- adds r0, 0x24
- ldrb r4, [r0]
- cmp r4, 0x4
- bhi _08153A32
- ldr r5, _08153A90 @ =sUnknown_8475648
-_08153A14:
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- ldr r1, _08153A94 @ =gLinkPlayers + 8
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r5
- ldr r1, [r1]
- bl StringCopy
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x4
- bls _08153A14
-_08153A32:
- ldr r0, _08153A8C @ =gUnknown_203F3E0
- ldr r1, [r0]
- adds r1, 0x24
- movs r2, 0x5
- strb r2, [r1]
- movs r1, 0
- mov r12, r0
-_08153A40:
- movs r4, 0
- mov r2, r12
- ldr r0, [r2]
- adds r0, 0x24
- adds r5, r1, 0x1
- ldrb r0, [r0]
- cmp r4, r0
- bcs _08153A7E
- ldr r7, _08153A8C @ =gUnknown_203F3E0
- lsls r3, r1, 1
- ldr r6, _08153A98 @ =sUnknown_8475608
-_08153A56:
- ldr r2, [r7]
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r3, r0
- adds r1, r2, 0
- adds r1, 0x4A
- adds r1, r0
- lsls r0, r4, 3
- adds r0, r3, r0
- adds r0, r6
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r2, 0x24
- ldrb r2, [r2]
- cmp r4, r2
- bcc _08153A56
-_08153A7E:
- lsls r0, r5, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bls _08153A40
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08153A8C: .4byte gUnknown_203F3E0
-_08153A90: .4byte sUnknown_8475648
-_08153A94: .4byte gLinkPlayers + 8
-_08153A98: .4byte sUnknown_8475608
- thumb_func_end sub_8153A04
-
- thumb_func_start sub_8153A9C
-sub_8153A9C: @ 8153A9C
- push {r4,r5,lr}
- sub sp, 0x18
- movs r5, 0xC0
- lsls r5, 6
- adds r0, r5, 0
- bl AllocZeroed
- adds r4, r0, 0
- ldr r0, _08153AF0 @ =gUnknown_8478D90
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x8]
- str r1, [sp, 0xC]
- ldr r0, _08153AF4 @ =gUnknown_8478D98
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x10]
- str r1, [sp, 0x14]
- ldr r0, _08153AF8 @ =sDodrioBerryPkmnGfx
- adds r1, r4, 0
- bl LZ77UnCompWram
- cmp r4, 0
- beq _08153ADC
- str r4, [sp]
- str r5, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- adds r0, r4, 0
- bl Free
-_08153ADC:
- add r0, sp, 0x8
- bl LoadSpritePalette
- add r0, sp, 0x10
- bl LoadSpritePalette
- add sp, 0x18
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08153AF0: .4byte gUnknown_8478D90
-_08153AF4: .4byte gUnknown_8478D98
-_08153AF8: .4byte sDodrioBerryPkmnGfx
- thumb_func_end sub_8153A9C
-
- thumb_func_start sub_8153AFC
-sub_8153AFC: @ 8153AFC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x30
- adds r6, r1, 0
- mov r8, r2
- adds r5, r3, 0
- lsls r6, 24
- lsrs r6, 24
- mov r1, r8
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r5, 24
- lsrs r5, 24
- add r1, sp, 0x18
- movs r3, 0
- strh r3, [r1]
- ldrb r2, [r0]
- mov r0, sp
- adds r0, 0x1A
- strh r2, [r0]
- ldr r0, _08153B88 @ =sOamData_8478C98
- str r0, [sp, 0x1C]
- ldr r0, _08153B8C @ =sSpriteAnimTable_8478CE0
- str r0, [sp, 0x20]
- str r3, [sp, 0x24]
- ldr r0, _08153B90 @ =gDummySpriteAffineAnimTable
- str r0, [sp, 0x28]
- ldr r0, _08153B94 @ =sub_8153B9C
- str r0, [sp, 0x2C]
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- movs r0, 0x4
- bl AllocZeroed
- ldr r1, _08153B98 @ =gUnknown_203F3E4
- mov r2, r8
- lsls r4, r2, 2
- adds r4, r1
- str r0, [r4]
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_8154608
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- mov r0, sp
- movs r2, 0x88
- movs r3, 0x3
- bl CreateSprite
- ldr r1, [r4]
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1]
- movs r0, 0x1
- mov r1, r8
- bl sub_8153D48
- add sp, 0x30
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08153B88: .4byte sOamData_8478C98
-_08153B8C: .4byte sSpriteAnimTable_8478CE0
-_08153B90: .4byte gDummySpriteAffineAnimTable
-_08153B94: .4byte sub_8153B9C
-_08153B98: .4byte gUnknown_203F3E4
- thumb_func_end sub_8153AFC
-
- thumb_func_start sub_8153B9C
-sub_8153B9C: @ 8153B9C
- push {lr}
- movs r2, 0x2E
- ldrsh r1, [r0, r2]
- cmp r1, 0x1
- beq _08153BB0
- cmp r1, 0x1
- ble _08153BBA
- cmp r1, 0x2
- beq _08153BB6
- b _08153BBA
-_08153BB0:
- bl sub_8153C30
- b _08153BBA
-_08153BB6:
- bl sub_8153CA0
-_08153BBA:
- pop {r0}
- bx r0
- thumb_func_end sub_8153B9C
-
- thumb_func_start sub_8153BC0
-sub_8153BC0: @ 8153BC0
- push {lr}
- bl GetMultiplayerId
- ldr r1, _08153BF0 @ =gUnknown_203F3E4
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08153BF4 @ =gSprites
- adds r0, r1
- movs r2, 0
- movs r1, 0x1
- strh r1, [r0, 0x2E]
- strh r2, [r0, 0x30]
- strh r2, [r0, 0x32]
- strh r2, [r0, 0x34]
- strh r2, [r0, 0x36]
- pop {r0}
- bx r0
- .align 2, 0
-_08153BF0: .4byte gUnknown_203F3E4
-_08153BF4: .4byte gSprites
- thumb_func_end sub_8153BC0
-
- thumb_func_start sub_8153BF8
-sub_8153BF8: @ 8153BF8
- push {lr}
- bl GetMultiplayerId
- ldr r1, _08153C28 @ =gUnknown_203F3E4
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08153C2C @ =gSprites
- adds r0, r1
- movs r2, 0
- movs r1, 0x2
- strh r1, [r0, 0x2E]
- strh r2, [r0, 0x30]
- strh r2, [r0, 0x32]
- strh r2, [r0, 0x34]
- strh r2, [r0, 0x36]
- pop {r0}
- bx r0
- .align 2, 0
-_08153C28: .4byte gUnknown_203F3E4
-_08153C2C: .4byte gSprites
- thumb_func_end sub_8153BF8
-
- thumb_func_start sub_8153C30
-sub_8153C30: @ 8153C30
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r2, r0, 16
- lsrs r0, 31
- adds r0, r2, r0
- asrs r1, r0, 1
- adds r0, r1, 0
- cmp r1, 0
- bge _08153C4C
- adds r0, r1, 0x3
-_08153C4C:
- asrs r0, 2
- lsls r0, 2
- subs r0, r1, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r2, 0x2
- ble _08153C96
- cmp r0, 0x2
- bgt _08153C62
- cmp r0, 0x1
- bge _08153C66
-_08153C62:
- movs r0, 0x1
- b _08153C68
-_08153C66:
- movs r0, 0xFF
-_08153C68:
- lsls r0, 24
- asrs r0, 24
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x27
- ble _08153C96
- movs r0, 0
- strh r0, [r4, 0x2E]
- bl sub_81533B4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_8154608
- strh r0, [r4, 0x20]
-_08153C96:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8153C30
-
- thumb_func_start sub_8153CA0
-sub_8153CA0: @ 8153CA0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x30]
- adds r0, 0x1
- strh r0, [r5, 0x30]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0xD
- bl __divsi3
- lsls r0, 16
- asrs r1, r0, 16
- adds r0, r1, 0
- cmp r1, 0
- bge _08153CC0
- adds r0, r1, 0x3
-_08153CC0:
- asrs r0, 2
- lsls r0, 2
- subs r0, r1, r0
- lsls r0, 24
- lsrs r4, r0, 24
- movs r1, 0x30
- ldrsh r0, [r5, r1]
- movs r1, 0xD
- bl __modsi3
- lsls r0, 16
- cmp r0, 0
- bne _08153CE4
- cmp r4, 0
- beq _08153CE4
- movs r0, 0xCD
- bl PlaySE
-_08153CE4:
- movs r1, 0x30
- ldrsh r0, [r5, r1]
- cmp r0, 0x67
- ble _08153CF2
- movs r0, 0
- strh r0, [r5, 0x2E]
- movs r4, 0
-_08153CF2:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl sub_8153DA8
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8153CA0
-
- thumb_func_start sub_8153D08
-sub_8153D08: @ 8153D08
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- cmp r4, r5
- bcs _08153D3A
- ldr r6, _08153D40 @ =gUnknown_203F3E4
-_08153D16:
- lsls r0, r4, 2
- adds r0, r6
- ldr r0, [r0]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08153D44 @ =gSprites
- adds r0, r1
- cmp r0, 0
- beq _08153D30
- bl DestroySpriteAndFreeResources
-_08153D30:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r5
- bcc _08153D16
-_08153D3A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08153D40: .4byte gUnknown_203F3E4
-_08153D44: .4byte gSprites
- thumb_func_end sub_8153D08
-
- thumb_func_start sub_8153D48
-sub_8153D48: @ 8153D48
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r3, _08153D78 @ =gSprites
- ldr r2, _08153D7C @ =gUnknown_203F3E4
- lsrs r1, 22
- adds r1, r2
- ldr r1, [r1]
- ldrh r1, [r1]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r3
- adds r2, 0x3E
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- ldrb r3, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- orrs r1, r0
- strb r1, [r2]
- bx lr
- .align 2, 0
-_08153D78: .4byte gSprites
-_08153D7C: .4byte gUnknown_203F3E4
- thumb_func_end sub_8153D48
-
- thumb_func_start sub_8153D80
-sub_8153D80: @ 8153D80
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- movs r4, 0
- cmp r4, r5
- bcs _08153DA2
-_08153D90:
- adds r0, r6, 0
- adds r1, r4, 0
- bl sub_8153D48
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r5
- bcc _08153D90
-_08153DA2:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8153D80
-
- thumb_func_start sub_8153DA8
-sub_8153DA8: @ 8153DA8
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _08153DCC @ =gUnknown_203F3E4
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ldrh r2, [r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r2, _08153DD0 @ =gSprites
- adds r0, r2
- bl StartSpriteAnim
- pop {r0}
- bx r0
- .align 2, 0
-_08153DCC: .4byte gUnknown_203F3E4
-_08153DD0: .4byte gSprites
- thumb_func_end sub_8153DA8
-
- thumb_func_start nullsub_97
-nullsub_97: @ 8153DD4
- bx lr
- thumb_func_end nullsub_97
-
- thumb_func_start sub_8153DD8
-sub_8153DD8: @ 8153DD8
- push {r4-r7,lr}
- movs r4, 0
- ldr r0, _08153E20 @ =gSprites
- mov r12, r0
- movs r6, 0
- ldr r5, _08153E24 @ =gUnknown_203F43C
-_08153DE4:
- ldr r3, [r5]
- lsls r1, r4, 1
- adds r0, r3, 0
- adds r0, 0x2A
- adds r0, r1
- ldrh r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- add r1, r12
- lsls r0, r4, 4
- adds r0, 0x30
- strh r0, [r1, 0x20]
- lsls r2, r4, 3
- movs r7, 0x8
- negs r7, r7
- adds r0, r7, 0
- subs r0, r2
- strh r0, [r1, 0x22]
- adds r3, 0xC
- adds r3, r4
- strb r6, [r3]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bls _08153DE4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08153E20: .4byte gSprites
-_08153E24: .4byte gUnknown_203F43C
- thumb_func_end sub_8153DD8
-
- thumb_func_start sub_8153E28
-sub_8153E28: @ 8153E28
- push {r4-r6,lr}
- sub sp, 0x28
- movs r4, 0xC0
- lsls r4, 1
- adds r0, r4, 0
- bl AllocZeroed
- adds r6, r0, 0
- ldr r0, _08153EC8 @ =gUnknown_8478DA0
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x20]
- str r1, [sp, 0x24]
- ldr r0, _08153ECC @ =sDodrioBerryStatusGfx
- adds r1, r6, 0
- bl LZ77UnCompWram
- cmp r6, 0
- beq _08153EB8
- str r6, [sp, 0x18]
- add r5, sp, 0x18
- movs r0, 0x80
- lsls r0, 9
- orrs r0, r4
- str r0, [r5, 0x4]
- mov r1, sp
- ldr r0, _08153ED0 @ =gUnknown_8478DA8
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldr r4, _08153ED4 @ =gUnknown_203F43C
- movs r0, 0x40
- bl AllocZeroed
- str r0, [r4]
- adds r0, r5, 0
- bl LoadSpriteSheet
- add r0, sp, 0x20
- bl LoadSpritePalette
- movs r4, 0
-_08153E7E:
- lsls r1, r4, 20
- movs r0, 0xC0
- lsls r0, 14
- adds r1, r0
- asrs r1, 16
- lsls r0, r4, 3
- movs r3, 0x8
- negs r3, r3
- adds r2, r3, 0
- subs r2, r0
- lsls r2, 16
- asrs r2, 16
- mov r0, sp
- movs r3, 0
- bl CreateSprite
- ldr r1, _08153ED4 @ =gUnknown_203F43C
- ldr r1, [r1]
- lsls r2, r4, 1
- adds r1, 0x2A
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bls _08153E7E
-_08153EB8:
- adds r0, r6, 0
- bl Free
- add sp, 0x28
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08153EC8: .4byte gUnknown_8478DA0
-_08153ECC: .4byte sDodrioBerryStatusGfx
-_08153ED0: .4byte gUnknown_8478DA8
-_08153ED4: .4byte gUnknown_203F43C
- thumb_func_end sub_8153E28
-
- thumb_func_start sub_8153ED8
-sub_8153ED8: @ 8153ED8
- push {r4,r5,lr}
- movs r4, 0
-_08153EDC:
- ldr r5, _08153F14 @ =gUnknown_203F43C
- ldr r0, [r5]
- lsls r1, r4, 1
- adds r0, 0x2A
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08153F18 @ =gSprites
- adds r0, r1
- cmp r0, 0
- beq _08153EFA
- bl DestroySpriteAndFreeResources
-_08153EFA:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bls _08153EDC
- ldr r0, [r5]
- bl Free
- movs r0, 0
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08153F14: .4byte gUnknown_203F43C
-_08153F18: .4byte gSprites
- thumb_func_end sub_8153ED8
-
- thumb_func_start sub_8153F1C
-sub_8153F1C: @ 8153F1C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r3, 0
- movs r6, 0
- ldr r0, _08153FAC @ =gUnknown_203F43C
- mov r9, r0
-_08153F2E:
- mov r7, r9
- ldr r2, [r7]
- lsls r5, r6, 1
- adds r0, r2, 0
- adds r0, 0x2A
- adds r0, r5
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08153FB0 @ =gSprites
- adds r4, r0, r1
- adds r0, r2, 0
- adds r0, 0x16
- adds r0, r5
- movs r1, 0x2
- strh r1, [r0]
- adds r0, r2, 0
- adds r0, 0xC
- adds r2, r0, r6
- ldrb r1, [r2]
- cmp r1, 0
- beq _08153F64
- movs r7, 0x22
- ldrsh r0, [r4, r7]
- cmp r0, 0x8
- beq _08153F9A
-_08153F64:
- movs r3, 0x1
- movs r7, 0x22
- ldrsh r0, [r4, r7]
- cmp r0, 0x8
- bne _08153F8A
- cmp r1, 0
- bne _08153F9A
- strb r3, [r2]
- mov r1, r9
- ldr r0, [r1]
- adds r0, 0x16
- adds r0, r5
- ldr r1, _08153FB4 @ =0x0000fff0
- strh r1, [r0]
- movs r0, 0x1E
- str r3, [sp]
- bl PlaySE
- ldr r3, [sp]
-_08153F8A:
- mov r7, r9
- ldr r0, [r7]
- adds r0, 0x16
- adds r0, r5
- ldrh r0, [r0]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
-_08153F9A:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x9
- bls _08153F2E
- cmp r3, 0
- bne _08153FB8
- movs r0, 0x1
- b _08153FBA
- .align 2, 0
-_08153FAC: .4byte gUnknown_203F43C
-_08153FB0: .4byte gSprites
-_08153FB4: .4byte 0x0000fff0
-_08153FB8:
- movs r0, 0
-_08153FBA:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8153F1C
-
- thumb_func_start sub_8153FC8
-sub_8153FC8: @ 8153FC8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xA
- bls _08154004
- movs r4, 0
-_08153FD4:
- ldr r0, _08153FFC @ =gUnknown_203F43C
- ldr r0, [r0]
- lsls r1, r4, 1
- adds r0, 0x2A
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08154000 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAnim
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bls _08153FD4
- b _081540CE
- .align 2, 0
-_08153FFC: .4byte gUnknown_203F43C
-_08154000: .4byte gSprites
-_08154004:
- movs r4, 0
- movs r0, 0xA
- subs r0, r5
- cmp r4, r0
- bge _081540CA
- ldr r6, _08154034 @ =gSprites
-_08154010:
- cmp r5, 0x6
- bls _08154078
- ldr r0, _08154038 @ =gUnknown_203F43C
- ldr r2, [r0]
- ldr r1, _0815403C @ =0x0000fffa
- adds r0, r1, 0
- ldrh r1, [r2, 0x3E]
- adds r0, r1
- adds r0, r5
- movs r1, 0
- strh r0, [r2, 0x3E]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1E
- bls _08154040
- strh r1, [r2, 0x3E]
- b _08154092
- .align 2, 0
-_08154034: .4byte gSprites
-_08154038: .4byte gUnknown_203F43C
-_0815403C: .4byte 0x0000fffa
-_08154040:
- cmp r0, 0xA
- bls _0815405E
- lsls r1, r4, 1
- adds r0, r2, 0
- adds r0, 0x2A
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r1, 0x2
- bl StartSpriteAnim
- b _08154092
-_0815405E:
- lsls r1, r4, 1
- adds r0, r2, 0
- adds r0, 0x2A
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r1, 0
- bl StartSpriteAnim
- b _08154092
-_08154078:
- ldr r0, _081540A4 @ =gUnknown_203F43C
- ldr r0, [r0]
- lsls r1, r4, 1
- adds r0, 0x2A
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r1, 0
- bl StartSpriteAnim
-_08154092:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0xA
- subs r0, r5
- cmp r4, r0
- blt _08154010
- b _081540CA
- .align 2, 0
-_081540A4: .4byte gUnknown_203F43C
-_081540A8:
- ldr r0, _081540D4 @ =gUnknown_203F43C
- ldr r0, [r0]
- lsls r1, r4, 1
- adds r0, 0x2A
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081540D8 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAnim
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_081540CA:
- cmp r4, 0x9
- bls _081540A8
-_081540CE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081540D4: .4byte gUnknown_203F43C
-_081540D8: .4byte gSprites
- thumb_func_end sub_8153FC8
-
- thumb_func_start sub_81540DC
-sub_81540DC: @ 81540DC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0
- ldr r7, _08154120 @ =gSprites
- movs r1, 0x1
- ands r0, r1
- lsls r4, r0, 2
- movs r6, 0x5
- negs r6, r6
- ldr r5, _08154124 @ =gUnknown_203F43C
-_081540F2:
- ldr r0, [r5]
- lsls r1, r3, 1
- adds r0, 0x2A
- adds r0, r1
- ldrh r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- adds r1, 0x3E
- ldrb r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r4
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x9
- bls _081540F2
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08154120: .4byte gSprites
-_08154124: .4byte gUnknown_203F43C
- thumb_func_end sub_81540DC
-
- thumb_func_start sub_8154128
-sub_8154128: @ 8154128
- push {r4,r5,lr}
- sub sp, 0x10
- movs r5, 0x90
- lsls r5, 3
- adds r0, r5, 0
- bl AllocZeroed
- adds r4, r0, 0
- ldr r0, _08154174 @ =gUnknown_8478DCC
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x8]
- str r1, [sp, 0xC]
- ldr r0, _08154178 @ =sDodrioBerrySpritesGfx
- adds r1, r4, 0
- bl LZ77UnCompWram
- cmp r4, 0
- beq _0815415E
- str r4, [sp]
- movs r0, 0x80
- lsls r0, 10
- orrs r0, r5
- str r0, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
-_0815415E:
- add r0, sp, 0x8
- bl LoadSpritePalette
- adds r0, r4, 0
- bl Free
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08154174: .4byte gUnknown_8478DCC
-_08154178: .4byte sDodrioBerrySpritesGfx
- thumb_func_end sub_8154128
-
- thumb_func_start sub_815417C
-sub_815417C: @ 815417C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x30
- mov r1, sp
- ldr r0, _0815420C @ =gUnknown_8478DDC
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- add r2, sp, 0x18
- adds r1, r2, 0
- ldr r0, _08154210 @ =gUnknown_8478DF4
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- movs r5, 0
- mov r9, r2
-_081541A4:
- movs r0, 0x4
- bl AllocZeroed
- ldr r1, _08154214 @ =gUnknown_203F400
- lsls r4, r5, 2
- adds r4, r1
- str r0, [r4]
- lsls r0, r5, 3
- lsls r1, r5, 4
- adds r1, r0
- mov r0, sp
- movs r2, 0x8
- movs r3, 0x1
- bl CreateSprite
- ldr r1, [r4]
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1]
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_81542EC
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xA
- bls _081541A4
- movs r5, 0
- ldr r7, _08154218 @ =gUnknown_203F42C
- ldr r4, _0815421C @ =sUnknown_8478DD4
- mov r8, r4
-_081541E4:
- movs r0, 0x4
- bl AllocZeroed
- lsls r1, r5, 2
- adds r4, r1, r7
- str r0, [r4]
- adds r6, r1, 0
- cmp r5, 0x3
- bne _08154220
- mov r0, r8
- movs r2, 0x6
- ldrsh r1, [r0, r2]
- mov r0, r9
- movs r2, 0x39
- movs r3, 0
- bl CreateSprite
- ldr r1, [r7, 0xC]
- b _08154234
- .align 2, 0
-_0815420C: .4byte gUnknown_8478DDC
-_08154210: .4byte gUnknown_8478DF4
-_08154214: .4byte gUnknown_203F400
-_08154218: .4byte gUnknown_203F42C
-_0815421C: .4byte sUnknown_8478DD4
-_08154220:
- lsls r0, r5, 1
- add r0, r8
- movs r3, 0
- ldrsh r1, [r0, r3]
- mov r0, r9
- movs r2, 0x3C
- movs r3, 0
- bl CreateSprite
- ldr r1, [r4]
-_08154234:
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1]
- adds r0, r6, r7
- ldr r0, [r0]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08154270 @ =gSprites
- adds r0, r1
- adds r1, r5, 0
- bl StartSpriteAnim
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _081541E4
- movs r0, 0x1
- bl sub_8154324
- add sp, 0x30
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08154270: .4byte gSprites
- thumb_func_end sub_815417C
-
- thumb_func_start sub_8154274
-sub_8154274: @ 8154274
- push {r4-r6,lr}
- movs r5, 0
- ldr r6, _081542E0 @ =gUnknown_203F400
-_0815427A:
- lsls r0, r5, 2
- adds r4, r0, r6
- ldr r0, [r4]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081542E4 @ =gSprites
- adds r0, r1
- cmp r0, 0
- beq _08154294
- bl DestroySprite
-_08154294:
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xA
- bls _0815427A
- movs r5, 0
- ldr r6, _081542E8 @ =gUnknown_203F42C
-_081542AC:
- lsls r0, r5, 2
- adds r4, r0, r6
- ldr r0, [r4]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081542E4 @ =gSprites
- adds r0, r1
- cmp r0, 0
- beq _081542C6
- bl DestroySprite
-_081542C6:
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _081542AC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081542E0: .4byte gUnknown_203F400
-_081542E4: .4byte gSprites
-_081542E8: .4byte gUnknown_203F42C
- thumb_func_end sub_8154274
-
- thumb_func_start sub_81542EC
-sub_81542EC: @ 81542EC
- lsls r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0815431C @ =gSprites
- ldr r2, _08154320 @ =gUnknown_203F400
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- adds r2, 0x3E
- movs r0, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- bx lr
- .align 2, 0
-_0815431C: .4byte gSprites
-_08154320: .4byte gUnknown_203F400
- thumb_func_end sub_81542EC
-
- thumb_func_start sub_8154324
-sub_8154324: @ 8154324
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0
- ldr r7, _08154368 @ =gSprites
- ldr r6, _0815436C @ =gUnknown_203F42C
- movs r1, 0x1
- ands r0, r1
- lsls r4, r0, 2
- movs r5, 0x5
- negs r5, r5
-_0815433A:
- lsls r0, r3, 2
- adds r0, r6
- ldr r0, [r0]
- ldrh r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- adds r1, 0x3E
- ldrb r2, [r1]
- adds r0, r5, 0
- ands r0, r2
- orrs r0, r4
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0815433A
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08154368: .4byte gSprites
-_0815436C: .4byte gUnknown_203F42C
- thumb_func_end sub_8154324
-
- thumb_func_start sub_8154370
-sub_8154370: @ 8154370
- lsls r0, 24
- lsls r1, 24
- ldr r3, _08154390 @ =gSprites
- ldr r2, _08154394 @ =gUnknown_203F400
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ldrh r2, [r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- lsrs r1, 21
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_08154390: .4byte gSprites
-_08154394: .4byte gUnknown_203F400
- thumb_func_end sub_8154370
-
- thumb_func_start sub_8154398
-sub_8154398: @ 8154398
- push {lr}
- lsls r0, 16
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _081543BC @ =gUnknown_203F400
- lsrs r0, 14
- adds r0, r2
- ldr r0, [r0]
- ldrh r2, [r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r2, _081543C0 @ =gSprites
- adds r0, r2
- bl StartSpriteAnim
- pop {r0}
- bx r0
- .align 2, 0
-_081543BC: .4byte gUnknown_203F400
-_081543C0: .4byte gSprites
- thumb_func_end sub_8154398
-
- thumb_func_start sub_81543C4
-sub_81543C4: @ 81543C4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _081543E4 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, 0x32
- strh r1, [r2, 0x20]
- movs r0, 0x32
- strh r0, [r2, 0x22]
- bx lr
- .align 2, 0
-_081543E4: .4byte gSprites
- thumb_func_end sub_81543C4
-
- thumb_func_start sub_81543E8
-sub_81543E8: @ 81543E8
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r0, 0x42
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- beq _0815442A
- movs r3, 0
- ldr r7, _08154430 @ =gUnknown_8478E0C
- ldr r6, _08154434 @ =gUnknown_203F3F8
- movs r5, 0
-_081543FE:
- lsls r0, r3, 2
- adds r2, r0, r6
- ldr r1, [r2]
- ldrh r0, [r1, 0x2]
- adds r0, 0x1
- strh r0, [r1, 0x2]
- adds r1, r3, r7
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1]
- cmp r0, r1
- bls _08154420
- ldrh r0, [r4, 0x20]
- subs r0, 0x1
- strh r0, [r4, 0x20]
- ldr r0, [r2]
- strh r5, [r0, 0x2]
-_08154420:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bls _081543FE
-_0815442A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08154430: .4byte gUnknown_8478E0C
-_08154434: .4byte gUnknown_203F3F8
- thumb_func_end sub_81543E8
-
- thumb_func_start sub_8154438
-sub_8154438: @ 8154438
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x28
- movs r4, 0x80
- lsls r4, 3
- adds r0, r4, 0
- bl AllocZeroed
- adds r6, r0, 0
- ldr r0, _081544DC @ =gUnknown_8478E18
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x20]
- str r1, [sp, 0x24]
- ldr r0, _081544E0 @ =sDodrioBerryPlatformGfx
- adds r1, r6, 0
- bl LZ77UnCompWram
- cmp r6, 0
- beq _081544C6
- str r6, [sp, 0x18]
- add r0, sp, 0x18
- movs r1, 0xA0
- lsls r1, 11
- orrs r1, r4
- str r1, [r0, 0x4]
- mov r2, sp
- ldr r1, _081544E4 @ =gUnknown_8478E20
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- bl LoadSpriteSheet
- add r0, sp, 0x20
- bl LoadSpritePalette
- movs r5, 0
- ldr r7, _081544E8 @ =gUnknown_8478E0E
- adds r0, r7, 0x2
- mov r9, r0
- ldr r1, _081544EC @ =gUnknown_203F3F8
- mov r8, r1
-_08154492:
- movs r0, 0x4
- bl AllocZeroed
- lsls r2, r5, 2
- mov r3, r8
- adds r4, r2, r3
- str r0, [r4]
- adds r0, r2, r7
- movs r3, 0
- ldrsh r1, [r0, r3]
- add r2, r9
- movs r0, 0
- ldrsh r2, [r2, r0]
- mov r0, sp
- movs r3, 0x4
- bl CreateSprite
- ldr r1, [r4]
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _08154492
-_081544C6:
- adds r0, r6, 0
- bl Free
- add sp, 0x28
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081544DC: .4byte gUnknown_8478E18
-_081544E0: .4byte sDodrioBerryPlatformGfx
-_081544E4: .4byte gUnknown_8478E20
-_081544E8: .4byte gUnknown_8478E0E
-_081544EC: .4byte gUnknown_203F3F8
- thumb_func_end sub_8154438
-
- thumb_func_start sub_81544F0
-sub_81544F0: @ 81544F0
- push {r4-r7,lr}
- movs r3, 0
- ldr r0, _08154534 @ =gUnknown_203F3F8
- mov r12, r0
- ldr r4, _08154538 @ =gUnknown_8478E0E
- adds r7, r4, 0x2
- ldr r6, _0815453C @ =gSprites
- movs r5, 0x1
-_08154500:
- lsls r2, r3, 2
- mov r1, r12
- adds r0, r2, r1
- ldr r0, [r0]
- ldrh r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- adds r0, r1, 0
- adds r0, 0x42
- strh r5, [r0]
- adds r0, r2, r4
- ldrh r0, [r0]
- strh r0, [r1, 0x20]
- adds r2, r7
- ldrh r0, [r2]
- strh r0, [r1, 0x22]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bls _08154500
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08154534: .4byte gUnknown_203F3F8
-_08154538: .4byte gUnknown_8478E0E
-_0815453C: .4byte gSprites
- thumb_func_end sub_81544F0
-
- thumb_func_start sub_8154540
-sub_8154540: @ 8154540
- push {r4,r5,lr}
- movs r2, 0
- ldr r5, _08154570 @ =gUnknown_203F3F8
- ldr r4, _08154574 @ =gSprites
- movs r3, 0
-_0815454A:
- lsls r0, r2, 2
- adds r0, r5
- ldr r0, [r0]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x42
- strh r3, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1
- bls _0815454A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08154570: .4byte gUnknown_203F3F8
-_08154574: .4byte gSprites
- thumb_func_end sub_8154540
-
- thumb_func_start sub_8154578
-sub_8154578: @ 8154578
- push {r4-r6,lr}
- movs r5, 0
- ldr r6, _081545B4 @ =gUnknown_203F3F8
-_0815457E:
- lsls r0, r5, 2
- adds r4, r0, r6
- ldr r0, [r4]
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081545B8 @ =gSprites
- adds r0, r1
- cmp r0, 0
- beq _08154598
- bl DestroySprite
-_08154598:
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _0815457E
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081545B4: .4byte gUnknown_203F3F8
-_081545B8: .4byte gSprites
- thumb_func_end sub_8154578
-
- thumb_func_start sub_81545BC
-sub_81545BC: @ 81545BC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0
- ldr r7, _08154600 @ =gSprites
- ldr r6, _08154604 @ =gUnknown_203F3F8
- movs r1, 0x1
- ands r0, r1
- lsls r4, r0, 2
- movs r5, 0x5
- negs r5, r5
-_081545D2:
- lsls r0, r3, 2
- adds r0, r6
- ldr r0, [r0]
- ldrh r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- adds r1, 0x3E
- ldrb r2, [r1]
- adds r0, r5, 0
- ands r0, r2
- orrs r0, r4
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bls _081545D2
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08154600: .4byte gSprites
-_08154604: .4byte gUnknown_203F3F8
- thumb_func_end sub_81545BC
-
- thumb_func_start sub_8154608
-sub_8154608: @ 8154608
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r1, 24
- movs r3, 0
- subs r0, r1, 0x1
- cmp r0, 0x4
- bhi _081546BA
- lsls r0, 2
- ldr r1, _08154624 @ =_08154628
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08154624: .4byte _08154628
- .align 2, 0
-_08154628:
- .4byte _081546A8
- .4byte _0815463C
- .4byte _08154646
- .4byte _0815465A
- .4byte _08154682
-_0815463C:
- cmp r2, 0
- beq _08154672
- cmp r2, 0x1
- bne _081546BA
- b _08154676
-_08154646:
- cmp r2, 0x1
- beq _081546AC
- cmp r2, 0x1
- bgt _08154654
- cmp r2, 0
- beq _081546A8
- b _081546BA
-_08154654:
- cmp r2, 0x2
- bne _081546BA
- b _081546B8
-_0815465A:
- cmp r2, 0x1
- beq _08154676
- cmp r2, 0x1
- bgt _08154668
- cmp r2, 0
- beq _08154672
- b _081546BA
-_08154668:
- cmp r2, 0x2
- beq _0815467A
- cmp r2, 0x3
- beq _0815467E
- b _081546BA
-_08154672:
- movs r3, 0xC
- b _081546BA
-_08154676:
- movs r3, 0x12
- b _081546BA
-_0815467A:
- movs r3, 0x18
- b _081546BA
-_0815467E:
- movs r3, 0x6
- b _081546BA
-_08154682:
- cmp r2, 0x4
- bhi _081546BA
- lsls r0, r2, 2
- ldr r1, _08154690 @ =_08154694
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08154690: .4byte _08154694
- .align 2, 0
-_08154694:
- .4byte _081546A8
- .4byte _081546AC
- .4byte _081546B0
- .4byte _081546B4
- .4byte _081546B8
-_081546A8:
- movs r3, 0xF
- b _081546BA
-_081546AC:
- movs r3, 0x15
- b _081546BA
-_081546B0:
- movs r3, 0x1B
- b _081546BA
-_081546B4:
- movs r3, 0x3
- b _081546BA
-_081546B8:
- movs r3, 0x9
-_081546BA:
- lsls r0, r3, 3
- pop {r1}
- bx r1
- thumb_func_end sub_8154608
-
- thumb_func_start sub_81546C0
-sub_81546C0: @ 81546C0
- push {r4,lr}
- movs r4, 0
-_081546C4:
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81542EC
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8154370
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xA
- bls _081546C4
- movs r0, 0
- bl sub_81540DC
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81546C0
-
- thumb_func_start sub_81546EC
-sub_81546EC: @ 81546EC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl GetUserFrameGraphicsInfo
- ldr r1, [r0]
- movs r2, 0x90
- lsls r2, 1
- movs r0, 0
- movs r3, 0x1
- bl LoadBgTiles
- adds r0, r4, 0
- bl GetUserFrameGraphicsInfo
- ldr r0, [r0, 0x4]
- movs r1, 0xA0
- movs r2, 0x20
- bl LoadPalette
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81546EC
-
- thumb_func_start sub_8154720
-sub_8154720: @ 8154720
- push {lr}
- movs r0, 0
- movs r1, 0xA
- movs r2, 0xB0
- bl TextWindow_SetStdFrame0_WithPal
- pop {r0}
- bx r0
- thumb_func_end sub_8154720
-
- thumb_func_start sub_8154730
-sub_8154730: @ 8154730
- ldr r3, _08154760 @ =gUnknown_203F440
- ldr r0, [r3]
- movs r2, 0xC0
- lsls r2, 6
- adds r1, r0, r2
- movs r2, 0
- str r2, [r1]
- ldr r1, _08154764 @ =0x00003014
- adds r0, r1
- strb r2, [r0]
- ldr r0, [r3]
- adds r1, 0x4
- adds r0, r1
- strb r2, [r0]
- ldr r0, [r3]
- adds r1, 0x8
- adds r0, r1
- strb r2, [r0]
- ldr r0, [r3]
- adds r1, 0x4
- adds r0, r1
- strb r2, [r0]
- bx lr
- .align 2, 0
-_08154760: .4byte gUnknown_203F440
-_08154764: .4byte 0x00003014
- thumb_func_end sub_8154730
-
- thumb_func_start sub_8154768
-sub_8154768: @ 8154768
- push {r4-r6,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r6, 0xA
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- movs r5, 0x1
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x1
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r4, 0x3]
- str r0, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x2
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x1]
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x3
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- str r5, [sp]
- ldrb r0, [r4, 0x4]
- str r0, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x4
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x1]
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- str r5, [sp]
- ldrb r0, [r4, 0x4]
- str r0, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x6
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x4]
- ldrb r0, [r4, 0x2]
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x7
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- ldrb r3, [r4, 0x4]
- ldrb r0, [r4, 0x2]
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r4, 0x3]
- str r0, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x8
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x1]
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x4]
- ldrb r4, [r4, 0x2]
- adds r3, r4
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x9
- bl FillBgTilemapBufferRect
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8154768
-
- thumb_func_start sub_8154868
-sub_8154868: @ 8154868
- push {r4-r6,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r6, 0xB
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- movs r5, 0x1
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0xA
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r4, 0x3]
- str r0, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0xB
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x1]
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0xC
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- str r5, [sp]
- ldrb r0, [r4, 0x4]
- str r0, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0xD
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x1]
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- str r5, [sp]
- ldrb r0, [r4, 0x4]
- str r0, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0xF
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x4]
- ldrb r0, [r4, 0x2]
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x10
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x1]
- ldrb r3, [r4, 0x4]
- ldrb r0, [r4, 0x2]
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r4, 0x3]
- str r0, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x11
- bl FillBgTilemapBufferRect
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x1]
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x4]
- ldrb r4, [r4, 0x2]
- adds r3, r4
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x12
- bl FillBgTilemapBufferRect
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8154868
-
- thumb_func_start sub_8154968
-sub_8154968: @ 8154968
- push {r4,lr}
- ldr r4, _081549B0 @ =gUnknown_203F440
- str r0, [r4]
- movs r2, 0xC0
- lsls r2, 6
- adds r1, r0, r2
- movs r2, 0
- str r2, [r1]
- ldr r3, _081549B4 @ =0x00003014
- adds r1, r0, r3
- strb r2, [r1]
- ldr r1, _081549B8 @ =0x00003018
- adds r0, r1
- strb r2, [r0]
- ldr r0, [r4]
- adds r3, 0xC
- adds r0, r3
- strb r2, [r0]
- ldr r0, [r4]
- adds r1, 0xC
- adds r0, r1
- strb r2, [r0]
- ldr r0, _081549BC @ =sub_8154A08
- movs r1, 0x3
- bl CreateTask
- ldr r1, [r4]
- ldr r2, _081549C0 @ =0x00003004
- adds r1, r2
- strb r0, [r1]
- ldr r0, _081549C4 @ =sub_8154A2C
- bl sub_8155E24
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081549B0: .4byte gUnknown_203F440
-_081549B4: .4byte 0x00003014
-_081549B8: .4byte 0x00003018
-_081549BC: .4byte sub_8154A08
-_081549C0: .4byte 0x00003004
-_081549C4: .4byte sub_8154A2C
- thumb_func_end sub_8154968
-
- thumb_func_start sub_81549C8
-sub_81549C8: @ 81549C8
- push {lr}
- bl FreeAllWindowBuffers
- pop {r0}
- bx r0
- thumb_func_end sub_81549C8
-
- thumb_func_start sub_81549D4
-sub_81549D4: @ 81549D4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0
- ldr r5, _08154A04 @ =gUnknown_8478EC4
- adds r7, r5, 0x4
-_081549E0:
- lsls r1, r4, 3
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, r6
- bne _081549F2
- adds r0, r1, r7
- ldr r0, [r0]
- bl sub_8155E24
-_081549F2:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bls _081549E0
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08154A04: .4byte gUnknown_8478EC4
- thumb_func_end sub_81549D4
-
- thumb_func_start sub_8154A08
-sub_8154A08: @ 8154A08
- push {lr}
- ldr r0, _08154A28 @ =gUnknown_203F440
- ldr r0, [r0]
- movs r1, 0xC0
- lsls r1, 6
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _08154A22
- bl sub_8155E54
- bl _call_via_r0
-_08154A22:
- pop {r0}
- bx r0
- .align 2, 0
-_08154A28: .4byte gUnknown_203F440
- thumb_func_end sub_8154A08
-
- thumb_func_start sub_8154A2C
-sub_8154A2C: @ 8154A2C
- push {lr}
- ldr r0, _08154A48 @ =gUnknown_203F440
- ldr r1, [r0]
- ldr r2, _08154A4C @ =0x00003014
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x4
- bhi _08154B24
- lsls r0, 2
- ldr r1, _08154A50 @ =_08154A54
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08154A48: .4byte gUnknown_203F440
-_08154A4C: .4byte 0x00003014
-_08154A50: .4byte _08154A54
- .align 2, 0
-_08154A54:
- .4byte _08154A68
- .4byte _08154A6E
- .4byte _08154A88
- .4byte _08154ACC
- .4byte _08154AF8
-_08154A68:
- bl sub_8155EA0
- b _08154B08
-_08154A6E:
- bl sub_8155FE0
- cmp r0, 0x1
- bne _08154B2E
- ldr r0, _08154A80 @ =gUnknown_203F440
- ldr r1, [r0]
- ldr r2, _08154A84 @ =0x00003014
- adds r1, r2
- b _08154B10
- .align 2, 0
-_08154A80: .4byte gUnknown_203F440
-_08154A84: .4byte 0x00003014
-_08154A88:
- ldr r1, _08154AC0 @ =sDodrioBerryBgTilemap1
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- ldr r1, _08154AC4 @ =sDodrioBerryBgTilemap2Left
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- ldr r1, _08154AC8 @ =sDodrioBerryBgTilemap2Right
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x3
- bl CopyBgTilemapBufferToVram
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- b _08154B08
- .align 2, 0
-_08154AC0: .4byte sDodrioBerryBgTilemap1
-_08154AC4: .4byte sDodrioBerryBgTilemap2Left
-_08154AC8: .4byte sDodrioBerryBgTilemap2Right
-_08154ACC:
- movs r0, 0
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- ldr r0, _08154AF0 @ =gUnknown_203F440
- ldr r1, [r0]
- ldr r2, _08154AF4 @ =0x00003014
- adds r1, r2
- b _08154B10
- .align 2, 0
-_08154AF0: .4byte gUnknown_203F440
-_08154AF4: .4byte 0x00003014
-_08154AF8:
- ldr r0, _08154B18 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x14]
- lsrs r0, 3
- bl sub_81546EC
- bl sub_8154720
-_08154B08:
- ldr r0, _08154B1C @ =gUnknown_203F440
- ldr r1, [r0]
- ldr r0, _08154B20 @ =0x00003014
- adds r1, r0
-_08154B10:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08154B2E
- .align 2, 0
-_08154B18: .4byte gSaveBlock2Ptr
-_08154B1C: .4byte gUnknown_203F440
-_08154B20: .4byte 0x00003014
-_08154B24:
- movs r2, 0xC0
- lsls r2, 6
- adds r1, r2
- movs r0, 0x1
- str r0, [r1]
-_08154B2E:
- pop {r0}
- bx r0
- thumb_func_end sub_8154A2C
-
thumb_func_start sub_8154B34
sub_8154B34: @ 8154B34
push {r4-r7,lr}
diff --git a/asm/dodrio_berry_picking_2.s b/asm/dodrio_berry_picking_3.s
index 91594c7a8..91594c7a8 100644
--- a/asm/dodrio_berry_picking_2.s
+++ b/asm/dodrio_berry_picking_3.s
diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h
index 582c263c5..a65172b33 100644
--- a/include/dodrio_berry_picking.h
+++ b/include/dodrio_berry_picking.h
@@ -1,6 +1,25 @@
#ifndef GUARD_DODRIO_BERRY_PICKING_H
#define GUARD_DODRIO_BERRY_PICKING_H
+struct DodrioSubstruct_0160
+{
+ /*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE];
+ /*0x3000 : 0x3160*/ bool32 finished;
+ /*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004;
+ /*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10];
+ /*0x3014 : 0x3174*/ u8 ALIGNED(4) state;
+ /*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018;
+ /*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C;
+ /*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020;
+ /*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024;
+ /*0x3024 : 0x3184*/ void (*unk3028)(void);
+}; // size = 0x302C
+
+struct DodrioSubstruct_318C
+{
+ bool8 isShiny;
+};
+
struct DodrioSubstruct_31A0_14
{
u8 unk0[11];
@@ -34,5 +53,35 @@ void sub_815AAD8(u8 a0);
void sub_815AB3C(u8 a0);
u8 sub_815A5E8(s32 a0);
u32 IncrementWithLimit(u32, u32);
+void sub_8153A9C(void);
+void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3);
+void sub_8153BC0(u8 a0);
+void sub_8153BF8(u8 a0);
+void sub_8153D08(u8 playerCount);
+u8 sub_8155E8C(void);
+u8 sub_81533B4(void);
+void sub_8153DA8(u8 a0, u8 a1);
+void sub_8153D80(bool8 a0, u8 a1);
+void sub_8153FC8(u8 a0);
+void sub_8153DD8(void);
+void sub_8153E28(void);
+void sub_8153ED8(void);
+bool32 sub_8153F1C(void);
+void sub_81540DC(bool8 a0);
+void sub_8154128(void);
+void sub_815417C(void);
+void sub_8154274(void);
+void sub_81542EC(u8 a0, u8 a1);
+void sub_8154370(u8 a0, u8 a1);
+void sub_8154398(u16 a0, u8 a1);
+void sub_8154438(void);
+void sub_81544F0(void);
+void sub_8154540(void);
+void sub_8154578(void);
+void sub_81545BC(bool8 a0);
+void sub_81546C0(void);
+void sub_8154730(void);
+void sub_8154968(struct DodrioSubstruct_0160 * unk0160);
+void sub_81549D4(u8 a0);
#endif //GUARD_DODRIO_BERRY_PICKING_H
diff --git a/ld_script.txt b/ld_script.txt
index 2a942b605..ce6724236 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -287,11 +287,12 @@ SECTIONS {
src/text_window.o(.text);
src/quest_log_player.o(.text);
src/dodrio_berry_picking.o(.text);
+ src/dodrio_berry_picking_2.o(.text);
asm/dodrio_berry_picking.o(.text);
src/battle_controller_pokedude.o(.text);
src/quest_log_objects.o(.text);
- src/dodrio_berry_picking_2.o(.text);
- asm/dodrio_berry_picking_2.o(.text);
+ src/dodrio_berry_picking_3.o(.text);
+ asm/dodrio_berry_picking_3.o(.text);
src/teachy_tv.o(.text);
src/ereader_helpers.o(.text);
src/digit_obj_util.o(.text);
@@ -580,6 +581,7 @@ SECTIONS {
src/text_window_graphics.o(.rodata);
src/quest_log_player.o(.rodata);
src/dodrio_berry_picking.o(.rodata);
+ src/dodrio_berry_picking_2.o(.rodata);
src/battle_controller_pokedude.o(.rodata);
src/teachy_tv.o(.rodata);
src/digit_obj_util.o(.rodata);
diff --git a/src/data/dodrio_berry_picking.h b/src/data/dodrio_berry_picking.h
new file mode 100644
index 000000000..e71ce13cf
--- /dev/null
+++ b/src/data/dodrio_berry_picking.h
@@ -0,0 +1,247 @@
+#ifndef GUARD_DATA_DODRIO_BERRY_PICKING_H
+#define GUARD_DATA_DODRIO_BERRY_PICKING_H
+
+static const struct BgTemplate sUnknown_847565C[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 12,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 14,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+};
+
+// Unknown unreferenced data, feel free to remove.
+static const u32 sUnused[] = {255, 0};
+
+static const struct WindowTemplate sUnknown_8475674[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 28,
+ .height = 3,
+ .paletteNum = 13,
+ .baseBlock = 0x13,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 6,
+ .width = 28,
+ .height = 13,
+ .paletteNum = 13,
+ .baseBlock = 0x67,
+ }
+};
+
+static const struct WindowTemplate sUnknown_8475684 =
+{
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 6,
+ .width = 28,
+ .height = 7,
+ .paletteNum = 13,
+ .baseBlock = 0x67,
+};
+
+static const struct WindowTemplate sUnknown_847568C[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 8,
+ .width = 19,
+ .height = 3,
+ .paletteNum = 13,
+ .baseBlock = 0x13,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 7,
+ .width = 6,
+ .height = 4,
+ .paletteNum = 13,
+ .baseBlock = 0x4C,
+ }
+};
+
+static const struct WindowTemplate sUnknown_847569C =
+{
+ .bg = 0,
+ .tilemapLeft = 4,
+ .tilemapTop = 6,
+ .width = 22,
+ .height = 5,
+ .paletteNum = 13,
+ .baseBlock = 0x13,
+};
+
+static const struct WindowTemplate sUnknown_84756A4 =
+{
+ .bg = 0,
+ .tilemapLeft = 5,
+ .tilemapTop = 8,
+ .width = 19,
+ .height = 3,
+ .paletteNum = 13,
+ .baseBlock = 0x13,
+};
+
+static const u8 sUnknown_8471F50[5][5][11] =
+{
+ {
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ {
+ {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0},
+ {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0},
+ },
+ {
+ {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0},
+ {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0},
+ {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0},
+ },
+ {
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0},
+ {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0},
+ {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0},
+ {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0},
+ },
+ {
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2},
+ {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4},
+ {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6},
+ {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8},
+ },
+};
+
+static const u8 sUnknown_8472063[5][5][3] =
+{
+ {
+ {4, 5, 6},
+ },
+ {
+ {3, 4, 5},
+ {5, 6, 3},
+ },
+ {
+ {4, 5, 6},
+ {6, 7, 2},
+ {2, 3, 4},
+ },
+ {
+ {3, 4, 5},
+ {5, 6, 7},
+ {7, 8, 1},
+ {1, 2, 3},
+ },
+ {
+ {4, 5, 6},
+ {6, 7, 8},
+ {8, 9, 0},
+ {0, 1, 2},
+ {2, 3, 4},
+ },
+};
+
+static const u8 sUnknown_84720AE[5][5][3] =
+{
+ {
+ {1, 0, 1},
+ },
+ {
+ {1, 0, 1},
+ {0, 1, 0},
+ },
+ {
+ {2, 0, 1},
+ {0, 1, 2},
+ {1, 2, 0},
+ },
+ {
+ {3, 0, 1},
+ {0, 1, 2},
+ {1, 2, 3},
+ {2, 3, 0},
+ },
+ {
+ {4, 0, 1},
+ {0, 1, 2},
+ {1, 2, 3},
+ {2, 3, 4},
+ {3, 4, 0},
+ },
+};
+
+ALIGNED(4)
+static const u8 sUnknown_84720FC[5][11] =
+{
+ {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9},
+ {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9},
+ {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9},
+ {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9},
+ {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3},
+};
+
+static const u8 sUnknown_8472133[5][5] =
+{
+ {5},
+ {4, 6},
+ {3, 5, 7},
+ {2, 4, 6, 8},
+ {1, 3, 5, 6, 9},
+};
+
+static const u16 sDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal",
+ "graphics/link_games/dodrioberry_bg2.gbapal");
+static const u16 sDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal");
+static const u16 sDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal");
+static const u16 sDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal");
+static const u16 sDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal");
+static const u32 sDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz");
+static const u16 sDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal");
+static const u32 sDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz");
+static const u32 sDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz");
+static const u32 sDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz");
+static const u32 sDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz");
+static const u32 sDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz");
+static const u32 sDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz");
+static const u32 sDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz");
+static const u32 sDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz");
+
+#endif //GUARD_DATA_DODRIO_BERRY_PICKING_H
diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index 40cf4ccb5..294b73053 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -1,45 +1,21 @@
#include "global.h"
#include "gflib.h"
#include "dodrio_berry_picking.h"
+#include "event_data.h"
#include "item.h"
#include "link.h"
#include "link_rfu.h"
#include "m4a.h"
#include "minigame_countdown.h"
#include "random.h"
+#include "script.h"
#include "strings.h"
#include "task.h"
+#include "text_window.h"
#include "constants/songs.h"
#include "constants/fanfares.h"
#include "constants/items.h"
-
-struct DodrioSubstruct_0160
-{
- /*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE];
- /*0x3000 : 0x3160*/ bool32 finished;
- /*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004;
- /*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10];
- /*0x3014 : 0x3174*/ u8 ALIGNED(4) state;
- /*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018;
- /*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C;
- /*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020;
- /*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024;
- /*0x3024 : 0x3184*/ void (*unk3028)(void);
-}; // size = 0x302C
-
-struct DodrioStruct_2022CF4
-{
- u8 filler_00[0xc];
- u8 unkC[10];
- s16 unk16[10];
- u16 unk2A[10];
- u16 unk3E;
-}; // size = 0x40
-
-struct DodrioSubstruct_318C
-{
- bool8 isShiny;
-};
+#include "constants/species.h"
struct DodrioSubstruct_3308
{
@@ -102,12 +78,6 @@ struct DodrioStruct
}; // size = 0x3330
EWRAM_DATA struct DodrioStruct * gUnknown_203F3E0 = NULL;
-EWRAM_DATA u16 *gUnknown_203F3E4[5] = {NULL};
-EWRAM_DATA u16 *gUnknown_203F3F8[2] = {NULL};
-EWRAM_DATA u16 *gUnknown_203F400[11] = {NULL};
-EWRAM_DATA u16 *gUnknown_203F42C[4] = {NULL};
-EWRAM_DATA struct DodrioStruct_2022CF4 *gUnknown_203F43C = NULL;
-EWRAM_DATA struct DodrioSubstruct_0160 *gUnknown_203F440 = NULL;
IWRAM_DATA bool32 gUnknown_3002044;
@@ -171,294 +141,12 @@ void sub_815336C(void);
u32 sub_8153424(u8 mpId);
u32 sub_81534AC(void);
u32 Min(u32 x, u32 y);
-void sub_8153A9C(void);
-void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3);
-void sub_8153BC0(u8 a0);
-void sub_8153BF8(u8 a0);
-void sub_8153D08(u8 playerCount);
-void sub_8153D80(bool8 a0, u8 a1);
-void sub_8153DA8(u8 a0, u8 a1);
-void sub_8153FC8(u8 a0);
-void sub_8153DD8(void);
-void nullsub_97(struct Sprite *sprite);
-void sub_8153E28(void);
-void sub_8153ED8(void);
-bool32 sub_8153F1C(void);
-void sub_81540DC(bool8 a0);
-void sub_8154128(void);
-void sub_815417C(void);
-void sub_8154274(void);
-void sub_81542EC(u8 a0, u8 a1);
-void sub_8154370(u8 a0, u8 a1);
-void sub_8154398(u8 a0, u8 a1);
-void sub_81543E8(struct Sprite *sprite);
-void sub_8154438(void);
-void sub_81544F0(void);
-void sub_8154540(void);
-void sub_8154578(void);
-void sub_81545BC(bool8 a0);
-void sub_81546C0(void);
-void sub_8154730(void);
-void sub_8154968(struct DodrioSubstruct_0160 * unk0160);
-void sub_81549D4(u8 a0);
-void sub_8154A2C(void);
-void sub_8154B34(void);
-void sub_8154F80(void);
-void sub_81556E0(void);
-void sub_8155A78(void);
-void sub_8155B4C(void);
-void sub_8155C2C(void);
-void sub_8155C80(void);
-void unused_0(void);
-void nullsub_98(void);
-u8 sub_8155E8C(void);
+void Task_ShowDodrioBerryPickingRecords(u8 taskId);
+void sub_81538D0(u8 windowId);
// const rom data
-// Large chunk of data
-const struct BgTemplate sUnknown_847565C_Unref_Dupe[] =
-{
- {
- .bg = 0,
- .charBaseIndex = 0,
- .mapBaseIndex = 30,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 0,
- .baseTile = 0
- },
- {
- .bg = 1,
- .charBaseIndex = 2,
- .mapBaseIndex = 12,
- .screenSize = 1,
- .paletteMode = 0,
- .priority = 1,
- .baseTile = 0
- },
- {
- .bg = 2,
- .charBaseIndex = 2,
- .mapBaseIndex = 14,
- .screenSize = 1,
- .paletteMode = 0,
- .priority = 1,
- .baseTile = 0
- },
- {
- .bg = 3,
- .charBaseIndex = 3,
- .mapBaseIndex = 31,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 2,
- .baseTile = 0
- },
-};
-
-// Unknown unreferenced data, feel free to remove.
-const u32 sUnused_Unref_Dupe[] = {255, 0};
-
-const struct WindowTemplate sUnknown_8475674_Unref_Dupe[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 1,
- .width = 28,
- .height = 3,
- .paletteNum = 13,
- .baseBlock = 0x13,
- },
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 6,
- .width = 28,
- .height = 13,
- .paletteNum = 13,
- .baseBlock = 0x67,
- }
-};
-
-const struct WindowTemplate sUnknown_8475684_Unref_Dupe =
-{
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 6,
- .width = 28,
- .height = 7,
- .paletteNum = 13,
- .baseBlock = 0x67,
-};
-
-const struct WindowTemplate sUnknown_847568C_Unref_Dupe[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 8,
- .width = 19,
- .height = 3,
- .paletteNum = 13,
- .baseBlock = 0x13,
- },
- {
- .bg = 0,
- .tilemapLeft = 22,
- .tilemapTop = 7,
- .width = 6,
- .height = 4,
- .paletteNum = 13,
- .baseBlock = 0x4C,
- }
-};
-
-const struct WindowTemplate sUnknown_847569C_Unref_Dupe =
-{
- .bg = 0,
- .tilemapLeft = 4,
- .tilemapTop = 6,
- .width = 22,
- .height = 5,
- .paletteNum = 13,
- .baseBlock = 0x13,
-};
-
-const struct WindowTemplate sUnknown_84756A4_Unref_Dupe =
-{
- .bg = 0,
- .tilemapLeft = 5,
- .tilemapTop = 8,
- .width = 19,
- .height = 3,
- .paletteNum = 13,
- .baseBlock = 0x13,
-};
-
-const u8 sUnknown_8471F50[5][5][11] =
-{
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0},
- {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0},
- {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0},
- {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0},
- {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0},
- {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0},
- {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
- {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2},
- {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4},
- {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6},
- {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8},
- },
-};
-
-const u8 sUnknown_8472063[5][5][3] =
-{
- {
- {4, 5, 6},
- },
- {
- {3, 4, 5},
- {5, 6, 3},
- },
- {
- {4, 5, 6},
- {6, 7, 2},
- {2, 3, 4},
- },
- {
- {3, 4, 5},
- {5, 6, 7},
- {7, 8, 1},
- {1, 2, 3},
- },
- {
- {4, 5, 6},
- {6, 7, 8},
- {8, 9, 0},
- {0, 1, 2},
- {2, 3, 4},
- },
-};
-
-const u8 sUnknown_84720AE[5][5][3] =
-{
- {
- {1, 0, 1},
- },
- {
- {1, 0, 1},
- {0, 1, 0},
- },
- {
- {2, 0, 1},
- {0, 1, 2},
- {1, 2, 0},
- },
- {
- {3, 0, 1},
- {0, 1, 2},
- {1, 2, 3},
- {2, 3, 0},
- },
- {
- {4, 0, 1},
- {0, 1, 2},
- {1, 2, 3},
- {2, 3, 4},
- {3, 4, 0},
- },
-};
-
-ALIGNED(4)
-const u8 sUnknown_84720FC[5][11] =
-{
- {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9},
- {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9},
- {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9},
- {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9},
- {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3},
-};
-
-const u8 sUnknown_8472133[5][5] =
-{
- {5},
- {4, 6},
- {3, 5, 7},
- {2, 4, 6, 8},
- {1, 3, 5, 6, 9},
-};
-
-// Duplicate and unused gfx. Feel free to remove.
-const u32 sDuplicateGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.gbapal",
- "graphics/link_games/dodrioberry_bg2.gbapal",
- "graphics/link_games/dodrioberry_pkmn.gbapal",
- "graphics/link_games/dodrioberry_shiny.gbapal",
- "graphics/link_games/dodrioberry_status.gbapal",
- "graphics/link_games/dodrioberry_berrysprites.gbapal",
- "graphics/link_games/dodrioberry_berrysprites.4bpp.lz",
- "graphics/link_games/dodrioberry_platform.gbapal",
- "graphics/link_games/dodrioberry_bg1.4bpp.lz",
- "graphics/link_games/dodrioberry_bg2.4bpp.lz",
- "graphics/link_games/dodrioberry_status.4bpp.lz",
- "graphics/link_games/dodrioberry_platform.4bpp.lz",
- "graphics/link_games/dodrioberry_pkmn.4bpp.lz",
- "graphics/link_games/dodrioberry_bg1.bin.lz",
- "graphics/link_games/dodrioberry_bg2right.bin.lz",
- "graphics/link_games/dodrioberry_bg2left.bin.lz");
+#include "data/dodrio_berry_picking.h"
const u8 sUnknown_847553C[][3] =
{
@@ -2611,6 +2299,28 @@ u8 sub_81537AC(u8 id)
return gUnknown_203F3E0->unk34[id];
}
+void IsDodrioInParty(void)
+{
+ int i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES)
+ && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO)
+ {
+ gSpecialVar_Result = TRUE;
+ return;
+ }
+ }
+
+ gSpecialVar_Result = FALSE;
+}
+
+void ShowDodrioBerryPickingRecords(void)
+{
+ u8 taskId = CreateTask(Task_ShowDodrioBerryPickingRecords, 0);
+ Task_ShowDodrioBerryPickingRecords(taskId);
+}
+
// Data related to printing saved results.
const struct WindowTemplate sUnknown_84755E0 =
{
@@ -2630,6 +2340,67 @@ ALIGNED(4)
const u8 sUnknown_84755FC[][2] = {{24}, {40}, {56}};
const u8 sUnknown_8475602[][2] = {{24}, {40}, {70}};
+void Task_ShowDodrioBerryPickingRecords(u8 taskId)
+{
+ struct WindowTemplate window;
+ s32 i, width, widthCurr;
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ data[1] = AddWindow(&sUnknown_84755E0);
+ sub_81538D0(data[1]);
+ CopyWindowToVram(data[1], 3);
+ data[0]++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ data[0]++;
+ break;
+ case 2:
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ rbox_fill_rectangle(data[1]);
+ CopyWindowToVram(data[1], 1);
+ data[0]++;
+ }
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ RemoveWindow(data[1]);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+ break;
+ }
+}
+
+void sub_81538D0(u8 windowId)
+{
+ s32 i, x, numWidth;
+ s32 results[3];
+ u8 strbuf[20];
+ results[0] = gSaveBlock2Ptr->berryPick.berriesPicked;
+ results[1] = gSaveBlock2Ptr->berryPick.bestScore;
+ results[2] = gSaveBlock2Ptr->berryPick.berriesPickedInRow;
+
+ TextWindow_SetStdFrame0_WithPal(windowId, 0x21D, 0xD0);
+ DrawTextBorderOuter(windowId, 0x21D, 0xD);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ AddTextPrinterParameterized(windowId, 2, sUnknown_84755E8[0], 1, 1, TEXT_SPEED_FF, NULL);
+ for (i = 0; i < 3; i++)
+ {
+ ConvertIntToDecimalStringN(strbuf, results[i], STR_CONV_MODE_LEFT_ALIGN, sUnknown_84755F8[i]);
+ numWidth = GetStringWidth(2, strbuf, -1);
+ AddTextPrinterParameterized(windowId, 2, sUnknown_84755E8[i + 1], 1, sUnknown_84755FC[i][0], TEXT_SPEED_FF, NULL);
+ x = 224 - numWidth;
+ AddTextPrinterParameterized(windowId, 2, strbuf, x, sUnknown_8475602[i][0], TEXT_SPEED_FF, NULL);
+ }
+ PutWindowTilemap(windowId);
+}
+
// Debug functions?
const u16 sUnknown_8475608[][4] =
{
@@ -2644,7 +2415,7 @@ const u8 sUnknown_8475630[] = _("あいうえおかき");
const u8 sUnknown_8475638[] = _("ABCDEFG");
const u8 sUnknown_8475640[] = _("0123456");
-const u8 *const sUnknown_8475648[] =
+const u8 *const sPlaceholderPlayerNames[] =
{
sUnknown_8475630,
sUnknown_8475630,
@@ -2653,585 +2424,22 @@ const u8 *const sUnknown_8475648[] =
sUnknown_8475640
};
-// Large chunk of data
-const struct BgTemplate sUnknown_847565C[] =
-{
- {
- .bg = 0,
- .charBaseIndex = 0,
- .mapBaseIndex = 30,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 0,
- .baseTile = 0
- },
- {
- .bg = 1,
- .charBaseIndex = 2,
- .mapBaseIndex = 12,
- .screenSize = 1,
- .paletteMode = 0,
- .priority = 1,
- .baseTile = 0
- },
- {
- .bg = 2,
- .charBaseIndex = 2,
- .mapBaseIndex = 14,
- .screenSize = 1,
- .paletteMode = 0,
- .priority = 1,
- .baseTile = 0
- },
- {
- .bg = 3,
- .charBaseIndex = 3,
- .mapBaseIndex = 31,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 2,
- .baseTile = 0
- },
-};
-
-// Unknown unreferenced data, feel free to remove.
-const u32 sUnused[] = {255, 0};
-
-const struct WindowTemplate sUnknown_8475674[] =
+void sub_81539EC(void)
{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 1,
- .width = 28,
- .height = 3,
- .paletteNum = 13,
- .baseBlock = 0x13,
- },
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 6,
- .width = 28,
- .height = 13,
- .paletteNum = 13,
- .baseBlock = 0x67,
- }
-};
-
-const struct WindowTemplate sUnknown_8475684 =
-{
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 6,
- .width = 28,
- .height = 7,
- .paletteNum = 13,
- .baseBlock = 0x67,
-};
-
-const struct WindowTemplate sUnknown_847568C[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 8,
- .width = 19,
- .height = 3,
- .paletteNum = 13,
- .baseBlock = 0x13,
- },
- {
- .bg = 0,
- .tilemapLeft = 22,
- .tilemapTop = 7,
- .width = 6,
- .height = 4,
- .paletteNum = 13,
- .baseBlock = 0x4C,
- }
-};
-
-const struct WindowTemplate sUnknown_847569C =
-{
- .bg = 0,
- .tilemapLeft = 4,
- .tilemapTop = 6,
- .width = 22,
- .height = 5,
- .paletteNum = 13,
- .baseBlock = 0x13,
-};
-
-const struct WindowTemplate sUnknown_84756A4 =
-{
- .bg = 0,
- .tilemapLeft = 5,
- .tilemapTop = 8,
- .width = 19,
- .height = 3,
- .paletteNum = 13,
- .baseBlock = 0x13,
-};
+ gUnknown_203F3E0->unk24 = GetLinkPlayerCount();
+}
-// This is an unused copy of the tables from the top of the file. Feel free to remove.
-const u8 sUnknown_8471F50_UnrefDup[5][5][11] =
+void sub_8153A04(void)
{
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0},
- {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0},
- {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0},
- {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0},
- {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0},
- {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0},
- {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0},
- },
- {
- {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
- {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2},
- {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4},
- {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6},
- {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8},
- },
-};
+ u8 i, playerId;
-const u8 sUnknown_8472063_UnrefDup[5][5][3] =
-{
- {
- {4, 5, 6},
- },
- {
- {3, 4, 5},
- {5, 6, 3},
- },
- {
- {4, 5, 6},
- {6, 7, 2},
- {2, 3, 4},
- },
- {
- {3, 4, 5},
- {5, 6, 7},
- {7, 8, 1},
- {1, 2, 3},
- },
- {
- {4, 5, 6},
- {6, 7, 8},
- {8, 9, 0},
- {0, 1, 2},
- {2, 3, 4},
- },
-};
+ for (playerId = gUnknown_203F3E0->unk24; playerId < NELEMS(sPlaceholderPlayerNames); playerId++)
+ StringCopy(gLinkPlayers[playerId].name, sPlaceholderPlayerNames[playerId]);
-const u8 sUnknown_84720AE_UnrefDup[5][5][3] =
-{
- {
- {1, 0, 1},
- },
- {
- {1, 0, 1},
- {0, 1, 0},
- },
- {
- {2, 0, 1},
- {0, 1, 2},
- {1, 2, 0},
- },
- {
- {3, 0, 1},
- {0, 1, 2},
- {1, 2, 3},
- {2, 3, 0},
- },
+ gUnknown_203F3E0->unk24 = 5;
+ for (i = 0; i < 4; i++)
{
- {4, 0, 1},
- {0, 1, 2},
- {1, 2, 3},
- {2, 3, 4},
- {3, 4, 0},
- },
-};
-
-ALIGNED(4)
-const u8 sUnknown_84720FC_UnrefDup[5][11] =
-{
- {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9},
- {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9},
- {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9},
- {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9},
- {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3},
-};
-
-const u8 sUnknown_8472133_UnrefDup[5][5] =
-{
- {5},
- {4, 6},
- {3, 5, 7},
- {2, 4, 6, 8},
- {1, 3, 5, 6, 9},
-};
-
-const u16 sDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal",
- "graphics/link_games/dodrioberry_bg2.gbapal");
-const u16 sDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal");
-const u16 sDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal");
-const u16 sDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal");
-const u16 sDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal");
-const u32 sDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz");
-const u16 sDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal");
-const u32 sDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz");
-const u32 sDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz");
-const u32 sDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz");
-const u32 sDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz");
-const u32 sDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz");
-const u32 sDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz");
-const u32 sDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz");
-const u32 sDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz");
-
-const struct OamData sOamData_8478C98 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = FALSE,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(64x64),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(64x64),
- .tileNum = 0,
- .priority = 2,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-const struct OamData sOamData_8478CA0 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = FALSE,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(16x16),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(16x16),
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-const struct OamData sOamData_8478CA8 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = FALSE,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(16x16),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(16x16),
- .tileNum = 0,
- .priority = 2,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-const struct OamData sOamData_8478CB0 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = FALSE,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(64x32),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(64x32),
- .tileNum = 0,
- .priority = 3,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-const union AnimCmd sSpriteAnim_8478CB8[] =
-{
- ANIMCMD_FRAME(0, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478CC0[] =
-{
- ANIMCMD_FRAME(64, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478CC8[] =
-{
- ANIMCMD_FRAME(128, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478CD0[] =
-{
- ANIMCMD_FRAME(192, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478CD8[] =
-{
- ANIMCMD_FRAME(256, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd *const sSpriteAnimTable_8478CE0[] =
-{
- sSpriteAnim_8478CB8,
- sSpriteAnim_8478CC0,
- sSpriteAnim_8478CC8,
- sSpriteAnim_8478CD0,
- sSpriteAnim_8478CD8
-};
-
-const union AnimCmd sSpriteAnim_8478CF4[] =
-{
- ANIMCMD_FRAME(0, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478CFC[] =
-{
- ANIMCMD_FRAME(4, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D04[] =
-{
- ANIMCMD_FRAME(8, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd *const sSpriteAnimTable_8478D0C[] =
-{
- sSpriteAnim_8478CF4,
- sSpriteAnim_8478CFC,
- sSpriteAnim_8478D04
-};
-
-const union AnimCmd sSpriteAnim_8478D18[] =
-{
- ANIMCMD_FRAME(0, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D20[] =
-{
- ANIMCMD_FRAME(4, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D28[] =
-{
- ANIMCMD_FRAME(8, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D30[] =
-{
- ANIMCMD_FRAME(12, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D38[] =
-{
- ANIMCMD_FRAME(16, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D40[] =
-{
- ANIMCMD_FRAME(20, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D48[] =
-{
- ANIMCMD_FRAME(24, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D50[] =
-{
- ANIMCMD_FRAME(28, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd sSpriteAnim_8478D58[] =
-{
- ANIMCMD_FRAME(32, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd *const sSpriteAnimTable_8478D60[] =
-{
- sSpriteAnim_8478D18,
- sSpriteAnim_8478D20,
- sSpriteAnim_8478D28,
- sSpriteAnim_8478D30,
- sSpriteAnim_8478D38,
- sSpriteAnim_8478D40,
- sSpriteAnim_8478D48,
- sSpriteAnim_8478D50,
- sSpriteAnim_8478D58
-};
-
-const union AnimCmd sSpriteAnim_8478D84[] =
-{
- ANIMCMD_FRAME(0, 20),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd *const sSpriteAnimTable_8478D8C[] =
-{
- sSpriteAnim_8478D84
-};
-
-// These are declared inside pokeemerald's sub_8153A9C
-const struct SpritePalette gUnknown_8478D90 = {sDodrioBerryPkmnPal, 0};
-const struct SpritePalette gUnknown_8478D98 = {sDodrioBerryShinyPal, 1};
-
-// These are declared inside pokeemerald's sub_8153E28
-const struct SpritePalette gUnknown_8478DA0 = {sDodrioBerryStatusPal, 2};
-const struct SpriteTemplate gUnknown_8478DA8 =
- {
- .tileTag = 1,
- .paletteTag = 2,
- .oam = &sOamData_8478CA0,
- .anims = sSpriteAnimTable_8478D0C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = nullsub_97,
- };
-
-// Unknown unused data, feel free to remove.
-const u8 sUnused2[] = {0xCD, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xF4, 0x0, 0x0};
-
-// This is declared inside pokeemerald's sub_8154128
-const struct SpritePalette gUnknown_8478DCC = {sDodrioBerrySpritesPal, 3};
-
-const s16 sUnknown_8478DD4[] = {88, 128, 168, 208};
-
-// These are declared inside pokeemerald's sub_815417C
-const struct SpriteTemplate gUnknown_8478DDC =
- {
- .tileTag = 2,
- .paletteTag = 3,
- .oam = &sOamData_8478CA8,
- .anims = sSpriteAnimTable_8478D60,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
- };
-const struct SpriteTemplate gUnknown_8478DF4 =
- {
- .tileTag = 2,
- .paletteTag = 3,
- .oam = &sOamData_8478CA0,
- .anims = sSpriteAnimTable_8478D60,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
- };
-
-// This is declared inside pokeemerald's sub_8028CF4
-const u8 gUnknown_8478E0C[] = {30, 20};
-
-const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}};
-
-// These are declared inside pokeemerald's sub_8154438
-const struct SpritePalette gUnknown_8478E18 = {sDodrioBerryPlatformPal, 6};
-const struct SpriteTemplate gUnknown_8478E20 =
- {
- .tileTag = 5,
- .paletteTag = 6,
- .oam = &sOamData_8478CB0,
- .anims = sSpriteAnimTable_8478D8C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81543E8,
- };
-
-struct WinCoords
-{
- u8 left;
- u8 top;
-};
-
-const u8 sUnknown_8478E38[][3] =
-{
- {1, 2, 3},
- {1, 4, 5},
- {1, 8, 9},
- {1, 6, 7},
-};
-
-const struct WinCoords sUnknown_8478E44[] = {{12, 6}};
-const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}};
-const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}};
-const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}};
-const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}};
-
-const struct WinCoords *const sUnknown_8478E80[] =
-{
- sUnknown_8478E44,
- sUnknown_8478E48,
- sUnknown_8478E50,
- sUnknown_8478E5C,
- sUnknown_8478E6C,
-};
-
-const u8 *const sUnknown_8478E94[] =
-{
- gText_1Colon,
- gText_2Colon,
- gText_3Colon,
- gText_4Colon,
- gText_5Colon,
-};
-
-const u16 sUnknown_8478EA8[] = {92, 132, 172, 212};
-const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90};
-const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76};
-
-struct
-{
- u8 id;
- void (*func)(void);
-} const gUnknown_8478EC4[] =
-{
- {0, sub_8154A2C},
- {1, sub_8154B34},
- {2, sub_8154F80},
- {3, sub_81556E0},
- {4, sub_8155A78},
- {5, sub_8155B4C},
- {6, sub_8155C2C},
- {7, sub_8155C80},
- {8, unused_0},
- {9, nullsub_98},
-};
-
-// This is declared inside pokeemerald's sub_80296A8
-const u8 gUnknown_8478F14[5] = {0, 1, 2, 3, 4};
+ for (playerId = 0; playerId < gUnknown_203F3E0->unk24; playerId++)
+ gUnknown_203F3E0->unk4A[playerId][i] = sUnknown_8475608[playerId][i];
+ }
+}
diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c
index 4260c6f2f..1589b13b8 100644
--- a/src/dodrio_berry_picking_2.c
+++ b/src/dodrio_berry_picking_2.c
@@ -1,23 +1,1040 @@
#include "global.h"
+#include "gflib.h"
+#include "dodrio_berry_picking.h"
#include "link.h"
-#include "link_rfu.h"
+#include "strings.h"
+#include "task.h"
+#include "text_window.h"
+#include "text_window_graphics.h"
+#include "constants/songs.h"
-void sub_815A5BC(s32 a0)
+// Temporary stopgap to export duplicate data
+// included from data/dodrio_berry_picking.h
+asm(".global sDodrioBerryStatusGfx\n"
+ "\t.global sDodrioBerrySpritesGfx\n"
+ "\t.global sDodrioBerryPlatformGfx\n"
+ "\t.global sDodrioBerryBgTilemap1\n"
+ "\t.global sDodrioBerryBgTilemap2Left\n"
+ "\t.global sDodrioBerryBgTilemap2Right\n"
+ "\t.global sUnknown_8475674\n"
+ "\t.global sUnknown_8475684\n"
+ "\t.global sUnknown_847568C\n"
+ "\t.global sUnknown_84756A4\n"
+ "\t.global sUnknown_847569C\n"
+ "\t.global sUnknown_847565C\n"
+ "\t.global sDodrioBerryBgPal1\n"
+ "\t.global sDodrioBerryBgGfx1\n"
+ "\t.global sDodrioBerryBgGfx2");
+
+struct DodrioStruct_2022CF4
+{
+ u8 filler_00[0xc];
+ u8 unkC[10];
+ s16 unk16[10];
+ u16 unk2A[10];
+ u16 unk3E;
+}; // size = 0x40
+
+EWRAM_DATA u16 *gUnknown_203F3E4[5] = {NULL};
+EWRAM_DATA u16 *gUnknown_203F3F8[2] = {NULL};
+EWRAM_DATA u16 *gUnknown_203F400[11] = {NULL};
+EWRAM_DATA u16 *gUnknown_203F42C[4] = {NULL};
+EWRAM_DATA struct DodrioStruct_2022CF4 *gUnknown_203F43C = NULL;
+EWRAM_DATA struct DodrioSubstruct_0160 *gUnknown_203F440 = NULL;
+
+void sub_8153B9C(struct Sprite * sprite);
+u32 sub_8153C30(struct Sprite * sprite);
+u32 sub_8153CA0(struct Sprite * sprite);
+void sub_8153D48(bool8 a0, u8 a1);
+void nullsub_97(struct Sprite *sprite);
+void sub_8154324(bool8 a0);
+void sub_81543E8(struct Sprite *sprite);
+s16 sub_8154608(u8 a0, u8 a1);
+void sub_8154A08(u8 taskId);
+void sub_8154A2C(void);
+void sub_8154B34(void);
+void sub_8154F80(void);
+void sub_81556E0(void);
+void sub_8155A78(void);
+void sub_8155B4C(void);
+void sub_8155C2C(void);
+void sub_8155C80(void);
+void unused_0(void);
+void nullsub_98(void);
+void sub_8155E24(MainCallback cb);
+MainCallback sub_8155E54(void);
+void sub_8155EA0(void);
+bool32 sub_8155FE0(void);
+
+#include "data/dodrio_berry_picking.h"
+
+const struct OamData sOamData_8478C98 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+const struct OamData sOamData_8478CA0 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+const struct OamData sOamData_8478CA8 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+const struct OamData sOamData_8478CB0 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x32),
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+const union AnimCmd sSpriteAnim_8478CB8[] =
+{
+ ANIMCMD_FRAME(0, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478CC0[] =
+{
+ ANIMCMD_FRAME(64, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478CC8[] =
+{
+ ANIMCMD_FRAME(128, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478CD0[] =
+{
+ ANIMCMD_FRAME(192, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478CD8[] =
+{
+ ANIMCMD_FRAME(256, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const sSpriteAnimTable_8478CE0[] =
+{
+ sSpriteAnim_8478CB8,
+ sSpriteAnim_8478CC0,
+ sSpriteAnim_8478CC8,
+ sSpriteAnim_8478CD0,
+ sSpriteAnim_8478CD8
+};
+
+const union AnimCmd sSpriteAnim_8478CF4[] =
+{
+ ANIMCMD_FRAME(0, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478CFC[] =
+{
+ ANIMCMD_FRAME(4, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D04[] =
+{
+ ANIMCMD_FRAME(8, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const sSpriteAnimTable_8478D0C[] =
+{
+ sSpriteAnim_8478CF4,
+ sSpriteAnim_8478CFC,
+ sSpriteAnim_8478D04
+};
+
+const union AnimCmd sSpriteAnim_8478D18[] =
+{
+ ANIMCMD_FRAME(0, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D20[] =
+{
+ ANIMCMD_FRAME(4, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D28[] =
+{
+ ANIMCMD_FRAME(8, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D30[] =
+{
+ ANIMCMD_FRAME(12, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D38[] =
+{
+ ANIMCMD_FRAME(16, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D40[] =
{
- struct Padded_U8 data[2];
- data[0].value = 1;
- data[1].value = a0;
- RfuPrepareSend0x2f00(data);
+ ANIMCMD_FRAME(20, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D48[] =
+{
+ ANIMCMD_FRAME(24, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D50[] =
+{
+ ANIMCMD_FRAME(28, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sSpriteAnim_8478D58[] =
+{
+ ANIMCMD_FRAME(32, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const sSpriteAnimTable_8478D60[] =
+{
+ sSpriteAnim_8478D18,
+ sSpriteAnim_8478D20,
+ sSpriteAnim_8478D28,
+ sSpriteAnim_8478D30,
+ sSpriteAnim_8478D38,
+ sSpriteAnim_8478D40,
+ sSpriteAnim_8478D48,
+ sSpriteAnim_8478D50,
+ sSpriteAnim_8478D58
+};
+
+const union AnimCmd sSpriteAnim_8478D84[] =
+{
+ ANIMCMD_FRAME(0, 20),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const sSpriteAnimTable_8478D8C[] =
+{
+ sSpriteAnim_8478D84
+};
+
+// Code
+
+void sub_8153A9C(void)
+{
+ void *ptr = AllocZeroed(0x3000);
+ struct SpritePalette pal1 = {sDodrioBerryPkmnPal, 0};
+ struct SpritePalette pal2 = {sDodrioBerryShinyPal, 1};
+
+ LZ77UnCompWram(sDodrioBerryPkmnGfx, ptr);
+ // This check should be one line up.
+ if (ptr != NULL)
+ {
+ struct SpriteSheet sheet = {ptr, 0x3000, 0};
+ LoadSpriteSheet(&sheet);
+ Free(ptr);
+ }
+ LoadSpritePalette(&pal1);
+ LoadSpritePalette(&pal2);
+}
+
+void sub_8153AFC(struct DodrioSubstruct_318C *arg0, u8 arg1, u8 id, u8 arg3)
+{
+ struct SpriteTemplate sprTemplate =
+ {
+ .tileTag = 0,
+ .paletteTag = arg0->isShiny,
+ .oam = &sOamData_8478C98,
+ .anims = sSpriteAnimTable_8478CE0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8153B9C,
+ };
+
+ gUnknown_203F3E4[id] = AllocZeroed(4);
+ *gUnknown_203F3E4[id] = CreateSprite(&sprTemplate, sub_8154608(arg1, arg3), 136, 3);
+ sub_8153D48(TRUE, id);
+}
+
+void sub_8153B9C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ break;
+ case 1:
+ sub_8153C30(sprite);
+ break;
+ case 2:
+ sub_8153CA0(sprite);
+ break;
+ }
+}
+
+void sub_8153BC0(u8 unused)
+{
+ struct Sprite *sprite = &gSprites[*gUnknown_203F3E4[GetMultiplayerId()]];
+ sprite->data[0] = 1;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+}
+
+void sub_8153BF8(u8 unused)
+{
+ struct Sprite *sprite = &gSprites[*gUnknown_203F3E4[GetMultiplayerId()]];
+ sprite->data[0] = 2;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
}
-u8 sub_815A5E8(s32 a0)
+u32 sub_8153C30(struct Sprite *sprite)
{
- u8 * r1;
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
- return 0;
- r1 = (u8 *)&gRecvCmds[a0][1];
- if (r1[0] == 1)
- return r1[4];
+ s8 var;
+ u8 mod = (++sprite->data[1] / 2) % 4;
+
+ if (sprite->data[1] >= 3)
+ {
+ switch (mod)
+ {
+ default:
+ var = 1;
+ break;
+ case 1:
+ case 2:
+ var = -1;
+ break;
+ }
+
+ sprite->pos1.x += var;
+ if (++sprite->data[1] >= 40)
+ {
+ sprite->data[0] = 0;
+ sprite->pos1.x = sub_8154608(0, sub_81533B4());
+ }
+ }
+
+ return 0;
+}
+
+u32 sub_8153CA0(struct Sprite *sprite)
+{
+ u8 mod = (++sprite->data[1] / 13) % 4;
+
+ if (sprite->data[1] % 13 == 0 && mod != 0)
+ PlaySE(SE_W204);
+ if (sprite->data[1] >= 104)
+ {
+ sprite->data[0] = 0;
+ mod = 0;
+ }
+ sub_8153DA8(GetMultiplayerId(), mod);
return 0;
}
+void sub_8153D08(u8 count)
+{
+ u8 i;
+ for (i = 0; i < count; i++)
+ {
+ struct Sprite *sprite = &gSprites[*gUnknown_203F3E4[i]];
+ if (sprite != NULL)
+ DestroySpriteAndFreeResources(sprite);
+ // Memory should be freed here but is not.
+ }
+}
+
+void sub_8153D48(bool8 invisible, u8 id)
+{
+ gSprites[*gUnknown_203F3E4[id]].invisible = invisible;
+}
+
+void sub_8153D80(bool8 invisible, u8 count)
+{
+ u8 i;
+ for (i = 0; i < count; i++)
+ sub_8153D48(invisible, i);
+}
+
+void sub_8153DA8(u8 id, u8 frameNum)
+{
+ StartSpriteAnim(&gSprites[*gUnknown_203F3E4[id]], frameNum);
+}
+
+void nullsub_97(struct Sprite * sprite)
+{
+
+}
+
+void sub_8153DD8(void)
+{
+ u8 i;
+ for (i = 0; i < 10; i++)
+ {
+ struct Sprite *sprite = &gSprites[gUnknown_203F43C->unk2A[i]];
+ sprite->pos1.x = (i * 16) + 48;
+ sprite->pos1.y = -8 - (i * 8);
+ gUnknown_203F43C->unkC[i] = 0;
+ }
+}
+
+void sub_8153E28(void)
+{
+ u8 i;
+ void *ptr = AllocZeroed(0x180);
+ struct SpritePalette spPal = {sDodrioBerryStatusPal, 2};
+
+ LZ77UnCompWram(sDodrioBerryStatusGfx, ptr);
+ // This check should be one line up.
+ if (ptr != NULL)
+ {
+ struct SpriteSheet spSheet = {ptr, 0x180, 1};
+ struct SpriteTemplate spTemplate =
+ {
+ .tileTag = 1,
+ .paletteTag = 2,
+ .oam = &sOamData_8478CA0,
+ .anims = sSpriteAnimTable_8478D0C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = nullsub_97,
+ };
+
+ gUnknown_203F43C = AllocZeroed(sizeof(*gUnknown_203F43C));
+ LoadSpriteSheet(&spSheet);
+ LoadSpritePalette(&spPal);
+ for (i = 0; i < 10; i++)
+ gUnknown_203F43C->unk2A[i] = CreateSprite(&spTemplate, (i * 16) + 48, -8 - (i * 8), 0);
+ }
+
+ Free(ptr);
+}
+
+void sub_8153ED8(void)
+{
+ u8 i;
+ for (i = 0; i < 10; i++)
+ {
+ struct Sprite *sprite = &gSprites[gUnknown_203F43C->unk2A[i]];
+ if (sprite != NULL)
+ DestroySpriteAndFreeResources(sprite);
+ }
+ FREE_AND_SET_NULL(gUnknown_203F43C);
+}
+
+bool32 sub_8153F1C(void)
+{
+ u8 i;
+ bool32 r3 = FALSE;
+ for (i = 0; i < 10; i++)
+ {
+ struct Sprite *sprite = &gSprites[gUnknown_203F43C->unk2A[i]];
+ gUnknown_203F43C->unk16[i] = 2;
+ if (gUnknown_203F43C->unkC[i] != 0 && sprite->pos1.y == 8)
+ continue;
+ r3 = TRUE;
+ if (sprite->pos1.y == 8)
+ {
+ if (gUnknown_203F43C->unkC[i] != 0)
+ continue;
+ gUnknown_203F43C->unkC[i] = 1;
+ gUnknown_203F43C->unk16[i] = -16;
+ PlaySE(SE_TK_KASYA);
+ }
+ sprite->pos1.y += gUnknown_203F43C->unk16[i];
+ }
+
+ if (r3)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_8153FC8(u8 arg0)
+{
+ u8 i;
+
+ if (arg0 > 10)
+ {
+ for (i = 0; i < 10; i++)
+ StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 1);
+ }
+ else
+ {
+ for (i = 0; i < 10 - arg0; i++)
+ {
+ if (arg0 > 6)
+ {
+ gUnknown_203F43C->unk3E += arg0 - 6;
+ if (gUnknown_203F43C->unk3E > 30)
+ gUnknown_203F43C->unk3E = 0;
+ else if (gUnknown_203F43C->unk3E > 10)
+ StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 2);
+ else
+ StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 0);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 0);
+ }
+ }
+ for (; i < 10; i++)
+ StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 1);
+ }
+}
+
+void sub_81540DC(bool8 invisible)
+{
+ u8 i;
+ for (i = 0; i < 10; i++)
+ gSprites[gUnknown_203F43C->unk2A[i]].invisible = invisible;
+}
+
+// Unknown unused data, feel free to remove.
+const u8 sUnused2[] = {
+ SE_W204,
+ SE_TOY_C,
+ SE_TOY_D,
+ SE_TOY_E,
+ SE_TOY_F,
+ SE_TOY_G,
+ SE_TOY_A,
+ SE_TOY_B,
+ SE_TOY_C1,
+ SE_CARD3
+};
+
+void sub_8154128(void)
+{
+ void *ptr = AllocZeroed(0x480);
+ struct SpritePalette sprPal = {sDodrioBerrySpritesPal, 3};
+
+ LZ77UnCompWram(sDodrioBerrySpritesGfx, ptr);
+ if (ptr != NULL)
+ {
+ struct SpriteSheet sprSheet = {ptr, 0x480, 2};
+ LoadSpriteSheet(&sprSheet);
+ }
+
+ LoadSpritePalette(&sprPal);
+ Free(ptr);
+}
+
+const s16 sUnknown_8478DD4[] = {88, 128, 168, 208};
+
+void sub_815417C(void)
+{
+ u8 i;
+ s16 x;
+
+ struct SpriteTemplate sprTemplate1 =
+ {
+ .tileTag = 2,
+ .paletteTag = 3,
+ .oam = &sOamData_8478CA8,
+ .anims = sSpriteAnimTable_8478D60,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ };
+ struct SpriteTemplate sprTemplate2 =
+ {
+ .tileTag = 2,
+ .paletteTag = 3,
+ .oam = &sOamData_8478CA0,
+ .anims = sSpriteAnimTable_8478D60,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ };
+
+ for (i = 0; i < 11; i++)
+ {
+ gUnknown_203F400[i] = AllocZeroed(4);
+ x = i * 16;
+ *gUnknown_203F400[i] = CreateSprite(&sprTemplate1, x + (i * 8), 8, 1);
+ sub_81542EC(i, TRUE);
+ }
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_203F42C[i] = AllocZeroed(4);
+ if (i == 3)
+ *gUnknown_203F42C[i] = CreateSprite(&sprTemplate2, sUnknown_8478DD4[i], 57, 0);
+ else
+ *gUnknown_203F42C[i] = CreateSprite(&sprTemplate2, sUnknown_8478DD4[i], 60, 0);
+ StartSpriteAnim(&gSprites[*gUnknown_203F42C[i]], i);
+ }
+
+ sub_8154324(TRUE);
+}
+
+void sub_8154274(void)
+{
+ struct Sprite *sprite;
+ u8 i;
+
+ for (i = 0; i < 11; i++)
+ {
+ sprite = &gSprites[*gUnknown_203F400[i]];
+ if (sprite != NULL)
+ DestroySprite(sprite);
+ FREE_AND_SET_NULL(gUnknown_203F400[i]);
+ }
+ for (i = 0; i < 4; i++)
+ {
+ sprite = &gSprites[*gUnknown_203F42C[i]];
+ if (sprite != NULL)
+ DestroySprite(sprite);
+ FREE_AND_SET_NULL(gUnknown_203F42C[i]);
+ }
+}
+
+void sub_81542EC(u8 id, bool8 invisible)
+{
+ gSprites[*gUnknown_203F400[id]].invisible = invisible;
+}
+
+void sub_8154324(bool8 invisible)
+{
+ u8 i;
+ for (i = 0; i < 4; i++)
+ gSprites[*gUnknown_203F42C[i]].invisible = invisible;
+}
+
+void sub_8154370(u8 id, u8 y)
+{
+ gSprites[*gUnknown_203F400[id]].pos1.y = y * 8;
+}
+
+void sub_8154398(u16 id, u8 frameNum)
+{
+ StartSpriteAnim(&gSprites[*gUnknown_203F400[id]], frameNum);
+}
+
+// Unused
+void sub_81543C4(u8 spriteId)
+{
+ gSprites[spriteId].pos1.x = 20 * spriteId + 50;
+ gSprites[spriteId].pos1.y = 50;
+}
+
+// Gamefreak made a mistake there and goes out of bounds for the data array as it holds 8 elements
+// in turn overwriting sprite's subpriority and subsprites fields.
+#if defined(NONMATCHING)
+#define sKeepPosX data[1]
+#else
+#define sKeepPosX data[10]
+#endif // NONMATCHING
+
+void sub_81543E8(struct Sprite *sprite)
+{
+ u8 i;
+ static const u8 array[] = {30, 20};
+
+ if (sprite->sKeepPosX != TRUE)
+ {
+ for (i = 0; i < 2; i++)
+ {
+ if (++gUnknown_203F3F8[i][1] > array[i])
+ {
+ sprite->pos1.x--;
+ gUnknown_203F3F8[i][1] = 0;
+ }
+ }
+ }
+}
+
+const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}};
+
+void sub_8154438(void)
+{
+ u8 i;
+ void *ptr = AllocZeroed(0x400);
+ struct SpritePalette sprPal = {sDodrioBerryPlatformPal, 6};
+
+ LZ77UnCompWram(sDodrioBerryPlatformGfx, ptr);
+ if (ptr != NULL)
+ {
+ struct SpriteSheet sprSheet = {ptr, 0x400, 5};
+ struct SpriteTemplate sprTemplate =
+ {
+ .tileTag = 5,
+ .paletteTag = 6,
+ .oam = &sOamData_8478CB0,
+ .anims = sSpriteAnimTable_8478D8C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81543E8,
+ };
+
+ LoadSpriteSheet(&sprSheet);
+ LoadSpritePalette(&sprPal);
+ for (i = 0; i < 2; i++)
+ {
+ gUnknown_203F3F8[i] = AllocZeroed(4);
+ *gUnknown_203F3F8[i] = CreateSprite(&sprTemplate, gUnknown_8478E0E[i][0], gUnknown_8478E0E[i][1], 4);
+ }
+ }
+
+ Free(ptr);
+}
+
+void sub_81544F0(void)
+{
+ u8 i;
+ for (i = 0; i < 2; i++)
+ {
+ struct Sprite *sprite = &gSprites[*gUnknown_203F3F8[i]];
+ sprite->sKeepPosX = TRUE;
+ sprite->pos1.x = gUnknown_8478E0E[i][0];
+ sprite->pos1.y = gUnknown_8478E0E[i][1];
+ }
+}
+
+void sub_8154540(void)
+{
+ u8 i;
+ for (i = 0; i < 2; i++)
+ {
+ struct Sprite *sprite = &gSprites[*gUnknown_203F3F8[i]];
+ sprite->sKeepPosX = FALSE;
+ }
+}
+
+void sub_8154578(void)
+{
+ u8 i;
+ for (i = 0; i < 2; i++)
+ {
+ struct Sprite *sprite = &gSprites[*gUnknown_203F3F8[i]];
+ if (sprite)
+ DestroySprite(sprite);
+ FREE_AND_SET_NULL(gUnknown_203F3F8[i]);
+ }
+}
+
+void sub_81545BC(bool8 invisible)
+{
+ u8 i;
+ for (i = 0; i < 2; i++)
+ gSprites[*gUnknown_203F3F8[i]].invisible = invisible;
+}
+
+#undef sKeepPosX
+
+s16 sub_8154608(u8 arg0, u8 arg1)
+{
+ s16 x = 0;
+ switch (arg1)
+ {
+ case 1:
+ x = 15;
+ break;
+ case 2:
+ switch (arg0)
+ {
+ case 0: x = 12; break;
+ case 1: x = 18; break;
+ }
+ break;
+ case 3:
+ switch (arg0)
+ {
+ case 0: x = 15; break;
+ case 1: x = 21; break;
+ case 2: x = 9; break;
+ }
+ break;
+ case 4:
+ switch (arg0)
+ {
+ case 0: x = 12; break;
+ case 1: x = 18; break;
+ case 2: x = 24; break;
+ case 3: x = 6; break;
+ }
+ break;
+ case 5:
+ switch (arg0)
+ {
+ case 0: x = 15; break;
+ case 1: x = 21; break;
+ case 2: x = 27; break;
+ case 3: x = 3; break;
+ case 4: x = 9; break;
+ }
+ break;
+ }
+
+ return x * 8;
+}
+
+void sub_81546C0(void)
+{
+ u8 i;
+ for (i = 0; i < 11; i++)
+ {
+ sub_81542EC(i, TRUE);
+ sub_8154370(i, 1);
+ }
+ sub_81540DC(FALSE);
+}
+
+void sub_81546EC(u8 frameId)
+{
+ LoadBgTiles(0, GetUserFrameGraphicsInfo(frameId)->tiles, 0x120, 1);
+ LoadPalette(GetUserFrameGraphicsInfo(frameId)->palette, 0xA0, 0x20);
+}
+
+void sub_8154720(void)
+{
+ TextWindow_SetStdFrame0_WithPal(0, 0xA, 0xB0);
+}
+
+void sub_8154730(void)
+{
+ gUnknown_203F440->finished = FALSE;
+ gUnknown_203F440->state = 0;
+ gUnknown_203F440->unk3018 = 0;
+ gUnknown_203F440->unk3020 = 0;
+ gUnknown_203F440->unk3024 = 0;
+}
+
+void sub_8154768(const struct WindowTemplate *winTempl)
+{
+ u8 pal = 0xA;
+
+ FillBgTilemapBufferRect(0, 1, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal);
+ FillBgTilemapBufferRect(0, 2, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal);
+ FillBgTilemapBufferRect(0, 3, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal);
+ FillBgTilemapBufferRect(0, 4, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal);
+ FillBgTilemapBufferRect(0, 6, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal);
+ FillBgTilemapBufferRect(0, 7, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal);
+ FillBgTilemapBufferRect(0, 8, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal);
+ FillBgTilemapBufferRect(0, 9, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal);
+}
+
+void sub_8154868(const struct WindowTemplate *winTempl)
+{
+ u8 pal = 0xB;
+
+ FillBgTilemapBufferRect(0, 10, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal);
+ FillBgTilemapBufferRect(0, 11, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal);
+ FillBgTilemapBufferRect(0, 12, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal);
+ FillBgTilemapBufferRect(0, 13, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal);
+ FillBgTilemapBufferRect(0, 15, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal);
+ FillBgTilemapBufferRect(0, 16, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal);
+ FillBgTilemapBufferRect(0, 17, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal);
+ FillBgTilemapBufferRect(0, 18, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal);
+}
+
+void sub_8154968(struct DodrioSubstruct_0160 *ptr)
+{
+ gUnknown_203F440 = ptr;
+ gUnknown_203F440->finished = FALSE;
+ gUnknown_203F440->state = 0;
+ gUnknown_203F440->unk3018 = 0;
+ gUnknown_203F440->unk3020 = 0;
+ gUnknown_203F440->unk3024 = 0;
+ gUnknown_203F440->unk3004 = CreateTask(sub_8154A08, 3);
+ sub_8155E24(sub_8154A2C);
+}
+
+void sub_81549C8(void)
+{
+ FreeAllWindowBuffers();
+}
+
+struct WinCoords
+{
+ u8 left;
+ u8 top;
+};
+
+const u8 sUnknown_8478E38[][3] =
+{
+ {
+ TEXT_COLOR_WHITE,
+ TEXT_COLOR_DARK_GREY,
+ TEXT_COLOR_LIGHT_GREY
+ }, {
+ TEXT_COLOR_WHITE,
+ TEXT_COLOR_RED,
+ TEXT_COLOR_LIGHT_RED
+ }, {
+ TEXT_COLOR_WHITE,
+ TEXT_COLOR_BLUE,
+ TEXT_COLOR_LIGHT_BLUE
+ }, {
+ TEXT_COLOR_WHITE,
+ TEXT_COLOR_GREEN,
+ TEXT_COLOR_LIGHT_GREEN
+ }
+};
+
+const struct WinCoords sUnknown_8478E44[] = {{12, 6}};
+const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}};
+const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}};
+const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}};
+const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}};
+
+const struct WinCoords *const sUnknown_8478E80[] =
+{
+ sUnknown_8478E44,
+ sUnknown_8478E48,
+ sUnknown_8478E50,
+ sUnknown_8478E5C,
+ sUnknown_8478E6C,
+};
+
+const u8 *const sUnknown_8478E94[] =
+{
+ gText_1Colon,
+ gText_2Colon,
+ gText_3Colon,
+ gText_4Colon,
+ gText_5Colon,
+};
+
+const u16 sUnknown_8478EA8[] = {92, 132, 172, 212};
+const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90};
+const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76};
+
+struct
+{
+ u8 id;
+ void (*func)(void);
+} const gUnknown_8478EC4[] =
+{
+ {0, sub_8154A2C},
+ {1, sub_8154B34},
+ {2, sub_8154F80},
+ {3, sub_81556E0},
+ {4, sub_8155A78},
+ {5, sub_8155B4C},
+ {6, sub_8155C2C},
+ {7, sub_8155C80},
+ {8, unused_0},
+ {9, nullsub_98},
+};
+
+void sub_81549D4(u8 arg0)
+{
+ u8 i;
+ for (i = 0; i < 10; i++)
+ {
+ if (gUnknown_8478EC4[i].id == arg0)
+ sub_8155E24(gUnknown_8478EC4[i].func);
+ }
+}
+
+void sub_8154A08(u8 taskId)
+{
+ if (!gUnknown_203F440->finished)
+ sub_8155E54()();
+}
+
+void sub_8154A2C(void)
+{
+ switch (gUnknown_203F440->state)
+ {
+ case 0:
+ sub_8155EA0();
+ gUnknown_203F440->state++;
+ break;
+ case 1:
+ if (sub_8155FE0() == TRUE)
+ gUnknown_203F440->state++;
+ break;
+ case 2:
+ CopyToBgTilemapBuffer(3, sDodrioBerryBgTilemap1, 0, 0);
+ CopyToBgTilemapBuffer(1, sDodrioBerryBgTilemap2Left, 0, 0);
+ CopyToBgTilemapBuffer(2, sDodrioBerryBgTilemap2Right, 0, 0);
+ CopyBgTilemapBufferToVram(3);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ gUnknown_203F440->state++;
+ break;
+ case 3:
+ ShowBg(0);
+ ShowBg(3);
+ ShowBg(1);
+ ShowBg(2);
+ gUnknown_203F440->state++;
+ break;
+ case 4:
+ sub_81546EC(gSaveBlock2Ptr->optionsWindowFrameType);
+ sub_8154720();
+ gUnknown_203F440->state++;
+ break;
+ default:
+ gUnknown_203F440->finished = TRUE;
+ break;
+ }
+}
+
+// This is declared inside pokeemerald's sub_80296A8
+const u8 gUnknown_8478F14[5] = {0, 1, 2, 3, 4};
diff --git a/src/dodrio_berry_picking_3.c b/src/dodrio_berry_picking_3.c
new file mode 100644
index 000000000..4260c6f2f
--- /dev/null
+++ b/src/dodrio_berry_picking_3.c
@@ -0,0 +1,23 @@
+#include "global.h"
+#include "link.h"
+#include "link_rfu.h"
+
+void sub_815A5BC(s32 a0)
+{
+ struct Padded_U8 data[2];
+ data[0].value = 1;
+ data[1].value = a0;
+ RfuPrepareSend0x2f00(data);
+}
+
+u8 sub_815A5E8(s32 a0)
+{
+ u8 * r1;
+ if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
+ return 0;
+ r1 = (u8 *)&gRecvCmds[a0][1];
+ if (r1[0] == 1)
+ return r1[4];
+ return 0;
+}
+
diff --git a/sym_ewram.txt b/sym_ewram.txt
index ee73a6f2b..8481032c3 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -452,6 +452,8 @@ gUnknown_203B170: @ 203B170
.align 2
.include "src/dodrio_berry_picking.o"
.align 2
+ .include "src/dodrio_berry_picking_2.o"
+ .align 2
.include "src/teachy_tv.o"
.align 2
.include "src/digit_obj_util.o"