Jump to content

Animation positions for PCs that are not the standard physical size for their race


Recommended Posts

Posted

I'm currently running on 1.6.1170.  I've used FG and SL extensively in the past and am currently running on a collection that is FG based.  I don't have any problem getting animations to happen.  That's all fine.  Problem is, I do sometimes like to mess with the physical size of my PCs in Racemenu in two ways that I believe really messes with syncing the animations.  I often will change their height to a level that is taller or shorter than Skyrim's standard for their race, and for the male PCs, especially the Nords, I will also make small tweaks to their calf and thigh lengths because the Skyrim default, IMO, has them stumping around like farmers on too short legs.  Reminds me of an uncle I don't like, so I try to fix it.

  

Anyway, is there some way to tell SL and/or FG how big my PC actually is?  I'm assuming they must be pulling the standard racial size from somewhere in the game configs.  Can that be overridden somehow, or do I just need to accept that my PC can't be special?  Apologies if this has already been asked and answered; I couldn't find anything that addresses this specific use case.

 

Thanks for any help you can give!

Posted

What you're asking for is a magical function to disproportionally scale an animation. I'm sure a game engine company somewhere would pay a lot for something like this. Would be a lot easier to toggle NiOverride node transforms in SL like I do. Restore default size before an animation, then restore custom size afterwards.

 

Here's the majority of the code:

Spoiler
;; >> Leg length fix for SL animations
Function AddThighLengthMod(Actor who, float len)
    float[] p = new float[3]
    p[2] = len
    
    NiOverride.AddNodeTransformPosition(who, true, true, "CME L Thigh [LThg]", "RMX_Leg_Thigh", p)
    NiOverride.AddNodeTransformPosition(who, true, true, "CME R Thigh [RThg]", "RMX_Leg_Thigh", p)
    NiOverride.AddNodeTransformPosition(who, true, true, "CME Body [Body]", "RMX_Leg_Thigh", p)
    NiOverride.AddNodeTransformPosition(who, false, true, "CME L Thigh [LThg]", "RMX_Leg_Thigh", p)
    NiOverride.AddNodeTransformPosition(who, false, true, "CME R Thigh [RThg]", "RMX_Leg_Thigh", p)
    NiOverride.AddNodeTransformPosition(who, false, true, "CME Body [Body]", "RMX_Leg_Thigh", p)
EndFunction

Function RemoveThighLengthMod(Actor who)
    NiOverride.RemoveNodeTransformPosition(who, true, true, "CME L Thigh [LThg]", "RMX_Leg_Thigh")
    NiOverride.RemoveNodeTransformPosition(who, true, true, "CME R Thigh [RThg]", "RMX_Leg_Thigh")
    NiOverride.RemoveNodeTransformPosition(who, true, true, "CME Body [Body]", "RMX_Leg_Thigh")
    NiOverride.RemoveNodeTransformPosition(who, false, true, "CME L Thigh [LThg]", "RMX_Leg_Thigh")
    NiOverride.RemoveNodeTransformPosition(who, false, true, "CME R Thigh [RThg]", "RMX_Leg_Thigh")
    NiOverride.RemoveNodeTransformPosition(who, false, true, "CME Body [Body]", "RMX_Leg_Thigh")
EndFunction

Function AddCalfLengthMod(Actor who, float len)
    float[] p = new float[3]
    p[2] = len
    
    NiOverride.AddNodeTransformPosition(who, true, true, "CME L Calf [LClf]", "RMX_Leg_Calf", p)
    NiOverride.AddNodeTransformPosition(who, true, true, "CME R Calf [RClf]", "RMX_Leg_Calf", p)
    NiOverride.AddNodeTransformPosition(who, true, true, "CME Body [Body]", "RMX_Leg_Calf", p)
    NiOverride.AddNodeTransformPosition(who, false, true, "CME L Calf [LClf]", "RMX_Leg_Calf", p)
    NiOverride.AddNodeTransformPosition(who, false, true, "CME R Calf [RClf]", "RMX_Leg_Calf", p)
    NiOverride.AddNodeTransformPosition(who, false, true, "CME Body [Body]", "RMX_Leg_Calf", p)
EndFunction

Function RemoveCalfLengthMod(Actor who)
    NiOverride.RemoveNodeTransformPosition(who, true, true, "CME L Calf [LClf]", "RMX_Leg_Calf")
    NiOverride.RemoveNodeTransformPosition(who, true, true, "CME R Calf [RClf]", "RMX_Leg_Calf")
    NiOverride.RemoveNodeTransformPosition(who, true, true, "CME Body [Body]", "RMX_Leg_Calf")
    NiOverride.RemoveNodeTransformPosition(who, false, true, "CME L Calf [LClf]", "RMX_Leg_Calf")
    NiOverride.RemoveNodeTransformPosition(who, false, true, "CME R Calf [RClf]", "RMX_Leg_Calf")
    NiOverride.RemoveNodeTransformPosition(who, false, true, "CME Body [Body]", "RMX_Leg_Calf")
EndFunction
;; <<

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...