summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/field_map_obj.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index b6a7f9c9a..0d04c4063 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -33,6 +33,7 @@ void sub_8096518(struct MapObject *, struct Sprite *);
/*static*/ void GetFieldObjectMovingCameraOffset(s16 *, s16 *);
/*static*/ struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8, u8, u8);
/*static*/ void sub_808E894(u16);
+/*static*/ void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject);
// ROM data
@@ -739,3 +740,27 @@ void SpawnFieldObjectsInView(s16 cameraX, s16 cameraY)
}
}
}
+
+void RemoveFieldObjectsOutsideView(void)
+{
+ u8 i;
+ u8 j;
+ bool8 isActiveLinkPlayer;
+ struct MapObject *mapObject;
+
+ for (i = 0; i < ARRAY_COUNT(gMapObjects); i ++)
+ {
+ for (j = 0, isActiveLinkPlayer = FALSE; j < ARRAY_COUNT(gLinkPlayerMapObjects); j ++)
+ {
+ if (gLinkPlayerMapObjects[j].active && i == gLinkPlayerMapObjects[j].mapObjId)
+ isActiveLinkPlayer = TRUE;
+ }
+ if (!isActiveLinkPlayer)
+ {
+ mapObject = &gMapObjects[i];
+
+ if (mapObject->active && !mapObject->mapobj_bit_16)
+ RemoveFieldObjectIfOutsideView(mapObject);
+ }
+ }
+}