forked from teamnwah/openmw-tes3coop
Use xbase_anim_female as the base skeleton for female NPCs (Fixes #3258)
This commit is contained in:
parent
2b38d10449
commit
30402f75e3
1 changed files with 32 additions and 21 deletions
|
@ -461,13 +461,32 @@ void NpcAnimation::updateNpcBase()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isBeast = (race->mData.mFlags & ESM::Race::Beast) != 0;
|
bool isBeast = (race->mData.mFlags & ESM::Race::Beast) != 0;
|
||||||
std::string smodel = (mViewMode != VM_FirstPerson) ?
|
bool isFemale = !mNpc->isMale();
|
||||||
(!isWerewolf ? !isBeast ? "meshes\\base_anim.nif"
|
|
||||||
: "meshes\\base_animkna.nif"
|
std::string smodel;
|
||||||
: "meshes\\wolf\\skin.nif") :
|
if (mViewMode != VM_FirstPerson)
|
||||||
(!isWerewolf ? !isBeast ? "meshes\\base_anim.1st.nif"
|
{
|
||||||
: "meshes\\base_animkna.1st.nif"
|
if (isWerewolf)
|
||||||
: "meshes\\wolf\\skin.1st.nif");
|
smodel = "meshes\\wolf\\skin.nif";
|
||||||
|
else if (isBeast)
|
||||||
|
smodel = "meshes\\base_animkna.nif";
|
||||||
|
else if (isFemale)
|
||||||
|
smodel = "meshes\\base_anim_female.nif";
|
||||||
|
else
|
||||||
|
smodel = "meshes\\base_anim.nif";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isWerewolf)
|
||||||
|
smodel = "meshes\\wolf\\skin.1st.nif";
|
||||||
|
else if (isBeast)
|
||||||
|
smodel = "meshes\\base_animkna.1st.nif";
|
||||||
|
else if (isFemale)
|
||||||
|
smodel = "meshes\\base_anim_female.1st.nif";
|
||||||
|
else
|
||||||
|
smodel = "meshes\\base_anim.1st.nif";
|
||||||
|
}
|
||||||
|
|
||||||
smodel = Misc::ResourceHelpers::correctActorModelPath(smodel, mResourceSystem->getVFS());
|
smodel = Misc::ResourceHelpers::correctActorModelPath(smodel, mResourceSystem->getVFS());
|
||||||
|
|
||||||
setObjectRoot(smodel, true, true, false);
|
setObjectRoot(smodel, true, true, false);
|
||||||
|
@ -484,28 +503,20 @@ void NpcAnimation::updateNpcBase()
|
||||||
{
|
{
|
||||||
if(Misc::StringUtils::lowerCase(mNpc->mRace).find("argonian") != std::string::npos)
|
if(Misc::StringUtils::lowerCase(mNpc->mRace).find("argonian") != std::string::npos)
|
||||||
addAnimSource("meshes\\xargonian_swimkna.nif");
|
addAnimSource("meshes\\xargonian_swimkna.nif");
|
||||||
else if(!mNpc->isMale() && !isBeast)
|
|
||||||
addAnimSource("meshes\\xbase_anim_female.nif");
|
|
||||||
if(mNpc->mModel.length() > 0)
|
if(mNpc->mModel.length() > 0)
|
||||||
addAnimSource(Misc::ResourceHelpers::correctActorModelPath("meshes\\" + mNpc->mModel, mResourceSystem->getVFS()));
|
addAnimSource(Misc::ResourceHelpers::correctActorModelPath("meshes\\" + mNpc->mModel, mResourceSystem->getVFS()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
const std::string base = "meshes\\xbase_anim.1st.nif";
|
||||||
|
if (smodel != base)
|
||||||
|
addAnimSource(base);
|
||||||
|
|
||||||
|
addAnimSource(smodel);
|
||||||
|
|
||||||
mObjectRoot->setNodeMask(Mask_FirstPerson);
|
mObjectRoot->setNodeMask(Mask_FirstPerson);
|
||||||
mObjectRoot->addCullCallback(new OverrideFieldOfViewCallback(mFirstPersonFieldOfView));
|
mObjectRoot->addCullCallback(new OverrideFieldOfViewCallback(mFirstPersonFieldOfView));
|
||||||
if(isWerewolf)
|
|
||||||
addAnimSource(smodel);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// A bit counter-intuitive, but unlike third-person anims, it seems
|
|
||||||
// beast races get both base_anim.1st.nif and base_animkna.1st.nif.
|
|
||||||
addAnimSource("meshes\\xbase_anim.1st.nif");
|
|
||||||
if(isBeast)
|
|
||||||
addAnimSource("meshes\\xbase_animkna.1st.nif");
|
|
||||||
if(!mNpc->isMale() && !isBeast)
|
|
||||||
addAnimSource("meshes\\xbase_anim_female.1st.nif");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateParts();
|
updateParts();
|
||||||
|
|
Loading…
Reference in a new issue