ObjectCB_CameraObject

This commit is contained in:
scnorton 2017-09-10 16:13:19 -04:00
parent 9e0a171098
commit c7b1a8c3da
3 changed files with 44 additions and 116 deletions

View File

@ -5,120 +5,6 @@
.text
thumb_func_start ObjectCB_CameraObject
@ void ObjectCB_CameraObject(struct obj *object)
ObjectCB_CameraObject: @ 808ED78
push {r4,r5,lr}
sub sp, 0xC
mov r2, sp
ldr r1, =gUnknown_084975EC
ldm r1!, {r3-r5}
stm r2!, {r3-r5}
movs r2, 0x30
ldrsh r1, [r0, r2]
lsls r1, 2
add r1, sp
ldr r1, [r1]
bl _call_via_r1
add sp, 0xC
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end ObjectCB_CameraObject
thumb_func_start CameraObject_0
@ void CameraObject_0(struct obj *object)
CameraObject_0: @ 808EDA0
push {lr}
ldr r3, =gSprites
movs r1, 0x2E
ldrsh r2, [r0, r1]
lsls r1, r2, 4
adds r1, r2
lsls r1, 2
adds r1, r3
ldrh r1, [r1, 0x20]
strh r1, [r0, 0x20]
lsls r1, r2, 4
adds r1, r2
lsls r1, 2
adds r1, r3
ldrh r1, [r1, 0x22]
strh r1, [r0, 0x22]
adds r3, r0, 0
adds r3, 0x3E
ldrb r1, [r3]
movs r2, 0x4
orrs r1, r2
strb r1, [r3]
movs r1, 0x1
strh r1, [r0, 0x30]
bl CameraObject_1
pop {r0}
bx r0
.pool
thumb_func_end CameraObject_0
thumb_func_start CameraObject_1
@ void CameraObject_1(struct obj *object)
CameraObject_1: @ 808EDDC
push {r4,r5,lr}
ldr r3, =gSprites
movs r1, 0x2E
ldrsh r2, [r0, r1]
lsls r1, r2, 4
adds r1, r2
lsls r1, 2
adds r1, r3
ldrh r3, [r1, 0x22]
ldrh r2, [r0, 0x20]
ldrh r4, [r1, 0x20]
movs r5, 0x20
ldrsh r1, [r1, r5]
subs r1, r2
strh r1, [r0, 0x32]
ldrh r2, [r0, 0x22]
lsls r1, r3, 16
asrs r1, 16
subs r1, r2
strh r1, [r0, 0x34]
strh r4, [r0, 0x20]
strh r3, [r0, 0x22]
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end CameraObject_1
thumb_func_start CameraObject_2
@ void CameraObject_2(struct obj *object)
CameraObject_2: @ 808EE14
push {r4,lr}
ldr r4, =gSprites
movs r1, 0x2E
ldrsh r2, [r0, r1]
lsls r1, r2, 4
adds r1, r2
lsls r1, 2
adds r1, r4
ldrh r1, [r1, 0x20]
movs r3, 0
strh r1, [r0, 0x20]
lsls r1, r2, 4
adds r1, r2
lsls r1, 2
adds r1, r4
ldrh r1, [r1, 0x22]
strh r1, [r0, 0x22]
strh r3, [r0, 0x32]
strh r3, [r0, 0x34]
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end CameraObject_2
thumb_func_start FindCameraObject
@ struct obj *FindCameraObject()
FindCameraObject: @ 808EE44

View File

@ -15,5 +15,6 @@ extern const struct PairedPalettes gUnknown_0850BD00[15];
extern const struct PairedPalettes gUnknown_0850BD78[15];
extern u8 gUnknown_084975C4[0x10];
extern const struct SpriteTemplate gUnknown_084975D4;
extern void (*const gUnknown_084975EC[3])(struct Sprite *);
#endif //POKEEMERALD_DATA3_H

View File

@ -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;
}