diff --git a/Source/Resource/ImfLayerIndex.cpp b/Source/Resource/ImfLayerIndex.cpp new file mode 100644 index 0000000..7ee4b69 --- /dev/null +++ b/Source/Resource/ImfLayerIndex.cpp @@ -0,0 +1,19 @@ +#include "Resource/ImfResource.h" + +// OFFSET: 0x00750550 +// FUNCTION: fn_07938 +int CImfRes::GetLayer(int priority, int action, int motion) { + if (priority >= 15 || action >= this->m_maxAction[priority] || + motion >= this->m_maxMotion[priority][action]) { + return -1; + } + + int numLayer = this->m_imfData.size(); + for (int layer = 0; layer < numLayer; ++layer) { + if (this->m_imfData[layer][action].priority[motion] == priority) { + return layer; + } + } + + return -1; +} diff --git a/Source/Resource/ImfResource.h b/Source/Resource/ImfResource.h index 1f334f0..914ef68 100644 --- a/Source/Resource/ImfResource.h +++ b/Source/Resource/ImfResource.h @@ -15,6 +15,8 @@ class CImfRes : public CRes { public: bool Load(const char* name) override; + int GetLayer(int priority, int action, int motion); + private: /* 0110 */ std::vector> m_imfData; /* 011C */ int m_maxAction[15]; diff --git a/data/compile.json b/data/compile.json index 1234e34..d506cba 100644 --- a/data/compile.json +++ b/data/compile.json @@ -532,6 +532,7 @@ "Source/Resource/EZeffectResource.cpp": 3, "Source/Resource/GifLzw.cpp": 3, "Source/Resource/GifResource.cpp": 3, + "Source/Resource/ImfLayerIndex.cpp": 3, "Source/Resource/ImfResource.cpp": 3, "Source/Resource/Models/AnimatedModelResource.cpp": 3, "Source/Resource/Models/ModelMesh.cpp": 3,