summaryrefslogtreecommitdiff
path: root/src/field_map_obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/field_map_obj.c')
-rwxr-xr-xsrc/field_map_obj.c70
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