summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_map_obj.s259
-rw-r--r--include/field_map_obj_helpers.h2
-rwxr-xr-xsrc/field_map_obj.c106
3 files changed, 108 insertions, 259 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 167a5cd13..2eff32e9e 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -1353,265 +1353,6 @@ sub_805FD08: @ 805FD08
.section .text_805fd18
- thumb_func_start sub_8060E68
-sub_8060E68: @ 8060E68
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- adds r6, r0, 0
- mov r8, r1
- lsls r5, r2, 24
- lsrs r5, 24
- ldrh r1, [r6, 0x10]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r6, 0x12]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- adds r0, r6, 0
- adds r1, r5, 0
- bl FieldObjectSetDirection
- adds r0, r5, 0
- mov r1, sp
- adds r2, r4, 0
- bl MoveCoords
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r4, r0]
- adds r0, r6, 0
- bl npc_coords_shift
- mov r0, r8
- adds r1, r5, 0
- bl sub_806467C
- mov r2, r8
- adds r2, 0x2C
- ldrb r1, [r2]
- movs r0, 0x41
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
- movs r0, 0x1
- mov r1, r8
- strh r0, [r1, 0x32]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8060E68
-
- thumb_func_start sub_8060ED8
-sub_8060ED8: @ 8060ED8
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r2, 24
- lsrs r2, 24
- bl sub_8060E68
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl get_go_image_anim_num
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_805FE28
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8060ED8
-
- thumb_func_start an_walk_any_2
-an_walk_any_2: @ 8060F04
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r0, r5, 0
- bl sub_806468C
- lsls r0, 24
- cmp r0, 0
- bne _08060F1A
- movs r0, 0
- b _08060F36
-_08060F1A:
- adds r0, r4, 0
- bl npc_coords_shift_still
- ldrb r0, [r4]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x1
-_08060F36:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end an_walk_any_2
-
- thumb_func_start sub_8060F3C
-sub_8060F3C: @ 8060F3C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- movs r2, 0x1
- bl sub_8060ED8
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8060F5C
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8060F3C
-
- thumb_func_start sub_8060F5C
-sub_8060F5C: @ 8060F5C
- push {r4,lr}
- adds r4, r1, 0
- bl an_walk_any_2
- lsls r0, 24
- cmp r0, 0
- bne _08060F6E
- movs r0, 0
- b _08060F74
-_08060F6E:
- movs r0, 0x2
- strh r0, [r4, 0x32]
- movs r0, 0x1
-_08060F74:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8060F5C
-
- thumb_func_start sub_8060F7C
-sub_8060F7C: @ 8060F7C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- movs r2, 0x2
- bl sub_8060ED8
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8060F9C
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8060F7C
-
- thumb_func_start sub_8060F9C
-sub_8060F9C: @ 8060F9C
- push {r4,lr}
- adds r4, r1, 0
- bl an_walk_any_2
- lsls r0, 24
- cmp r0, 0
- bne _08060FAE
- movs r0, 0
- b _08060FB4
-_08060FAE:
- movs r0, 0x2
- strh r0, [r4, 0x32]
- movs r0, 0x1
-_08060FB4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8060F9C
-
- thumb_func_start sub_8060FBC
-sub_8060FBC: @ 8060FBC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- movs r2, 0x3
- bl sub_8060ED8
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8060FDC
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8060FBC
-
- thumb_func_start sub_8060FDC
-sub_8060FDC: @ 8060FDC
- push {r4,lr}
- adds r4, r1, 0
- bl an_walk_any_2
- lsls r0, 24
- cmp r0, 0
- bne _08060FEE
- movs r0, 0
- b _08060FF4
-_08060FEE:
- movs r0, 0x2
- strh r0, [r4, 0x32]
- movs r0, 0x1
-_08060FF4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8060FDC
-
- thumb_func_start sub_8060FFC
-sub_8060FFC: @ 8060FFC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- movs r2, 0x4
- bl sub_8060ED8
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_806101C
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8060FFC
-
- thumb_func_start sub_806101C
-sub_806101C: @ 806101C
- push {r4,lr}
- adds r4, r1, 0
- bl an_walk_any_2
- lsls r0, 24
- cmp r0, 0
- bne _0806102E
- movs r0, 0
- b _08061034
-_0806102E:
- movs r0, 0x2
- strh r0, [r4, 0x32]
- movs r0, 0x1
-_08061034:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_806101C
-
thumb_func_start sub_806103C
sub_806103C: @ 806103C
push {r4,r5,lr}
diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h
index 2481e143d..a61dcc63c 100644
--- a/include/field_map_obj_helpers.h
+++ b/include/field_map_obj_helpers.h
@@ -9,5 +9,7 @@ void sub_806487C(struct Sprite *sprite, bool8 invisible);
void sub_8064990(u8, u8);
void UnfreezeMapObject(struct MapObject *mapObject);
void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3);
+void sub_806467C(struct Sprite *sprite, u8 direction);
+bool8 sub_806468C(struct Sprite *sprite);
#endif
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index ae5d65ce2..cb68b0140 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -4238,3 +4238,109 @@ bool8 npc_obj_ministep_stop_on_arrival(struct MapObject *mapObject, struct Sprit
}
return 0;
}
+
+void sub_8060E68(struct MapObject *mapObject, struct Sprite *sprite, u8 direction)
+{
+ s16 x;
+ s16 y;
+ x = mapObject->coords2.x;
+ y = mapObject->coords2.y;
+ FieldObjectSetDirection(mapObject, direction);
+ MoveCoords(direction, &x, &y);
+ npc_coords_shift(mapObject, x, y);
+ sub_806467C(sprite, direction);
+ sprite->animPaused = 0;
+ mapObject->mapobj_bit_2 = 1;
+ sprite->data2 = 1;
+}
+
+void sub_8060ED8(struct MapObject *mapObject, struct Sprite *sprite, u8 direction)
+{
+ sub_8060E68(mapObject, sprite, direction);
+ sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18));
+}
+
+bool8 an_walk_any_2(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (sub_806468C(sprite))
+ {
+ npc_coords_shift_still(mapObject);
+ mapObject->mapobj_bit_3 = 1;
+ sprite->animPaused = 1;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8060F5C(struct MapObject *, struct Sprite *);
+
+bool8 sub_8060F3C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sub_8060ED8(mapObject, sprite, DIR_SOUTH);
+ return sub_8060F5C(mapObject, sprite);
+}
+
+bool8 sub_8060F5C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (an_walk_any_2(mapObject, sprite))
+ {
+ sprite->data2 = 2;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8060F9C(struct MapObject *, struct Sprite *);
+
+bool8 sub_8060F7C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sub_8060ED8(mapObject, sprite, DIR_NORTH);
+ return sub_8060F9C(mapObject, sprite);
+}
+
+bool8 sub_8060F9C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (an_walk_any_2(mapObject, sprite))
+ {
+ sprite->data2 = 2;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8060FDC(struct MapObject *, struct Sprite *);
+
+bool8 sub_8060FBC(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sub_8060ED8(mapObject, sprite, DIR_WEST);
+ return sub_8060FDC(mapObject, sprite);
+}
+
+bool8 sub_8060FDC(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (an_walk_any_2(mapObject, sprite))
+ {
+ sprite->data2 = 2;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_806101C(struct MapObject *, struct Sprite *);
+
+bool8 sub_8060FFC(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sub_8060ED8(mapObject, sprite, DIR_EAST);
+ return sub_806101C(mapObject, sprite);
+}
+
+bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (an_walk_any_2(mapObject, sprite))
+ {
+ sprite->data2 = 2;
+ return TRUE;
+ }
+ return FALSE;
+}
+