summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_map_obj.s73
-rw-r--r--src/field_map_obj.c47
2 files changed, 40 insertions, 80 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 3103002d2..782d5dda1 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -6,79 +6,6 @@
.text
- thumb_func_start sub_805CD60
-sub_805CD60: @ 805CD60
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- bl FieldObjectIsTrainerAndCloseToPlayer
- lsls r0, 24
- cmp r0, 0
- bne _0805CD78
- movs r0, 0
- b _0805CDDC
-_0805CD78:
- mov r5, sp
- adds r5, 0x2
- mov r0, sp
- adds r1, r5, 0
- bl PlayerGetDestCoords
- mov r2, sp
- mov r0, sp
- ldrh r0, [r0]
- ldrh r1, [r4, 0x10]
- subs r0, r1
- strh r0, [r2]
- ldrh r0, [r5]
- ldrh r1, [r4, 0x12]
- subs r0, r1
- strh r0, [r5]
- mov r0, sp
- ldrh r3, [r5]
- ldrh r2, [r0]
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bge _0805CDAC
- negs r0, r0
- lsls r0, 16
- lsrs r2, r0, 16
-_0805CDAC:
- lsls r0, r3, 16
- asrs r0, 16
- cmp r0, 0
- bge _0805CDBA
- negs r0, r0
- lsls r0, 16
- lsrs r3, r0, 16
-_0805CDBA:
- ldr r0, _0805CDE4 @ =gUnknown_08375244
- lsls r4, r6, 2
- adds r4, r0
- mov r0, sp
- movs r6, 0
- ldrsh r0, [r0, r6]
- movs r6, 0
- ldrsh r1, [r5, r6]
- lsls r2, 16
- asrs r2, 16
- lsls r3, 16
- asrs r3, 16
- ldr r4, [r4]
- bl _call_via_r4
- lsls r0, 24
- lsrs r0, 24
-_0805CDDC:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805CDE4: .4byte gUnknown_08375244
- thumb_func_end sub_805CD60
-
thumb_func_start sub_805CDE8
sub_805CDE8: @ 805CDE8
push {lr}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index f042b4af1..9d4a67da3 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -34,6 +34,7 @@ void GetFieldObjectMovingCameraOffset(s16 *, s16 *);
void sub_805BDF8(u16);
u8 sub_805BE58(const struct SpritePalette *);
u8 FindFieldObjectPaletteIndexByTag(u16);
+extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3);
struct PairedPalettes
{
@@ -1687,7 +1688,8 @@ u8 sub_805CAEC(s16 a0, s16 a1, s16 a2, s16 a3)
return dirn;
}
-u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) {
+u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3)
+{
u8 dirn;
dirn = sub_805CAAC(a0, a1, a2, a3);
if (dirn == DIR_SOUTH)
@@ -1709,7 +1711,8 @@ u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) {
return dirn;
}
-u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) {
+u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3)
+{
u8 dirn;
dirn = sub_805CAAC(a0, a1, a2, a3);
if (dirn == DIR_SOUTH)
@@ -1731,7 +1734,8 @@ u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) {
return dirn;
}
-u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3) {
+u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3)
+{
u8 dirn;
dirn = sub_805CAAC(a0, a1, a2, a3);
if (dirn == DIR_NORTH)
@@ -1775,7 +1779,8 @@ u8 sub_805CC14(s16 a0, s16 a1, s16 a2, s16 a3) {
return dirn;
}
-u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) {
+u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3)
+{
u8 dirn;
dirn = sub_805CAAC(a0, a1, a2, a3);
if (dirn == DIR_EAST)
@@ -1785,7 +1790,8 @@ u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) {
return dirn;
}
-u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) {
+u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3)
+{
u8 dirn;
dirn = sub_805CAAC(a0, a1, a2, a3);
if (dirn == DIR_WEST)
@@ -1795,7 +1801,8 @@ u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) {
return dirn;
}
-u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) {
+u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3)
+{
u8 dirn;
dirn = sub_805CAAC(a0, a1, a2, a3);
if (dirn == DIR_SOUTH)
@@ -1805,7 +1812,8 @@ u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) {
return dirn;
}
-u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) {
+u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3)
+{
u8 dirn;
dirn = sub_805CAAC(a0, a1, a2, a3);
if (dirn == DIR_NORTH)
@@ -1815,3 +1823,28 @@ u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) {
return dirn;
}
+u8 sub_805CD60(struct MapObject *mapObject, u8 a1)
+{
+ s16 x;
+ s16 y;
+ s16 x2;
+ s16 y2;
+ if (!FieldObjectIsTrainerAndCloseToPlayer(mapObject))
+ {
+ return 0;
+ }
+ PlayerGetDestCoords(&x, &y);
+ x -= mapObject->coords2.x;
+ y -= mapObject->coords2.y;
+ x2 = x;
+ y2 = y;
+ if (x2 < 0)
+ {
+ x2 = -x2;
+ }
+ if (y2 < 0)
+ {
+ y2 = -y2;
+ }
+ return gUnknown_08375244[a1](x, y, x2, y2);
+}