mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-21 11:43:37 +01:00
ObjectCB_CameraObject
This commit is contained in:
parent
9e0a171098
commit
c7b1a8c3da
@ -5,120 +5,6 @@
|
|||||||
|
|
||||||
.text
|
.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
|
thumb_func_start FindCameraObject
|
||||||
@ struct obj *FindCameraObject()
|
@ struct obj *FindCameraObject()
|
||||||
FindCameraObject: @ 808EE44
|
FindCameraObject: @ 808EE44
|
||||||
|
@ -15,5 +15,6 @@ extern const struct PairedPalettes gUnknown_0850BD00[15];
|
|||||||
extern const struct PairedPalettes gUnknown_0850BD78[15];
|
extern const struct PairedPalettes gUnknown_0850BD78[15];
|
||||||
extern u8 gUnknown_084975C4[0x10];
|
extern u8 gUnknown_084975C4[0x10];
|
||||||
extern const struct SpriteTemplate gUnknown_084975D4;
|
extern const struct SpriteTemplate gUnknown_084975D4;
|
||||||
|
extern void (*const gUnknown_084975EC[3])(struct Sprite *);
|
||||||
|
|
||||||
#endif //POKEEMERALD_DATA3_H
|
#endif //POKEEMERALD_DATA3_H
|
||||||
|
@ -48,6 +48,9 @@ static u8 sub_808E8F4(const struct SpritePalette *);
|
|||||||
static u8 FindFieldObjectPaletteIndexByTag(u16);
|
static u8 FindFieldObjectPaletteIndexByTag(u16);
|
||||||
static void sub_808EAB0(u16, u8);
|
static void sub_808EAB0(u16, u8);
|
||||||
static bool8 FieldObjectDoesZCoordMatch(struct MapObject *, 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
|
// ROM data
|
||||||
|
|
||||||
@ -1337,12 +1340,50 @@ void UpdateFieldObjectsForCameraUpdate(s16 x, s16 y)
|
|||||||
RemoveFieldObjectsOutsideView();
|
RemoveFieldObjectsOutsideView();
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 AddCameraObject(u8 data0)
|
u8 AddCameraObject(u8 linkedSpriteId)
|
||||||
{
|
{
|
||||||
u8 spriteId;
|
u8 spriteId;
|
||||||
|
|
||||||
spriteId = CreateSprite(&gUnknown_084975D4, 0, 0, 4);
|
spriteId = CreateSprite(&gUnknown_084975D4, 0, 0, 4);
|
||||||
gSprites[spriteId].invisible = TRUE;
|
gSprites[spriteId].invisible = TRUE;
|
||||||
gSprites[spriteId].data0 = data0;
|
gSprites[spriteId].data0 = linkedSpriteId;
|
||||||
return spriteId;
|
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