Beedy Posted August 5 Share Posted August 5 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 Engineer Share Posted August 5 (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 by Durik256 2 Link to comment Share on other sites More sharing options...
Beedy Posted August 5 Author Share Posted August 5 Thank you! this helps me a lot. 🙂 Link to comment Share on other sites More sharing options...
Engineer Solution Durik256 Posted August 5 Engineer Solution Share Posted August 5 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 Author Share Posted August 5 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