mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-20 19:23:38 +01:00
ObjectCB_CameraObject
This commit is contained in:
parent
9e0a171098
commit
c7b1a8c3da
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user