Actually, instead of copying all that and packaging it with the add-on... A better way to do it would be to do something like this...
if(!isFile("base/data/shapes/player/mNC.dts"))
fileCopy("base/data/shapes/player/m.dts","base/data/shapes/player/mNC.dts");
datablock TSShapeConstructor(mNCDts : mDts)
{
baseShape = "base/data/shapes/player/mNC.dts";
sequence5 = "base/data/shapes/player/m_root.dsq crouch";
sequence6 = "base/data/shapes/player/m_run.dsq crouchRun";
sequence7 = "base/data/shapes/player/m_back.dsq crouchBack";
sequence8 = "base/data/shapes/player/m_side.dsq crouchSide";
};
Then you just gotta worry about the datablock, and all the functions that specifically check for m.dts, like GameConnection::applyBodyParts and GameConnection::applyBodyColors.
You also wouldn't want to use the root animation otherwise they'll just start sliding while crouching.
idk why you would have to use a renamed copy of the root.dsq, you could just specify the crouch animation as the root.dsq couldn't you?
With the method of copying everything over, you would have to actually copy and rename everything over. Can't give a proper explanation other than "TSShapeConstructors are loving weird" because they want everything to be in the same folder as the shape and have a completely unique name no matter it's location.