diff options
author | scnorton <scnorton@biociphers.org> | 2017-09-10 16:13:19 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-09-10 16:13:19 -0400 |
commit | c7b1a8c3daa5183f8e522d6d6fcba1ffea79e72f (patch) | |
tree | 56b3e69f0fcd3b3b862c9dc501dcf5e5a7e7e78b /src/field_map_obj.c | |
parent | 9e0a17109840593a034bd42e96ffbcf73bc16b1c (diff) |
ObjectCB_CameraObject
Diffstat (limited to 'src/field_map_obj.c')
-rw-r--r-- | src/field_map_obj.c | 45 |
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; +} |