FieldObjectDoesZCoordMatch

This commit is contained in:
scnorton 2017-09-10 15:54:41 -04:00
parent 79b19a36b8
commit d8e2238086
2 changed files with 25 additions and 83 deletions

View file

@ -5,89 +5,6 @@
.text
thumb_func_start GetFieldObjectIdByXYZ
@ u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z)
GetFieldObjectIdByXYZ: @ 808EC78
push {r4-r7,lr}
mov r7, r8
push {r7}
lsls r0, 16
lsrs r7, r0, 16
lsls r1, 16
lsrs r6, r1, 16
lsls r2, 24
lsrs r5, r2, 24
movs r4, 0
ldr r0, =gMapObjects
mov r8, r0
_0808EC90:
lsls r0, r4, 3
adds r0, r4
lsls r0, 2
mov r2, r8
adds r1, r0, r2
ldrb r0, [r1]
lsls r0, 31
cmp r0, 0
beq _0808ECC8
movs r2, 0x10
ldrsh r0, [r1, r2]
cmp r0, r7
bne _0808ECC8
movs r2, 0x12
ldrsh r0, [r1, r2]
cmp r0, r6
bne _0808ECC8
adds r0, r1, 0
adds r1, r5, 0
bl FieldObjectDoesZCoordMatch
lsls r0, 24
cmp r0, 0
beq _0808ECC8
adds r0, r4, 0
b _0808ECD4
.pool
_0808ECC8:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0xF
bls _0808EC90
movs r0, 0x10
_0808ECD4:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end GetFieldObjectIdByXYZ
thumb_func_start FieldObjectDoesZCoordMatch
@ bool8 FieldObjectDoesZCoordMatch(struct npc_state *fieldObject)
FieldObjectDoesZCoordMatch: @ 808ECE0
push {lr}
lsls r1, 24
lsrs r1, 24
ldrb r2, [r0, 0xB]
movs r0, 0xF
ands r0, r2
cmp r0, 0
beq _0808ED00
cmp r1, 0
beq _0808ED00
lsls r0, r2, 28
lsrs r0, 28
cmp r0, r1
beq _0808ED00
movs r0, 0
b _0808ED02
_0808ED00:
movs r0, 0x1
_0808ED02:
pop {r1}
bx r1
thumb_func_end FieldObjectDoesZCoordMatch
thumb_func_start UpdateFieldObjectsForCameraUpdate
@ void UpdateFieldObjectsForCameraUpdate(u16 movingCameraOffsetX, u16 movingCameraOffsetY)
UpdateFieldObjectsForCameraUpdate: @ 808ED08

View file

@ -47,6 +47,7 @@ static void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8);
static u8 sub_808E8F4(const struct SpritePalette *);
static u8 FindFieldObjectPaletteIndexByTag(u16);
static void sub_808EAB0(u16, u8);
static bool8 FieldObjectDoesZCoordMatch(struct MapObject *, u8);
// ROM data
@ -1304,3 +1305,27 @@ void UpdateFieldObjectCoordsForCameraUpdate(void)
}
}
u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z)
{
u8 i;
for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
{
if (gMapObjects[i].active)
{
if (gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y && FieldObjectDoesZCoordMatch(&gMapObjects[i], z))
{
return i;
}
}
}
return NUM_FIELD_OBJECTS;
}
static bool8 FieldObjectDoesZCoordMatch(struct MapObject *mapObject, u8 z)
{
if (mapObject->mapobj_unk_0B_0 != 0 && z != 0 && mapObject->mapobj_unk_0B_0 != z)
{
return FALSE;
}
return TRUE;
}