diff --git a/data/dynos.cpp.h b/data/dynos.cpp.h index 2065b3321..98b29f0e3 100644 --- a/data/dynos.cpp.h +++ b/data/dynos.cpp.h @@ -979,6 +979,7 @@ struct GraphNode* DynOS_Model_StoreGeo(u32* aId, enum ModelPool aModelPool, void struct GraphNode* DynOS_Model_GetGeo(u32 aId); u32 DynOS_Model_GetIdFromAsset(void* asset); u32 DynOS_Model_GetIdFromGraphNode(struct GraphNode* aNode); +enum ModelPool DynOS_Model_GetModelPoolFromGraphNode(struct GraphNode* aNode); void DynOS_Model_OverwriteSlot(u32 srcSlot, u32 dstSlot); void DynOS_Model_ClearPool(enum ModelPool aModelPool); diff --git a/data/dynos_mgr_actor.cpp b/data/dynos_mgr_actor.cpp index 92fa14ee8..c7685509a 100644 --- a/data/dynos_mgr_actor.cpp +++ b/data/dynos_mgr_actor.cpp @@ -276,6 +276,7 @@ size_t get_graph_node_size(s16 nodeType) { void DynOS_Actor_RegisterModifiedGraphNode(GraphNode *aNode) { if (sModifiedGraphNodes.find(aNode) == sModifiedGraphNodes.end()) { + if (DynOS_Model_GetModelPoolFromGraphNode(aNode) != MODEL_POOL_PERMANENT) { return; } // Only need to reset permanent models size_t size = get_graph_node_size(aNode->type); if (size == 0) { return; } // Unexpected GraphNode *graphNodeCopy = (GraphNode *) malloc(size); diff --git a/data/dynos_mgr_models.cpp b/data/dynos_mgr_models.cpp index 1190a681c..34967771c 100644 --- a/data/dynos_mgr_models.cpp +++ b/data/dynos_mgr_models.cpp @@ -237,6 +237,17 @@ u32 DynOS_Model_GetIdFromAsset(void* asset) { return MODEL_ERROR_MODEL; } +enum ModelPool DynOS_Model_GetModelPoolFromGraphNode(struct GraphNode* aNode) { + for (auto& it : sIdMap) { + if (!it.second.size() || it.second.empty()) { continue; } + auto& node = it.second.back(); + if (aNode == node.graphNode) { + return node.modelPool; + } + } + return MODEL_POOL_MAX; +} + void DynOS_Model_OverwriteSlot(u32 srcSlot, u32 dstSlot) { sOverwriteMap[srcSlot] = dstSlot; }