FieldObjectDoesZCoordMatch
This commit is contained in:
parent
79b19a36b8
commit
d8e2238086
2 changed files with 25 additions and 83 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue