mirror of
https://github.com/jiangzhengwenjz/katam.git
synced 2024-11-27 07:00:41 +00:00
sub_081564D8
This commit is contained in:
parent
27181e9cd4
commit
3724476802
@ -6931,633 +6931,3 @@ _081564C0:
|
|||||||
.align 2, 0
|
.align 2, 0
|
||||||
_081564D0: .4byte gUnk_030039A4
|
_081564D0: .4byte gUnk_030039A4
|
||||||
_081564D4: .4byte gUnk_03002EC0
|
_081564D4: .4byte gUnk_03002EC0
|
||||||
|
|
||||||
thumb_func_start sub_081564D8
|
|
||||||
sub_081564D8: @ 0x081564D8
|
|
||||||
push {r4, r5, r6, r7, lr}
|
|
||||||
mov r7, sl
|
|
||||||
mov r6, sb
|
|
||||||
mov r5, r8
|
|
||||||
push {r5, r6, r7}
|
|
||||||
sub sp, #0x38
|
|
||||||
mov sl, r0
|
|
||||||
movs r0, #0
|
|
||||||
str r0, [sp, #0x20]
|
|
||||||
movs r1, #0
|
|
||||||
str r1, [sp, #0x24]
|
|
||||||
movs r2, #0
|
|
||||||
str r2, [sp, #0x28]
|
|
||||||
movs r3, #0
|
|
||||||
str r3, [sp, #0x2c]
|
|
||||||
movs r4, #0
|
|
||||||
str r4, [sp, #0x30]
|
|
||||||
mov r0, sl
|
|
||||||
ldr r4, [r0, #4]
|
|
||||||
movs r0, #1
|
|
||||||
rsbs r0, r0, #0
|
|
||||||
cmp r4, r0
|
|
||||||
bne _08156508
|
|
||||||
b _08156988
|
|
||||||
_08156508:
|
|
||||||
lsrs r0, r4, #0x1c
|
|
||||||
cmp r0, #0
|
|
||||||
bne _08156530
|
|
||||||
ldr r3, _0815652C @ =gUnk_03003674
|
|
||||||
ldr r0, [r3]
|
|
||||||
mov r1, sl
|
|
||||||
ldrh r2, [r1, #0xc]
|
|
||||||
ldr r0, [r0, #4]
|
|
||||||
lsls r1, r2, #2
|
|
||||||
adds r1, r1, r0
|
|
||||||
lsls r0, r4, #1
|
|
||||||
adds r0, r0, r4
|
|
||||||
lsls r0, r0, #2
|
|
||||||
ldr r1, [r1]
|
|
||||||
adds r1, r1, r0
|
|
||||||
mov sb, r1
|
|
||||||
b _08156546
|
|
||||||
.align 2, 0
|
|
||||||
_0815652C: .4byte gUnk_03003674
|
|
||||||
_08156530:
|
|
||||||
ldr r3, _081565E4 @ =gUnk_03003674
|
|
||||||
ldr r0, [r3]
|
|
||||||
mov r1, sl
|
|
||||||
ldrh r2, [r1, #0xc]
|
|
||||||
ldr r1, [r0, #4]
|
|
||||||
lsls r0, r2, #2
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r1, r4, #4
|
|
||||||
ldr r0, [r0]
|
|
||||||
adds r0, r0, r1
|
|
||||||
mov sb, r0
|
|
||||||
_08156546:
|
|
||||||
mov r4, sb
|
|
||||||
ldrh r0, [r4, #2]
|
|
||||||
mov r1, sl
|
|
||||||
strb r0, [r1, #0x1e]
|
|
||||||
movs r0, #0x10
|
|
||||||
ldrsh r4, [r1, r0]
|
|
||||||
str r4, [sp, #8]
|
|
||||||
movs r4, #0x12
|
|
||||||
ldrsh r1, [r1, r4]
|
|
||||||
str r1, [sp, #0xc]
|
|
||||||
mov r0, sl
|
|
||||||
ldr r1, [r0, #8]
|
|
||||||
movs r0, #0x80
|
|
||||||
lsls r0, r0, #0xa
|
|
||||||
ands r0, r1
|
|
||||||
adds r5, r1, #0
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08156580
|
|
||||||
ldr r0, _081565E8 @ =gUnk_030023F4
|
|
||||||
movs r4, #0
|
|
||||||
ldrsh r1, [r0, r4]
|
|
||||||
ldr r4, [sp, #8]
|
|
||||||
subs r4, r4, r1
|
|
||||||
str r4, [sp, #8]
|
|
||||||
movs r1, #2
|
|
||||||
ldrsh r0, [r0, r1]
|
|
||||||
ldr r4, [sp, #0xc]
|
|
||||||
subs r4, r4, r0
|
|
||||||
str r4, [sp, #0xc]
|
|
||||||
_08156580:
|
|
||||||
mov r0, sb
|
|
||||||
ldrh r0, [r0, #4]
|
|
||||||
str r0, [sp, #0x10]
|
|
||||||
mov r1, sb
|
|
||||||
ldrh r1, [r1, #6]
|
|
||||||
str r1, [sp, #0x14]
|
|
||||||
movs r0, #0x20
|
|
||||||
ands r0, r5
|
|
||||||
cmp r0, #0
|
|
||||||
beq _081565EC
|
|
||||||
movs r4, #0x80
|
|
||||||
lsls r4, r4, #1
|
|
||||||
adds r0, r4, #0
|
|
||||||
ldr r1, [sp, #0x20]
|
|
||||||
orrs r1, r0
|
|
||||||
str r1, [sp, #0x20]
|
|
||||||
movs r0, #0x1f
|
|
||||||
ands r0, r5
|
|
||||||
lsls r0, r0, #9
|
|
||||||
ldr r4, [sp, #0x24]
|
|
||||||
orrs r4, r0
|
|
||||||
str r4, [sp, #0x24]
|
|
||||||
movs r0, #0x40
|
|
||||||
ands r0, r5
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08156662
|
|
||||||
ldr r1, [sp, #0x10]
|
|
||||||
lsrs r0, r1, #1
|
|
||||||
ldr r4, [sp, #8]
|
|
||||||
subs r4, r4, r0
|
|
||||||
str r4, [sp, #8]
|
|
||||||
ldr r1, [sp, #0x14]
|
|
||||||
lsrs r0, r1, #1
|
|
||||||
ldr r4, [sp, #0xc]
|
|
||||||
subs r4, r4, r0
|
|
||||||
str r4, [sp, #0xc]
|
|
||||||
ldr r0, [sp, #0x10]
|
|
||||||
lsls r0, r0, #1
|
|
||||||
str r0, [sp, #0x10]
|
|
||||||
lsls r1, r1, #1
|
|
||||||
str r1, [sp, #0x14]
|
|
||||||
movs r1, #0x80
|
|
||||||
lsls r1, r1, #2
|
|
||||||
adds r0, r1, #0
|
|
||||||
ldr r4, [sp, #0x20]
|
|
||||||
orrs r4, r0
|
|
||||||
lsls r0, r4, #0x10
|
|
||||||
lsrs r0, r0, #0x10
|
|
||||||
str r0, [sp, #0x20]
|
|
||||||
b _08156662
|
|
||||||
.align 2, 0
|
|
||||||
_081565E4: .4byte gUnk_03003674
|
|
||||||
_081565E8: .4byte gUnk_030023F4
|
|
||||||
_081565EC:
|
|
||||||
movs r0, #0x80
|
|
||||||
lsls r0, r0, #4
|
|
||||||
ands r0, r5
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08156608
|
|
||||||
mov r1, sb
|
|
||||||
movs r4, #0xa
|
|
||||||
ldrsh r0, [r1, r4]
|
|
||||||
ldr r1, [sp, #0x14]
|
|
||||||
subs r0, r1, r0
|
|
||||||
ldr r4, [sp, #0xc]
|
|
||||||
subs r4, r4, r0
|
|
||||||
str r4, [sp, #0xc]
|
|
||||||
b _08156614
|
|
||||||
_08156608:
|
|
||||||
mov r1, sb
|
|
||||||
movs r4, #0xa
|
|
||||||
ldrsh r0, [r1, r4]
|
|
||||||
ldr r1, [sp, #0xc]
|
|
||||||
subs r1, r1, r0
|
|
||||||
str r1, [sp, #0xc]
|
|
||||||
_08156614:
|
|
||||||
movs r0, #0x80
|
|
||||||
lsls r0, r0, #3
|
|
||||||
ands r0, r5
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08156630
|
|
||||||
mov r4, sb
|
|
||||||
movs r1, #8
|
|
||||||
ldrsh r0, [r4, r1]
|
|
||||||
ldr r4, [sp, #0x10]
|
|
||||||
subs r0, r4, r0
|
|
||||||
ldr r1, [sp, #8]
|
|
||||||
subs r1, r1, r0
|
|
||||||
str r1, [sp, #8]
|
|
||||||
b _0815663C
|
|
||||||
_08156630:
|
|
||||||
mov r4, sb
|
|
||||||
movs r1, #8
|
|
||||||
ldrsh r0, [r4, r1]
|
|
||||||
ldr r4, [sp, #8]
|
|
||||||
subs r4, r4, r0
|
|
||||||
str r4, [sp, #8]
|
|
||||||
_0815663C:
|
|
||||||
lsrs r0, r5, #0xb
|
|
||||||
movs r6, #1
|
|
||||||
ands r0, r6
|
|
||||||
mov r4, sb
|
|
||||||
ldrh r1, [r4]
|
|
||||||
lsls r4, r1, #0x10
|
|
||||||
lsrs r1, r4, #0x1f
|
|
||||||
cmp r0, r1
|
|
||||||
beq _08156652
|
|
||||||
movs r0, #1
|
|
||||||
str r0, [sp, #0x2c]
|
|
||||||
_08156652:
|
|
||||||
lsrs r1, r5, #0xa
|
|
||||||
lsrs r0, r4, #0x1e
|
|
||||||
eors r0, r1
|
|
||||||
ands r0, r6
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08156662
|
|
||||||
movs r1, #1
|
|
||||||
str r1, [sp, #0x30]
|
|
||||||
_08156662:
|
|
||||||
ldr r4, [sp, #0x10]
|
|
||||||
cmp r4, #0
|
|
||||||
beq _0815668A
|
|
||||||
ldr r1, [sp, #8]
|
|
||||||
adds r0, r1, r4
|
|
||||||
cmp r0, #0
|
|
||||||
bge _08156672
|
|
||||||
b _08156988
|
|
||||||
_08156672:
|
|
||||||
cmp r1, #0xf0
|
|
||||||
ble _08156678
|
|
||||||
b _08156988
|
|
||||||
_08156678:
|
|
||||||
ldr r4, [sp, #0xc]
|
|
||||||
ldr r1, [sp, #0x14]
|
|
||||||
adds r0, r4, r1
|
|
||||||
cmp r0, #0
|
|
||||||
bge _08156684
|
|
||||||
b _08156988
|
|
||||||
_08156684:
|
|
||||||
cmp r4, #0xa0
|
|
||||||
ble _0815668A
|
|
||||||
b _08156988
|
|
||||||
_0815668A:
|
|
||||||
mov r4, sl
|
|
||||||
ldrb r1, [r4, #0x1f]
|
|
||||||
lsls r1, r1, #0xc
|
|
||||||
ldr r0, [sp, #0x28]
|
|
||||||
adds r1, r0, r1
|
|
||||||
lsls r1, r1, #0x10
|
|
||||||
movs r0, #0xc0
|
|
||||||
lsls r0, r0, #1
|
|
||||||
ands r0, r5
|
|
||||||
lsls r0, r0, #3
|
|
||||||
ldr r4, [sp, #0x20]
|
|
||||||
orrs r4, r0
|
|
||||||
str r4, [sp, #0x20]
|
|
||||||
movs r0, #0xc0
|
|
||||||
lsls r0, r0, #6
|
|
||||||
ands r0, r5
|
|
||||||
lsls r0, r0, #0xe
|
|
||||||
orrs r0, r1
|
|
||||||
lsrs r0, r0, #0x10
|
|
||||||
str r0, [sp, #0x28]
|
|
||||||
ldr r0, [r3]
|
|
||||||
ldr r1, [r0, #8]
|
|
||||||
lsls r0, r2, #2
|
|
||||||
adds r0, r0, r1
|
|
||||||
ldr r0, [r0]
|
|
||||||
str r0, [sp, #0x1c]
|
|
||||||
ldr r0, _0815687C @ =gUnk_030024F0
|
|
||||||
ldrb r0, [r0]
|
|
||||||
mov r1, sl
|
|
||||||
strb r0, [r1, #0x1d]
|
|
||||||
movs r2, #0
|
|
||||||
str r2, [sp, #0x18]
|
|
||||||
mov r3, sb
|
|
||||||
ldrh r3, [r3, #2]
|
|
||||||
cmp r2, r3
|
|
||||||
blo _081566D4
|
|
||||||
b _08156834
|
|
||||||
_081566D4:
|
|
||||||
ldr r4, _08156880 @ =0x040000D4
|
|
||||||
mov r8, r4
|
|
||||||
mov r4, sp
|
|
||||||
_081566DA:
|
|
||||||
mov r1, sb
|
|
||||||
ldrh r0, [r1]
|
|
||||||
ldr r2, _08156884 @ =0x00003FFF
|
|
||||||
adds r1, r2, #0
|
|
||||||
ands r1, r0
|
|
||||||
ldr r3, [sp, #0x18]
|
|
||||||
adds r1, r1, r3
|
|
||||||
lsls r0, r1, #1
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r0, r0, #1
|
|
||||||
ldr r1, [sp, #0x1c]
|
|
||||||
adds r0, r1, r0
|
|
||||||
mov r2, r8
|
|
||||||
str r0, [r2]
|
|
||||||
mov r3, sp
|
|
||||||
str r3, [r2, #4]
|
|
||||||
ldr r0, _08156888 @ =0x80000003
|
|
||||||
str r0, [r2, #8]
|
|
||||||
ldr r0, [r2, #8]
|
|
||||||
ldrh r2, [r4, #2]
|
|
||||||
ldr r1, _0815688C @ =0x000001FF
|
|
||||||
adds r0, r1, #0
|
|
||||||
adds r6, r0, #0
|
|
||||||
ands r6, r2
|
|
||||||
cmp r6, #0xff
|
|
||||||
ble _08156712
|
|
||||||
ldr r3, _08156890 @ =0xFFFFFE00
|
|
||||||
adds r6, r6, r3
|
|
||||||
_08156712:
|
|
||||||
ldrh r0, [r4]
|
|
||||||
ldrb r5, [r4]
|
|
||||||
cmp r5, #0x7f
|
|
||||||
ble _0815671E
|
|
||||||
ldr r1, _08156894 @ =0xFFFFFF00
|
|
||||||
adds r5, r5, r1
|
|
||||||
_0815671E:
|
|
||||||
movs r1, #0xfe
|
|
||||||
lsls r1, r1, #8
|
|
||||||
adds r3, r1, #0
|
|
||||||
ands r3, r2
|
|
||||||
strh r3, [r4, #2]
|
|
||||||
ands r1, r0
|
|
||||||
strh r1, [r4]
|
|
||||||
movs r2, #0xc0
|
|
||||||
lsls r2, r2, #8
|
|
||||||
ands r1, r2
|
|
||||||
lsrs r1, r1, #0xc
|
|
||||||
adds r0, r3, #0
|
|
||||||
ands r0, r2
|
|
||||||
lsrs r0, r0, #0xe
|
|
||||||
orrs r1, r0
|
|
||||||
ldr r2, _08156898 @ =gUnk_08D6084C
|
|
||||||
lsls r1, r1, #1
|
|
||||||
adds r0, r2, #1
|
|
||||||
adds r0, r1, r0
|
|
||||||
ldrb r7, [r0]
|
|
||||||
adds r1, r1, r2
|
|
||||||
ldrb r1, [r1]
|
|
||||||
mov ip, r1
|
|
||||||
ldr r0, [sp, #0x2c]
|
|
||||||
ldr r1, [sp, #0x30]
|
|
||||||
orrs r0, r1
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08156788
|
|
||||||
ldr r2, [sp, #0x2c]
|
|
||||||
cmp r2, #0
|
|
||||||
beq _0815676E
|
|
||||||
movs r1, #0x80
|
|
||||||
lsls r1, r1, #6
|
|
||||||
adds r0, r1, #0
|
|
||||||
adds r1, r3, #0
|
|
||||||
eors r1, r0
|
|
||||||
strh r1, [r4, #2]
|
|
||||||
ldr r2, [sp, #0x14]
|
|
||||||
subs r0, r2, r7
|
|
||||||
subs r5, r0, r5
|
|
||||||
_0815676E:
|
|
||||||
ldr r3, [sp, #0x30]
|
|
||||||
cmp r3, #0
|
|
||||||
beq _08156788
|
|
||||||
ldrh r0, [r4, #2]
|
|
||||||
movs r2, #0x80
|
|
||||||
lsls r2, r2, #5
|
|
||||||
adds r1, r2, #0
|
|
||||||
eors r0, r1
|
|
||||||
strh r0, [r4, #2]
|
|
||||||
ldr r3, [sp, #0x10]
|
|
||||||
mov r1, ip
|
|
||||||
subs r0, r3, r1
|
|
||||||
subs r6, r0, r6
|
|
||||||
_08156788:
|
|
||||||
ldr r2, [sp, #0xc]
|
|
||||||
adds r1, r2, r5
|
|
||||||
adds r0, r1, r7
|
|
||||||
cmp r0, #0
|
|
||||||
blt _08156820
|
|
||||||
cmp r1, #0xa0
|
|
||||||
bgt _08156820
|
|
||||||
ldr r3, [sp, #8]
|
|
||||||
adds r2, r3, r6
|
|
||||||
mov r3, ip
|
|
||||||
adds r0, r2, r3
|
|
||||||
cmp r0, #0
|
|
||||||
blt _08156820
|
|
||||||
cmp r2, #0xf0
|
|
||||||
bgt _08156820
|
|
||||||
movs r0, #0xff
|
|
||||||
ands r1, r0
|
|
||||||
ldrh r0, [r4]
|
|
||||||
adds r1, r1, r0
|
|
||||||
ldr r3, _0815688C @ =0x000001FF
|
|
||||||
adds r0, r3, #0
|
|
||||||
ands r2, r0
|
|
||||||
ldrh r0, [r4, #2]
|
|
||||||
adds r0, r0, r2
|
|
||||||
ldr r2, [sp, #0x20]
|
|
||||||
orrs r1, r2
|
|
||||||
strh r1, [r4]
|
|
||||||
ldr r3, [sp, #0x24]
|
|
||||||
orrs r0, r3
|
|
||||||
strh r0, [r4, #2]
|
|
||||||
ldrh r0, [r4, #4]
|
|
||||||
ldr r2, [sp, #0x28]
|
|
||||||
orrs r2, r0
|
|
||||||
strh r2, [r4, #4]
|
|
||||||
movs r3, #0x80
|
|
||||||
lsls r3, r3, #6
|
|
||||||
adds r0, r3, #0
|
|
||||||
ands r1, r0
|
|
||||||
cmp r1, #0
|
|
||||||
beq _081567E4
|
|
||||||
ldr r0, _0815689C @ =0x000003FF
|
|
||||||
adds r1, r0, #0
|
|
||||||
adds r0, r2, #0
|
|
||||||
ands r0, r1
|
|
||||||
adds r0, r2, r0
|
|
||||||
strh r0, [r4, #4]
|
|
||||||
_081567E4:
|
|
||||||
mov r1, sl
|
|
||||||
ldr r0, [r1]
|
|
||||||
ldr r2, _081568A0 @ =0xF9FF0000
|
|
||||||
adds r0, r0, r2
|
|
||||||
lsrs r0, r0, #5
|
|
||||||
ldrh r3, [r4, #4]
|
|
||||||
adds r0, r0, r3
|
|
||||||
strh r0, [r4, #4]
|
|
||||||
ldrh r0, [r1, #0x14]
|
|
||||||
movs r2, #0xf8
|
|
||||||
lsls r2, r2, #3
|
|
||||||
adds r1, r2, #0
|
|
||||||
ands r0, r1
|
|
||||||
lsrs r0, r0, #6
|
|
||||||
bl sub_08156D84
|
|
||||||
adds r1, r0, #0
|
|
||||||
ldr r0, _081568A4 @ =gUnk_03006CC4
|
|
||||||
ldr r0, [r0]
|
|
||||||
cmp r0, r1
|
|
||||||
bne _08156810
|
|
||||||
b _08156988
|
|
||||||
_08156810:
|
|
||||||
mov r3, sp
|
|
||||||
mov r0, r8
|
|
||||||
str r3, [r0]
|
|
||||||
str r1, [r0, #4]
|
|
||||||
ldr r0, _08156888 @ =0x80000003
|
|
||||||
mov r1, r8
|
|
||||||
str r0, [r1, #8]
|
|
||||||
ldr r0, [r1, #8]
|
|
||||||
_08156820:
|
|
||||||
ldr r0, [sp, #0x18]
|
|
||||||
adds r0, #1
|
|
||||||
lsls r0, r0, #0x18
|
|
||||||
lsrs r0, r0, #0x18
|
|
||||||
str r0, [sp, #0x18]
|
|
||||||
mov r2, sb
|
|
||||||
ldrh r2, [r2, #2]
|
|
||||||
cmp r0, r2
|
|
||||||
bhs _08156834
|
|
||||||
b _081566DA
|
|
||||||
_08156834:
|
|
||||||
mov r3, sl
|
|
||||||
ldr r0, [r3, #4]
|
|
||||||
lsrs r0, r0, #0x1c
|
|
||||||
cmp r0, #1
|
|
||||||
beq _08156840
|
|
||||||
b _08156988
|
|
||||||
_08156840:
|
|
||||||
ldr r1, [r3, #8]
|
|
||||||
movs r0, #0x80
|
|
||||||
lsls r0, r0, #0x13
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, #0
|
|
||||||
bne _0815684E
|
|
||||||
b _08156988
|
|
||||||
_0815684E:
|
|
||||||
ldr r0, _081568A8 @ =0xFBFFFFFF
|
|
||||||
ands r1, r0
|
|
||||||
str r1, [r3, #8]
|
|
||||||
mov r4, sb
|
|
||||||
ldr r0, [r4, #0xc]
|
|
||||||
ldr r1, _081568AC @ =0x00FFFFFF
|
|
||||||
ands r1, r0
|
|
||||||
lsrs r0, r0, #0x18
|
|
||||||
str r0, [sp, #0x34]
|
|
||||||
ldr r0, _081568B0 @ =gUnk_03003674
|
|
||||||
ldr r2, [r0]
|
|
||||||
lsls r1, r1, #2
|
|
||||||
ldr r0, [r2, #0x18]
|
|
||||||
adds r0, r0, r1
|
|
||||||
mov ip, r0
|
|
||||||
ldr r0, [r0]
|
|
||||||
cmp r0, #0
|
|
||||||
blt _081568B4
|
|
||||||
movs r0, #0x20
|
|
||||||
mov r8, r0
|
|
||||||
ldr r2, [r2, #0x10]
|
|
||||||
b _081568BA
|
|
||||||
.align 2, 0
|
|
||||||
_0815687C: .4byte gUnk_030024F0
|
|
||||||
_08156880: .4byte 0x040000D4
|
|
||||||
_08156884: .4byte 0x00003FFF
|
|
||||||
_08156888: .4byte 0x80000003
|
|
||||||
_0815688C: .4byte 0x000001FF
|
|
||||||
_08156890: .4byte 0xFFFFFE00
|
|
||||||
_08156894: .4byte 0xFFFFFF00
|
|
||||||
_08156898: .4byte gUnk_08D6084C
|
|
||||||
_0815689C: .4byte 0x000003FF
|
|
||||||
_081568A0: .4byte 0xF9FF0000
|
|
||||||
_081568A4: .4byte gUnk_03006CC4
|
|
||||||
_081568A8: .4byte 0xFBFFFFFF
|
|
||||||
_081568AC: .4byte 0x00FFFFFF
|
|
||||||
_081568B0: .4byte gUnk_03003674
|
|
||||||
_081568B4:
|
|
||||||
movs r1, #0x40
|
|
||||||
mov r8, r1
|
|
||||||
ldr r2, [r2, #0x14]
|
|
||||||
_081568BA:
|
|
||||||
mov sb, r2
|
|
||||||
mov r3, r8
|
|
||||||
mov r2, ip
|
|
||||||
adds r2, #4
|
|
||||||
mov ip, r2
|
|
||||||
subs r2, #4
|
|
||||||
ldm r2!, {r0}
|
|
||||||
muls r0, r3, r0
|
|
||||||
mov r4, sb
|
|
||||||
adds r2, r4, r0
|
|
||||||
mov r0, sl
|
|
||||||
ldr r6, [r0]
|
|
||||||
movs r7, #1
|
|
||||||
ldr r1, [sp, #0x34]
|
|
||||||
cmp r7, r1
|
|
||||||
bhs _08156950
|
|
||||||
ldr r4, _08156904 @ =gUnk_03002EC0
|
|
||||||
mov sl, r4
|
|
||||||
ldr r5, _08156908 @ =gUnk_030039A4
|
|
||||||
_081568E0:
|
|
||||||
mov r1, ip
|
|
||||||
adds r1, #4
|
|
||||||
mov ip, r1
|
|
||||||
subs r1, #4
|
|
||||||
ldm r1!, {r0}
|
|
||||||
mov r4, r8
|
|
||||||
muls r4, r0, r4
|
|
||||||
adds r0, r4, #0
|
|
||||||
mov r1, sb
|
|
||||||
adds r4, r1, r0
|
|
||||||
adds r0, r2, r3
|
|
||||||
cmp r0, r4
|
|
||||||
bne _0815690C
|
|
||||||
mov r4, r8
|
|
||||||
adds r0, r3, r4
|
|
||||||
lsls r0, r0, #0x10
|
|
||||||
lsrs r3, r0, #0x10
|
|
||||||
b _08156944
|
|
||||||
.align 2, 0
|
|
||||||
_08156904: .4byte gUnk_03002EC0
|
|
||||||
_08156908: .4byte gUnk_030039A4
|
|
||||||
_0815690C:
|
|
||||||
ldrb r1, [r5]
|
|
||||||
lsls r0, r1, #1
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r0, r0, #2
|
|
||||||
add r0, sl
|
|
||||||
str r2, [r0]
|
|
||||||
ldrb r1, [r5]
|
|
||||||
lsls r0, r1, #1
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r0, r0, #2
|
|
||||||
mov r1, sl
|
|
||||||
adds r1, #4
|
|
||||||
adds r0, r0, r1
|
|
||||||
str r6, [r0]
|
|
||||||
ldrb r1, [r5]
|
|
||||||
lsls r0, r1, #1
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r0, r0, #2
|
|
||||||
add r0, sl
|
|
||||||
strh r3, [r0, #8]
|
|
||||||
ldrb r0, [r5]
|
|
||||||
adds r0, #1
|
|
||||||
movs r1, #0x3f
|
|
||||||
ands r0, r1
|
|
||||||
strb r0, [r5]
|
|
||||||
adds r6, r6, r3
|
|
||||||
mov r3, r8
|
|
||||||
adds r2, r4, #0
|
|
||||||
_08156944:
|
|
||||||
adds r0, r7, #1
|
|
||||||
lsls r0, r0, #0x18
|
|
||||||
lsrs r7, r0, #0x18
|
|
||||||
ldr r0, [sp, #0x34]
|
|
||||||
cmp r7, r0
|
|
||||||
blo _081568E0
|
|
||||||
_08156950:
|
|
||||||
ldr r4, _08156998 @ =gUnk_030039A4
|
|
||||||
ldrb r1, [r4]
|
|
||||||
lsls r0, r1, #1
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r0, r0, #2
|
|
||||||
ldr r1, _0815699C @ =gUnk_03002EC0
|
|
||||||
adds r0, r0, r1
|
|
||||||
str r2, [r0]
|
|
||||||
ldrb r1, [r4]
|
|
||||||
lsls r0, r1, #1
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r0, r0, #2
|
|
||||||
ldr r1, _0815699C @ =gUnk_03002EC0
|
|
||||||
adds r1, #4
|
|
||||||
adds r0, r0, r1
|
|
||||||
str r6, [r0]
|
|
||||||
ldrb r1, [r4]
|
|
||||||
lsls r0, r1, #1
|
|
||||||
adds r0, r0, r1
|
|
||||||
lsls r0, r0, #2
|
|
||||||
ldr r2, _0815699C @ =gUnk_03002EC0
|
|
||||||
adds r0, r0, r2
|
|
||||||
strh r3, [r0, #8]
|
|
||||||
ldrb r0, [r4]
|
|
||||||
adds r0, #1
|
|
||||||
movs r1, #0x3f
|
|
||||||
ands r0, r1
|
|
||||||
strb r0, [r4]
|
|
||||||
_08156988:
|
|
||||||
add sp, #0x38
|
|
||||||
pop {r3, r4, r5}
|
|
||||||
mov r8, r3
|
|
||||||
mov sb, r4
|
|
||||||
mov sl, r5
|
|
||||||
pop {r4, r5, r6, r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08156998: .4byte gUnk_030039A4
|
|
||||||
_0815699C: .4byte gUnk_03002EC0
|
|
||||||
|
181
src/sprite.c
181
src/sprite.c
@ -8,10 +8,191 @@
|
|||||||
struct R10Struct {
|
struct R10Struct {
|
||||||
u16 unk0, unk2, unk4, unk6;
|
u16 unk0, unk2, unk4, unk6;
|
||||||
s16 unk8, unkA;
|
s16 unk8, unkA;
|
||||||
|
u32 unkC;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const u8 gUnk_08D6084C[][2];
|
extern const u8 gUnk_08D6084C[][2];
|
||||||
|
|
||||||
|
void sub_081564D8(struct Sprite *sl) {
|
||||||
|
volatile OamData sp00;
|
||||||
|
OamData *p;
|
||||||
|
s32 sp08[1], sp0C[1];
|
||||||
|
s32 sp10[1], sp14[1];
|
||||||
|
u8 sp18, j;
|
||||||
|
const s16 *sp1C;
|
||||||
|
u16 sp20 = 0;
|
||||||
|
u32 sp24 = 0, sp28 = 0, sp2C = 0, sp30 = 0;
|
||||||
|
u32 sp34;
|
||||||
|
const struct R10Struct *sb;
|
||||||
|
s32 r5, r6;
|
||||||
|
s32 r7, ip;
|
||||||
|
u32 r0, r1;
|
||||||
|
|
||||||
|
if (sl->unk4 != -1) {
|
||||||
|
if (!(sl->unk4 >> 28))
|
||||||
|
sb = (const void *)gUnk_03003674[1][sl->unkC] + sl->unk4 * 12;
|
||||||
|
else
|
||||||
|
sb = (const void *)gUnk_03003674[1][sl->unkC] + sl->unk4 * 16;
|
||||||
|
|
||||||
|
sl->unk1E = sb->unk2;
|
||||||
|
sp08[0] = sl->unk10;
|
||||||
|
sp0C[0] = sl->unk12;
|
||||||
|
if (sl->unk8 & 0x20000) {
|
||||||
|
sp08[0] -= gUnk_030023F4.unk0;
|
||||||
|
sp0C[0] -= gUnk_030023F4.unk2;
|
||||||
|
}
|
||||||
|
|
||||||
|
sp10[0] = sb->unk4;
|
||||||
|
sp14[0] = sb->unk6;
|
||||||
|
|
||||||
|
if (sl->unk8 & 0x20) {
|
||||||
|
sp20 |= 0x100;
|
||||||
|
sp24 |= (sl->unk8 & 0x1F) << 9;
|
||||||
|
if (sl->unk8 & 0x40) {
|
||||||
|
sp08[0] -= sb->unk4 >> 1;
|
||||||
|
sp0C[0] -= sb->unk6 >> 1;
|
||||||
|
sp10[0] <<= 1;
|
||||||
|
sp14[0] <<= 1;
|
||||||
|
sp20 |= 0x200;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (sl->unk8 & 0x800)
|
||||||
|
sp0C[0] -= sp14[0] - sb->unkA;
|
||||||
|
else
|
||||||
|
sp0C[0] -= sb->unkA;
|
||||||
|
|
||||||
|
if (sl->unk8 & 0x400)
|
||||||
|
sp08[0] -= sp10[0] - sb->unk8;
|
||||||
|
else
|
||||||
|
sp08[0] -= sb->unk8;
|
||||||
|
|
||||||
|
if (((sl->unk8 >> 11) & 1) != (sb->unk0 >> 15))
|
||||||
|
sp2C = 1;
|
||||||
|
r1 = sl->unk8;
|
||||||
|
r1 >>= 10;
|
||||||
|
r0 = sb->unk0 >> 14;
|
||||||
|
if ((r0 ^ r1) & 1)
|
||||||
|
sp30 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sp10[0]
|
||||||
|
|| (sp08[0] + sp10[0] >= 0 && sp08[0] <= 240 && sp0C[0] + sp14[0] >= 0 && sp0C[0] <= 160)) {
|
||||||
|
u32 r1 = (sp28 + (sl->unk1F << 12)) << 16;
|
||||||
|
|
||||||
|
sp20 |= (sl->unk8 & 0x180) * 8;
|
||||||
|
sp28 = (((sl->unk8 & 0x3000) << 14) | r1) >> 16;
|
||||||
|
sp1C = gUnk_03003674[2][sl->unkC];
|
||||||
|
sl->unk1D = gUnk_030024F0;
|
||||||
|
for (sp18 = 0; sp18 < sb->unk2; ++sp18) {
|
||||||
|
u32 r0;
|
||||||
|
|
||||||
|
DmaCopy16(3, &sp1C[3 * ((sb->unk0 & 0x3FFF) + sp18)], &sp00, 6); // excluding affine params
|
||||||
|
p = (OamData *)&sp00;
|
||||||
|
r6 = p->all.attr1 & 0x1FF;
|
||||||
|
if (r6 >= 0x100)
|
||||||
|
r6 -= 0x200;
|
||||||
|
r5 = p->all.attr0 & 0xFF;
|
||||||
|
if (r5 >= 0x80)
|
||||||
|
r5 -= 0x100;
|
||||||
|
p->all.attr1 &= 0xFE00;
|
||||||
|
p->all.attr0 &= 0xFE00;
|
||||||
|
r0 = ((p->all.attr0 & 0xC000) >> 12) | ((p->all.attr1 & 0xC000) >> 14);
|
||||||
|
r7 = gUnk_08D6084C[r0][1];
|
||||||
|
ip = gUnk_08D6084C[r0][0];
|
||||||
|
#ifndef NONMATCHING
|
||||||
|
{
|
||||||
|
/* The issue here might be caused by wrongly marking sp00 as volatile;
|
||||||
|
* it's possible that we need to permutate ways of dereference of sp00
|
||||||
|
* at different locations (sp00.xx vs p->xx).
|
||||||
|
* p is very likely to be a real variable as the function itself is a
|
||||||
|
* modified (and manually optimized) version of sub_081569A0.
|
||||||
|
*/
|
||||||
|
register u32 _sp2C asm("r0") = sp2C;
|
||||||
|
register u32 _sp30 asm("r1") = sp30;
|
||||||
|
|
||||||
|
_sp2C = sp2C;
|
||||||
|
_sp30 = sp30;
|
||||||
|
asm("":::"r2");
|
||||||
|
if (_sp2C | _sp30) {
|
||||||
|
#else
|
||||||
|
if (sp2C | sp30) {
|
||||||
|
#endif
|
||||||
|
if (sp2C) {
|
||||||
|
p->all.attr1 ^= 0x2000;
|
||||||
|
r5 = sp14[0] - r7 - r5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sp30) {
|
||||||
|
p->all.attr1 ^= 0x1000;
|
||||||
|
r6 = sp10[0] - ip - r6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifndef NONMATCHING
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if ((sp0C[0] + r5 + r7 >= 0 && sp0C[0] + r5 <= 160)
|
||||||
|
&& (sp08[0] + r6 + ip >= 0 && sp08[0] + r6 <= 240)) {
|
||||||
|
OamData *r1_;
|
||||||
|
|
||||||
|
p->all.attr0 += ((sp0C[0] + r5) & 0xFF);
|
||||||
|
p->all.attr1 += ((sp08[0] + r6) & 0x1FF);
|
||||||
|
p->all.attr0 |= sp20;
|
||||||
|
p->all.attr1 |= sp24;
|
||||||
|
p->all.attr2 |= sp28;
|
||||||
|
if (p->all.attr0 & 0x2000)
|
||||||
|
p->all.attr2 += p->all.attr2 & 0x3FF;
|
||||||
|
p->all.attr2 += (sl->unk0 - 0x6010000u) >> 5;
|
||||||
|
r1_ = sub_08156D84((sl->unk14 & 0x7C0) >> 6);
|
||||||
|
if (gUnk_03006CC4 == r1_) return;
|
||||||
|
DmaCopy16(3, &sp00, r1_, 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((sl->unk4 >> 28) == 1 && sl->unk8 & 0x4000000) {
|
||||||
|
const s32 *ip;
|
||||||
|
u16 r8, r3;
|
||||||
|
const u8 *r2_, *r2, *r4;
|
||||||
|
s32 r6;
|
||||||
|
u32 r1;
|
||||||
|
|
||||||
|
sl->unk8 &= 0xFBFFFFFF;
|
||||||
|
r1 = sb->unkC & 0xFFFFFF;
|
||||||
|
sp34 = sb->unkC >> 24;
|
||||||
|
ip = (const void *)(gUnk_03003674[6] + r1);
|
||||||
|
if (ip[0] >= 0) {
|
||||||
|
r8 = 0x20;
|
||||||
|
r2_ = (const void *)gUnk_03003674[4];
|
||||||
|
} else {
|
||||||
|
r8 = 0x40;
|
||||||
|
r2_ = (const void *)gUnk_03003674[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
r3 = r8;
|
||||||
|
r2 = r2_ + ip++[0] * r8;
|
||||||
|
r6 = sl->unk0;
|
||||||
|
for (j = 1; j < sp34; ++j) {
|
||||||
|
r4 = r2_ + ip++[0] * r8;
|
||||||
|
if (r2 + r3 == r4)
|
||||||
|
r3 += r8;
|
||||||
|
else {
|
||||||
|
gUnk_03002EC0[gUnk_030039A4].unk0 = (u32)r2;
|
||||||
|
gUnk_03002EC0[gUnk_030039A4].unk4 = r6;
|
||||||
|
gUnk_03002EC0[gUnk_030039A4].unk8 = r3;
|
||||||
|
gUnk_030039A4 = (gUnk_030039A4 + 1) & 0x3F;
|
||||||
|
r6 += r3;
|
||||||
|
r3 = r8;
|
||||||
|
r2 = r4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gUnk_03002EC0[gUnk_030039A4].unk0 = (u32)r2;
|
||||||
|
gUnk_03002EC0[gUnk_030039A4].unk4 = r6;
|
||||||
|
gUnk_03002EC0[gUnk_030039A4].unk8 = r3;
|
||||||
|
gUnk_030039A4 = (gUnk_030039A4 + 1) & 0x3F;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* unused function */
|
/* unused function */
|
||||||
void sub_081569A0(struct Sprite *sb, u16 *sp08, u8 sp0C) {
|
void sub_081569A0(struct Sprite *sb, u16 *sp08, u8 sp0C) {
|
||||||
vs32 sp00[1], sp04[1];
|
vs32 sp00[1], sp04[1];
|
||||||
|
Loading…
Reference in New Issue
Block a user