Beedy Posted August 5, 2024 Share Posted August 5, 2024 Does anyone know more about the mcd format used by EA? Models are packed inside the rsf format and it is possible to extract them with the rsf.bms script. I managed to make a Noesis script to view the models, but reading the skeletons is hard for me and I don't know how to proceed with them. Vertex weights are stored in a table that starts with the tag TIEW in mcd and skeleton data in FRGS in .skel file. I would appreciate any kind of help to import the skeletons into noesis. Preview in Noesis: https://imgur.com/a/o2dQvCl fmt_NHL21_mcd.py rsf.bms.zip nhl21model.zip Link to comment Share on other sites More sharing options...
Engineer Durik256 Posted August 5, 2024 Engineer Share Posted August 5, 2024 (edited) 3 hours ago, Beedy said: skeletons into noesis. I researched the *skel file structure and made a plugin. *(keep reading nodes recursively (using the number of children value) until they run out) structure: Spoiler RSF/00, 0, 48, 0 FRGS, 0, chunkSize, chunkDataofs UINT lenLabel BYTE[lenLabel+1] label + /0 UINT unk(4) UINT lenName BYTE[lenName] name BYTE[6] unks (0, 0, 0, 16, 0, 0/1-flag_have_item) if have_item: UINT unk(2) UINT numItem for x in range(numItem): UINT unk(30259) UINT unk(1) UINT lenLabel BYTE[lenLabel+1] label + /0 VEC3(3_float) item (translate or rotate or scale) UINT unk(2) BYTE unk(1) if SGNodeGroup: pass if SGNodeLocator: UINT unk(1) VEC3(3_float) unk if SGNodeTransform: UINT unk(1) MAT4(16_float) local_mat if SGNodeJoint: UINT unk(1) MAT4(16_float) local_mat UINT unk(2) MAT4(16_float) unk_mat MAT4(16_float) world_mat MAT4(16_float) unk_mat UINT unk(0) UINT numChild I quickly looked at the TIEW chunk, it seems to have this structure: BYTE[4] label(TIEW) UINT unk(2) UINT chunkSize UINT dataOfs UINT numBLock? for x in range(numBLock): UINT index UINT bonePerVert UINT numElem float[numElem*bonePerVert] weights ushort[numElem*bonePerVert] bone_indices Edited August 5, 2024 by Durik256 2 Link to comment Share on other sites More sharing options...
Beedy Posted August 5, 2024 Author Share Posted August 5, 2024 Thank you! this helps me a lot. 🙂 Link to comment Share on other sites More sharing options...
Engineer Solution Durik256 Posted August 5, 2024 Engineer Solution Share Posted August 5, 2024 28 minutes ago, Beedy said: Thank you! this helps me a lot. 🙂 also for weights to work correctly, as bones you need to use only "SGNodeJoint" I didn’t try to understand your code, I just integrated my code into your plugin. I also added the 'readSkel' flag to the mesh plugin. if it is 'True' then it will find the first *skel in the mesh folder and download it. I also added the readMesh flag to the skeleton plugin. if it is "True" then it will find all *mcd's in the skeleton folder and load them. *(do not combine both of these methods) your plugin (added weights and skeleton loading (optional): fmt_NHL21_mcd.py my skeleton plugin: fmt_skel_nhl21.py 1 Link to comment Share on other sites More sharing options...
Beedy Posted August 5, 2024 Author Share Posted August 5, 2024 Awesome! Many thanks for this! 🙏 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now