From 4e22f1e55fd43ebfd4c94dc7c22aa6b403249370 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 16 Sep 2017 23:11:09 -0400 Subject: [PATCH] MapObjectExec***Anim --- asm/field_map_obj.s | 68 --------------------------------------------- include/data3.h | 2 ++ src/field_map_obj.c | 26 +++++++++++++++-- 3 files changed, 26 insertions(+), 70 deletions(-) diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index c81ef0b06..c4da7b242 100755 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -5,74 +5,6 @@ .text - thumb_func_start FieldObjectExecSpecialAnim -@ void FieldObjectExecSpecialAnim(struct npc_state *fieldObject, struct obj *object) -FieldObjectExecSpecialAnim: @ 809388C - push {r4,lr} - adds r4, r0, 0 - ldr r2, =gUnknown_0850DC50 - ldrb r0, [r4, 0x1C] - lsls r0, 2 - adds r0, r2 - movs r3, 0x32 - ldrsh r2, [r1, r3] - ldr r0, [r0] - lsls r2, 2 - adds r2, r0 - ldr r2, [r2] - adds r0, r4, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - beq _080938B8 - ldrb r0, [r4] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r4] -_080938B8: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end FieldObjectExecSpecialAnim - - thumb_func_start FieldObjectExecRegularAnim -@ bool8 FieldObjectExecRegularAnim(struct npc_state *fieldObject, struct obj *object) -FieldObjectExecRegularAnim: @ 80938C4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r1, =gUnknown_0850DC50 - ldrb r0, [r4, 0x1C] - lsls r0, 2 - adds r0, r1 - movs r2, 0x32 - ldrsh r1, [r5, r2] - ldr r0, [r0] - lsls r1, 2 - adds r1, r0 - ldr r2, [r1] - adds r0, r4, 0 - adds r1, r5, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - bne _080938F4 - movs r0, 0 - b _080938FE - .pool -_080938F4: - movs r0, 0xFF - strb r0, [r4, 0x1C] - movs r0, 0 - strh r0, [r5, 0x32] - movs r0, 0x1 -_080938FE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FieldObjectExecRegularAnim - thumb_func_start FieldObjectSetRegularAnim @ void FieldObjectSetRegularAnim(struct npc_state *fieldObject, struct obj *object, u8 animState) FieldObjectSetRegularAnim: @ 8093904 diff --git a/include/data3.h b/include/data3.h index a19aa6fe8..ef6f5193d 100755 --- a/include/data3.h +++ b/include/data3.h @@ -42,4 +42,6 @@ extern const u8 gUnknown_0850DC3F[4][4]; extern const u8 gUnknown_0850DBA0[5]; +extern bool8 (*const *const gUnknown_0850DC50[])(struct MapObject *, struct Sprite *); + #endif //GUARD_DATA3_H diff --git a/src/field_map_obj.c b/src/field_map_obj.c index ba207e2bd..9702385e4 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4081,8 +4081,11 @@ u32 zffu_offset_calc(u8 a0, u8 a1) u32 state_to_direction(u8 a0, u32 a1, u32 a2) { u32 zffuOffset; - u8 a1_2 = a1; - u8 a2_2 = a2; + u8 a1_2; + u8 a2_2; + + a1_2 = a1; + a2_2 = a2; if (a1_2 == 0 || a2_2 == 0 || a1_2 > DIR_EAST || a2_2 > DIR_EAST) { return 0; @@ -4090,3 +4093,22 @@ u32 state_to_direction(u8 a0, u32 a1, u32 a2) zffuOffset = zffu_offset_calc(a1_2, a2); return gUnknown_0850DC3F[a0 - 1][zffuOffset - 1]; } + +void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gUnknown_0850DC50[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + { + mapObject->mapobj_bit_7 = TRUE; + } +} + +bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gUnknown_0850DC50[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + { + mapObject->mapobj_unk_1C = 0xFF; + sprite->data2 = 0; + return TRUE; + } + return FALSE; +}