summaryrefslogtreecommitdiff
path: root/src/field_map_obj.c
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-09-10 16:13:19 -0400
committerscnorton <scnorton@biociphers.org>2017-09-10 16:13:19 -0400
commitc7b1a8c3daa5183f8e522d6d6fcba1ffea79e72f (patch)
tree56b3e69f0fcd3b3b862c9dc501dcf5e5a7e7e78b /src/field_map_obj.c
parent9e0a17109840593a034bd42e96ffbcf73bc16b1c (diff)
ObjectCB_CameraObject
Diffstat (limited to 'src/field_map_obj.c')
-rw-r--r--src/field_map_obj.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 933908886..3fc962336 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -48,6 +48,9 @@ static u8 sub_808E8F4(const struct SpritePalette *);
static u8 FindFieldObjectPaletteIndexByTag(u16);
static void sub_808EAB0(u16, u8);
static bool8 FieldObjectDoesZCoordMatch(struct MapObject *, u8);
+//static void CameraObject_0(struct Sprite *);
+/*static*/ void CameraObject_1(struct Sprite *);
+//static void CameraObject_2(struct Sprite *);
// ROM data
@@ -1337,12 +1340,50 @@ void UpdateFieldObjectsForCameraUpdate(s16 x, s16 y)
RemoveFieldObjectsOutsideView();
}
-u8 AddCameraObject(u8 data0)
+u8 AddCameraObject(u8 linkedSpriteId)
{
u8 spriteId;
spriteId = CreateSprite(&gUnknown_084975D4, 0, 0, 4);
gSprites[spriteId].invisible = TRUE;
- gSprites[spriteId].data0 = data0;
+ gSprites[spriteId].data0 = linkedSpriteId;
return spriteId;
}
+
+void ObjectCB_CameraObject(struct Sprite *sprite)
+{
+ void (*callbacks[ARRAY_COUNT(gUnknown_084975EC)])(struct Sprite *);
+
+ memcpy(callbacks, gUnknown_084975EC, sizeof gUnknown_084975EC);
+ callbacks[sprite->data1](sprite);
+}
+
+/*static*/ void CameraObject_0(struct Sprite *sprite)
+{
+ sprite->pos1.x = gSprites[sprite->data0].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data0].pos1.y;
+ sprite->invisible = TRUE;
+ sprite->data1 = 1;
+ CameraObject_1(sprite);
+}
+
+/*static*/ void CameraObject_1(struct Sprite *sprite)
+{
+ s16 x;
+ s16 y;
+
+ y = gSprites[sprite->data0].pos1.y;
+ x = gSprites[sprite->data0].pos1.x;
+ sprite->data2 = x - sprite->pos1.x;
+ sprite->data3 = y - sprite->pos1.y;
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+}
+
+/*static*/ void CameraObject_2(struct Sprite *sprite)
+{
+ sprite->pos1.x = gSprites[sprite->data0].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data0].pos1.y;
+ sprite->data2 = 0;
+ sprite->data3 = 0;
+}