Skip to content

NiRollController does not work for sheath meshes

A Daedric Creascent sheath mesh from Weapon Sheathing mod has an animation based on NiRollController. Since 0.48 release, it does not work because we reset all controllers for attached meshes:

void ActorAnimation::resetControllers(osg::Node* node)
{
    if (node == nullptr)
        return;

    std::shared_ptr<SceneUtil::ControllerSource> src;
    src.reset(new NullAnimationTime);
    SceneUtil::AssignControllerSourcesVisitor removeVisitor(src);
    node->accept(removeVisitor);
}

An intended behaviour was to reset morph controllers (so ranged weapon meshes can be used as a fallback if there is no sheath mesh), but a current implementation has an oversight and always reset all controllers.

A suggested solution is to replicate an approach used by MWSE's version of Weapon Sheathing - reset controllers only for ranged weapons (both when _sh mesh is used or the weapon's mesh itself).

w_art_blade_crescent_sh.nif

Edited by Andrei Kortunov