diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 9b26899518..cd71451600 100755 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -5,53 +5,6 @@ .text - thumb_func_start do_go_anim -@ void do_go_anim(struct npc_state *fieldObject, struct obj *object, u8 direction, u8 speed) -do_go_anim: @ 8093A2C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r5, r0, 0 - mov r8, r1 - adds r4, r3, 0 - lsls r2, 24 - lsrs r2, 24 - lsls r4, 24 - lsrs r4, 24 - mov r1, sp - ldr r0, =gUnknown_0850DEE8 - ldm r0!, {r3,r6,r7} - stm r1!, {r3,r6,r7} - ldm r0!, {r3,r6} - stm r1!, {r3,r6} - adds r0, r5, 0 - mov r1, r8 - adds r3, r4, 0 - bl npc_apply_direction - lsls r4, 2 - mov r7, sp - adds r1, r7, r4 - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - ldr r1, [r1] - bl _call_via_r1 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - mov r1, r8 - bl npc_apply_anim_looping - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end do_go_anim - thumb_func_start do_run_anim @ void do_run_anim(struct npc_state *fieldObject, struct obj *object, u8 direction) do_run_anim: @ 8093A88 diff --git a/include/data3.h b/include/data3.h index ef6f5193d4..9cd6e2fe12 100755 --- a/include/data3.h +++ b/include/data3.h @@ -43,5 +43,6 @@ extern const u8 gUnknown_0850DC3F[4][4]; extern const u8 gUnknown_0850DBA0[5]; extern bool8 (*const *const gUnknown_0850DC50[])(struct MapObject *, struct Sprite *); +extern u8 (*const gUnknown_0850DEE8[5])(u8); #endif //GUARD_DATA3_H diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 4f2a359e49..0e9086d337 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4174,3 +4174,12 @@ void npc_apply_direction(struct MapObject *mapObject, struct Sprite *sprite, u8 mapObject->mapobj_bit_2 = TRUE; sprite->data2 = 1; } + +void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 speed) +{ + u8 (*functions[ARRAY_COUNT(gUnknown_0850DEE8)])(u8); + + memcpy(functions, gUnknown_0850DEE8, sizeof gUnknown_0850DEE8); + npc_apply_direction(mapObject, sprite, direction, speed); + npc_apply_anim_looping(mapObject, sprite, functions[speed](mapObject->mapobj_unk_18)); +}