up through state_to_direction, which is nonmatching (help, registers are misbehaving)

This commit is contained in:
scnorton
2017-05-23 14:27:22 -04:00
parent c4ec525508
commit 29aac6bde0
3 changed files with 74 additions and 84 deletions
-84
View File
@@ -1353,90 +1353,6 @@ sub_805FD08: @ 805FD08
.section .text_805fd18
thumb_func_start GetOppositeDirection
GetOppositeDirection: @ 8060B90
push {r4,lr}
sub sp, 0x8
lsls r0, 24
lsrs r4, r0, 24
ldr r1, _08060BB4 @ =gUnknown_0837574F
mov r0, sp
movs r2, 0x8
bl memcpy
subs r1, r4, 0x1
lsls r0, r1, 24
lsrs r0, 24
cmp r0, 0x7
bhi _08060BB8
mov r2, sp
adds r0, r2, r1
ldrb r0, [r0]
b _08060BBA
.align 2, 0
_08060BB4: .4byte gUnknown_0837574F
_08060BB8:
adds r0, r4, 0
_08060BBA:
add sp, 0x8
pop {r4}
pop {r1}
bx r1
thumb_func_end GetOppositeDirection
thumb_func_start zffu_offset_calc
zffu_offset_calc: @ 8060BC4
lsls r0, 24
lsls r1, 24
lsrs r1, 24
ldr r2, _08060BD8 @ =gUnknown_08375757
lsrs r0, 22
subs r0, 0x5
adds r1, r0
adds r1, r2
ldrb r0, [r1]
bx lr
.align 2, 0
_08060BD8: .4byte gUnknown_08375757
thumb_func_end zffu_offset_calc
thumb_func_start state_to_direction
state_to_direction: @ 8060BDC
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
lsls r1, 24
lsrs r1, 24
adds r0, r1, 0
lsls r2, 24
lsrs r2, 24
cmp r1, 0
beq _08060BFC
cmp r2, 0
beq _08060BFC
cmp r1, 0x4
bhi _08060BFC
cmp r2, 0x4
bls _08060C00
_08060BFC:
movs r0, 0
b _08060C12
_08060C00:
adds r1, r2, 0
bl zffu_offset_calc
ldr r2, _08060C18 @ =gUnknown_08375767
lsls r1, r4, 2
subs r1, 0x5
adds r0, r1
adds r0, r2
ldrb r0, [r0]
_08060C12:
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08060C18: .4byte gUnknown_08375767
thumb_func_end state_to_direction
thumb_func_start FieldObjectExecSpecialAnim
FieldObjectExecSpecialAnim: @ 8060C1C
push {r4,lr}
+4
View File
@@ -76,6 +76,10 @@ extern const u8 gUnknown_08375574[4];
extern const u8 gUnknown_08375584[4];
extern const u8 gUnknown_0837567B[9];
extern const u8 gUnknown_0837574F[8];
extern const u8 gUnknown_08375757[4][4];
extern const u8 gUnknown_08375767[4][4];
extern const struct Coords16 gDirectionToVector[];
+70
View File
@@ -4064,3 +4064,73 @@ u8 sub_8060B64(u8 index)
}
return directions[index];
}
u8 GetOppositeDirection(u8 direction)
{
u8 directions[8];
memcpy(directions, gUnknown_0837574F, 8);
if (direction == 0 || direction > 8)
{
return direction;
}
return directions[direction - 1];
}
int zffu_offset_calc(u8 a0, u8 a1)
{
return gUnknown_08375757[a0 - 1][a1 - 1];
}
#ifdef NONMATCHING
u8 state_to_direction(u8 a0, u8 a1, u8 a2)
{
int zffuOffset;
if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4)
{
return 0;
}
zffuOffset = zffu_offset_calc(a1, a2);
return gUnknown_08375767[a0 - 1][zffuOffset - 1];
}
#else
__attribute__((naked))
u8 state_to_direction(u8 a0, u8 a1, u8 a2)
{
asm(".syntax unified\n\
push {r4,lr}\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
lsls r1, 24\n\
lsrs r1, 24\n\
adds r0, r1, 0\n\
lsls r2, 24\n\
lsrs r2, 24\n\
cmp r1, 0\n\
beq _08060BFC\n\
cmp r2, 0\n\
beq _08060BFC\n\
cmp r1, 0x4\n\
bhi _08060BFC\n\
cmp r2, 0x4\n\
bls _08060C00\n\
_08060BFC:\n\
movs r0, 0\n\
b _08060C12\n\
_08060C00:\n\
adds r1, r2, 0\n\
bl zffu_offset_calc\n\
ldr r2, _08060C18 @ =gUnknown_08375767\n\
lsls r1, r4, 2\n\
subs r1, 0x5\n\
adds r0, r1\n\
adds r0, r2\n\
ldrb r0, [r0]\n\
_08060C12:\n\
pop {r4}\n\
pop {r1}\n\
bx r1\n\
.align 2, 0\n\
_08060C18: .4byte gUnknown_08375767\n\
.syntax divided\n");
}
#endif