summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_map_obj.s83
-rw-r--r--src/field_map_obj.c25
2 files changed, 25 insertions, 83 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 927625ff3..895607305 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -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
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index ced0ecb27..a48a2506e 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -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;
+}