Port dodrio_berry_picking_3 from emerald

This commit is contained in:
PikalaxALT
2020-03-05 14:03:23 -05:00
parent b56c2b75b4
commit 7f81fdc8df
3 changed files with 639 additions and 729 deletions
-726
View File
@@ -5,730 +5,4 @@
.text
thumb_func_start sub_815A61C
sub_815A61C: @ 815A61C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x20
ldr r4, [sp, 0x48]
lsls r4, 24
str r4, [sp, 0x1C]
movs r4, 0x14
adds r4, r0
mov r9, r4
mov r5, sp
movs r4, 0x2
strb r4, [r5]
mov r10, sp
mov r5, r9
ldrb r4, [r5, 0xB]
movs r7, 0xF
adds r5, r7, 0
ands r5, r4
mov r6, r10
ldrb r6, [r6, 0x1]
mov r8, r6
movs r4, 0x10
negs r4, r4
mov r6, r8
ands r4, r6
orrs r4, r5
mov r5, r10
strb r4, [r5, 0x1]
mov r8, sp
mov r6, r9
ldrb r5, [r6, 0xC]
lsls r5, 4
ands r4, r7
orrs r4, r5
mov r5, r8
strb r4, [r5, 0x1]
ldrb r5, [r6, 0xD]
movs r6, 0xF
ands r5, r6
mov r4, r10
ldrb r4, [r4, 0x2]
mov r8, r4
movs r4, 0x10
negs r4, r4
mov r6, r8
ands r4, r6
orrs r4, r5
mov r5, r10
strb r4, [r5, 0x2]
mov r8, sp
mov r6, r9
ldrb r5, [r6, 0xE]
lsls r5, 4
ands r4, r7
orrs r4, r5
mov r5, r8
strb r4, [r5, 0x2]
ldrb r5, [r6, 0xF]
movs r6, 0xF
ands r5, r6
mov r4, r10
ldrb r4, [r4, 0x3]
mov r8, r4
movs r4, 0x10
negs r4, r4
mov r6, r8
ands r4, r6
orrs r4, r5
mov r5, r10
strb r4, [r5, 0x3]
mov r8, sp
mov r6, r9
ldrb r5, [r6, 0x10]
lsls r5, 4
ands r4, r7
orrs r4, r5
mov r5, r8
strb r4, [r5, 0x3]
ldrb r5, [r6, 0x11]
movs r6, 0xF
ands r5, r6
mov r4, r10
ldrb r4, [r4, 0x4]
mov r8, r4
movs r4, 0x10
negs r4, r4
mov r6, r8
ands r4, r6
orrs r4, r5
mov r5, r10
strb r4, [r5, 0x4]
mov r8, sp
mov r6, r9
ldrb r5, [r6, 0x12]
lsls r5, 4
ands r4, r7
orrs r4, r5
mov r5, r8
strb r4, [r5, 0x4]
ldrb r4, [r6, 0x13]
movs r6, 0xF
ands r4, r6
mov r6, r8
ldrb r5, [r6, 0x5]
movs r6, 0x10
negs r6, r6
ands r6, r5
orrs r6, r4
str r6, [sp, 0xC]
mov r4, r8
strb r6, [r4, 0x5]
mov r5, sp
mov r6, r9
ldrb r4, [r6, 0x14]
lsls r4, 4
ldr r6, [sp, 0xC]
ands r6, r7
orrs r6, r4
strb r6, [r5, 0x5]
mov r7, sp
movs r4, 0x3
mov r8, r4
ldrb r0, [r0, 0x14]
mov r5, r8
ands r0, r5
ldrb r5, [r7, 0x6]
movs r6, 0x4
negs r6, r6
mov r10, r6
mov r4, r10
ands r4, r5
orrs r4, r0
strb r4, [r7, 0x6]
mov r5, r9
ldrb r0, [r5, 0x1]
mov r6, r8
ands r0, r6
lsls r0, 2
movs r5, 0xD
negs r5, r5
ands r5, r4
orrs r5, r0
strb r5, [r7, 0x6]
mov r0, r9
ldrb r4, [r0, 0x2]
ands r4, r6
lsls r4, 4
movs r0, 0x31
negs r0, r0
ands r0, r5
orrs r0, r4
strb r0, [r7, 0x6]
mov r5, sp
mov r6, r9
ldrb r4, [r6, 0x3]
lsls r4, 6
movs r6, 0x3F
ands r0, r6
orrs r0, r4
strb r0, [r5, 0x6]
mov r4, r9
ldrb r0, [r4, 0x4]
mov r5, r8
ands r0, r5
ldrb r5, [r7, 0x7]
mov r4, r10
ands r4, r5
orrs r4, r0
strb r4, [r7, 0x7]
mov r6, r9
ldrb r0, [r6, 0x5]
mov r5, r8
ands r0, r5
lsls r0, 2
movs r5, 0xD
negs r5, r5
ands r5, r4
orrs r5, r0
strb r5, [r7, 0x7]
ldrb r4, [r6, 0x6]
mov r6, r8
ands r4, r6
lsls r4, 4
movs r0, 0x31
negs r0, r0
ands r0, r5
orrs r0, r4
strb r0, [r7, 0x7]
mov r5, sp
mov r6, r9
ldrb r4, [r6, 0x7]
lsls r4, 6
movs r6, 0x3F
ands r0, r6
orrs r0, r4
strb r0, [r5, 0x7]
mov r8, sp
mov r0, r9
ldrb r4, [r0, 0x8]
movs r7, 0x3
adds r0, r7, 0
ands r0, r4
mov r4, r8
ldrb r5, [r4, 0x8]
mov r4, r10
ands r4, r5
orrs r4, r0
mov r5, r8
strb r4, [r5, 0x8]
mov r6, r9
ldrb r5, [r6, 0x9]
adds r0, r7, 0
ands r0, r5
lsls r0, 2
movs r5, 0xD
negs r5, r5
ands r5, r4
orrs r5, r0
mov r0, r8
strb r5, [r0, 0x8]
ldrb r0, [r1]
adds r4, r7, 0
ands r4, r0
lsls r4, 4
movs r0, 0x31
negs r0, r0
ands r0, r5
orrs r0, r4
mov r4, r8
strb r0, [r4, 0x8]
mov r5, sp
ldrb r4, [r2]
lsls r4, 6
movs r6, 0x3F
ands r0, r6
orrs r0, r4
strb r0, [r5, 0x8]
ldrb r4, [r3]
adds r0, r7, 0
ands r0, r4
ldrb r4, [r5, 0x9]
mov r6, r10
ands r6, r4
orrs r6, r0
mov r10, r6
strb r6, [r5, 0x9]
ldr r0, [sp, 0x40]
ldrb r4, [r0]
adds r0, r7, 0
ands r0, r4
lsls r0, 2
movs r4, 0xD
negs r4, r4
ands r6, r4
orrs r6, r0
str r6, [sp, 0x10]
strb r6, [r5, 0x9]
mov r4, sp
ldr r5, [sp, 0x44]
ldrb r0, [r5]
adds r6, r7, 0
ands r6, r0
lsls r0, r6, 4
subs r7, 0x34
ldr r5, [sp, 0x10]
ands r7, r5
orrs r7, r0
strb r7, [r4, 0x9]
mov r5, sp
ldrb r0, [r1, 0x4]
movs r6, 0x1
mov r12, r6
mov r4, r12
ands r4, r0
lsls r4, 6
movs r0, 0x41
negs r0, r0
mov r10, r0
ands r0, r7
orrs r0, r4
strb r0, [r5, 0x9]
ldrb r4, [r2, 0x4]
lsls r4, 7
movs r5, 0x7F
ands r0, r5
orrs r0, r4
mov r4, r8
strb r0, [r4, 0x9]
ldrb r4, [r3, 0x4]
mov r0, r12
ands r0, r4
mov r5, r8
ldrb r4, [r5, 0xA]
movs r7, 0x2
negs r7, r7
adds r5, r7, 0
ands r5, r4
orrs r5, r0
mov r6, r8
strb r5, [r6, 0xA]
mov r9, sp
ldr r4, [sp, 0x40]
ldrb r0, [r4, 0x4]
mov r4, r12
ands r4, r0
lsls r4, 1
movs r6, 0x3
negs r6, r6
mov r8, r6
mov r0, r8
ands r0, r5
orrs r0, r4
mov r4, r9
strb r0, [r4, 0xA]
ldr r6, [sp, 0x44]
ldrb r5, [r6, 0x4]
mov r4, r12
ands r4, r5
lsls r4, 2
movs r5, 0x5
negs r5, r5
ands r0, r5
orrs r0, r4
mov r4, r9
strb r0, [r4, 0xA]
mov r4, sp
ldrb r1, [r1, 0x8]
mov r0, r12
ands r0, r1
lsls r0, 2
ldrb r1, [r4, 0xB]
ands r5, r1
orrs r5, r0
strb r5, [r4, 0xB]
ldrb r1, [r2, 0x8]
mov r0, r12
ands r0, r1
lsls r0, 3
movs r1, 0x9
negs r1, r1
ands r1, r5
orrs r1, r0
strb r1, [r4, 0xB]
ldrb r2, [r3, 0x8]
mov r0, r12
ands r0, r2
lsls r0, 4
movs r2, 0x11
negs r2, r2
ands r2, r1
orrs r2, r0
strb r2, [r4, 0xB]
mov r3, sp
ldr r5, [sp, 0x40]
ldrb r0, [r5, 0x8]
mov r1, r12
ands r1, r0
lsls r1, 5
movs r0, 0x21
negs r0, r0
ands r0, r2
orrs r0, r1
strb r0, [r3, 0xB]
mov r2, sp
ldrb r1, [r6, 0x8]
mov r6, r12
ands r6, r1
lsls r1, r6, 6
mov r3, r10
ands r0, r3
orrs r0, r1
strb r0, [r2, 0xB]
ldr r4, [sp, 0x1C]
lsrs r3, r4, 21
ldrb r1, [r2, 0xA]
movs r0, 0x7
ands r0, r1
orrs r0, r3
strb r0, [r2, 0xA]
mov r1, sp
ldr r5, [sp, 0x4C]
movs r6, 0x1
ands r5, r6
lsls r2, r5, 1
ldrb r0, [r1, 0xB]
mov r3, r8
ands r3, r0
orrs r3, r2
mov r8, r3
strb r3, [r1, 0xB]
mov r0, sp
ldr r4, [sp, 0x50]
ands r4, r6
mov r5, r8
ands r5, r7
orrs r5, r4
strb r5, [r0, 0xB]
bl RfuPrepareSend0x2f00
add sp, 0x20
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_815A61C
thumb_func_start sub_815A950
sub_815A950: @ 815A950
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
adds r7, r1, 0
adds r5, r2, 0
adds r6, r3, 0
ldr r0, [sp, 0x1C]
mov r12, r0
ldr r1, [sp, 0x20]
mov r8, r1
ldr r0, [sp, 0x24]
mov r9, r0
adds r2, r7, 0
adds r2, 0x14
ldr r4, _0815A98C @ =gRecvCmds
ldrh r0, [r4]
movs r1, 0xFF
lsls r1, 8
ands r1, r0
movs r0, 0xBC
lsls r0, 6
cmp r1, r0
bne _0815A988
adds r3, r4, 0x2
ldrb r0, [r4, 0x2]
cmp r0, 0x2
beq _0815A990
_0815A988:
movs r0, 0
b _0815AACA
.align 2, 0
_0815A98C: .4byte gRecvCmds
_0815A990:
ldrb r0, [r3, 0x1]
lsls r0, 28
lsrs r0, 28
strb r0, [r2, 0xB]
ldrb r0, [r3, 0x1]
lsrs r0, 4
strb r0, [r2, 0xC]
ldrb r0, [r3, 0x2]
lsls r0, 28
lsrs r0, 28
strb r0, [r2, 0xD]
ldrb r0, [r3, 0x2]
lsrs r0, 4
strb r0, [r2, 0xE]
ldrb r0, [r3, 0x3]
lsls r0, 28
lsrs r0, 28
strb r0, [r2, 0xF]
ldrb r0, [r3, 0x3]
lsrs r0, 4
strb r0, [r2, 0x10]
ldrb r0, [r3, 0x4]
lsls r0, 28
lsrs r0, 28
strb r0, [r2, 0x11]
ldrb r0, [r3, 0x4]
lsrs r0, 4
strb r0, [r2, 0x12]
ldrb r0, [r3, 0x5]
lsls r0, 28
lsrs r0, 28
strb r0, [r2, 0x13]
ldrb r0, [r3, 0x5]
lsrs r0, 4
strb r0, [r2, 0x14]
ldrb r0, [r3, 0x1]
lsls r0, 28
lsrs r0, 28
strb r0, [r2, 0x15]
ldrb r0, [r3, 0x6]
lsls r0, 30
lsrs r0, 30
strb r0, [r7, 0x14]
ldrb r0, [r3, 0x6]
lsls r0, 28
lsrs r0, 30
strb r0, [r2, 0x1]
ldrb r0, [r3, 0x6]
lsls r0, 26
lsrs r0, 30
strb r0, [r2, 0x2]
ldrb r0, [r3, 0x6]
lsrs r0, 6
strb r0, [r2, 0x3]
ldrb r0, [r3, 0x7]
lsls r0, 30
lsrs r0, 30
strb r0, [r2, 0x4]
ldrb r0, [r3, 0x7]
lsls r0, 28
lsrs r0, 30
strb r0, [r2, 0x5]
ldrb r0, [r3, 0x7]
lsls r0, 26
lsrs r0, 30
strb r0, [r2, 0x6]
ldrb r0, [r3, 0x7]
lsrs r0, 6
strb r0, [r2, 0x7]
ldrb r0, [r3, 0x8]
lsls r0, 30
lsrs r0, 30
strb r0, [r2, 0x8]
ldrb r0, [r3, 0x8]
lsls r0, 28
lsrs r0, 30
strb r0, [r2, 0x9]
ldrb r0, [r3, 0x6]
lsls r0, 30
lsrs r0, 30
strb r0, [r2, 0xA]
ldrb r0, [r3, 0x8]
lsls r0, 26
lsrs r0, 30
strb r0, [r5]
ldrb r0, [r3, 0x9]
lsls r0, 25
lsrs r0, 31
strb r0, [r5, 0x4]
ldrb r0, [r3, 0xB]
lsls r0, 29
lsrs r0, 31
strb r0, [r5, 0x8]
ldrb r0, [r3, 0x8]
lsrs r0, 6
strb r0, [r6]
ldrb r0, [r3, 0x9]
lsrs r0, 7
strb r0, [r6, 0x4]
ldrb r0, [r3, 0xB]
lsls r0, 28
lsrs r0, 31
strb r0, [r6, 0x8]
ldrb r0, [r3, 0x9]
lsls r0, 30
lsrs r0, 30
mov r1, r12
strb r0, [r1]
ldrb r0, [r3, 0xA]
lsls r0, 31
lsrs r0, 31
strb r0, [r1, 0x4]
ldrb r0, [r3, 0xB]
lsls r0, 27
lsrs r0, 31
strb r0, [r1, 0x8]
ldrb r0, [r3, 0x9]
lsls r0, 28
lsrs r0, 30
mov r1, r8
strb r0, [r1]
ldrb r0, [r3, 0xA]
lsls r0, 30
lsrs r0, 31
strb r0, [r1, 0x4]
ldrb r0, [r3, 0xB]
lsls r0, 26
lsrs r0, 31
strb r0, [r1, 0x8]
ldrb r0, [r3, 0x9]
lsls r0, 26
lsrs r0, 30
mov r1, r9
strb r0, [r1]
ldrb r0, [r3, 0xA]
lsls r0, 29
lsrs r0, 31
strb r0, [r1, 0x4]
ldrb r0, [r3, 0xB]
lsls r0, 25
lsrs r0, 31
strb r0, [r1, 0x8]
ldrb r0, [r3, 0xA]
lsrs r0, 3
ldr r1, [sp, 0x28]
strb r0, [r1]
ldrb r0, [r3, 0xB]
lsls r0, 30
lsrs r0, 31
ldr r1, [sp, 0x2C]
str r0, [r1]
ldrb r0, [r3, 0xB]
lsls r0, 31
lsrs r0, 31
ldr r1, [sp, 0x30]
str r0, [r1]
movs r0, 0x1
_0815AACA:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_815A950
thumb_func_start sub_815AAD8
sub_815AAD8: @ 815AAD8
push {lr}
sub sp, 0x8
lsls r0, 24
lsrs r0, 24
ldr r3, _0815AB00 @ =0xffffff00
ldr r1, [sp]
ands r1, r3
movs r2, 0x3
orrs r1, r2
str r1, [sp]
ldr r1, [sp, 0x4]
ands r1, r3
orrs r1, r0
str r1, [sp, 0x4]
mov r0, sp
bl RfuPrepareSend0x2f00
add sp, 0x8
pop {r0}
bx r0
.align 2, 0
_0815AB00: .4byte 0xffffff00
thumb_func_end sub_815AAD8
thumb_func_start sub_815AB04
sub_815AB04: @ 815AB04
push {r4,lr}
adds r2, r0, 0
adds r4, r1, 0
ldr r3, _0815AB2C @ =gRecvCmds
ldrh r0, [r3]
movs r1, 0xFF
lsls r1, 8
ands r1, r0
movs r0, 0xBC
lsls r0, 6
cmp r1, r0
bne _0815AB28
lsls r0, r2, 4
adds r1, r3, 0x2
adds r1, r0, r1
ldrb r0, [r1]
cmp r0, 0x3
beq _0815AB30
_0815AB28:
movs r0, 0
b _0815AB36
.align 2, 0
_0815AB2C: .4byte gRecvCmds
_0815AB30:
ldrb r0, [r1, 0x4]
strb r0, [r4]
movs r0, 0x1
_0815AB36:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_815AB04
thumb_func_start sub_815AB3C
sub_815AB3C: @ 815AB3C
push {lr}
sub sp, 0x8
ldr r2, _0815AB5C @ =0xffffff00
ldr r1, [sp]
ands r1, r2
movs r2, 0x4
orrs r1, r2
str r1, [sp]
str r0, [sp, 0x4]
mov r0, sp
bl RfuPrepareSend0x2f00
add sp, 0x8
pop {r0}
bx r0
.align 2, 0
_0815AB5C: .4byte 0xffffff00
thumb_func_end sub_815AB3C
thumb_func_start sub_815AB60
sub_815AB60: @ 815AB60
push {lr}
adds r2, r0, 0
ldr r3, _0815AB88 @ =gRecvCmds
ldrh r0, [r3]
movs r1, 0xFF
lsls r1, 8
ands r1, r0
movs r0, 0xBC
lsls r0, 6
cmp r1, r0
bne _0815AB82
lsls r0, r2, 4
adds r1, r3, 0x2
adds r1, r0, r1
ldrb r0, [r1]
cmp r0, 0x4
beq _0815AB8C
_0815AB82:
movs r0, 0
b _0815AB8E
.align 2, 0
_0815AB88: .4byte gRecvCmds
_0815AB8C:
ldr r0, [r1, 0x4]
_0815AB8E:
pop {r1}
bx r1
thumb_func_end sub_815AB60
.align 2, 0 @ Don't pad with nop.
+3 -3
View File
@@ -52,11 +52,11 @@ void StartDodrioBerryPicking(u16 species, MainCallback callback);
u32 sub_815A950(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8);
u32 sub_815AB04(u32 arg0, u8 *arg1);
bool32 sub_815AB60(u8 a0);
bool32 sub_815AB60(u32 a0);
void sub_815A61C(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8);
void sub_815A5BC(u8 a0);
void sub_815A5BC(s32 a0);
void sub_815AAD8(u8 a0);
void sub_815AB3C(u8 a0);
void sub_815AB3C(u32 a0);
u8 sub_815A5E8(s32 a0);
u32 IncrementWithLimit(u32, u32);
void sub_8153A9C(void);
+636
View File
@@ -1,4 +1,5 @@
#include "global.h"
#include "dodrio_berry_picking.h"
#include "link.h"
#include "link_rfu.h"
@@ -21,3 +22,638 @@ u8 sub_815A5E8(s32 a0)
return 0;
}
struct UnkPacket2
{
u8 id;
u8 unk1_0:4;
u8 unk1_1:4;
u8 unk2_0:4;
u8 unk2_1:4;
u8 unk3_0:4;
u8 unk3_1:4;
u8 unk4_0:4;
u8 unk4_1:4;
u8 unk5_0:4;
u8 unk5_1:4;
u8 unk6_0:2;
u8 unk6_1:2;
u8 unk6_2:2;
u8 unk6_3:2;
u8 unk7_0:2;
u8 unk7_1:2;
u8 unk7_2:2;
u8 unk7_3:2;
u8 unk8_0:2;
u8 unk8_1:2;
u8 unk8_2:2;
u8 unk8_3:2;
u8 unk9_0:2;
u8 unk9_1:2;
u8 unk9_2:2;
u8 unk9_3:1;
u8 unk9_4:1;
u8 unkA_0:1;
u8 unkA_1:1;
u8 unkA_2:1;
u8 unkA_3:5;
u8 unkB_0:1;
u8 unkB_1:1;
u8 unkB_2:1;
u8 unkB_3:1;
u8 unkB_4:1;
u8 unkB_5:1;
u8 unkB_6:1;
};
#ifdef NONMATCHING
static void sub_815A61C(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8)
{
struct UnkPacket2 packet;
struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14;
packet.id = 2;
packet.unk1_0 = ptr->unkB[0];
packet.unk1_1 = ptr->unkB[1];
packet.unk2_0 = ptr->unkB[2];
packet.unk2_1 = ptr->unkB[3];
packet.unk3_0 = ptr->unkB[4];
packet.unk3_1 = ptr->unkB[5];
packet.unk4_0 = ptr->unkB[6];
packet.unk4_1 = ptr->unkB[7];
packet.unk5_0 = ptr->unkB[8];
packet.unk5_1 = ptr->unkB[9];
packet.unk6_0 = ptr->unk0[0];
packet.unk6_1 = ptr->unk0[1];
packet.unk6_2 = ptr->unk0[2];
packet.unk6_3 = ptr->unk0[3];
packet.unk7_0 = ptr->unk0[4];
packet.unk7_1 = ptr->unk0[5];
packet.unk7_2 = ptr->unk0[6];
packet.unk7_3 = ptr->unk0[7];
packet.unk8_0 = ptr->unk0[8];
packet.unk8_1 = ptr->unk0[9];
packet.unk8_2 = arg1->unk0;
packet.unk8_3 = arg2->unk0;
packet.unk9_0 = arg3->unk0;
packet.unk9_1 = arg4->unk0;
packet.unk9_2 = arg5->unk0;
packet.unk9_3 = arg1->unk4;
packet.unk9_4 = arg2->unk4;
packet.unkA_0 = arg3->unk4;
packet.unkA_1 = arg4->unk4;
packet.unkA_2 = arg5->unk4;
packet.unkB_2 = arg1->unk8;
packet.unkB_3 = arg2->unk8;
packet.unkB_4 = arg3->unk8;
packet.unkB_5 = arg4->unk8;
packet.unkB_6 = arg5->unk8;
packet.unkA_3 = arg6;
packet.unkB_1 = arg7;
packet.unkB_0 = arg8;
RfuPrepareSend0x2f00(&packet);
}
#else
NAKED
void sub_815A61C(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8)
{
asm_unified(" push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
sub sp, 0x20\n\
ldr r4, [sp, 0x48]\n\
lsls r4, 24\n\
str r4, [sp, 0x1C]\n\
movs r4, 0x14\n\
adds r4, r0\n\
mov r9, r4\n\
mov r5, sp\n\
movs r4, 0x2\n\
strb r4, [r5]\n\
mov r10, sp\n\
mov r5, r9\n\
ldrb r4, [r5, 0xB]\n\
movs r7, 0xF\n\
adds r5, r7, 0\n\
ands r5, r4\n\
mov r6, r10\n\
ldrb r6, [r6, 0x1]\n\
mov r8, r6\n\
movs r4, 0x10\n\
negs r4, r4\n\
mov r6, r8\n\
ands r4, r6\n\
orrs r4, r5\n\
mov r5, r10\n\
strb r4, [r5, 0x1]\n\
mov r8, sp\n\
mov r6, r9\n\
ldrb r5, [r6, 0xC]\n\
lsls r5, 4\n\
ands r4, r7\n\
orrs r4, r5\n\
mov r5, r8\n\
strb r4, [r5, 0x1]\n\
ldrb r5, [r6, 0xD]\n\
movs r6, 0xF\n\
ands r5, r6\n\
mov r4, r10\n\
ldrb r4, [r4, 0x2]\n\
mov r8, r4\n\
movs r4, 0x10\n\
negs r4, r4\n\
mov r6, r8\n\
ands r4, r6\n\
orrs r4, r5\n\
mov r5, r10\n\
strb r4, [r5, 0x2]\n\
mov r8, sp\n\
mov r6, r9\n\
ldrb r5, [r6, 0xE]\n\
lsls r5, 4\n\
ands r4, r7\n\
orrs r4, r5\n\
mov r5, r8\n\
strb r4, [r5, 0x2]\n\
ldrb r5, [r6, 0xF]\n\
movs r6, 0xF\n\
ands r5, r6\n\
mov r4, r10\n\
ldrb r4, [r4, 0x3]\n\
mov r8, r4\n\
movs r4, 0x10\n\
negs r4, r4\n\
mov r6, r8\n\
ands r4, r6\n\
orrs r4, r5\n\
mov r5, r10\n\
strb r4, [r5, 0x3]\n\
mov r8, sp\n\
mov r6, r9\n\
ldrb r5, [r6, 0x10]\n\
lsls r5, 4\n\
ands r4, r7\n\
orrs r4, r5\n\
mov r5, r8\n\
strb r4, [r5, 0x3]\n\
ldrb r5, [r6, 0x11]\n\
movs r6, 0xF\n\
ands r5, r6\n\
mov r4, r10\n\
ldrb r4, [r4, 0x4]\n\
mov r8, r4\n\
movs r4, 0x10\n\
negs r4, r4\n\
mov r6, r8\n\
ands r4, r6\n\
orrs r4, r5\n\
mov r5, r10\n\
strb r4, [r5, 0x4]\n\
mov r8, sp\n\
mov r6, r9\n\
ldrb r5, [r6, 0x12]\n\
lsls r5, 4\n\
ands r4, r7\n\
orrs r4, r5\n\
mov r5, r8\n\
strb r4, [r5, 0x4]\n\
ldrb r4, [r6, 0x13]\n\
movs r6, 0xF\n\
ands r4, r6\n\
mov r6, r8\n\
ldrb r5, [r6, 0x5]\n\
movs r6, 0x10\n\
negs r6, r6\n\
ands r6, r5\n\
orrs r6, r4\n\
str r6, [sp, 0xC]\n\
mov r4, r8\n\
strb r6, [r4, 0x5]\n\
mov r5, sp\n\
mov r6, r9\n\
ldrb r4, [r6, 0x14]\n\
lsls r4, 4\n\
ldr r6, [sp, 0xC]\n\
ands r6, r7\n\
orrs r6, r4\n\
strb r6, [r5, 0x5]\n\
mov r7, sp\n\
movs r4, 0x3\n\
mov r8, r4\n\
ldrb r0, [r0, 0x14]\n\
mov r5, r8\n\
ands r0, r5\n\
ldrb r5, [r7, 0x6]\n\
movs r6, 0x4\n\
negs r6, r6\n\
mov r10, r6\n\
mov r4, r10\n\
ands r4, r5\n\
orrs r4, r0\n\
strb r4, [r7, 0x6]\n\
mov r5, r9\n\
ldrb r0, [r5, 0x1]\n\
mov r6, r8\n\
ands r0, r6\n\
lsls r0, 2\n\
movs r5, 0xD\n\
negs r5, r5\n\
ands r5, r4\n\
orrs r5, r0\n\
strb r5, [r7, 0x6]\n\
mov r0, r9\n\
ldrb r4, [r0, 0x2]\n\
ands r4, r6\n\
lsls r4, 4\n\
movs r0, 0x31\n\
negs r0, r0\n\
ands r0, r5\n\
orrs r0, r4\n\
strb r0, [r7, 0x6]\n\
mov r5, sp\n\
mov r6, r9\n\
ldrb r4, [r6, 0x3]\n\
lsls r4, 6\n\
movs r6, 0x3F\n\
ands r0, r6\n\
orrs r0, r4\n\
strb r0, [r5, 0x6]\n\
mov r4, r9\n\
ldrb r0, [r4, 0x4]\n\
mov r5, r8\n\
ands r0, r5\n\
ldrb r5, [r7, 0x7]\n\
mov r4, r10\n\
ands r4, r5\n\
orrs r4, r0\n\
strb r4, [r7, 0x7]\n\
mov r6, r9\n\
ldrb r0, [r6, 0x5]\n\
mov r5, r8\n\
ands r0, r5\n\
lsls r0, 2\n\
movs r5, 0xD\n\
negs r5, r5\n\
ands r5, r4\n\
orrs r5, r0\n\
strb r5, [r7, 0x7]\n\
ldrb r4, [r6, 0x6]\n\
mov r6, r8\n\
ands r4, r6\n\
lsls r4, 4\n\
movs r0, 0x31\n\
negs r0, r0\n\
ands r0, r5\n\
orrs r0, r4\n\
strb r0, [r7, 0x7]\n\
mov r5, sp\n\
mov r6, r9\n\
ldrb r4, [r6, 0x7]\n\
lsls r4, 6\n\
movs r6, 0x3F\n\
ands r0, r6\n\
orrs r0, r4\n\
strb r0, [r5, 0x7]\n\
mov r8, sp\n\
mov r0, r9\n\
ldrb r4, [r0, 0x8]\n\
movs r7, 0x3\n\
adds r0, r7, 0\n\
ands r0, r4\n\
mov r4, r8\n\
ldrb r5, [r4, 0x8]\n\
mov r4, r10\n\
ands r4, r5\n\
orrs r4, r0\n\
mov r5, r8\n\
strb r4, [r5, 0x8]\n\
mov r6, r9\n\
ldrb r5, [r6, 0x9]\n\
adds r0, r7, 0\n\
ands r0, r5\n\
lsls r0, 2\n\
movs r5, 0xD\n\
negs r5, r5\n\
ands r5, r4\n\
orrs r5, r0\n\
mov r0, r8\n\
strb r5, [r0, 0x8]\n\
ldrb r0, [r1]\n\
adds r4, r7, 0\n\
ands r4, r0\n\
lsls r4, 4\n\
movs r0, 0x31\n\
negs r0, r0\n\
ands r0, r5\n\
orrs r0, r4\n\
mov r4, r8\n\
strb r0, [r4, 0x8]\n\
mov r5, sp\n\
ldrb r4, [r2]\n\
lsls r4, 6\n\
movs r6, 0x3F\n\
ands r0, r6\n\
orrs r0, r4\n\
strb r0, [r5, 0x8]\n\
ldrb r4, [r3]\n\
adds r0, r7, 0\n\
ands r0, r4\n\
ldrb r4, [r5, 0x9]\n\
mov r6, r10\n\
ands r6, r4\n\
orrs r6, r0\n\
mov r10, r6\n\
strb r6, [r5, 0x9]\n\
ldr r0, [sp, 0x40]\n\
ldrb r4, [r0]\n\
adds r0, r7, 0\n\
ands r0, r4\n\
lsls r0, 2\n\
movs r4, 0xD\n\
negs r4, r4\n\
ands r6, r4\n\
orrs r6, r0\n\
str r6, [sp, 0x10]\n\
strb r6, [r5, 0x9]\n\
mov r4, sp\n\
ldr r5, [sp, 0x44]\n\
ldrb r0, [r5]\n\
adds r6, r7, 0\n\
ands r6, r0\n\
lsls r0, r6, 4\n\
subs r7, 0x34\n\
ldr r5, [sp, 0x10]\n\
ands r7, r5\n\
orrs r7, r0\n\
strb r7, [r4, 0x9]\n\
mov r5, sp\n\
ldrb r0, [r1, 0x4]\n\
movs r6, 0x1\n\
mov r12, r6\n\
mov r4, r12\n\
ands r4, r0\n\
lsls r4, 6\n\
movs r0, 0x41\n\
negs r0, r0\n\
mov r10, r0\n\
ands r0, r7\n\
orrs r0, r4\n\
strb r0, [r5, 0x9]\n\
ldrb r4, [r2, 0x4]\n\
lsls r4, 7\n\
movs r5, 0x7F\n\
ands r0, r5\n\
orrs r0, r4\n\
mov r4, r8\n\
strb r0, [r4, 0x9]\n\
ldrb r4, [r3, 0x4]\n\
mov r0, r12\n\
ands r0, r4\n\
mov r5, r8\n\
ldrb r4, [r5, 0xA]\n\
movs r7, 0x2\n\
negs r7, r7\n\
adds r5, r7, 0\n\
ands r5, r4\n\
orrs r5, r0\n\
mov r6, r8\n\
strb r5, [r6, 0xA]\n\
mov r9, sp\n\
ldr r4, [sp, 0x40]\n\
ldrb r0, [r4, 0x4]\n\
mov r4, r12\n\
ands r4, r0\n\
lsls r4, 1\n\
movs r6, 0x3\n\
negs r6, r6\n\
mov r8, r6\n\
mov r0, r8\n\
ands r0, r5\n\
orrs r0, r4\n\
mov r4, r9\n\
strb r0, [r4, 0xA]\n\
ldr r6, [sp, 0x44]\n\
ldrb r5, [r6, 0x4]\n\
mov r4, r12\n\
ands r4, r5\n\
lsls r4, 2\n\
movs r5, 0x5\n\
negs r5, r5\n\
ands r0, r5\n\
orrs r0, r4\n\
mov r4, r9\n\
strb r0, [r4, 0xA]\n\
mov r4, sp\n\
ldrb r1, [r1, 0x8]\n\
mov r0, r12\n\
ands r0, r1\n\
lsls r0, 2\n\
ldrb r1, [r4, 0xB]\n\
ands r5, r1\n\
orrs r5, r0\n\
strb r5, [r4, 0xB]\n\
ldrb r1, [r2, 0x8]\n\
mov r0, r12\n\
ands r0, r1\n\
lsls r0, 3\n\
movs r1, 0x9\n\
negs r1, r1\n\
ands r1, r5\n\
orrs r1, r0\n\
strb r1, [r4, 0xB]\n\
ldrb r2, [r3, 0x8]\n\
mov r0, r12\n\
ands r0, r2\n\
lsls r0, 4\n\
movs r2, 0x11\n\
negs r2, r2\n\
ands r2, r1\n\
orrs r2, r0\n\
strb r2, [r4, 0xB]\n\
mov r3, sp\n\
ldr r5, [sp, 0x40]\n\
ldrb r0, [r5, 0x8]\n\
mov r1, r12\n\
ands r1, r0\n\
lsls r1, 5\n\
movs r0, 0x21\n\
negs r0, r0\n\
ands r0, r2\n\
orrs r0, r1\n\
strb r0, [r3, 0xB]\n\
mov r2, sp\n\
ldrb r1, [r6, 0x8]\n\
mov r6, r12\n\
ands r6, r1\n\
lsls r1, r6, 6\n\
mov r3, r10\n\
ands r0, r3\n\
orrs r0, r1\n\
strb r0, [r2, 0xB]\n\
ldr r4, [sp, 0x1C]\n\
lsrs r3, r4, 21\n\
ldrb r1, [r2, 0xA]\n\
movs r0, 0x7\n\
ands r0, r1\n\
orrs r0, r3\n\
strb r0, [r2, 0xA]\n\
mov r1, sp\n\
ldr r5, [sp, 0x4C]\n\
movs r6, 0x1\n\
ands r5, r6\n\
lsls r2, r5, 1\n\
ldrb r0, [r1, 0xB]\n\
mov r3, r8\n\
ands r3, r0\n\
orrs r3, r2\n\
mov r8, r3\n\
strb r3, [r1, 0xB]\n\
mov r0, sp\n\
ldr r4, [sp, 0x50]\n\
ands r4, r6\n\
mov r5, r8\n\
ands r5, r7\n\
orrs r5, r4\n\
strb r5, [r0, 0xB]\n\
bl RfuPrepareSend0x2f00\n\
add sp, 0x20\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
");
}
#endif
u32 sub_815A950(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8)
{
struct UnkPacket2 *packet;
struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14;
if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
return 0;
packet = (void *)&gRecvCmds[0][1];
if (packet->id == 2)
{
ptr->unkB[0] = packet->unk1_0;
ptr->unkB[1] = packet->unk1_1;
ptr->unkB[2] = packet->unk2_0;
ptr->unkB[3] = packet->unk2_1;
ptr->unkB[4] = packet->unk3_0;
ptr->unkB[5] = packet->unk3_1;
ptr->unkB[6] = packet->unk4_0;
ptr->unkB[7] = packet->unk4_1;
ptr->unkB[8] = packet->unk5_0;
ptr->unkB[9] = packet->unk5_1;
ptr->unkB[10] = packet->unk1_0;
ptr->unk0[0] = packet->unk6_0;
ptr->unk0[1] = packet->unk6_1;
ptr->unk0[2] = packet->unk6_2;
ptr->unk0[3] = packet->unk6_3;
ptr->unk0[4] = packet->unk7_0;
ptr->unk0[5] = packet->unk7_1;
ptr->unk0[6] = packet->unk7_2;
ptr->unk0[7] = packet->unk7_3;
ptr->unk0[8] = packet->unk8_0;
ptr->unk0[9] = packet->unk8_1;
ptr->unk0[10] = packet->unk6_0;
arg1->unk0 = packet->unk8_2;
arg1->unk4 = packet->unk9_3;
arg1->unk8 = packet->unkB_2;
arg2->unk0 = packet->unk8_3;
arg2->unk4 = packet->unk9_4;
arg2->unk8 = packet->unkB_3;
arg3->unk0 = packet->unk9_0;
arg3->unk4 = packet->unkA_0;
arg3->unk8 = packet->unkB_4;
arg4->unk0 = packet->unk9_1;
arg4->unk4 = packet->unkA_1;
arg4->unk8 = packet->unkB_5;
arg5->unk0 = packet->unk9_2;
arg5->unk4 = packet->unkA_2;
arg5->unk8 = packet->unkB_6;
*arg6 = packet->unkA_3;
*arg7 = packet->unkB_1;
*arg8 = packet->unkB_0;
return 1;
}
return 0;
}
struct UnkPacket3
{
u8 id;
u8 ALIGNED(4) unk4;
};
void sub_815AAD8(u8 arg0)
{
struct UnkPacket3 packet;
packet.id = 3;
packet.unk4 = arg0;
RfuPrepareSend0x2f00(&packet);
}
u32 sub_815AB04(u32 arg0, u8 *arg1)
{
struct UnkPacket3 *packet;
if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
return 0;
packet = (void *)&gRecvCmds[arg0][1];
if (packet->id == 3)
{
*arg1 = packet->unk4;
return 1;
}
return 0;
}
struct UnkPacket4
{
u8 id;
u32 unk4;
};
void sub_815AB3C(u32 arg0)
{
struct UnkPacket4 packet;
packet.id = 4;
packet.unk4 = arg0;
RfuPrepareSend0x2f00(&packet);
}
u32 sub_815AB60(u32 arg0)
{
struct UnkPacket4 *packet;
if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
return 0;
packet = (void *)&gRecvCmds[arg0][1];
if (packet->id == 4)
return packet->unk4;
return 0;
}