summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-09-06 17:25:20 -0400
committerscnorton <scnorton@biociphers.org>2017-09-06 17:25:20 -0400
commite0601236483588158e08dd83da3d6cb8ee491420 (patch)
tree9fb3885aae4fe822c21c151a8b97da2c8cad5711
parent6448563ede13d51682cbf1988a2072291f3b3df0 (diff)
GetAvailableFieldObjectSlot
-rw-r--r--asm/field_map_obj.s90
-rw-r--r--src/field_map_obj.c23
2 files changed, 23 insertions, 90 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 31b522467..f9366b2e9 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -5,96 +5,6 @@
.text
- thumb_func_start GetAvailableFieldObjectSlot
-@ bool8 GetAvailableFieldObjectSlot(u16 localId, u8 mapId, u8 mapGroupId, u8 *fieldObjectId)
-GetAvailableFieldObjectSlot: @ 808D810
- push {r4-r7,lr}
- mov r12, r3
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r4, r2, 24
- movs r2, 0
- ldr r1, =gMapObjects
- ldrb r0, [r1]
- lsls r0, 31
- adds r7, r1, 0
- cmp r0, 0
- beq _0808D864
- adds r3, r1, 0
-_0808D830:
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r3
- ldrb r0, [r1, 0x8]
- cmp r0, r6
- bne _0808D84A
- ldrb r0, [r1, 0x9]
- cmp r0, r5
- bne _0808D84A
- ldrb r0, [r1, 0xA]
- cmp r0, r4
- beq _0808D868
-_0808D84A:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bhi _0808D868
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _0808D830
-_0808D864:
- cmp r2, 0xF
- bls _0808D870
-_0808D868:
- movs r0, 0x1
- b _0808D8A4
- .pool
-_0808D870:
- mov r0, r12
- strb r2, [r0]
- ldr r1, =gMapObjects
-_0808D876:
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3]
- lsls r0, 31
- cmp r0, 0
- beq _0808D898
- ldrb r0, [r3, 0x8]
- cmp r0, r6
- bne _0808D898
- ldrb r0, [r3, 0x9]
- cmp r0, r5
- bne _0808D898
- ldrb r0, [r3, 0xA]
- cmp r0, r4
- beq _0808D868
-_0808D898:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _0808D876
- movs r0, 0
-_0808D8A4:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetAvailableFieldObjectSlot
-
thumb_func_start RemoveFieldObject
@ void RemoveFieldObject(npc_state *fieldObject)
RemoveFieldObject: @ 808D8B0
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index b33cf0669..28f001b5d 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -387,3 +387,26 @@ u8 unref_sub_808D77C(u8 localId)
}
return ARRAY_COUNT(gMapObjects);
}
+
+bool8 GetAvailableFieldObjectSlot(u16 localId, u8 mapNum, u8 mapGroup, u8 *result)
+{
+ u8 i = 0;
+
+ for (i = 0; i < ARRAY_COUNT(gMapObjects); i ++)
+ {
+ if (!gMapObjects[i].active)
+ break;
+ if (gMapObjects[i].localId == localId && gMapObjects[i].mapNum == mapNum && gMapObjects[i].mapGroup == mapGroup)
+ return TRUE;
+ }
+ if (i >= ARRAY_COUNT(gMapObjects))
+ return TRUE;
+ *result = i;
+ do
+ {
+ if (gMapObjects[i].active && gMapObjects[i].localId == localId && gMapObjects[i].mapNum == mapNum && gMapObjects[i].mapGroup == mapGroup)
+ return TRUE;
+ i ++;
+ } while (i < ARRAY_COUNT(gMapObjects));
+ return FALSE;
+}