summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/field_map_obj.s60
-rwxr-xr-xinclude/field_map_obj.h1
-rwxr-xr-xsrc/field_map_obj.c28
3 files changed, 29 insertions, 60 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index b8fce16f1..f17d25eba 100755
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -5,66 +5,6 @@
.text
- thumb_func_start FieldObjectCB_NoMovement1
-FieldObjectCB_NoMovement1: @ 808F3E0
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, =gMapObjects
- adds r0, r2
- ldr r2, =FieldObjectCB2_NoMovement1
- bl FieldObjectStep
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldObjectCB_NoMovement1
-
- thumb_func_start FieldObjectCB2_NoMovement1
-FieldObjectCB2_NoMovement1: @ 808F404
- movs r0, 0
- bx lr
- thumb_func_end FieldObjectCB2_NoMovement1
-
- thumb_func_start FieldObjectCB_GoRandomDirections
-FieldObjectCB_GoRandomDirections: @ 808F408
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, =gMapObjects
- adds r0, r2
- ldr r2, =FieldObjectCB2_GoRandomDirections
- bl FieldObjectStep
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldObjectCB_GoRandomDirections
-
- thumb_func_start FieldObjectCB2_GoRandomDirections
-FieldObjectCB2_GoRandomDirections: @ 808F42C
- push {r4,lr}
- ldr r3, =gUnknown_0850D6F4
- movs r4, 0x30
- ldrsh r2, [r1, r4]
- lsls r2, 2
- adds r2, r3
- ldr r2, [r2]
- bl _call_via_r2
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end FieldObjectCB2_GoRandomDirections
-
thumb_func_start sub_808F44C
sub_808F44C: @ 808F44C
push {r4,lr}
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index ec28df643..f91b8f9e3 100755
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -47,6 +47,7 @@ void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *);
void npc_coords_shift(struct MapObject *, s16, s16);
void sub_808EB08(struct MapObject *, s16, s16);
void sub_808F254(u8, u8, u8);
+void FieldObjectStep(struct MapObject *, struct Sprite *, bool8(struct MapObject *, struct Sprite *));
// Exported data declarations
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index e142a35d6..3dd47d540 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -20,6 +20,29 @@
#define NUM_FIELD_MAP_OBJECT_TEMPLATES 0x51
+#define null_object_step(name, retval) \
+static bool8 FieldObjectCB2_##name(struct MapObject *, struct Sprite *);\
+void FieldObjectCB_##name(struct Sprite *sprite)\
+{\
+ FieldObjectStep(&gMapObjects[sprite->data0], sprite, FieldObjectCB2_##name);\
+}\
+static bool8 FieldObjectCB2_##name(struct MapObject *mapObject, struct Sprite *sprite)\
+{\
+ return (retval);\
+}
+
+#define field_object_step(name, table) \
+extern bool8 (*const (table)[])(struct MapObject *, struct Sprite *);\
+static bool8 FieldObjectCB2_##name(struct MapObject *, struct Sprite *);\
+void FieldObjectCB_##name(struct Sprite *sprite)\
+{\
+ FieldObjectStep(&gMapObjects[sprite->data0], sprite, FieldObjectCB2_##name);\
+}\
+static bool8 FieldObjectCB2_##name(struct MapObject *mapObject, struct Sprite *sprite)\
+{\
+ return (table)[sprite->data1](mapObject, sprite);\
+}
+
// Static struct declarations
// Static RAM declarations
@@ -1692,3 +1715,8 @@ u16 npc_paltag_by_palslot(u8 palSlot)
}
return 0x11ff;
}
+
+null_object_step(NoMovement1, FALSE)
+
+field_object_step(GoRandomDirections, gUnknown_0850D6F4)
+