summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/field_map_obj.s68
-rwxr-xr-xinclude/data3.h2
-rwxr-xr-xsrc/field_map_obj.c26
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;
+}