diff options
author | scnorton <scnorton@biociphers.org> | 2017-05-23 14:27:22 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-05-23 14:27:22 -0400 |
commit | 29aac6bde0ea201bd8eebedbbbc1b4a012d574e4 (patch) | |
tree | 7798f83fbea74f91918154be0492e611ac64377c | |
parent | c4ec5255085223ca39ed43387b2b74d62e1ee93f (diff) |
up through state_to_direction, which is nonmatching (help, registers are misbehaving)
-rw-r--r-- | asm/field_map_obj.s | 84 | ||||
-rwxr-xr-x | include/field_map_obj.h | 4 | ||||
-rwxr-xr-x | src/field_map_obj.c | 70 |
3 files changed, 74 insertions, 84 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index ea685d6ec..86f53d9e8 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -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} diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 44212ac47..07aba90e5 100755 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -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[]; diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 211bc919f..108f9cc20 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -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 |