Yes, I think we are very close. Tested animated camels and elephants
last night. There was a oopsy on elephants not in the script but in
the Python converter from text to binary for Gmax users. (Elephant
bones have spaces in their names, I forgot this and wasn't parsing the
names correctly in the joints section for making the .ms3d file.) I think
we just have to sort out the anomaly Bwian is seeing with animated horses and
we are there. The only known deficiency is I can't handle animated
siege engines yet. Siege engines contain their own texture file paths
unlike other units and I store these paths in the joint comments.
Unfortunately, I also store the .cas header, hierarchy, and footer for
animations in the same place so there's a conflict there. I'm going to ignore
this for now and try to fix it up later.

There is also an issue about Gmax making a few extra bone assignments.
If Bwian doesn't see this as well it means its a Gmax "feature" that is fixed
in 3ds Max. (What happens is I do the usual primary and secondary bone
assignments on import. On export from Gmax a few random vertices end up
having three bone assignments, for some reason usually to one of the
weapon or shield bones. Oftentimes this is totally innocuous because
the weight on the third bone is zero but it is still worrisome that Gmax is
doing this. )