#include "dynos.cpp.h" static Array*>> sDynosCollisions; void DynOS_Col_Activate(const SysPath &aFilename, const char *aCollisionName) { // check for duplicates for (s32 i = 0; i < sDynosCollisions.Count(); ++i) { if (!strcmp(sDynosCollisions[i].first, aCollisionName)) { return; } } // Allocate name u16 collisionLen = strlen(aCollisionName); char* collisionName = (char*)calloc(1, sizeof(char) * (collisionLen + 1)); strcpy(collisionName, aCollisionName); // Load DataNode* _Node = DynOS_Col_LoadFromBinary(aFilename, collisionName); if (!_Node) { free(collisionName); return; } // Add to collisions sDynosCollisions.Add({ collisionName, _Node }); } Collision* DynOS_Col_Get(const char* collisionName) { // check levels auto& levelsArray = DynOS_Lvl_GetArray(); for (auto& lvl : levelsArray) { for (auto& col : lvl.second->mCollisions) { if (col->mName == collisionName) { return col->mData; } } } // check mod actor collisions for (s32 i = 0; i < sDynosCollisions.Count(); ++i) { if (!strcmp(sDynosCollisions[i].first, collisionName)) { return sDynosCollisions[i].second->mData; } } // check builtin collisions return (Collision*)DynOS_Builtin_LvlCol_GetFromName(collisionName); }