summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/field_map_obj.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 5852f220c..3e3bbfa6f 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -4288,3 +4288,31 @@ void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direc
npc_apply_anim_looping(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18));
DoShadowFieldEffect(mapObject);
}
+
+u8 sub_80940C4(struct MapObject *mapObject, struct Sprite *sprite, u8 callback(struct Sprite *))
+{
+ s16 displacements[ARRAY_COUNT(gUnknown_0850DFC2)];
+ s16 x;
+ s16 y;
+ u8 result;
+
+ memcpy(displacements, gUnknown_0850DFC2, sizeof gUnknown_0850DFC2);
+ result = callback(sprite);
+ if (result == 1 && displacements[sprite->data4] != 0)
+ {
+ x = 0;
+ y = 0;
+ sub_8092F88(mapObject->placeholder18, &x, &y, displacements[sprite->data4], displacements[sprite->data4]);
+ npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y);
+ mapObject->mapobj_bit_2 = TRUE;
+ mapObject->mapobj_bit_4 = TRUE;
+ }
+ else if (result == 0xFF)
+ {
+ npc_coords_shift_still(mapObject);
+ mapObject->mapobj_bit_3 = TRUE;
+ mapObject->mapobj_bit_5 = TRUE;
+ sprite->animPaused = TRUE;
+ }
+ return result;
+}