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 /src | |
parent | c4ec5255085223ca39ed43387b2b74d62e1ee93f (diff) |
up through state_to_direction, which is nonmatching (help, registers are misbehaving)
Diffstat (limited to 'src')
-rwxr-xr-x | src/field_map_obj.c | 70 |
1 files changed, 70 insertions, 0 deletions
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 |