summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2017-08-09 22:45:59 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2017-08-09 22:45:59 +0200
commitc1d160c31d1be9c756b6666b4dfc97d7b1845b0f (patch)
treefaf0e16463b411dbdd552ec4262fd3070265a5b4
parentf72d61c18c8e1d476c305bee4fded8923ff1278e (diff)
more stuff, a troublesome function
-rw-r--r--asm-de/berry_blender.s8
-rw-r--r--asm/berry_blender.s893
-rw-r--r--src/berry_blender.c351
3 files changed, 348 insertions, 904 deletions
diff --git a/asm-de/berry_blender.s b/asm-de/berry_blender.s
index 3bdd8b073..6966ce04c 100644
--- a/asm-de/berry_blender.s
+++ b/asm-de/berry_blender.s
@@ -3872,8 +3872,8 @@ _0805029C: .4byte 0x000003e7
_080502A0: .4byte sub_8050954
thumb_func_end sub_80501FC
- thumb_func_start help_system_is_not_first_time
-help_system_is_not_first_time: @ 80502A4
+ thumb_func_start sub_80502A4
+sub_80502A4: @ 80502A4
push {r4,r5,lr}
lsls r1, 24
lsls r2, 24
@@ -3916,7 +3916,7 @@ _080502F2:
pop {r4,r5}
pop {r1}
bx r1
- thumb_func_end help_system_is_not_first_time
+ thumb_func_end sub_80502A4
thumb_func_start sub_80502F8
sub_80502F8: @ 80502F8
@@ -3990,7 +3990,7 @@ _0805035C:
mov r7, r8
lsrs r1, r7, 24
str r3, [sp, 0xC]
- bl help_system_is_not_first_time
+ bl sub_80502A4
lsls r0, 24
ldr r3, [sp, 0xC]
cmp r0, 0
diff --git a/asm/berry_blender.s b/asm/berry_blender.s
index 2eff9bd94..c9a2eb379 100644
--- a/asm/berry_blender.s
+++ b/asm/berry_blender.s
@@ -8,899 +8,6 @@
-
- thumb_func_start sub_804FE70
-sub_804FE70: @ 804FE70
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _0804FF40 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- beq _0804FEB6
- ldr r3, _0804FF44 @ =gSendCmd
- ldrh r0, [r3, 0x4]
- ldr r2, _0804FF48 @ =gRecvCmds
- cmp r0, 0
- beq _0804FE98
- movs r1, 0
- strh r0, [r2, 0x10]
- ldr r0, _0804FF4C @ =0x00004444
- strh r0, [r2]
- strh r1, [r3, 0x4]
-_0804FE98:
- ldr r0, _0804FF48 @ =gRecvCmds
- ldr r3, _0804FF4C @ =0x00004444
- adds r1, r2, 0x2
- adds r2, r0, 0
- adds r2, 0x12
- movs r6, 0x2
-_0804FEA4:
- ldrh r0, [r2]
- cmp r0, 0
- beq _0804FEAC
- strh r3, [r1]
-_0804FEAC:
- adds r1, 0x2
- adds r2, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _0804FEA4
-_0804FEB6:
- movs r6, 0
- ldr r7, _0804FF50 @ =sBerryBlenderData
- adds r1, r7, 0
- ldr r0, [r1]
- adds r0, 0x88
- ldrb r0, [r0]
- cmp r6, r0
- blt _0804FEC8
- b _0805005C
-_0804FEC8:
- movs r2, 0
- str r2, [sp]
- mov r9, r2
- ldr r0, _0804FF48 @ =gRecvCmds
- adds r0, 0x10
- mov r8, r0
- ldr r1, _0804FF54 @ =0x00005432
- mov r10, r1
-_0804FED8:
- ldr r2, [sp]
- ldr r1, _0804FF48 @ =gRecvCmds
- adds r0, r2, r1
- ldrh r1, [r0]
- ldr r0, _0804FF4C @ =0x00004444
- cmp r1, r0
- beq _0804FEE8
- b _0805003E
-_0804FEE8:
- ldr r0, [r7]
- adds r0, 0xA2
- adds r0, r2
- ldrh r5, [r0]
- mov r2, r8
- ldrh r4, [r2]
- ldr r0, _0804FF58 @ =0x00004523
- cmp r4, r0
- bne _0804FF60
- bl sub_804FD30
- ldr r0, [r7]
- movs r1, 0x9F
- lsls r1, 1
- adds r4, r0, r1
- adds r0, 0x56
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r1, 0x37
- bl __divsi3
- ldrh r1, [r4]
- adds r1, r0
- strh r1, [r4]
- lsls r1, 16
- ldr r0, _0804FF5C @ =0x03e70000
- cmp r1, r0
- bls _0804FF26
- movs r0, 0xFA
- lsls r0, 2
- strh r0, [r4]
-_0804FF26:
- lsls r1, r5, 24
- lsrs r1, 24
- ldr r0, _0804FF58 @ =0x00004523
- bl sub_804FC48
- ldr r1, [r7]
- movs r0, 0xA6
- lsls r0, 1
- adds r1, r0
- add r1, r9
- ldrh r0, [r1]
- adds r0, 0x1
- b _0804FFCA
- .align 2, 0
-_0804FF40: .4byte gSpecialVar_0x8004
-_0804FF44: .4byte gSendCmd
-_0804FF48: .4byte gRecvCmds
-_0804FF4C: .4byte 0x00004444
-_0804FF50: .4byte sBerryBlenderData
-_0804FF54: .4byte 0x00005432
-_0804FF58: .4byte 0x00004523
-_0804FF5C: .4byte 0x03e70000
-_0804FF60:
- cmp r4, r10
- bne _0804FF9E
- mov r0, r10
- bl sub_804FD30
- ldr r0, [r7]
- movs r1, 0x9F
- lsls r1, 1
- adds r4, r0, r1
- adds r0, 0x56
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r1, 0x46
- bl __divsi3
- ldrh r1, [r4]
- adds r1, r0
- strh r1, [r4]
- lsls r1, r5, 24
- lsrs r1, 24
- mov r0, r10
- bl sub_804FC48
- ldr r1, [r7]
- movs r0, 0xA7
- lsls r0, 1
- adds r1, r0
- add r1, r9
- ldrh r0, [r1]
- adds r0, 0x1
- b _0804FFCA
-_0804FF9E:
- ldr r0, _08050018 @ =0x00002345
- cmp r4, r0
- bne _0804FFD6
- lsls r1, r5, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_804FC48
- adds r0, r4, 0
- bl sub_804FD30
- ldr r0, [r7]
- movs r1, 0xA8
- lsls r1, 1
- adds r0, r1
- mov r2, r9
- adds r1, r0, r2
- ldrh r2, [r1]
- ldr r0, _0805001C @ =0x000003e6
- cmp r2, r0
- bhi _0804FFCC
- adds r0, r2, 0x1
-_0804FFCA:
- strh r0, [r1]
-_0804FFCC:
- mov r0, r8
- ldrh r1, [r0]
- ldr r0, _08050018 @ =0x00002345
- cmp r1, r0
- beq _0804FFE4
-_0804FFD6:
- mov r1, r8
- ldrh r0, [r1]
- ldr r2, _08050020 @ =0x00004523
- cmp r0, r2
- beq _0804FFE4
- cmp r0, r10
- bne _0805003E
-_0804FFE4:
- ldr r0, _08050024 @ =sBerryBlenderData
- ldr r0, [r0]
- adds r2, r0, 0
- adds r2, 0x56
- movs r0, 0
- ldrsh r1, [r2, r0]
- ldr r0, _08050028 @ =0x000005dc
- cmp r1, r0
- ble _08050034
- adds r0, r1, 0
- ldr r2, _0805002C @ =0xfffffd12
- adds r0, r2
- movs r1, 0x14
- bl __divsi3
- adds r1, r0, 0
- movs r0, 0x80
- lsls r0, 1
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, _08050030 @ =gMPlay_BGM
- bl m4aMPlayTempoControl
- b _0805003E
- .align 2, 0
-_08050018: .4byte 0x00002345
-_0805001C: .4byte 0x000003e6
-_08050020: .4byte 0x00004523
-_08050024: .4byte sBerryBlenderData
-_08050028: .4byte 0x000005dc
-_0805002C: .4byte 0xfffffd12
-_08050030: .4byte gMPlay_BGM
-_08050034:
- ldr r0, _08050098 @ =gMPlay_BGM
- movs r1, 0x80
- lsls r1, 1
- bl m4aMPlayTempoControl
-_0805003E:
- ldr r1, [sp]
- adds r1, 0x2
- str r1, [sp]
- movs r2, 0x6
- add r9, r2
- movs r0, 0x2
- add r8, r0
- adds r6, 0x1
- ldr r7, _0805009C @ =sBerryBlenderData
- ldr r0, [r7]
- adds r0, 0x88
- ldrb r0, [r0]
- cmp r6, r0
- bge _0805005C
- b _0804FED8
-_0805005C:
- ldr r0, _080500A0 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- beq _08050088
- movs r6, 0
- ldr r3, _0805009C @ =sBerryBlenderData
- ldr r0, [r3]
- adds r0, 0x88
- ldrb r0, [r0]
- cmp r6, r0
- bge _08050088
- movs r2, 0
- ldr r1, _080500A4 @ =gRecvCmds
-_08050076:
- strh r2, [r1]
- strh r2, [r1, 0x10]
- adds r1, 0x2
- adds r6, 0x1
- ldr r0, [r3]
- adds r0, 0x88
- ldrb r0, [r0]
- cmp r6, r0
- blt _08050076
-_08050088:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08050098: .4byte gMPlay_BGM
-_0805009C: .4byte sBerryBlenderData
-_080500A0: .4byte gSpecialVar_0x8004
-_080500A4: .4byte gRecvCmds
- thumb_func_end sub_804FE70
-
- thumb_func_start sub_80500A8
-sub_80500A8: @ 80500A8
- push {r4-r6,lr}
- movs r6, 0
- ldr r5, _080500EC @ =sBerryBlenderData
- ldr r4, [r5]
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 23
- adds r4, 0xA2
- adds r4, r0
- ldrb r3, [r4]
- ldr r0, [r5]
- adds r0, 0x6F
- ldrb r0, [r0]
- cmp r0, 0
- bne _0805018A
- ldr r0, _080500F0 @ =gSaveBlock2
- ldrb r0, [r0, 0x13]
- cmp r0, 0x2
- bne _080500FC
- ldr r2, _080500F4 @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0805010A
- ldrh r0, [r2, 0x28]
- ldr r1, _080500F8 @ =0x00000201
- bics r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r6, r0, 31
- b _0805010A
- .align 2, 0
-_080500EC: .4byte sBerryBlenderData
-_080500F0: .4byte gSaveBlock2
-_080500F4: .4byte gMain
-_080500F8: .4byte 0x00000201
-_080500FC:
- ldr r0, _0805015C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0805010A
- movs r6, 0x1
-_0805010A:
- cmp r6, 0
- beq _0805018A
- ldr r4, _08050160 @ =sBerryBlenderData
- ldr r1, [r4]
- lsls r2, r3, 1
- adds r0, r1, 0
- adds r0, 0x9A
- adds r0, r2
- adds r1, 0x5C
- ldrh r0, [r0]
- adds r1, r0
- ldrb r1, [r1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08050164 @ =gSprites
- adds r0, r1
- adds r1, r3, 0x4
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- ldr r0, [r4]
- adds r0, 0x54
- ldrh r4, [r0]
- bl GetMultiplayerId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_804F16C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08050170
- ldr r1, _08050168 @ =gSendCmd
- ldr r0, _0805016C @ =0x00004523
- b _08050188
- .align 2, 0
-_0805015C: .4byte gMain
-_08050160: .4byte sBerryBlenderData
-_08050164: .4byte gSprites
-_08050168: .4byte gSendCmd
-_0805016C: .4byte 0x00004523
-_08050170:
- cmp r0, 0x1
- bne _08050184
- ldr r1, _0805017C @ =gSendCmd
- ldr r0, _08050180 @ =0x00005432
- b _08050188
- .align 2, 0
-_0805017C: .4byte gSendCmd
-_08050180: .4byte 0x00005432
-_08050184:
- ldr r1, _080501E4 @ =gSendCmd
- ldr r0, _080501E8 @ =0x00002345
-_08050188:
- strh r0, [r1, 0x4]
-_0805018A:
- ldr r2, _080501EC @ =sBerryBlenderData
- ldr r1, [r2]
- adds r1, 0x7E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bls _080501BA
- ldr r0, [r2]
- adds r1, r0, 0
- adds r1, 0x56
- ldrh r3, [r1]
- movs r4, 0
- ldrsh r0, [r1, r4]
- cmp r0, 0x80
- ble _080501B2
- subs r0, r3, 0x1
- strh r0, [r1]
-_080501B2:
- ldr r0, [r2]
- adds r0, 0x7E
- movs r1, 0
- strb r1, [r0]
-_080501BA:
- ldr r0, _080501F0 @ =gUnknown_020297ED
- ldrb r0, [r0]
- cmp r0, 0
- beq _080501DE
- ldr r0, _080501F4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _080501DE
- ldr r0, [r2]
- ldr r1, _080501F8 @ =0x0000014b
- adds r2, r0, r1
- ldrb r0, [r2]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r2]
-_080501DE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080501E4: .4byte gSendCmd
-_080501E8: .4byte 0x00002345
-_080501EC: .4byte sBerryBlenderData
-_080501F0: .4byte gUnknown_020297ED
-_080501F4: .4byte gMain
-_080501F8: .4byte 0x0000014b
- thumb_func_end sub_80500A8
-
- thumb_func_start sub_80501FC
-sub_80501FC: @ 80501FC
- push {r4-r6,lr}
- bl sub_8051474
- ldr r4, _08050294 @ =sBerryBlenderData
- ldr r0, [r4]
- movs r1, 0x96
- lsls r1, 1
- adds r2, r0, r1
- ldr r1, [r2]
- ldr r0, _08050298 @ =0x00057e03
- cmp r1, r0
- bhi _08050218
- adds r0, r1, 0x1
- str r0, [r2]
-_08050218:
- bl sub_80500A8
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x56
- ldrh r0, [r0]
- movs r5, 0x9F
- lsls r5, 1
- adds r1, r5
- ldrh r1, [r1]
- bl SetLinkDebugValues
- bl sub_804FE70
- ldr r0, [r4]
- adds r0, r5
- ldrh r0, [r0]
- movs r6, 0xFA
- lsls r6, 2
- adds r1, r6, 0
- bl sub_805194C
- ldr r0, [r4]
- adds r0, 0x56
- ldrh r0, [r0]
- bl sub_8051A3C
- bl sub_8051B18
- bl sub_805123C
- ldr r2, [r4]
- adds r3, r2, 0
- adds r3, 0x6F
- ldrb r0, [r3]
- cmp r0, 0
- bne _0805027E
- movs r1, 0xA0
- lsls r1, 1
- adds r0, r2, r1
- ldrh r1, [r0]
- ldr r0, _0805029C @ =0x000003e7
- cmp r1, r0
- bls _0805027E
- adds r0, r2, r5
- strh r6, [r0]
- movs r0, 0x1
- strb r0, [r3]
- ldr r0, _080502A0 @ =sub_8050954
- bl SetMainCallback2
-_0805027E:
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08050294: .4byte sBerryBlenderData
-_08050298: .4byte 0x00057e03
-_0805029C: .4byte 0x000003e7
-_080502A0: .4byte sub_8050954
- thumb_func_end sub_80501FC
-
- thumb_func_start help_system_is_not_first_time
-help_system_is_not_first_time: @ 80502A4
- push {r4,r5,lr}
- lsls r1, 24
- lsls r2, 24
- lsrs r1, 20
- adds r4, r1, r0
- lsrs r2, 20
- adds r5, r2, r0
- ldrh r0, [r4]
- ldrh r1, [r5]
- cmp r0, r1
- bne _080502E2
- adds r0, r4, 0x2
- adds r1, r5, 0x2
- bl StringCompare
- cmp r0, 0
- bne _080502F0
- ldr r0, [r4, 0x8]
- ldr r2, _080502E8 @ =0xffffff00
- ands r0, r2
- ldr r1, [r5, 0x8]
- ands r1, r2
- cmp r0, r1
- bne _080502F0
- ldr r0, [r4, 0xC]
- ldr r2, _080502EC @ =0x00ffffff
- ands r0, r2
- ldr r1, [r5, 0xC]
- ands r1, r2
- cmp r0, r1
- bne _080502F0
-_080502E2:
- movs r0, 0x1
- b _080502F2
- .align 2, 0
-_080502E8: .4byte 0xffffff00
-_080502EC: .4byte 0x00ffffff
-_080502F0:
- movs r0, 0
-_080502F2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end help_system_is_not_first_time
-
- thumb_func_start sub_80502F8
-sub_80502F8: @ 80502F8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- mov r10, r0
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x10]
- lsls r3, 24
- lsrs r3, 24
- mov r2, sp
- movs r4, 0x5
-_08050314:
- ldrh r0, [r1]
- strh r0, [r2]
- adds r1, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _08050314
- movs r6, 0
- mov r1, sp
- movs r4, 0x4
-_08050328:
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _08050332
- adds r6, 0x1
-_08050332:
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _08050328
- cmp r6, 0x5
- beq _08050386
- cmp r3, 0x3
- bhi _08050386
- movs r4, 0
- ldr r3, [sp, 0x10]
- cmp r4, r3
- bge _0805039E
- mov r3, r10
-_0805034C:
- movs r6, 0
- ldr r7, [sp, 0x10]
- cmp r6, r7
- bge _08050394
- mov r9, r3
- mov r5, r10
- lsls r0, r4, 24
- mov r8, r0
-_0805035C:
- mov r1, r9
- ldrh r0, [r1]
- ldrh r2, [r5]
- cmp r0, r2
- bne _0805038A
- cmp r4, r6
- beq _0805038A
- cmp r0, 0xAF
- bne _08050386
- lsls r2, r6, 24
- lsrs r2, 24
- mov r0, r10
- mov r7, r8
- lsrs r1, r7, 24
- str r3, [sp, 0xC]
- bl help_system_is_not_first_time
- lsls r0, 24
- ldr r3, [sp, 0xC]
- cmp r0, 0
- beq _0805038A
-_08050386:
- movs r0, 0xC
- b _080504DE
-_0805038A:
- adds r5, 0x10
- adds r6, 0x1
- ldr r0, [sp, 0x10]
- cmp r6, r0
- blt _0805035C
-_08050394:
- adds r3, 0x10
- adds r4, 0x1
- ldr r1, [sp, 0x10]
- cmp r4, r1
- blt _0805034C
-_0805039E:
- movs r2, 0
- mov r1, sp
- movs r4, 0x4
-_080503A4:
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0
- ble _080503B2
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_080503B2:
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080503A4
- cmp r2, 0x3
- bls _080503C2
- movs r0, 0xD
- b _080504DE
-_080503C2:
- cmp r2, 0x3
- bne _080503CA
- movs r0, 0xB
- b _080504DE
-_080503CA:
- movs r4, 0
- mov r1, sp
-_080503CE:
- movs r7, 0
- ldrsh r0, [r1, r7]
- cmp r0, 0x32
- ble _080503D8
- b _080504D8
-_080503D8:
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x4
- ble _080503CE
- cmp r2, 0x1
- bne _0805042A
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- ble _080503F2
- movs r0, 0x1
- b _080504DE
-_080503F2:
- mov r0, sp
- ldrh r0, [r0, 0x2]
- lsls r0, 16
- cmp r0, 0
- ble _08050400
- movs r0, 0x2
- b _080504DE
-_08050400:
- mov r0, sp
- movs r3, 0x4
- ldrsh r0, [r0, r3]
- cmp r0, 0
- ble _0805040E
- movs r0, 0x3
- b _080504DE
-_0805040E:
- mov r0, sp
- movs r4, 0x6
- ldrsh r0, [r0, r4]
- cmp r0, 0
- ble _0805041C
- movs r0, 0x4
- b _080504DE
-_0805041C:
- mov r0, sp
- movs r7, 0x8
- ldrsh r0, [r0, r7]
- cmp r0, 0
- ble _0805042A
- movs r0, 0x5
- b _080504DE
-_0805042A:
- cmp r2, 0x2
- bne _080504DC
- movs r4, 0
- ldr r5, _08050474 @ =gUnknown_03000520
- mov r1, sp
- adds r2, r5, 0
-_08050436:
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0
- ble _08050442
- strh r4, [r2]
- adds r2, 0x2
-_08050442:
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x4
- ble _08050436
- movs r4, 0
- ldrsh r3, [r5, r4]
- lsls r0, r3, 1
- mov r7, sp
- adds r1, r7, r0
- movs r0, 0x2
- ldrsh r2, [r5, r0]
- lsls r0, r2, 1
- add r0, sp
- movs r4, 0
- ldrsh r1, [r1, r4]
- movs r7, 0
- ldrsh r0, [r0, r7]
- cmp r1, r0
- blt _08050498
- adds r0, r3, 0
- cmp r0, 0
- bne _08050478
- lsls r0, r2, 16
- b _080504A2
- .align 2, 0
-_08050474: .4byte gUnknown_03000520
-_08050478:
- cmp r0, 0x1
- bne _08050480
- lsls r0, r2, 16
- b _080504AE
-_08050480:
- cmp r0, 0x2
- bne _08050488
- lsls r0, r2, 16
- b _080504BA
-_08050488:
- cmp r0, 0x3
- bne _08050490
- lsls r0, r2, 16
- b _080504C6
-_08050490:
- cmp r0, 0x4
- bne _080504DC
- lsls r0, r2, 16
- b _080504D2
-_08050498:
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _080504A8
- lsls r0, r3, 16
-_080504A2:
- movs r1, 0x6
- orrs r0, r1
- b _080504DE
-_080504A8:
- cmp r0, 0x1
- bne _080504B4
- lsls r0, r3, 16
-_080504AE:
- movs r1, 0x7
- orrs r0, r1
- b _080504DE
-_080504B4:
- cmp r0, 0x2
- bne _080504C0
- lsls r0, r3, 16
-_080504BA:
- movs r1, 0x8
- orrs r0, r1
- b _080504DE
-_080504C0:
- cmp r0, 0x3
- bne _080504CC
- lsls r0, r3, 16
-_080504C6:
- movs r1, 0x9
- orrs r0, r1
- b _080504DE
-_080504CC:
- cmp r0, 0x4
- bne _080504DC
- lsls r0, r3, 16
-_080504D2:
- movs r1, 0xA
- orrs r0, r1
- b _080504DE
-_080504D8:
- movs r0, 0xE
- b _080504DE
-_080504DC:
- movs r0, 0
-_080504DE:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80502F8
-
- thumb_func_start sub_80504F0
-sub_80504F0: @ 80504F0
- ldr r1, _080504F8 @ =gUnknown_0300052C
- strh r0, [r1]
- bx lr
- .align 2, 0
-_080504F8: .4byte gUnknown_0300052C
- thumb_func_end sub_80504F0
-
- thumb_func_start unref_sub_80504FC
-unref_sub_80504FC: @ 80504FC
- ldr r0, _08050504 @ =gUnknown_0300052C
- movs r1, 0
- ldrsh r0, [r0, r1]
- bx lr
- .align 2, 0
-_08050504: .4byte gUnknown_0300052C
- thumb_func_end unref_sub_80504FC
-
- thumb_func_start sub_8050508
-sub_8050508: @ 8050508
- ldr r1, _08050510 @ =gUnknown_0300052E
- strh r0, [r1]
- bx lr
- .align 2, 0
-_08050510: .4byte gUnknown_0300052E
- thumb_func_end sub_8050508
-
- thumb_func_start unref_sub_8050514
-unref_sub_8050514: @ 8050514
- ldr r0, _0805051C @ =gUnknown_0300052E
- movs r1, 0
- ldrsh r0, [r0, r1]
- bx lr
- .align 2, 0
-_0805051C: .4byte gUnknown_0300052E
- thumb_func_end unref_sub_8050514
-
thumb_func_start sub_8050520
sub_8050520: @ 8050520
push {r4-r7,lr}
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 62264f76e..ce2f3db20 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -43,6 +43,7 @@ struct MusicPlayerInfo
// other files functions
void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch);
+void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
void sub_80A6978(void);
u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate);
@@ -56,7 +57,7 @@ u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate);
struct BlenderBerry
{
- u16 field_0;
+ u16 itemID;
u8 name[7];
u8 flavours[5];
u8 smoothness;
@@ -371,7 +372,9 @@ struct BerryBlenderData
extern struct BerryBlenderData* sBerryBlenderData;
extern struct MusicPlayerInfo gMPlay_SE2;
+extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 ewram[];
+extern s16 gUnknown_03000520[];
// this file's functions:
void sub_80514A4(void);
@@ -391,6 +394,11 @@ void sub_804F81C(void);
void sub_805156C(void);
void sub_8051684(struct Sprite* sprite);
void sub_8051AC8(s16* a0, u16 a1);
+void sub_805194C(u16 a0, u16 a1);
+void sub_8051A3C(u16 a0);
+void sub_8051B18(void);
+void sub_805123C(void);
+void sub_8050954(void);
void Blender_ControlHitPitch(void)
{
@@ -669,7 +677,7 @@ void sub_804E7C0(u16 a0, u8 a1)
void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID)
{
const struct Berry *berryInfo = GetBerryInfo(itemID + 124);
- berry->field_0 = itemID;
+ berry->itemID = itemID;
StringCopy(berry->name, berryInfo->name);
berry->flavours[FLAVOUR_SPICY] = berryInfo->spicy;
berry->flavours[FLAVOUR_DRY] = berryInfo->dry;
@@ -835,7 +843,7 @@ void sub_804E9F8(void)
for (i = 0; i < GetLinkPlayerCount(); i++)
{
memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry));
- sBerryBlenderData->field_80[i] = sBerryBlenderData->blendedBerries[i].field_0;
+ sBerryBlenderData->field_80[i] = sBerryBlenderData->blendedBerries[i].itemID;
}
ResetBlockReceivedFlags();
sBerryBlenderData->field_0++;
@@ -1444,18 +1452,347 @@ void sub_804FE70(void)
{
if (gSendCmd[2] != 0)
{
- gRecvCmds[2][0] = 0;
+ gRecvCmds[2][0] = gSendCmd[2];
gRecvCmds[0][0] = 0x4444;
gSendCmd[2] = 0;
}
- for (i = 0; i < 3; i++)
+ for (i = 1; i < 4; i++)
{
if (gRecvCmds[2][i] != 0)
gRecvCmds[0][i] = 0x4444;
}
}
- for (i = 0; i < gUnknown_082165DA[sBerryBlenderData->field_88]; i++)
+ for (i = 0; i < sBerryBlenderData->field_88; i++)
{
- if (gRecvCmds[0])
+ if (gRecvCmds[0][i] == 0x4444)
+ {
+ u32 var = sBerryBlenderData->field_A2[i];
+ if (gRecvCmds[2][i] == 0x4523)
+ {
+ sub_804FD30(0x4523);
+ sBerryBlenderData->field_13E += (sBerryBlenderData->field_56 / 55);
+ if (sBerryBlenderData->field_13E >= 1000)
+ sBerryBlenderData->field_13E = 1000;
+ sub_804FC48(0x4523, var);
+ sBerryBlenderData->field_14C[i][0]++;
+ }
+ else if (gRecvCmds[2][i] == 0x5432)
+ {
+ sub_804FD30(0x5432);
+ sBerryBlenderData->field_13E += (sBerryBlenderData->field_56 / 70);
+ sub_804FC48(0x5432, var);
+ sBerryBlenderData->field_14C[i][1]++;
+ }
+ else if (gRecvCmds[2][i] == 0x2345)
+ {
+ sub_804FC48(0x2345, var);
+ sub_804FD30(0x2345);
+ if (sBerryBlenderData->field_15 > 1000)
+ sBerryBlenderData->field_13E = 1000;
+ if (sBerryBlenderData->field_14C[i][2] < 999)
+ sBerryBlenderData->field_14C[i][2]++;
+ }
+ if (gRecvCmds[2][i] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432)
+ {
+ if (sBerryBlenderData->field_56 > 1500)
+ m4aMPlayTempoControl(&gMPlay_BGM, ((sBerryBlenderData->field_56 - 750) / 20) + 256);
+ else
+ m4aMPlayTempoControl(&gMPlay_BGM, 256);
+ }
+ }
+ }
+ if (gSpecialVar_0x8004 != 0)
+ {
+ for (i = 0; i < sBerryBlenderData->field_88; i++)
+ {
+ gRecvCmds[0][i] = 0;
+ gRecvCmds[2][i] = 0;
+ }
+ }
+}
+
+extern u8 gUnknown_020297ED;
+
+void sub_80500A8(void)
+{
+ bool8 A_pressed = 0;
+ u8 var2 = sBerryBlenderData->field_A2[GetMultiplayerId()];
+ if (sBerryBlenderData->field_6F == 0)
+ {
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A && gMain.newKeys & A_BUTTON)
+ A_pressed = ((gMain.heldKeysRaw & (A_BUTTON | L_BUTTON)) != (A_BUTTON | L_BUTTON));
+ else if (gMain.newKeys & A_BUTTON)
+ A_pressed = 1;
+ if (A_pressed)
+ {
+ u8 var3;
+ StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[sBerryBlenderData->field_9A[var2]]], var2 + 4);
+ var3 = sub_804F16C(sBerryBlenderData->arrowPos, GetMultiplayerId());
+ if (var3 == 2)
+ gSendCmd[2] = 0x4523;
+ else if (var3 == 1)
+ gSendCmd[2] = 0x5432;
+ else
+ gSendCmd[2] = 0x2345;
+ }
+ }
+ if (++sBerryBlenderData->field_7E > 5)
+ {
+ if (sBerryBlenderData->field_56 > 128)
+ sBerryBlenderData->field_56--;
+ sBerryBlenderData->field_7E = 0;
+ }
+ if (gUnknown_020297ED && gMain.newKeys & L_BUTTON)
+ sBerryBlenderData->field_14B ^= 1;
+}
+
+void sub_80501FC(void)
+{
+ sub_8051474();
+ if (sBerryBlenderData->field_12C < 359940)
+ sBerryBlenderData->field_12C++;
+ sub_80500A8();
+ SetLinkDebugValues((u16)(sBerryBlenderData->field_56), sBerryBlenderData->field_13E);
+ sub_804FE70();
+ sub_805194C(sBerryBlenderData->field_13E, 1000);
+ sub_8051A3C(sBerryBlenderData->field_56);
+ sub_8051B18();
+ sub_805123C();
+ if (sBerryBlenderData->field_6F == 0 && sBerryBlenderData->field_140 >= 1000)
+ {
+ sBerryBlenderData->field_13E = 1000;
+ sBerryBlenderData->field_6F = 1;
+ SetMainCallback2(sub_8050954);
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+#define ARE_FLAVOURS_SAME(flavours1, flavours2)(((*(u32*)(&flavours1[-1]) & 0xFFFFFF00) == (*(u32*)(&flavours2[-1]) & 0xFFFFFF00)&& (*(u32*)(&flavours1[3]) & 0xFFFFFF) == (*(u32*)(&flavours2[3]) & 0xFFFFFF)))
+
+bool8 sub_80502A4(struct BlenderBerry* berries, u8 index1, u8 index2)
+{
+ if (berries[index1].itemID != berries[index2].itemID
+ || (StringCompare(berries[index1].name, berries[index2].name) == 0
+ && ARE_FLAVOURS_SAME(berries[index1].flavours, berries[index2].flavours)))
+ return 1;
+ else
+ return 0;
+}
+
+#undef ARE_FLAVOURS_SAME
+
+u32 sub_80502F8(struct BlenderBerry* berries, s16* a1, u8 a2, u8 a3)
+{
+ s16 vars[5];
+ s32 i;
+ s32 r6;
+ u8 r2;
+
+ for (i = 0; i <= 5; i++) // bug, writing one index too far
+ vars[i] = a1[i];
+ r6 = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (vars[i] == 0)
+ r6++;
+ }
+ if (r6 == 5 || a3 > 3)
+ return 12;
+ for (i = 0; i < a2; i++)
+ {
+ for (r6 = 0; r6 < a2; r6++)
+ {
+ if (berries[i].itemID == berries[r6].itemID && i != r6
+ && (berries[i].itemID != ITEM_ENIGMA_BERRY || sub_80502A4(berries, i, r6)))
+ return 12;
+ }
+ }
+ r2 = 0;
+ for (r2 = 0, i = 0; i < 5; i++)
+ {
+ if (vars[i] > 0)
+ r2++;
+ }
+ if (r2 > 3)
+ return 13;
+ if (r2 == 3)
+ return 11;
+ for (i = 0; i < 5; i++)
+ {
+ if (vars[i] > 50)
+ return 14;
+ }
+ if (r2 == 1 && vars[0] > 0)
+ return 1;
+ if (r2 == 1 && vars[1] > 0)
+ return 2;
+ if (r2 == 1 && vars[2] > 0)
+ return 3;
+ if (r2 == 1 && vars[3] > 0)
+ return 4;
+ if (r2 == 1 && vars[4] > 0)
+ return 5;
+ if (r2 == 2)
+ {
+ s32 var = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (vars[i] > 0)
+ gUnknown_03000520[var++] = i;
+ }
+ if (vars[gUnknown_03000520[0]] >= vars[gUnknown_03000520[1]])
+ {
+ if (gUnknown_03000520[0] == 0)
+ return (gUnknown_03000520[1] << 16) | 6;
+ if (gUnknown_03000520[0] == 1)
+ return (gUnknown_03000520[1] << 16) | 7;
+ if (gUnknown_03000520[0] == 2)
+ return (gUnknown_03000520[1] << 16) | 8;
+ if (gUnknown_03000520[0] == 3)
+ return (gUnknown_03000520[1] << 16) | 9;
+ if (gUnknown_03000520[0] == 4)
+ return (gUnknown_03000520[1] << 16) | 10;
+ }
+ else
+ {
+ if (gUnknown_03000520[1] == 0)
+ return (gUnknown_03000520[0] << 16) | 6;
+ if (gUnknown_03000520[1] == 1)
+ return (gUnknown_03000520[0] << 16) | 7;
+ if (gUnknown_03000520[1] == 2)
+ return (gUnknown_03000520[0] << 16) | 8;
+ if (gUnknown_03000520[1] == 3)
+ return (gUnknown_03000520[0] << 16) | 9;
+ if (gUnknown_03000520[1] == 4)
+ return (gUnknown_03000520[0] << 16) | 10;
+ }
+ }
+ return 0;
+}
+
+extern s16 gUnknown_0300052C;
+extern s16 gUnknown_0300052E;
+
+void sub_80504F0(s16 value)
+{
+ gUnknown_0300052C = value;
+}
+
+s16 unref_sub_80504FC(void)
+{
+ return gUnknown_0300052C;
+}
+
+void sub_8050508(s16 value)
+{
+ gUnknown_0300052E = value;
+}
+
+s16 unref_sub_8050514(void)
+{
+ return gUnknown_0300052E;
+}
+
+extern s16 gUnknown_03000510[6];
+extern s32 gUnknown_03000530[];
+extern s32 gUnknown_03000548[];
+extern u32 gUnknown_0300055C;
+
+extern const u8 gUnknown_082165DF[];
+
+void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4)
+{
+ s32 i, j;
+
+ s32 var5, var6;
+
+ for (i = 0; i < 6; i++)
+ gUnknown_03000510[i] = 0;
+ for (i = 0; i < a2; i++)
+ {
+ for (j = 0; j < 5; j++)
+ gUnknown_03000510[j] += berries[i].flavours[j];
+ }
+
+ var5 = gUnknown_03000510[0];
+ gUnknown_03000510[0] -= gUnknown_03000510[1];
+ gUnknown_03000510[1] -= gUnknown_03000510[2];
+ gUnknown_03000510[2] -= gUnknown_03000510[3];
+ gUnknown_03000510[3] -= gUnknown_03000510[4];
+ gUnknown_03000510[4] -= var5;
+
+ var6 = 0;
+ for (i = 0; i < 6; i++)
+ {
+ if (gUnknown_03000510[i] < 0)
+ {
+ gUnknown_03000510[i] = 0;
+ var6++;
+ }
+ }
+ for (i = 0; i < 6; i++)
+ {
+ if (gUnknown_03000510[i] > 0)
+ {
+ if (gUnknown_03000510[i] < var6)
+ gUnknown_03000510[i] = 0;
+ else
+ gUnknown_03000510[i] -= var6;
+ }
+ }
+ for (i = 0; i < 6; i++)
+ {
+ gUnknown_03000530[i] = gUnknown_03000510[i];
+ }
+
+ gUnknown_0300055C = ((a4 / 333) + 100);
+
+ for (i = 0; i < 5; i++)
+ {
+ s32 var4;
+ s32 var3 = gUnknown_03000510[i];
+ var3 = (((a4 / 333) + 100) * var3) / 10;
+ var4 = var3 % 10;
+ var3 /= 10;
+ if (var4 > 4)
+ var3++;
+ gUnknown_03000510[i] = var3;
+ }
+ for (i = 0; i < 5; i++)
+ {
+ gUnknown_03000548[i] = gUnknown_03000510[i];
+ }
+ *a1 = sub_80502F8(berries, &gUnknown_03000510[0], a2, var6);
+ gUnknown_03000510[5] = (gUnknown_03000510[5] / a2) - a2;
+ if (gUnknown_03000510[5] > 0)
+ gUnknown_03000510[5] = 0;
+ if (*a1 == 12)
+ {
+ u16 rand = Random() % 10;
+ for (i = 0; i < 6; i++)
+ {
+ if ((gUnknown_082165DF[rand] >> i) & 1)
+ gUnknown_03000510[i] = 2;
+ else
+ gUnknown_03000510[i] = 0;
+ }
+ }
+ for (i = 0; i < 6; i++)
+ {
+ if (gUnknown_03000510[i] > 255)
+ gUnknown_03000510[i] = 255;
+ }
+ a1[1] = gUnknown_03000510[0];
+ a1[2] = gUnknown_03000510[1];
+ a1[3] = gUnknown_03000510[2];
+ a1[4] = gUnknown_03000510[3];
+ a1[5] = gUnknown_03000510[4];
+ a1[6] = gUnknown_03000510[5];
+ for (i = 0; i < 6; i++)
+ {
+ a3[i] = gUnknown_03000510[i];
}
}