mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 07:28:17 -05:00
Merge pull request #269 from DizzyEggg/sub_80869E4
Some checks are pending
GithubCI / build (push) Waiting to run
Some checks are pending
GithubCI / build (push) Waiting to run
Match sub_80869E4 and sub_8002A70 with correct params
This commit is contained in:
commit
33a7303313
|
|
@ -417,623 +417,4 @@ _08002A68:
|
|||
bx r1
|
||||
thumb_func_end sub_8002984
|
||||
|
||||
@ https://decomp.me/scratch/HXC9z
|
||||
@ https://decomp.me/scratch/BWmWQ
|
||||
@ https://decomp.me/scratch/QfX03
|
||||
thumb_func_start sub_8002A70
|
||||
sub_8002A70:
|
||||
push {r4,lr}
|
||||
lsls r0, 24
|
||||
asrs r3, r0, 24
|
||||
lsls r1, 24
|
||||
asrs r4, r1, 24
|
||||
lsls r2, 24
|
||||
lsrs r0, r2, 24
|
||||
cmp r3, r4
|
||||
beq _08002AFC
|
||||
subs r0, 0x1
|
||||
cmp r0, 0xA
|
||||
bhi _08002AFC
|
||||
lsls r0, 2
|
||||
ldr r1, _08002A94
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08002A94: .4byte _08002A98
|
||||
.align 2, 0
|
||||
_08002A98:
|
||||
.4byte _08002AC4
|
||||
.4byte _08002ACC
|
||||
.4byte _08002AD4
|
||||
.4byte _08002ADC
|
||||
.4byte _08002AFC
|
||||
.4byte _08002AFC
|
||||
.4byte _08002AFC
|
||||
.4byte _08002AFC
|
||||
.4byte _08002AFC
|
||||
.4byte _08002AF2
|
||||
.4byte _08002AE8
|
||||
_08002AC4:
|
||||
cmp r3, 0
|
||||
blt _08002AFC
|
||||
adds r3, 0x7
|
||||
b _08002AE2
|
||||
_08002ACC:
|
||||
cmp r3, 0
|
||||
blt _08002AFC
|
||||
adds r3, 0x1
|
||||
b _08002AE2
|
||||
_08002AD4:
|
||||
cmp r3, 0
|
||||
blt _08002AFC
|
||||
adds r3, 0x6
|
||||
b _08002AE2
|
||||
_08002ADC:
|
||||
cmp r3, 0
|
||||
blt _08002AFC
|
||||
adds r3, 0x2
|
||||
_08002AE2:
|
||||
movs r0, 0x7
|
||||
ands r3, r0
|
||||
b _08002AFC
|
||||
_08002AE8:
|
||||
adds r0, r3, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_8002B04
|
||||
adds r3, r0, 0
|
||||
_08002AF2:
|
||||
adds r0, r3, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_8002B04
|
||||
adds r3, r0, 0
|
||||
_08002AFC:
|
||||
adds r0, r3, 0
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8002A70
|
||||
|
||||
@ https://decomp.me/scratch/oCt37
|
||||
@ https://decomp.me/scratch/ZTHtV [Probably the correct one]
|
||||
thumb_func_start sub_8002B04
|
||||
sub_8002B04:
|
||||
push {lr}
|
||||
lsls r0, 24
|
||||
asrs r2, r0, 24
|
||||
lsls r1, 24
|
||||
asrs r1, 24
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
beq _08002B56
|
||||
adds r0, r2, 0
|
||||
subs r0, 0x8
|
||||
subs r1, r0
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002B24
|
||||
adds r0, r1, 0x7
|
||||
_08002B24:
|
||||
asrs r0, 3
|
||||
lsls r0, 3
|
||||
subs r0, r1, r0
|
||||
cmp r0, 0
|
||||
beq _08002B56
|
||||
cmp r0, 0x3
|
||||
bgt _08002B40
|
||||
adds r1, r2, 0x1
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002B4C
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x8
|
||||
b _08002B4C
|
||||
_08002B40:
|
||||
adds r1, r2, 0x7
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002B4C
|
||||
adds r0, r2, 0
|
||||
adds r0, 0xE
|
||||
_08002B4C:
|
||||
asrs r0, 3
|
||||
lsls r0, 3
|
||||
subs r0, r1, r0
|
||||
lsls r0, 24
|
||||
asrs r2, r0, 24
|
||||
_08002B56:
|
||||
adds r0, r2, 0
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8002B04
|
||||
|
||||
thumb_func_start sub_8002B5C
|
||||
sub_8002B5C:
|
||||
push {lr}
|
||||
lsls r0, 24
|
||||
asrs r2, r0, 24
|
||||
lsls r1, 24
|
||||
asrs r1, 24
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
beq _08002BAE
|
||||
adds r0, r2, 0
|
||||
subs r0, 0x8
|
||||
subs r1, r0
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002B7C
|
||||
adds r0, r1, 0x7
|
||||
_08002B7C:
|
||||
asrs r0, 3
|
||||
lsls r0, 3
|
||||
subs r0, r1, r0
|
||||
cmp r0, 0
|
||||
beq _08002BAE
|
||||
cmp r0, 0x3
|
||||
bgt _08002B98
|
||||
adds r1, r2, 0x2
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002BA4
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x9
|
||||
b _08002BA4
|
||||
_08002B98:
|
||||
adds r1, r2, 0x6
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002BA4
|
||||
adds r0, r2, 0
|
||||
adds r0, 0xD
|
||||
_08002BA4:
|
||||
asrs r0, 3
|
||||
lsls r0, 3
|
||||
subs r0, r1, r0
|
||||
lsls r0, 24
|
||||
asrs r2, r0, 24
|
||||
_08002BAE:
|
||||
movs r0, 0x6
|
||||
ands r2, r0
|
||||
adds r0, r2, 0
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8002B5C
|
||||
|
||||
thumb_func_start SetVecFromDirectionSpeed
|
||||
SetVecFromDirectionSpeed:
|
||||
push {r4,r5,lr}
|
||||
lsls r1, 24
|
||||
asrs r1, 21
|
||||
ldr r3, _08002BD8
|
||||
adds r1, r3
|
||||
ldr r5, [r1]
|
||||
adds r3, r5, 0
|
||||
muls r3, r2
|
||||
ldr r1, [r1, 0x4]
|
||||
adds r4, r1, 0
|
||||
muls r4, r2
|
||||
str r3, [r0]
|
||||
str r4, [r0, 0x4]
|
||||
pop {r4,r5}
|
||||
pop {r2}
|
||||
bx r2
|
||||
.align 2, 0
|
||||
_08002BD8: .4byte gVectorDirections
|
||||
thumb_func_end SetVecFromDirectionSpeed
|
||||
|
||||
thumb_func_start VecDirection8Sign
|
||||
VecDirection8Sign:
|
||||
push {lr}
|
||||
ldr r1, [r0]
|
||||
cmp r1, 0
|
||||
bge _08002BFA
|
||||
ldr r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bge _08002BEE
|
||||
movs r0, 0x5
|
||||
b _08002C2A
|
||||
_08002BEE:
|
||||
cmp r0, 0
|
||||
ble _08002BF6
|
||||
movs r0, 0x7
|
||||
b _08002C2A
|
||||
_08002BF6:
|
||||
movs r0, 0x6
|
||||
b _08002C2A
|
||||
_08002BFA:
|
||||
cmp r1, 0
|
||||
ble _08002C14
|
||||
ldr r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bge _08002C08
|
||||
movs r0, 0x3
|
||||
b _08002C2A
|
||||
_08002C08:
|
||||
cmp r0, 0
|
||||
ble _08002C10
|
||||
movs r0, 0x1
|
||||
b _08002C2A
|
||||
_08002C10:
|
||||
movs r0, 0x2
|
||||
b _08002C2A
|
||||
_08002C14:
|
||||
ldr r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bge _08002C1E
|
||||
movs r0, 0x4
|
||||
b _08002C2A
|
||||
_08002C1E:
|
||||
cmp r0, 0
|
||||
bgt _08002C28
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002C2A
|
||||
_08002C28:
|
||||
movs r0, 0
|
||||
_08002C2A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection8Sign
|
||||
|
||||
thumb_func_start VecDirection4SignYX
|
||||
VecDirection4SignYX:
|
||||
push {lr}
|
||||
ldr r1, [r0, 0x4]
|
||||
cmp r1, 0
|
||||
bge _08002C3C
|
||||
movs r0, 0x4
|
||||
b _08002C5A
|
||||
_08002C3C:
|
||||
cmp r1, 0
|
||||
ble _08002C44
|
||||
movs r0, 0
|
||||
b _08002C5A
|
||||
_08002C44:
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
bge _08002C4E
|
||||
movs r0, 0x6
|
||||
b _08002C5A
|
||||
_08002C4E:
|
||||
cmp r0, 0
|
||||
bgt _08002C58
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002C5A
|
||||
_08002C58:
|
||||
movs r0, 0x2
|
||||
_08002C5A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection4SignYX
|
||||
|
||||
thumb_func_start VecDirection8Radial
|
||||
VecDirection8Radial:
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r0, [r4]
|
||||
cmp r0, 0
|
||||
bge _08002C6C
|
||||
negs r0, r0
|
||||
_08002C6C:
|
||||
adds r1, r0, 0
|
||||
ldr r3, [r4, 0x4]
|
||||
adds r5, r3, 0
|
||||
cmp r3, 0
|
||||
bge _08002C78
|
||||
negs r5, r3
|
||||
_08002C78:
|
||||
adds r2, r5, 0
|
||||
ldr r4, [r4]
|
||||
cmp r4, 0
|
||||
bge _08002CA8
|
||||
cmp r3, 0
|
||||
bge _08002C94
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CD8
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
bgt _08002CA0
|
||||
movs r0, 0x5
|
||||
b _08002CE8
|
||||
_08002C94:
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CE6
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
ble _08002CA4
|
||||
_08002CA0:
|
||||
movs r0, 0x6
|
||||
b _08002CE8
|
||||
_08002CA4:
|
||||
movs r0, 0x7
|
||||
b _08002CE8
|
||||
_08002CA8:
|
||||
cmp r4, 0
|
||||
ble _08002CD4
|
||||
cmp r3, 0
|
||||
bge _08002CC0
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CD8
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
bgt _08002CCC
|
||||
movs r0, 0x3
|
||||
b _08002CE8
|
||||
_08002CC0:
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CE6
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
ble _08002CD0
|
||||
_08002CCC:
|
||||
movs r0, 0x2
|
||||
b _08002CE8
|
||||
_08002CD0:
|
||||
movs r0, 0x1
|
||||
b _08002CE8
|
||||
_08002CD4:
|
||||
cmp r3, 0
|
||||
bge _08002CDC
|
||||
_08002CD8:
|
||||
movs r0, 0x4
|
||||
b _08002CE8
|
||||
_08002CDC:
|
||||
cmp r3, 0
|
||||
bgt _08002CE6
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002CE8
|
||||
_08002CE6:
|
||||
movs r0, 0
|
||||
_08002CE8:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection8Radial
|
||||
|
||||
thumb_func_start VecDirection4Radial
|
||||
VecDirection4Radial:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r3, [r4]
|
||||
cmp r3, 0
|
||||
bge _08002CFC
|
||||
negs r3, r3
|
||||
_08002CFC:
|
||||
adds r1, r3, 0
|
||||
ldr r3, [r4, 0x4]
|
||||
adds r0, r3, 0
|
||||
cmp r3, 0
|
||||
bge _08002D08
|
||||
negs r0, r3
|
||||
_08002D08:
|
||||
adds r2, r0, 0
|
||||
ldr r0, [r4]
|
||||
cmp r0, 0
|
||||
bge _08002D22
|
||||
cmp r3, 0
|
||||
bge _08002D1A
|
||||
cmp r2, r1
|
||||
bgt _08002D3C
|
||||
b _08002D1E
|
||||
_08002D1A:
|
||||
cmp r2, r1
|
||||
bgt _08002D4A
|
||||
_08002D1E:
|
||||
movs r0, 0x6
|
||||
b _08002D4C
|
||||
_08002D22:
|
||||
cmp r0, 0
|
||||
ble _08002D38
|
||||
cmp r3, 0
|
||||
bge _08002D30
|
||||
cmp r2, r1
|
||||
bgt _08002D3C
|
||||
b _08002D34
|
||||
_08002D30:
|
||||
cmp r2, r1
|
||||
bgt _08002D4A
|
||||
_08002D34:
|
||||
movs r0, 0x2
|
||||
b _08002D4C
|
||||
_08002D38:
|
||||
cmp r3, 0
|
||||
bge _08002D40
|
||||
_08002D3C:
|
||||
movs r0, 0x4
|
||||
b _08002D4C
|
||||
_08002D40:
|
||||
cmp r3, 0
|
||||
bgt _08002D4A
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002D4C
|
||||
_08002D4A:
|
||||
movs r0, 0
|
||||
_08002D4C:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection4Radial
|
||||
|
||||
thumb_func_start SizedDeltaDirection4
|
||||
SizedDeltaDirection4:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x8
|
||||
adds r4, r1, 0
|
||||
adds r5, r3, 0
|
||||
ldr r3, [r2]
|
||||
ldr r1, [r0]
|
||||
subs r3, r1
|
||||
str r3, [sp]
|
||||
ldr r1, [r2, 0x4]
|
||||
ldr r0, [r0, 0x4]
|
||||
subs r1, r0
|
||||
str r1, [sp, 0x4]
|
||||
adds r2, r3, 0
|
||||
cmp r2, 0
|
||||
blt _08002D8A
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
bge _08002DA4
|
||||
b _08002DA0
|
||||
_08002D8A:
|
||||
subs r2, r3, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
ble _08002DA4
|
||||
_08002DA0:
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
_08002DA4:
|
||||
ldr r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
blt _08002DC2
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
bge _08002DDC
|
||||
b _08002DD8
|
||||
_08002DC2:
|
||||
subs r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
ble _08002DDC
|
||||
_08002DD8:
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x4]
|
||||
_08002DDC:
|
||||
mov r0, sp
|
||||
bl VecDirection4Radial
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
add sp, 0x8
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end SizedDeltaDirection4
|
||||
|
||||
thumb_func_start SizedDeltaDirection8
|
||||
SizedDeltaDirection8:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x8
|
||||
adds r4, r1, 0
|
||||
adds r5, r3, 0
|
||||
ldr r3, [r2]
|
||||
ldr r1, [r0]
|
||||
subs r3, r1
|
||||
str r3, [sp]
|
||||
ldr r1, [r2, 0x4]
|
||||
ldr r0, [r0, 0x4]
|
||||
subs r1, r0
|
||||
str r1, [sp, 0x4]
|
||||
adds r2, r3, 0
|
||||
cmp r2, 0
|
||||
blt _08002E26
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
bge _08002E40
|
||||
b _08002E3C
|
||||
_08002E26:
|
||||
subs r2, r3, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
ble _08002E40
|
||||
_08002E3C:
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
_08002E40:
|
||||
ldr r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
blt _08002E5E
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
bge _08002E78
|
||||
b _08002E74
|
||||
_08002E5E:
|
||||
subs r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
ble _08002E78
|
||||
_08002E74:
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x4]
|
||||
_08002E78:
|
||||
mov r0, sp
|
||||
bl VecDirection8Radial
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
add sp, 0x8
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end SizedDeltaDirection8
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
|
|
|
|||
497
asm/code_8002774_2.s
Normal file
497
asm/code_8002774_2.s
Normal file
|
|
@ -0,0 +1,497 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start sub_8002B5C
|
||||
sub_8002B5C:
|
||||
push {lr}
|
||||
lsls r0, 24
|
||||
asrs r2, r0, 24
|
||||
lsls r1, 24
|
||||
asrs r1, 24
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
beq _08002BAE
|
||||
adds r0, r2, 0
|
||||
subs r0, 0x8
|
||||
subs r1, r0
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002B7C
|
||||
adds r0, r1, 0x7
|
||||
_08002B7C:
|
||||
asrs r0, 3
|
||||
lsls r0, 3
|
||||
subs r0, r1, r0
|
||||
cmp r0, 0
|
||||
beq _08002BAE
|
||||
cmp r0, 0x3
|
||||
bgt _08002B98
|
||||
adds r1, r2, 0x2
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002BA4
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x9
|
||||
b _08002BA4
|
||||
_08002B98:
|
||||
adds r1, r2, 0x6
|
||||
adds r0, r1, 0
|
||||
cmp r1, 0
|
||||
bge _08002BA4
|
||||
adds r0, r2, 0
|
||||
adds r0, 0xD
|
||||
_08002BA4:
|
||||
asrs r0, 3
|
||||
lsls r0, 3
|
||||
subs r0, r1, r0
|
||||
lsls r0, 24
|
||||
asrs r2, r0, 24
|
||||
_08002BAE:
|
||||
movs r0, 0x6
|
||||
ands r2, r0
|
||||
adds r0, r2, 0
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8002B5C
|
||||
|
||||
thumb_func_start SetVecFromDirectionSpeed
|
||||
SetVecFromDirectionSpeed:
|
||||
push {r4,r5,lr}
|
||||
lsls r1, 24
|
||||
asrs r1, 21
|
||||
ldr r3, _08002BD8
|
||||
adds r1, r3
|
||||
ldr r5, [r1]
|
||||
adds r3, r5, 0
|
||||
muls r3, r2
|
||||
ldr r1, [r1, 0x4]
|
||||
adds r4, r1, 0
|
||||
muls r4, r2
|
||||
str r3, [r0]
|
||||
str r4, [r0, 0x4]
|
||||
pop {r4,r5}
|
||||
pop {r2}
|
||||
bx r2
|
||||
.align 2, 0
|
||||
_08002BD8: .4byte gVectorDirections
|
||||
thumb_func_end SetVecFromDirectionSpeed
|
||||
|
||||
thumb_func_start VecDirection8Sign
|
||||
VecDirection8Sign:
|
||||
push {lr}
|
||||
ldr r1, [r0]
|
||||
cmp r1, 0
|
||||
bge _08002BFA
|
||||
ldr r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bge _08002BEE
|
||||
movs r0, 0x5
|
||||
b _08002C2A
|
||||
_08002BEE:
|
||||
cmp r0, 0
|
||||
ble _08002BF6
|
||||
movs r0, 0x7
|
||||
b _08002C2A
|
||||
_08002BF6:
|
||||
movs r0, 0x6
|
||||
b _08002C2A
|
||||
_08002BFA:
|
||||
cmp r1, 0
|
||||
ble _08002C14
|
||||
ldr r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bge _08002C08
|
||||
movs r0, 0x3
|
||||
b _08002C2A
|
||||
_08002C08:
|
||||
cmp r0, 0
|
||||
ble _08002C10
|
||||
movs r0, 0x1
|
||||
b _08002C2A
|
||||
_08002C10:
|
||||
movs r0, 0x2
|
||||
b _08002C2A
|
||||
_08002C14:
|
||||
ldr r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bge _08002C1E
|
||||
movs r0, 0x4
|
||||
b _08002C2A
|
||||
_08002C1E:
|
||||
cmp r0, 0
|
||||
bgt _08002C28
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002C2A
|
||||
_08002C28:
|
||||
movs r0, 0
|
||||
_08002C2A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection8Sign
|
||||
|
||||
thumb_func_start VecDirection4SignYX
|
||||
VecDirection4SignYX:
|
||||
push {lr}
|
||||
ldr r1, [r0, 0x4]
|
||||
cmp r1, 0
|
||||
bge _08002C3C
|
||||
movs r0, 0x4
|
||||
b _08002C5A
|
||||
_08002C3C:
|
||||
cmp r1, 0
|
||||
ble _08002C44
|
||||
movs r0, 0
|
||||
b _08002C5A
|
||||
_08002C44:
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
bge _08002C4E
|
||||
movs r0, 0x6
|
||||
b _08002C5A
|
||||
_08002C4E:
|
||||
cmp r0, 0
|
||||
bgt _08002C58
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002C5A
|
||||
_08002C58:
|
||||
movs r0, 0x2
|
||||
_08002C5A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection4SignYX
|
||||
|
||||
thumb_func_start VecDirection8Radial
|
||||
VecDirection8Radial:
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r0, [r4]
|
||||
cmp r0, 0
|
||||
bge _08002C6C
|
||||
negs r0, r0
|
||||
_08002C6C:
|
||||
adds r1, r0, 0
|
||||
ldr r3, [r4, 0x4]
|
||||
adds r5, r3, 0
|
||||
cmp r3, 0
|
||||
bge _08002C78
|
||||
negs r5, r3
|
||||
_08002C78:
|
||||
adds r2, r5, 0
|
||||
ldr r4, [r4]
|
||||
cmp r4, 0
|
||||
bge _08002CA8
|
||||
cmp r3, 0
|
||||
bge _08002C94
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CD8
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
bgt _08002CA0
|
||||
movs r0, 0x5
|
||||
b _08002CE8
|
||||
_08002C94:
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CE6
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
ble _08002CA4
|
||||
_08002CA0:
|
||||
movs r0, 0x6
|
||||
b _08002CE8
|
||||
_08002CA4:
|
||||
movs r0, 0x7
|
||||
b _08002CE8
|
||||
_08002CA8:
|
||||
cmp r4, 0
|
||||
ble _08002CD4
|
||||
cmp r3, 0
|
||||
bge _08002CC0
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CD8
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
bgt _08002CCC
|
||||
movs r0, 0x3
|
||||
b _08002CE8
|
||||
_08002CC0:
|
||||
lsls r0, 1
|
||||
cmp r2, r0
|
||||
bgt _08002CE6
|
||||
lsls r0, r5, 1
|
||||
cmp r1, r0
|
||||
ble _08002CD0
|
||||
_08002CCC:
|
||||
movs r0, 0x2
|
||||
b _08002CE8
|
||||
_08002CD0:
|
||||
movs r0, 0x1
|
||||
b _08002CE8
|
||||
_08002CD4:
|
||||
cmp r3, 0
|
||||
bge _08002CDC
|
||||
_08002CD8:
|
||||
movs r0, 0x4
|
||||
b _08002CE8
|
||||
_08002CDC:
|
||||
cmp r3, 0
|
||||
bgt _08002CE6
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002CE8
|
||||
_08002CE6:
|
||||
movs r0, 0
|
||||
_08002CE8:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection8Radial
|
||||
|
||||
thumb_func_start VecDirection4Radial
|
||||
VecDirection4Radial:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r3, [r4]
|
||||
cmp r3, 0
|
||||
bge _08002CFC
|
||||
negs r3, r3
|
||||
_08002CFC:
|
||||
adds r1, r3, 0
|
||||
ldr r3, [r4, 0x4]
|
||||
adds r0, r3, 0
|
||||
cmp r3, 0
|
||||
bge _08002D08
|
||||
negs r0, r3
|
||||
_08002D08:
|
||||
adds r2, r0, 0
|
||||
ldr r0, [r4]
|
||||
cmp r0, 0
|
||||
bge _08002D22
|
||||
cmp r3, 0
|
||||
bge _08002D1A
|
||||
cmp r2, r1
|
||||
bgt _08002D3C
|
||||
b _08002D1E
|
||||
_08002D1A:
|
||||
cmp r2, r1
|
||||
bgt _08002D4A
|
||||
_08002D1E:
|
||||
movs r0, 0x6
|
||||
b _08002D4C
|
||||
_08002D22:
|
||||
cmp r0, 0
|
||||
ble _08002D38
|
||||
cmp r3, 0
|
||||
bge _08002D30
|
||||
cmp r2, r1
|
||||
bgt _08002D3C
|
||||
b _08002D34
|
||||
_08002D30:
|
||||
cmp r2, r1
|
||||
bgt _08002D4A
|
||||
_08002D34:
|
||||
movs r0, 0x2
|
||||
b _08002D4C
|
||||
_08002D38:
|
||||
cmp r3, 0
|
||||
bge _08002D40
|
||||
_08002D3C:
|
||||
movs r0, 0x4
|
||||
b _08002D4C
|
||||
_08002D40:
|
||||
cmp r3, 0
|
||||
bgt _08002D4A
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _08002D4C
|
||||
_08002D4A:
|
||||
movs r0, 0
|
||||
_08002D4C:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end VecDirection4Radial
|
||||
|
||||
thumb_func_start SizedDeltaDirection4
|
||||
SizedDeltaDirection4:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x8
|
||||
adds r4, r1, 0
|
||||
adds r5, r3, 0
|
||||
ldr r3, [r2]
|
||||
ldr r1, [r0]
|
||||
subs r3, r1
|
||||
str r3, [sp]
|
||||
ldr r1, [r2, 0x4]
|
||||
ldr r0, [r0, 0x4]
|
||||
subs r1, r0
|
||||
str r1, [sp, 0x4]
|
||||
adds r2, r3, 0
|
||||
cmp r2, 0
|
||||
blt _08002D8A
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
bge _08002DA4
|
||||
b _08002DA0
|
||||
_08002D8A:
|
||||
subs r2, r3, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
ble _08002DA4
|
||||
_08002DA0:
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
_08002DA4:
|
||||
ldr r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
blt _08002DC2
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
bge _08002DDC
|
||||
b _08002DD8
|
||||
_08002DC2:
|
||||
subs r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
ble _08002DDC
|
||||
_08002DD8:
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x4]
|
||||
_08002DDC:
|
||||
mov r0, sp
|
||||
bl VecDirection4Radial
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
add sp, 0x8
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end SizedDeltaDirection4
|
||||
|
||||
thumb_func_start SizedDeltaDirection8
|
||||
SizedDeltaDirection8:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x8
|
||||
adds r4, r1, 0
|
||||
adds r5, r3, 0
|
||||
ldr r3, [r2]
|
||||
ldr r1, [r0]
|
||||
subs r3, r1
|
||||
str r3, [sp]
|
||||
ldr r1, [r2, 0x4]
|
||||
ldr r0, [r0, 0x4]
|
||||
subs r1, r0
|
||||
str r1, [sp, 0x4]
|
||||
adds r2, r3, 0
|
||||
cmp r2, 0
|
||||
blt _08002E26
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
bge _08002E40
|
||||
b _08002E3C
|
||||
_08002E26:
|
||||
subs r2, r3, 0x1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp]
|
||||
cmp r2, 0
|
||||
ble _08002E40
|
||||
_08002E3C:
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
_08002E40:
|
||||
ldr r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
blt _08002E5E
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
subs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
bge _08002E78
|
||||
b _08002E74
|
||||
_08002E5E:
|
||||
subs r2, 0x1
|
||||
ldr r0, [r4, 0x4]
|
||||
ldr r1, [r5, 0x4]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
adds r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
cmp r2, 0
|
||||
ble _08002E78
|
||||
_08002E74:
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x4]
|
||||
_08002E78:
|
||||
mov r0, sp
|
||||
bl VecDirection8Radial
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
add sp, 0x8
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end SizedDeltaDirection8
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
7
include/code_8002774.h
Normal file
7
include/code_8002774.h
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef GUARD_CODE_8002774_H
|
||||
#define GUARD_CODE_8002774_H
|
||||
|
||||
s32 sub_8002A70(s32 a0, s32 a1, s32 a2);
|
||||
s32 sub_8002B04(s32, s32);
|
||||
|
||||
#endif
|
||||
|
|
@ -38,6 +38,6 @@ void sub_8086854(void);
|
|||
void sub_80868F4(Entity *entity);
|
||||
void sub_8086910(Entity *entity);
|
||||
void sub_808692C(void);
|
||||
void sub_80869E4(Entity *, s32, u8, s8 direction);
|
||||
void sub_80869E4(struct Entity *entity, s32 a1, u8 a2, s32 _someDirection);
|
||||
|
||||
#endif // GUARD_CODE_80869E4_H
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ SECTIONS {
|
|||
asm/event_flag.o(.text);
|
||||
src/event_flag.o(.text);
|
||||
asm/code_8002774.o(.text);
|
||||
src/code_8002774.o(.text);
|
||||
asm/code_8002774_2.o(.text);
|
||||
src/memory.o(.text);
|
||||
asm/memory.o(.text);
|
||||
src/memory_mid.o(.text);
|
||||
|
|
|
|||
68
src/code_8002774.c
Normal file
68
src/code_8002774.c
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#include "global.h"
|
||||
#include "code_8002774.h"
|
||||
#include "constants/direction.h"
|
||||
|
||||
s32 sub_8002A70(s32 _direction1, s32 _direction2, s32 _caseId)
|
||||
{
|
||||
s32 direction1 = (s8)(_direction1);
|
||||
s32 direction2 = (s8)(_direction2);
|
||||
s32 caseId = (u8)(_caseId);
|
||||
|
||||
if (direction1 == direction2)
|
||||
return direction1;
|
||||
|
||||
switch (caseId) {
|
||||
case 1:
|
||||
if (direction1 >= 0) {
|
||||
direction1 += 7;
|
||||
direction1 &= DIRECTION_MASK;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (direction1 >= 0) {
|
||||
direction1 += 1;
|
||||
direction1 &= DIRECTION_MASK;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (direction1 >= 0) {
|
||||
direction1 += 6;
|
||||
direction1 &= DIRECTION_MASK;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (direction1 >= 0) {
|
||||
direction1 += 2;
|
||||
direction1 &= DIRECTION_MASK;
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
direction1 = sub_8002B04(direction1, direction2);
|
||||
// Fallthrough
|
||||
case 10:
|
||||
direction1 = sub_8002B04(direction1, direction2);
|
||||
break;
|
||||
}
|
||||
return direction1;
|
||||
}
|
||||
|
||||
s32 sub_8002B04(s32 _direction1, s32 _direction2)
|
||||
{
|
||||
s32 direction1 = (s8)(_direction1);
|
||||
s32 direction2 = (s8)(_direction2);
|
||||
|
||||
if (direction2 != -1)
|
||||
{
|
||||
s32 newDirection = ((direction2 + NUM_DIRECTIONS) - direction1) % NUM_DIRECTIONS;
|
||||
|
||||
if (newDirection != 0) {
|
||||
if (newDirection < 4)
|
||||
newDirection = (direction1 + 1) % NUM_DIRECTIONS;
|
||||
else
|
||||
newDirection = (direction1 + 7) % NUM_DIRECTIONS;
|
||||
|
||||
direction1 = (s8)newDirection;
|
||||
}
|
||||
}
|
||||
return direction1;
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
#include "global.h"
|
||||
#include "code_800E9E4.h"
|
||||
#include "code_803E46C.h"
|
||||
#include "code_803E668.h"
|
||||
#include "code_806CD90.h"
|
||||
|
|
@ -474,71 +475,18 @@ void SpriteLookAroundEffect(Entity *entity)
|
|||
sub_803E708(15, 70);
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING // 100% match, but params for sub_8002A70 are disputed... https://decomp.me/scratch/E3iF1
|
||||
void sub_80869E4(Entity *a0, s32 a1, u8 a2, s8 a3)
|
||||
void sub_80869E4(struct Entity *entity, s32 a1, u8 a2, s32 _someDirection)
|
||||
{
|
||||
u32 r4;
|
||||
s32 tmp;
|
||||
struct EntityInfo* info;
|
||||
s32 someDirection = (s8) _someDirection;
|
||||
struct EntityInfo *info = GetEntInfo(entity);
|
||||
s32 direction = (s8) info->action.direction;
|
||||
|
||||
tmp = (s8)a3;
|
||||
|
||||
info = GetEntInfo(a0);
|
||||
r4 = (s8)info->action.direction;
|
||||
while (r4 != tmp) {
|
||||
r4 = sub_8002A70(r4, tmp, a2);
|
||||
info->action.direction = r4 % 8;
|
||||
sub_806CE68(a0, info->action.direction);
|
||||
while (direction != someDirection) {
|
||||
direction = (s8) sub_8002A70(direction, someDirection, a2);
|
||||
info->action.direction = direction;
|
||||
info->action.direction &= DIRECTION_MASK;
|
||||
sub_806CE68(entity, info->action.direction);
|
||||
sub_803E708(a1, 70);
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_80869E4(Entity *a0, s32 a1, u8 a2, s8 a3)
|
||||
{
|
||||
asm_unified(
|
||||
"push {r4-r7,lr}\n"
|
||||
"\tmov r7, r9\n"
|
||||
"\tmov r6, r8\n"
|
||||
"\tpush {r6,r7}\n"
|
||||
"\tadds r7, r0, 0\n"
|
||||
"\tmov r9, r1\n"
|
||||
"\tlsls r2, 24\n"
|
||||
"\tlsrs r2, 24\n"
|
||||
"\tmov r8, r2\n"
|
||||
"\tlsls r3, 24\n"
|
||||
"\tasrs r6, r3, 24\n"
|
||||
"\tldr r0, [r7, 0x70]\n"
|
||||
"\tadds r0, 0x46\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tldrsb r4, [r0, r4]\n"
|
||||
"\tcmp r4, r6\n"
|
||||
"\tbeq _08086A30\n"
|
||||
"\tadds r5, r0, 0\n"
|
||||
"_08086A08:\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tadds r1, r6, 0\n"
|
||||
"\tmov r2, r8\n"
|
||||
"\tbl sub_8002A70\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tasrs r4, r0, 24\n"
|
||||
"\tmovs r0, 0x7\n"
|
||||
"\tands r0, r4\n"
|
||||
"\tstrb r0, [r5]\n"
|
||||
"\tldrb r1, [r5]\n"
|
||||
"\tadds r0, r7, 0\n"
|
||||
"\tbl sub_806CE68\n"
|
||||
"\tmov r0, r9\n"
|
||||
"\tmovs r1, 0x46\n"
|
||||
"\tbl sub_803E708\n"
|
||||
"\tcmp r4, r6\n"
|
||||
"\tbne _08086A08\n"
|
||||
"_08086A30:\n"
|
||||
"\tpop {r3,r4}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tmov r9, r4\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "code_803E724.h"
|
||||
#include "code_803E46C.h"
|
||||
#include "code_8041AD0.h"
|
||||
#include "code_800E9E4.h"
|
||||
|
||||
extern void sub_80429C8(Entity *r0);
|
||||
extern bool8 sub_8045888(Entity *r0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user