Lol, yeah, that happens in Heroes, like with the Knight's rider, the horse, spear, and shield will all move as independent objects
If you have the option to make a separate death model, I'd do it this way
For death I'd use the regular model
For battle I'd have the sword and shield attached to the hands
Yeah, we've thought about that too sometimes, because on some animations there are defects where the weapon slightly slips out of the unit's hands. Initially we didn't understand why the devs made the weapon separate from the rest of the skeleton — it seemed more logical for the weapon bone to be linked to the hand bone — but then we realized it's most likely about the death animations, where in most cases the model drops its weapon.
Overall, move animations for units like Footmen can still be fixed with a script that smoothly removes the Y offset from moving bones. Our script finds bones that move forward on Y, then calculates how far each bone moves over the entire animation, then divides that distance by the number of frames in the animation, and for the moving bones it proportionally subtracts the Y position for each frame.
Roughly speaking, if an animation lasts 15 frames and the bone's offset was, say, 15 meters, then 1 meter is subtracted from the Y position on the first frame, 2 meters for the second frame, 3 for the third, and so on. If you fix it this way, the shield and sword don't slip out of the Footman's hands, but there are still frames where you can see the shield sliding slightly on the arm. But that might already be an issue with how the GR2 plugin for 3ds Max 2008 reads GR2 animations. GrannyExporter does it better, but unfortunately on the last frames of a Move animation it tries to return the model to its original position, and we can't run our script on such an animation.
Also, some models, like the Blood Fury, have a very inconsistent speed during the move animation — that is, the Blood Fury runs in bursts. And if you run such a script that tries to smooth all animation frames proportionally, the resulting move animation will play "in place," but you'll see the Blood Fury being tossed slightly forward and then slightly back. In other words, the Blood Fury's run-in-place animation will look jerky. But after I imported this animation into Unreal Engine and started playing it not just in place, but by giving the Blood Fury character forward movement at the right speed (for that you need to check the value inside the <MovementSpeed> tag in the xdb file with the move animation), the jerking becomes invisible, and the Blood Fury starts running in bursts similar to the original.