Jump to content

XP32 Maximum Skeleton (Special) Extended - XPMS(S)E


Recommended Posts

Didnt see any comment from you on this issue I posted awhile ago so reposting. Im not sure if this is showing on all weapon/shield sliders but the shield position sliders move on there own with your race menu addon. I prefer not to see my shields when not in use so I shrink it down and move it inside my body mesh since i've had issues with a auto equip/de equip shield mod probably just cause my pc is not up to current pc standards.

 

I do believe that being female is causing it to move but I think theres something you may be able to find a fix for it. If its something I can do just lmk and ill do it its driving me nuts having to reposition the shield sometime 3 times in a play session. The scale slider doesn't move just the x,y,z position sliders do it. I can test for you if wanted the other weapon sliders but I did shift my sword position sliders once for a armor I was wearing for a day or 2 till my fighter stumbled across a set of ebony and when I moved that back to 0,0,0 it did appear those never shifted on their own.

 

I also believe this happens if a quicksave is loaded from a fresh game load vs a full save but since I do have occasional ctds as most do sometimes loading from them cant be helped less I may have to replay sometimes 2 real time hrs from the last full save I have ADD and im bipolar I forget to do things sometimes. I also did run a auto save manager for some time to help keep my saves current but discovered it was the cause of alot of my ctd's so had to ditch it.

Link to comment

My attempt at adding Thigh gap, Pelvis, waist, upper waist, chest and shoulder sliders.



Scriptname RaceMenuPlugin extends RaceMenuBase

bool Property HEIGHT_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want height
bool Property BEAST_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want beast features

string Property NINODE_NPC = "NPC" AutoReadOnly

string Property NINODE_HEAD = "NPC Head [Head]" AutoReadOnly
string Property NINODE_NECK = "NPC Neck [Neck]" AutoReadOnly
string Property NINODE_NECK_CME = "CME Neck [Neck]" AutoReadOnly

string Property NINODE_PELVIS = "NPC Pelvis [Pelv]" AutoReadOnly
string Property NINODE_PELVIS_CME = "CME Pelvis [Pelv]" AutoReadOnly
string Property NINODE_SPINE = "NPC Spine [spn0]" AutoReadOnly
string Property NINODE_SPINE_CME = "CME Spine [spn0]" AutoReadOnly
string Property NINODE_SPINE_1 = "NPC Spine1 [spn1]" AutoReadOnly
string Property NINODE_SPINE_1_CME = "CME Spine1 [spn1]" AutoReadOnly
string Property NINODE_SPINE_2 = "NPC Spine2 [spn2]" AutoReadOnly
string Property NINODE_SPINE_2_CME = "CME Spine2 [spn2]" AutoReadOnly

string Property NINODE_LEFT_KNEE_CME = "CME L Knee [LKne]" AutoReadOnly
string Property NINODE_RIGHT_KNEE_CME = "CME R Knee [RKne]" AutoReadOnly

string Property NINODE_LEFT_THIGH = "NPC L Thigh [LThg]" AutoReadOnly
string Property NINODE_LEFT_THIGH_CME = "CME L Thigh [LThg]" AutoReadOnly
string Property NINODE_RIGHT_THIGH = "NPC R Thigh [RThg]" AutoReadOnly
string Property NINODE_RIGHT_THIGH_CME = "CME R Thigh [RThg]" AutoReadOnly
string Property NINODE_LEFT_CALF = "NPC L Calf [LClf]" AutoReadOnly
string Property NINODE_LEFT_CALF_CME = "CME L Calf [LClf]" AutoReadOnly
string Property NINODE_RIGHT_CALF = "NPC R Calf [RClf]" AutoReadOnly
string Property NINODE_RIGHT_CALF_CME = "CME R Calf [RClf]" AutoReadOnly
string Property NINODE_LEFT_FOOT = "NPC L Foot [Lft ]" AutoReadOnly
string Property NINODE_LEFT_FOOT_CME = "CME L Foot [Lft ]" AutoReadOnly
string Property NINODE_RIGHT_FOOT = "NPC R Foot [Rft ]" AutoReadOnly
string Property NINODE_RIGHT_FOOT_CME = "CME R Foot [Rft ]" AutoReadOnly

string Property NINODE_LEFT_CLAVICLE = "NPC L Clavicle [LClv]" AutoReadOnly
string Property NINODE_LEFT_CLAVICLE_CME = "CME L Clavicle [LClv]" AutoReadOnly
string Property NINODE_RIGHT_CLAVICLE = "NPC R Clavicle [RClv]" AutoReadOnly
string Property NINODE_RIGHT_CLAVICLE_CME = "CME R Clavicle [RClv]" AutoReadOnly
string Property NINODE_LEFT_UPPERARM = "NPC L UpperArm [LUar]" AutoReadOnly
string Property NINODE_LEFT_UPPERARM_CME = "CME L UpperArm [LUar]" AutoReadOnly
string Property NINODE_RIGHT_UPPERARM = "NPC R UpperArm [RUar]" AutoReadOnly
string Property NINODE_RIGHT_UPPERARM_CME = "CME R UpperArm [RUar]" AutoReadOnly
string Property NINODE_LEFT_HAND = "NPC L Hand [LHnd]" AutoReadOnly
string Property NINODE_LEFT_HAND_CME = "CME L Hand [LHnd]" AutoReadOnly
string Property NINODE_RIGHT_HAND = "NPC R Hand [RHnd]" AutoReadOnly
string Property NINODE_RIGHT_HAND_CME = "CME R Hand [RHnd]" AutoReadOnly

string Property NINODE_LEFT_BICEP = "NPC L UpperarmTwist1 [LUt1]" AutoReadOnly
string Property NINODE_RIGHT_BICEP = "NPC R UpperarmTwist1 [RUt1]" AutoReadOnly
string Property NINODE_LEFT_BICEP_2 = "NPC L UpperarmTwist2 [LUt2]" AutoReadOnly
string Property NINODE_RIGHT_BICEP_2 = "NPC R UpperarmTwist2 [RUt2]" AutoReadOnly

string Property NINODE_LEFT_FOREARMTWIST_1 = "NPC L ForearmTwist1 [LLt1]" AutoReadOnly
string Property NINODE_RIGHT_FOREARMTWIST_1 = "NPC R ForearmTwist1 [RLt1]" AutoReadOnly
string Property NINODE_LEFT_FOREARMTWIST_2 = "NPC L ForearmTwist2 [LLt2]" AutoReadOnly
string Property NINODE_RIGHT_FOREARMTWIST_2 = "NPC R ForearmTwist2 [RLt2]" AutoReadOnly

string Property NINODE_TAIL01 = "TailBone01" AutoReadOnly
string Property NINODE_TAIL01_CME = "CME TailBone01" AutoReadOnly
string Property NINODE_TAIL02 = "TailBone02" AutoReadOnly
string Property NINODE_TAIL02_CME = "CME TailBone02" AutoReadOnly
string Property NINODE_TAIL03 = "TailBone03" AutoReadOnly
string Property NINODE_TAIL03_CME = "CME TailBone03" AutoReadOnly
string Property NINODE_TAIL04 = "TailBone04" AutoReadOnly
string Property NINODE_TAIL04_CME = "CME TailBone05" AutoReadOnly
string Property NINODE_TAIL05 = "TailBone06" AutoReadOnly

string Property NINODE_TAIL_PELVIS = "CME Tail Pelvis [Pelv]" AutoReadOnly
string Property NINODE_TAIL_SPINE = "CME Tail Spine [spn0]" AutoReadOnly
string Property NINODE_TAIL_LEFT_THIGH = "CME Tail L Thigh [LThg]" AutoReadOnly
string Property NINODE_TAIL_RIGHT_THIGH = "CME Tail R Thigh [RThg]" AutoReadOnly

string Property NINODE_LEFT_BREAST = "NPC L Breast" AutoReadOnly
string Property NINODE_RIGHT_BREAST = "NPC R Breast" AutoReadOnly
string Property NINODE_LEFT_BUTT = "NPC L Butt" AutoReadOnly
string Property NINODE_RIGHT_BUTT = "NPC R Butt" AutoReadOnly
string Property NINODE_LEFT_BREAST_FORWARD = "NPC L Breast01" AutoReadOnly
string Property NINODE_RIGHT_BREAST_FORWARD = "NPC R Breast01" AutoReadOnly

; Custom Properties
float _height = 1.0

float _head = 1.0
float _neck = 1.0
float _headPos = 0.0

float _Shoulders = 1.0
float _Chest = 1.0
Float _upperWaist = 1.0
float _waist = 1.0
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

float _Pelvis = 1.0
float _ThighGap = 1.0

float _leftThigh = 1.0
float _rightThigh = 1.0
float _leftCalf = 1.0
float _rightCalf = 1.0
float _leftFoot = 1.0
float _rightFoot = 1.0
float _leftClavicle = 1.0
float _rightClavicle = 1.0
float _leftUpperArm = 1.0
float _rightUpperArm = 1.0
float _leftHand = 1.0
float _rightHand = 1.0

float _leftBicep = 1.0
float _rightBicep = 1.0
float _leftBicep2 = 1.0
float _rightBicep2 = 1.0

float _leftForearmTwist1 = 1.0
float _rightForearmTwist1 = 1.0
float _leftForearmTwist2 = 1.0
float _rightForearmTwist2 = 1.0

float _leftBreast = 1.0
float _rightBreast = 1.0
float _leftBreastF = 1.0
float _rightBreastF = 1.0
float _leftButt = 1.0
float _rightButt = 1.0

float _tail01 = 1.0
float _tail02 = 1.0
float _tail03 = 1.0
float _tail04 = 1.0
float _tail05 = 1.0
float _tail_posX = 0.0
float _tail_posY = 0.0
float _tail_posZ = 0.0

bool hasInitialized = false ; For one time init, used for loading data inside OnGameLoad instead of Init (Unsafe)

Event OnStartup()
parent.OnStartup()
RegisterForModEvent("RSM_RequestNodeSave", "OnSaveScales")
EndEvent

Event OnSaveScales(string eventName, string strArg, float numArg, Form formArg)
SavePlayerNodeScales(_playerActor)
EndEvent

Event OnReloadSettings(Actor player, ActorBase playerBase)
If !hasInitialized ; Init script values from current player
SavePlayerNodeScales(player)
hasInitialized = true
Else
LoadPlayerNodeScales(player)
Endif
EndEvent

Function LoadPlayerNodeScales(Actor player)
Normalize()

If HEIGHT_ENABLED ; Load height only if enabled
ApplyNodeScale(player, NINODE_NPC, _height)
Endif
ApplyNodeScale(player, NINODE_HEAD, _head)
If NetImmerse.HasNode(player, NINODE_NECK_CME, false)
ApplyNodePositionZ(player, NINODE_NECK_CME, _headPos)
Endif







If NetImmerse.HasNode(player, NINODE_SPINE_CME, false)
ApplyNodeScale(player, NINODE_SPINE, _waist)
ApplyNodeScale(player, NINODE_SPINE_CME, (1/_waist))
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
ApplyNodeScale(player, NINODE_SPINE_1, _upperWaist)
ApplyNodeScale(player, NINODE_SPINE_1_CME, (1/_upperWaist))
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
ApplyNodeScale(player, NINODE_SPINE_2, _Chest)
ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))
ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))
ApplyNodeScale(player, NINODE_NECK, (_neck/1.0))
Endif


















; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NINODE_PELVIS_CME
If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_PELVIS, _Pelvis)
ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
Endif

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
Endif





If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
Endif


If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)
ApplyNodeScale(player, NINODE_LEFT_CALF, _leftCalf)
ApplyNodeScale(player, NINODE_LEFT_CALF_CME, (1/_leftCalf))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_CALF, _rightCalf)
ApplyNodeScale(player, NINODE_RIGHT_CALF_CME, (1/_rightCalf))
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)
ApplyNodeScale(player, NINODE_LEFT_FOOT, _leftFoot)
ApplyNodeScale(player, NINODE_LEFT_FOOT_CME, (1/_leftFoot))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_FOOT, _rightFoot)
ApplyNodeScale(player, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)
ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)
ApplyNodeScale(player, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)
ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)
ApplyNodeScale(player, NINODE_LEFT_UPPERARM, _leftUpperArm)
ApplyNodeScale(player, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_UPPERARM, _rightUpperArm)
ApplyNodeScale(player, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))
Endif
If player.GetActorBase().GetSex() == 1
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
ApplyNodeScale3rdPerson(player, NINODE_LEFT_HAND, _leftHand * 0.8517)
ApplyNodeScale1stPerson(player, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
ApplyNodeScale3rdPerson(player, NINODE_RIGHT_HAND, _rightHand * 0.8517)
ApplyNodeScale1stPerson(player, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))
Endif
Else
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
ApplyNodeScale(player, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))
Endif
Endif
ApplyNodeScale(player, NINODE_LEFT_BICEP, _leftBicep)
ApplyNodeScale(player, NINODE_RIGHT_BICEP, _rightBicep)
ApplyNodeScale(player, NINODE_LEFT_BICEP_2, _leftBicep2)
ApplyNodeScale(player, NINODE_RIGHT_BICEP_2, _rightBicep2)
ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)
ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)
ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)
ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)
ApplyNodeScale(player, NINODE_LEFT_BREAST, _leftBreast)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)
ApplyNodeScale(player, NINODE_RIGHT_BREAST, _rightBreast)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)
ApplyNodeScale(player, NINODE_LEFT_BUTT, _leftButt)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)
ApplyNodeScale(player, NINODE_RIGHT_BUTT, _rightButt)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)
ApplyNodeScale(player, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)
ApplyNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)
Endif
If BEAST_ENABLED
If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL05, false)
ApplyNodeScale(player, NINODE_TAIL01, _tail01)
ApplyNodeScale(player, NINODE_TAIL01_CME, (1/_tail01))
ApplyNodeScale(player, NINODE_TAIL02, _tail02)
ApplyNodeScale(player, NINODE_TAIL02_CME, (1/_tail02))
ApplyNodeScale(player, NINODE_TAIL03, _tail03)
ApplyNodeScale(player, NINODE_TAIL03_CME, (1/_tail03))
ApplyNodeScale(player, NINODE_TAIL04, _tail04)
ApplyNodeScale(player, NINODE_TAIL04_CME, (1/_tail04))
ApplyNodeScale(player, NINODE_TAIL05, _tail05)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)
ApplyNodePositionX(player, NINODE_TAIL_PELVIS, _tail_posX)
ApplyNodePositionX(player, NINODE_TAIL_SPINE, _tail_posX)
ApplyNodePositionX(player, NINODE_TAIL_LEFT_THIGH, _tail_posX)
ApplyNodePositionX(player, NINODE_TAIL_RIGHT_THIGH, _tail_posX)
ApplyNodePositionY(player, NINODE_TAIL_PELVIS, _tail_posY)
ApplyNodePositionY(player, NINODE_TAIL_SPINE, _tail_posY)
ApplyNodePositionY(player, NINODE_TAIL_LEFT_THIGH, _tail_posY)
ApplyNodePositionY(player, NINODE_TAIL_RIGHT_THIGH, _tail_posY)
ApplyNodePositionZ(player, NINODE_TAIL_PELVIS, _tail_posZ)
ApplyNodePositionZ(player, NINODE_TAIL_SPINE, _tail_posZ)
ApplyNodePositionZ(player, NINODE_TAIL_LEFT_THIGH, _tail_posZ)
ApplyNodePositionZ(player, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)
EndIf
EndIf
EndFunction

Event On3DLoaded(ObjectReference akRef)
OnReloadSettings(_playerActor, _playerActorBase)
EndEvent

Event OnCellLoaded(ObjectReference akRef)
LoadPlayerNodeScales(_playerActor)
EndEvent

; Add Custom Warpaint here
Event OnWarpaintRequest()
AddWarpaint("$Beauty Mark 01", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_01.dds")
AddWarpaint("$Beauty Mark 02", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_02.dds")
AddWarpaint("$Beauty Mark 03", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_03.dds")
AddWarpaint("$Dragon Tattoo 01", "Actors\\Character\\Character Assets\\TintMasks\\DragonTattoo_01.dds")
EndEvent

Function Normalize()
if _height == 0.0
_height = 1.0
Endif
if _head == 0.0
_head = 1.0
Endif
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If _Shoulders == 0.0
_Shoulders = 1.0
Endif
If _Chest == 0.0
_Chest = 1.0
Endif
If _upperWaist == 0.0
_upperWaist = 1.0
Endif
If _waist == 0.0
_waist = 1.0
Endif
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If _Pelvis == 0.0
_Pelvis = 1.0
Endif
If _ThighGap == 0.0
_ThighGap = 1.0
Endif
If _leftThigh == 0.0
_leftThigh = 1.0
Endif
If _rightThigh == 0.0
_rightThigh = 1.0
Endif
If _leftCalf == 0.0
_leftCalf = 1.0
Endif
If _rightCalf == 0.0
_rightCalf = 1.0
Endif
If _rightFoot == 0.0
_rightFoot = 1.0
Endif
If _rightFoot == 0.0
_rightFoot = 1.0
Endif
If _leftClavicle == 0.0
_leftClavicle = 1.0
Endif
If _rightClavicle == 0.0
_rightClavicle = 1.0
Endif
If _leftUpperArm == 0.0
_leftUpperArm = 1.0
Endif
If _rightUpperArm == 0.0
_rightUpperArm = 1.0
Endif
If _leftHand == 0.0
_leftHand = 1.0
Endif
If _rightHand == 0.0
_rightHand = 1.0
Endif
if _leftBicep == 0.0
_leftBicep = 1.0
Endif
if _rightBicep == 0.0
_rightBicep = 1.0
Endif
if _leftBicep2 == 0.0
_leftBicep2 = 1.0
Endif
if _rightBicep2 == 0.0
_rightBicep2 = 1.0
Endif
if _leftForearmTwist1 == 0.0
_leftForearmTwist1 = 1.0
Endif
if _rightForearmTwist1 == 0.0
_rightForearmTwist1 = 1.0
Endif
if _leftForearmTwist2 == 0.0
_leftForearmTwist2 = 1.0
Endif
if _rightForearmTwist2 == 0.0
_rightForearmTwist2 = 1.0
Endif
if _leftBreast == 0.0
_leftBreast = 1.0
Endif
if _rightBreast == 0.0
_rightBreast = 1.0
Endif
if _leftBreastF == 0.0
_leftBreastF = 1.0
Endif
if _rightBreastF == 0.0
_rightBreastF = 1.0
Endif
if _leftButt == 0.0
_leftButt = 1.0
Endif
if _rightButt == 0.0
_rightButt = 1.0
Endif
EndFunction

Function SavePlayerNodeScales(Actor player)
If NetImmerse.HasNode(player, NINODE_NPC, false)
_height = NetImmerse.GetNodeScale(player, NINODE_NPC, false)
Else
_height = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_HEAD, false)
_head = NetImmerse.GetNodeScale(player, NINODE_HEAD, false)
Else
_head = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_NECK_CME, false)
_headPos = NetImmerse.GetRelativeNodePositionZ(player, NINODE_NECK_CME, NINODE_NECK, false)
Else
_headPos = 0.0
Endif
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
_waist = NetImmerse.GetNodeScale(player, NINODE_SPINE, false)
Else
_waist = 1.0
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
_upperWaist = NetImmerse.GetNodeScale(player, NINODE_SPINE_1, false)
Else
_upperWaist = 1.0
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
_Chest = NetImmerse.GetNodeScale(player, NINODE_SPINE_2, false)
Else
_Chest = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
_Shoulders = NetImmerse.GetNodeScale(player, NINODE_SPINE_2_CME, false) /_Chest
Else
_Shoulders = 1.0
Endif



;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If NetImmerse.HasNode(player, NINODE_PELVIS, false)
_Pelvis = NetImmerse.GetNodeScale(player, NINODE_PELVIS, false)
Else
_Pelvis = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)
_ThighGap = NetImmerse.GetNodeScale(player, NINODE_PELVIS_CME, false)/_Pelvis
Else
_ThighGap = 1.0
Endif



If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)
_leftThigh = NetImmerse.GetNodeScale(player, NINODE_LEFT_THIGH, false)
Else
_leftThigh = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
_rightThigh = NetImmerse.GetNodeScale(player, NINODE_RIGHT_THIGH, false)
Else
_rightThigh = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)
_leftCalf = NetImmerse.GetNodeScale(player, NINODE_LEFT_CALF, false)
Else
_leftCalf = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)
_rightCalf = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CALF, false)
Else
_rightCalf = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)
_leftFoot = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOOT, false)
Else
_leftFoot = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)
_rightFoot = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOOT, false)
Else
_rightFoot = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)
_leftClavicle = NetImmerse.GetNodeScale(player, NINODE_LEFT_CLAVICLE, false)/1.0
Else
_leftClavicle = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)
_rightClavicle = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CLAVICLE, false)/1.0
Else
_rightClavicle = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)
_leftUpperArm = NetImmerse.GetNodeScale(player, NINODE_LEFT_UPPERARM, false)
Else
_leftUpperArm = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)
_rightUpperArm = NetImmerse.GetNodeScale(player, NINODE_RIGHT_UPPERARM, false)
Else
_rightUpperArm = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)
Else
_leftHand = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)
Else
_rightHand = 1.0
Endif
If player.GetActorBase().GetSex() == 1
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false) / 0.8517
Else
_leftHand = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false) / 0.8517
Else
_rightHand = 1.0
Endif
Else
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)
Else
_leftHand = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)
Else
_rightHand = 1.0
Endif
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BICEP, false)
_leftBicep = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP, false)
Else
_leftBicep = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP, false)
_rightBicep = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP, false)
Else
_rightBicep = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BICEP_2, false)
_leftBicep2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP_2, false)
Else
_leftBicep2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP_2, false)
_rightBicep2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP_2, false)
Else
_rightBicep2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_1, false)
_leftForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, false)
Else
_leftForearmTwist1 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_1, false)
_rightForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, false)
Else
_rightForearmTwist1 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_2, false)
_leftForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, false)
Else
_leftForearmTwist2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_2, false)
_rightForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, false)
Else
_rightForearmTwist2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)
_leftBreast = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST, false)
Else
_leftBreast = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)
_rightBreast = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST, false)
Else
_rightBreast = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)
_leftBreastF = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST_FORWARD, false)
Else
_leftBreastF = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)
_rightBreastF = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, false)
Else
_rightBreastF = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)
_leftButt = NetImmerse.GetNodeScale(player, NINODE_LEFT_BUTT, false)
Else
_leftButt = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)
_rightButt = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BUTT, false)
Else
_rightButt = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)
_tail01 = NetImmerse.GetNodeScale(player, NINODE_TAIL01, false)
Else
_tail01 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)
_tail02 = NetImmerse.GetNodeScale(player, NINODE_TAIL02, false)
Else
_tail02 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)
_tail03 = NetImmerse.GetNodeScale(player, NINODE_TAIL03, false)
Else
_tail03 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)
_tail04 = NetImmerse.GetNodeScale(player, NINODE_TAIL04, false)
Else
_tail04 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL05, false)
_tail05 = NetImmerse.GetNodeScale(player, NINODE_TAIL05, false)
Else
_tail05 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)
_tail_posX = NetImmerse.GetRelativeNodePositionX(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)
_tail_posY = NetImmerse.GetRelativeNodePositionY(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)
_tail_posZ = NetImmerse.GetRelativeNodePositionZ(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)
Else
_tail_posX = 0.0
_tail_posY = 0.0
_tail_posZ = 0.0
Endif

Normalize()
EndFunction

Event OnInitializeMenu(Actor player, ActorBase playerBase)
SavePlayerNodeScales(player)
EndEvent

Event OnResetMenu(Actor player, ActorBase playerBase)
_height = 1.0

_head = 1.0
_neck = 1.0
_headPos = 0.0

_Shoulders = 1.0
_Chest = 1.0
_upperWaist =1.0
_waist = 1.0
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_Pelvis = 1.0
_ThighGap = 1.0
_leftThigh = 1.0
_rightThigh = 1.0
_leftCalf = 1.0
_rightCalf = 1.0
_leftFoot = 1.0
_rightFoot = 1.0
_leftClavicle = 1.0
_rightClavicle = 1.0
_leftUpperArm = 1.0
_rightUpperArm = 1.0
_leftHand = 1.0
_rightHand = 1.0

_leftBicep = 1.0
_rightBicep = 1.0
_leftBicep2 = 1.0
_rightBicep2 = 1.0
_leftForearmTwist1 = 1.0
_rightForearmTwist1 = 1.0
_leftForearmTwist2 = 1.0
_rightForearmTwist2 = 1.0

_leftBreast = 1.0
_rightBreast = 1.0
_leftBreastF = 1.0
_rightBreastF = 1.0
_leftButt = 1.0
_rightButt = 1.0

_tail01 = 1.0
_tail02 = 1.0
_tail03 = 1.0
_tail04 = 1.0
_tail05 = 1.0
_tail_posX = 0.0
_tail_posY = 0.0
_tail_posZ = 0.0

LoadPlayerNodeScales(player)
EndEvent

; Add Custom sliders here
Event OnSliderRequest(Actor player, ActorBase playerBase, Race actorRace, bool isFemale)
If HEIGHT_ENABLED
AddSlider("$Height", CATEGORY_BODY, "ChangeHeight", 0.25, 2.00, 0.01, _height)
Endif
If NetImmerse.HasNode(player, NINODE_HEAD, false)
AddSlider("$Head", CATEGORY_HEAD, "ChangeHeadSize", 0.25, 2.00, 0.01, _head)
Endif
If NetImmerse.HasNode(player, NINODE_NECK_CME, false)
AddSlider("$HeadPos", CATEGORY_HEAD, "ChangeHeadPos", -4.00, 4.00, 0.01, _headPos)
Endif
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
AddSlider("$Shoulders", CATEGORY_BODY, "ChangeShouldersSize", 0.50, 2.00, 0.01, _Shoulders)
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
AddSlider("$Chest", CATEGORY_BODY, "ChangeChestSize", 0.50, 2.00, 0.01, _Chest)
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
AddSlider("$upperWaist", CATEGORY_BODY, "ChangeUpperWaistSize", 0.50, 2.00, 0.01, _upperWaist)
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
AddSlider("$Waist", CATEGORY_BODY, "ChangeWaistSize", 0.50, 2.00, 0.01, _waist)
Endif

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!NINODE_PELVIS_CME

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)
AddSlider("$Pelvis", CATEGORY_BODY, "ChangePelvisSize", 0.50, 2.00, 0.01, _Pelvis)
Endif
If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)&& NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)&& NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
AddSlider("$ThighGap", CATEGORY_BODY, "ChangeThighGapSize", 0.50, 2.00, 0.01, _ThighGap)
Endif


If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)
AddSlider("$Left Thigh", CATEGORY_BODY, "ChangeLeftThighSize", 0.50, 2.00, 0.01, _leftThigh)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
AddSlider("$Right Thigh", CATEGORY_BODY, "ChangeRightThighSize", 0.50, 2.00, 0.01, _rightThigh)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)
AddSlider("$Left Calf", CATEGORY_BODY, "ChangeLeftCalfSize", 0.90, 1.10, 0.01, _leftCalf)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)
AddSlider("$Right Calf", CATEGORY_BODY, "ChangeRightCalfSize", 0.90, 1.10, 0.01, _rightCalf)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)
AddSlider("$Left Foot", CATEGORY_BODY, "ChangeLeftFootSize", 0.90, 1.10, 0.01, _leftFoot)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)
AddSlider("$Right Foot", CATEGORY_BODY, "ChangeRightFootSize", 0.90, 1.10, 0.01, _rightFoot)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)
AddSlider("$Left Clavicle", CATEGORY_BODY, "ChangeLeftClavicleSize", 0.80, 1.20, 0.01, _leftClavicle)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)
AddSlider("$Right Clavicle", CATEGORY_BODY, "ChangeRightClavicleSize", 0.80, 1.20, 0.01, _rightClavicle)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)
AddSlider("$Left Upper Arm", CATEGORY_BODY, "ChangeLeftUpperArmSize", 0.80, 1.20, 0.01, _leftUpperArm)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)
AddSlider("$Right Upper Arm", CATEGORY_BODY, "ChangeRightUpperArmSize", 0.80, 1.20, 0.01, _rightUpperArm)
Endif
IF isFemale == true
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandFSize", 0.60, 1.40, 0.01, _leftHand)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandFSize", 0.60, 1.40, 0.01, _rightHand)
Endif
Else
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandSize", 0.60, 1.40, 0.01, _leftHand)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandSize", 0.60, 1.40, 0.01, _rightHand)
Endif
EndIf
AddSlider("$Left Biceps", CATEGORY_BODY, "ChangeLeftBiceps", 0.60, 1.40, 0.01, _leftBicep)
AddSlider("$Right Biceps", CATEGORY_BODY, "ChangeRightBiceps", 0.60, 1.40, 0.01, _rightBicep)
AddSlider("$Left Biceps 2", CATEGORY_BODY, "ChangeLeftBiceps2", 0.60, 1.40, 0.01, _leftBicep2)
AddSlider("$Right Biceps 2", CATEGORY_BODY, "ChangeRightBiceps2", 0.60, 1.40, 0.01, _rightBicep2)
AddSlider("$Left ForearmTwist", CATEGORY_BODY, "ChangeLeftForearmTwist", 0.60, 1.40, 0.01, _leftForearmTwist1)
AddSlider("$Right ForearmTwist", CATEGORY_BODY, "ChangeRightForearmTwist", 0.60, 1.40, 0.01, _rightForearmTwist1)
AddSlider("$Left ForearmTwist 2", CATEGORY_BODY, "ChangeLeftForearmTwist2", 0.60, 1.40, 0.01, _leftForearmTwist2)
AddSlider("$Right ForearmTwist 2", CATEGORY_BODY, "ChangeRightForearmTwist2", 0.60, 1.40, 0.01, _rightForearmTwist2)
If isFemale == true
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)
AddSlider("$Left Breast", CATEGORY_BODY, "ChangeLeftBreast", 0.1, 3.00, 0.01, _leftBreast)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)
AddSlider("$Right Breast", CATEGORY_BODY, "ChangeRightBreast", 0.1, 3.00, 0.01, _rightBreast)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)
AddSlider("$Left Breast Curve", CATEGORY_BODY, "ChangeLeftBreastCurve", 0.1, 3.00, 0.01, _leftBreastF)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)
AddSlider("$Right Breast Curve", CATEGORY_BODY, "ChangeRightBreastCurve", 0.1, 3.00, 0.01, _rightBreastF)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)
AddSlider("$Left Glute", CATEGORY_BODY, "ChangeLeftButt", 0.1, 3.00, 0.01, _leftButt)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)
AddSlider("$Right Glute", CATEGORY_BODY, "ChangeRightButt", 0.1, 3.00, 0.01, _rightButt)
Endif
Endif
If BEAST_ENABLED
If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)
AddSlider("$Tail01", CATEGORY_BODY, "ChangeTail01Size", 0.60, 1.40, 0.01, _tail01)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)
AddSlider("$Tail02", CATEGORY_BODY, "ChangeTail02Size", 0.60, 1.40, 0.01, _tail02)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)
AddSlider("$Tail03", CATEGORY_BODY, "ChangeTail03Size", 0.60, 1.40, 0.01, _tail03)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)
AddSlider("$Tail04", CATEGORY_BODY, "ChangeTail04Size", 0.60, 1.40, 0.01, _tail04)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL05, false)
AddSlider("$Tail05", CATEGORY_BODY, "ChangeTail05Size", 0.60, 1.40, 0.01, _tail05)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)
AddSlider("$Tail Pos X", CATEGORY_BODY, "ChangeTailPosX", -10.00, 10.00, 0.01, _tail_posX)
AddSlider("$Tail Pos Y", CATEGORY_BODY, "ChangeTailPosY", -10.00, 10.00, 0.01, _tail_posY)
AddSlider("$Tail Pos Z", CATEGORY_BODY, "ChangeTailPosZ", -10.00, 10.00, 0.01, _tail_posZ)
Endif
Endif
EndEvent

Event OnSliderChanged(string callback, float value)
If callback == "ChangeHeight"
_height = value
ApplyNodeScale(_playerActor, NINODE_NPC, _height)
ElseIf callback == "ChangeHeadSize"
_head = value
ApplyNodeScale(_playerActor, NINODE_HEAD, _head)
ElseIf callback == "ChangeHeadPos"
_headPos = value
ApplyNodePositionZ(_playerActor, NINODE_NECK_CME, _headPos)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


ElseIf callback == "ChangeWaistSize"
_waist = value
ApplyNodeScale(_playerActor, NINODE_SPINE, _waist)
ApplyNodeScale(_playerActor, NINODE_SPINE_CME, (1/_waist))
ElseIf callback == "ChangeUpperWaistSize"
_upperWaist = value
ApplyNodeScale(_playerActor, NINODE_SPINE_1, _upperWaist)
ApplyNodeScale(_playerActor, NINODE_SPINE_1_CME, (1/_upperWaist))
ElseIf callback == "ChangeChestSize"
_Chest = value
ApplyNodeScale(_playerActor, NINODE_SPINE_2, _Chest)
ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
ElseIf callback == "ChangeShouldersSize"
_Shoulders = value
ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))
ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))
ApplyNodeScale(_playerActor, NINODE_NECK, (_neck/1.0))










;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ElseIf callback == "ChangePelvisSize"
_Pelvis = value
ApplyNodeScale(_playerActor, NINODE_PELVIS, _Pelvis)
ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
ElseIf callback == "ChangeThighGapSize"
_ThighGap = value
ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))




ElseIf callback == "ChangeLeftThighSize"
_leftThigh = value
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ElseIf callback == "ChangeRightThighSize"
_rightThigh = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
ElseIf callback == "ChangeLeftCalfSize"
_leftCalf = value
ApplyNodeScale(_playerActor, NINODE_LEFT_CALF, _leftCalf)
ApplyNodeScale(_playerActor, NINODE_LEFT_CALF_CME, (1/_leftCalf))
ElseIf callback == "ChangeRightCalfSize"
_rightCalf = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF, _rightCalf)
ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF_CME, (1/_rightCalf))
ElseIf callback == "ChangeLeftFootSize"
_leftFoot = value
ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT, _leftFoot)
ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT_CME, (1/_leftFoot))
ElseIf callback == "ChangeRightFootSize"
_rightFoot = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT, _rightFoot)
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))
ElseIf callback == "ChangeLeftClavicleSize"
_leftClavicle = value
ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)
ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))
ElseIf callback == "ChangeRightClavicleSize"
_rightClavicle = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)
ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))
ElseIf callback == "ChangeLeftUpperArmSize"
_leftUpperArm = value
ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM, _leftUpperArm)
ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))
ElseIf callback == "ChangeRightUpperArmSize"
_rightUpperArm = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM, _rightUpperArm)
ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))
ElseIf callback == "ChangeLeftHandFSize"
_leftHand = value
ApplyNodeScale3rdPerson(_playerActor, NINODE_LEFT_HAND, _leftHand * 0.8517)
ApplyNodeScale1stPerson(_playerActor, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))
ElseIf callback == "ChangeRighHandFSize"
_rightHand = value
ApplyNodeScale3rdPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand * 0.8517)
ApplyNodeScale1stPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))
ElseIf callback == "ChangeLeftHandSize"
_leftHand = value
ApplyNodeScale(_playerActor, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))
ElseIf callback == "ChangeRighHandSize"
_rightHand = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))
Elseif callback == "ChangeLeftBiceps"
_leftBicep = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP, _leftBicep)
Elseif callback == "ChangeRightBiceps"
_rightBicep = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP, _rightBicep)
Elseif callback == "ChangeLeftBiceps2"
_leftBicep2 = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP_2, _leftBicep2)
Elseif callback == "ChangeRightBiceps2"
_rightBicep2 = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP_2, _rightBicep2)
Elseif callback == "ChangeLeftForearmTwist"
_leftForearmTwist1 = value
ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)
Elseif callback == "ChangeRightForearmTwist"
_rightForearmTwist1 = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)
Elseif callback == "ChangeLeftForearmTwist2"
_leftForearmTwist2 = value
ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)
Elseif callback == "ChangeRightForearmTwist2"
_rightForearmTwist2 = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)
Elseif callback == "ChangeLeftBreast"
_leftBreast = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST, _leftBreast)
Elseif callback == "ChangeRightBreast"
_rightBreast = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST, _rightBreast)
Elseif callback == "ChangeLeftBreastCurve"
_leftBreastF = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)
Elseif callback == "ChangeRightBreastCurve"
_rightBreastF = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)
Elseif callback == "ChangeLeftButt"
_leftButt = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BUTT, _leftButt)
Elseif callback == "ChangeRightButt"
_rightButt = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BUTT, _rightButt)
ElseIf callback == "ChangeTail01Size"
_tail01 = value
ApplyNodeScale(_playerActor, NINODE_TAIL01, _tail01)
ApplyNodeScale(_playerActor, NINODE_TAIL01_CME, (1/_tail01))
ElseIf callback == "ChangeTail02Size"
_tail02 = value
ApplyNodeScale(_playerActor, NINODE_TAIL02, _tail02)
ApplyNodeScale(_playerActor, NINODE_TAIL02_CME, (1/_tail02))
ElseIf callback == "ChangeTail03Size"
_tail03 = value
ApplyNodeScale(_playerActor, NINODE_TAIL03, _tail03)
ApplyNodeScale(_playerActor, NINODE_TAIL03_CME, (1/_tail03))
ElseIf callback == "ChangeTail04Size"
_tail04 = value
ApplyNodeScale(_playerActor, NINODE_TAIL04, _tail04)
ApplyNodeScale(_playerActor, NINODE_TAIL04_CME, (1/_tail04))
ElseIf callback == "ChangeTail05Size"
_tail05 = value
ApplyNodeScale(_playerActor, NINODE_TAIL05, _tail05)
ElseIf callback == "ChangeTailPosX"
_tail_posX = value
ApplyNodePositionX(_playerActor, NINODE_TAIL_PELVIS, _tail_posX)
ApplyNodePositionX(_playerActor, NINODE_TAIL_SPINE, _tail_posX)
ApplyNodePositionX(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posX)
ApplyNodePositionX(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posX)
ElseIf callback == "ChangeTailPosY"
_tail_posY = value
ApplyNodePositionY(_playerActor, NINODE_TAIL_PELVIS, _tail_posY)
ApplyNodePositionY(_playerActor, NINODE_TAIL_SPINE, _tail_posY)
ApplyNodePositionY(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posY)
ApplyNodePositionY(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posY)
ElseIf callback == "ChangeTailPosZ"
_tail_posZ = value
ApplyNodePositionZ(_playerActor, NINODE_TAIL_PELVIS, _tail_posZ)
ApplyNodePositionZ(_playerActor, NINODE_TAIL_SPINE, _tail_posZ)
ApplyNodePositionZ(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posZ)
ApplyNodePositionZ(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)
Endif
EndEvent

Function ApplyNodeScale(Actor _playerActor, String _node, float _scale)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)
EndFunction

Function ApplyNodeScale1stPerson(Actor _playerActor, String _node, float _scale)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)
EndFunction

Function ApplyNodeScale3rdPerson(Actor _playerActor, String _node, float _scale)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)
EndFunction

Function ApplyNodePositionX(Actor _playerActor, String _node, float _position)
NetImmerse.SetNodePositionX(_playerActor, _node, _position, false)
NetImmerse.SetNodePositionX(_playerActor, _node, _position, true)
EndFunction

Function ApplyNodePositionY(Actor _playerActor, String _node, float _position)
NetImmerse.SetNodePositionY(_playerActor, _node, _position, false)
NetImmerse.SetNodePositionY(_playerActor, _node, _position, true)
EndFunction

Function ApplyNodePositionZ(Actor _playerActor, String _node, float _position)
NetImmerse.SetNodePositionZ(_playerActor, _node, _position, false)
NetImmerse.SetNodePositionZ(_playerActor, _node, _position, true)
EndFunction

 

Link to comment

My attempt at adding Thigh gap, Pelvis, waist, upper waist, chest and shoulder sliders.



Scriptname RaceMenuPlugin extends RaceMenuBase

bool Property HEIGHT_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want height
bool Property BEAST_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want beast features

string Property NINODE_NPC = "NPC" AutoReadOnly

string Property NINODE_HEAD = "NPC Head [Head]" AutoReadOnly
string Property NINODE_NECK = "NPC Neck [Neck]" AutoReadOnly
string Property NINODE_NECK_CME = "CME Neck [Neck]" AutoReadOnly

string Property NINODE_PELVIS = "NPC Pelvis [Pelv]" AutoReadOnly
string Property NINODE_PELVIS_CME = "CME Pelvis [Pelv]" AutoReadOnly
string Property NINODE_SPINE = "NPC Spine [spn0]" AutoReadOnly
string Property NINODE_SPINE_CME = "CME Spine [spn0]" AutoReadOnly
string Property NINODE_SPINE_1 = "NPC Spine1 [spn1]" AutoReadOnly
string Property NINODE_SPINE_1_CME = "CME Spine1 [spn1]" AutoReadOnly
string Property NINODE_SPINE_2 = "NPC Spine2 [spn2]" AutoReadOnly
string Property NINODE_SPINE_2_CME = "CME Spine2 [spn2]" AutoReadOnly

string Property NINODE_LEFT_KNEE_CME = "CME L Knee [LKne]" AutoReadOnly
string Property NINODE_RIGHT_KNEE_CME = "CME R Knee [RKne]" AutoReadOnly

string Property NINODE_LEFT_THIGH = "NPC L Thigh [LThg]" AutoReadOnly
string Property NINODE_LEFT_THIGH_CME = "CME L Thigh [LThg]" AutoReadOnly
string Property NINODE_RIGHT_THIGH = "NPC R Thigh [RThg]" AutoReadOnly
string Property NINODE_RIGHT_THIGH_CME = "CME R Thigh [RThg]" AutoReadOnly
string Property NINODE_LEFT_CALF = "NPC L Calf [LClf]" AutoReadOnly
string Property NINODE_LEFT_CALF_CME = "CME L Calf [LClf]" AutoReadOnly
string Property NINODE_RIGHT_CALF = "NPC R Calf [RClf]" AutoReadOnly
string Property NINODE_RIGHT_CALF_CME = "CME R Calf [RClf]" AutoReadOnly
string Property NINODE_LEFT_FOOT = "NPC L Foot [Lft ]" AutoReadOnly
string Property NINODE_LEFT_FOOT_CME = "CME L Foot [Lft ]" AutoReadOnly
string Property NINODE_RIGHT_FOOT = "NPC R Foot [Rft ]" AutoReadOnly
string Property NINODE_RIGHT_FOOT_CME = "CME R Foot [Rft ]" AutoReadOnly

string Property NINODE_LEFT_CLAVICLE = "NPC L Clavicle [LClv]" AutoReadOnly
string Property NINODE_LEFT_CLAVICLE_CME = "CME L Clavicle [LClv]" AutoReadOnly
string Property NINODE_RIGHT_CLAVICLE = "NPC R Clavicle [RClv]" AutoReadOnly
string Property NINODE_RIGHT_CLAVICLE_CME = "CME R Clavicle [RClv]" AutoReadOnly
string Property NINODE_LEFT_UPPERARM = "NPC L UpperArm [LUar]" AutoReadOnly
string Property NINODE_LEFT_UPPERARM_CME = "CME L UpperArm [LUar]" AutoReadOnly
string Property NINODE_RIGHT_UPPERARM = "NPC R UpperArm [RUar]" AutoReadOnly
string Property NINODE_RIGHT_UPPERARM_CME = "CME R UpperArm [RUar]" AutoReadOnly
string Property NINODE_LEFT_HAND = "NPC L Hand [LHnd]" AutoReadOnly
string Property NINODE_LEFT_HAND_CME = "CME L Hand [LHnd]" AutoReadOnly
string Property NINODE_RIGHT_HAND = "NPC R Hand [RHnd]" AutoReadOnly
string Property NINODE_RIGHT_HAND_CME = "CME R Hand [RHnd]" AutoReadOnly

string Property NINODE_LEFT_BICEP = "NPC L UpperarmTwist1 [LUt1]" AutoReadOnly
string Property NINODE_RIGHT_BICEP = "NPC R UpperarmTwist1 [RUt1]" AutoReadOnly
string Property NINODE_LEFT_BICEP_2 = "NPC L UpperarmTwist2 [LUt2]" AutoReadOnly
string Property NINODE_RIGHT_BICEP_2 = "NPC R UpperarmTwist2 [RUt2]" AutoReadOnly

string Property NINODE_LEFT_FOREARMTWIST_1 = "NPC L ForearmTwist1 [LLt1]" AutoReadOnly
string Property NINODE_RIGHT_FOREARMTWIST_1 = "NPC R ForearmTwist1 [RLt1]" AutoReadOnly
string Property NINODE_LEFT_FOREARMTWIST_2 = "NPC L ForearmTwist2 [LLt2]" AutoReadOnly
string Property NINODE_RIGHT_FOREARMTWIST_2 = "NPC R ForearmTwist2 [RLt2]" AutoReadOnly

string Property NINODE_TAIL01 = "TailBone01" AutoReadOnly
string Property NINODE_TAIL01_CME = "CME TailBone01" AutoReadOnly
string Property NINODE_TAIL02 = "TailBone02" AutoReadOnly
string Property NINODE_TAIL02_CME = "CME TailBone02" AutoReadOnly
string Property NINODE_TAIL03 = "TailBone03" AutoReadOnly
string Property NINODE_TAIL03_CME = "CME TailBone03" AutoReadOnly
string Property NINODE_TAIL04 = "TailBone04" AutoReadOnly
string Property NINODE_TAIL04_CME = "CME TailBone05" AutoReadOnly
string Property NINODE_TAIL05 = "TailBone06" AutoReadOnly

string Property NINODE_TAIL_PELVIS = "CME Tail Pelvis [Pelv]" AutoReadOnly
string Property NINODE_TAIL_SPINE = "CME Tail Spine [spn0]" AutoReadOnly
string Property NINODE_TAIL_LEFT_THIGH = "CME Tail L Thigh [LThg]" AutoReadOnly
string Property NINODE_TAIL_RIGHT_THIGH = "CME Tail R Thigh [RThg]" AutoReadOnly

string Property NINODE_LEFT_BREAST = "NPC L Breast" AutoReadOnly
string Property NINODE_RIGHT_BREAST = "NPC R Breast" AutoReadOnly
string Property NINODE_LEFT_BUTT = "NPC L Butt" AutoReadOnly
string Property NINODE_RIGHT_BUTT = "NPC R Butt" AutoReadOnly
string Property NINODE_LEFT_BREAST_FORWARD = "NPC L Breast01" AutoReadOnly
string Property NINODE_RIGHT_BREAST_FORWARD = "NPC R Breast01" AutoReadOnly

; Custom Properties
float _height = 1.0

float _head = 1.0
float _neck = 1.0
float _headPos = 0.0

float _Shoulders = 1.0
float _Chest = 1.0
Float _upperWaist = 1.0
float _waist = 1.0
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

float _Pelvis = 1.0
float _ThighGap = 1.0

float _leftThigh = 1.0
float _rightThigh = 1.0
float _leftCalf = 1.0
float _rightCalf = 1.0
float _leftFoot = 1.0
float _rightFoot = 1.0
float _leftClavicle = 1.0
float _rightClavicle = 1.0
float _leftUpperArm = 1.0
float _rightUpperArm = 1.0
float _leftHand = 1.0
float _rightHand = 1.0

float _leftBicep = 1.0
float _rightBicep = 1.0
float _leftBicep2 = 1.0
float _rightBicep2 = 1.0

float _leftForearmTwist1 = 1.0
float _rightForearmTwist1 = 1.0
float _leftForearmTwist2 = 1.0
float _rightForearmTwist2 = 1.0

float _leftBreast = 1.0
float _rightBreast = 1.0
float _leftBreastF = 1.0
float _rightBreastF = 1.0
float _leftButt = 1.0
float _rightButt = 1.0

float _tail01 = 1.0
float _tail02 = 1.0
float _tail03 = 1.0
float _tail04 = 1.0
float _tail05 = 1.0
float _tail_posX = 0.0
float _tail_posY = 0.0
float _tail_posZ = 0.0

bool hasInitialized = false ; For one time init, used for loading data inside OnGameLoad instead of Init (Unsafe)

Event OnStartup()
parent.OnStartup()
RegisterForModEvent("RSM_RequestNodeSave", "OnSaveScales")
EndEvent

Event OnSaveScales(string eventName, string strArg, float numArg, Form formArg)
SavePlayerNodeScales(_playerActor)
EndEvent

Event OnReloadSettings(Actor player, ActorBase playerBase)
If !hasInitialized ; Init script values from current player
SavePlayerNodeScales(player)
hasInitialized = true
Else
LoadPlayerNodeScales(player)
Endif
EndEvent

Function LoadPlayerNodeScales(Actor player)
Normalize()

If HEIGHT_ENABLED ; Load height only if enabled
ApplyNodeScale(player, NINODE_NPC, _height)
Endif
ApplyNodeScale(player, NINODE_HEAD, _head)
If NetImmerse.HasNode(player, NINODE_NECK_CME, false)
ApplyNodePositionZ(player, NINODE_NECK_CME, _headPos)
Endif







If NetImmerse.HasNode(player, NINODE_SPINE_CME, false)
ApplyNodeScale(player, NINODE_SPINE, _waist)
ApplyNodeScale(player, NINODE_SPINE_CME, (1/_waist))
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
ApplyNodeScale(player, NINODE_SPINE_1, _upperWaist)
ApplyNodeScale(player, NINODE_SPINE_1_CME, (1/_upperWaist))
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
ApplyNodeScale(player, NINODE_SPINE_2, _Chest)
ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))
ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))
ApplyNodeScale(player, NINODE_NECK, (_neck/1.0))
Endif


















; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NINODE_PELVIS_CME
If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_PELVIS, _Pelvis)
ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
Endif

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
Endif





If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
Endif


If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)
ApplyNodeScale(player, NINODE_LEFT_CALF, _leftCalf)
ApplyNodeScale(player, NINODE_LEFT_CALF_CME, (1/_leftCalf))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_CALF, _rightCalf)
ApplyNodeScale(player, NINODE_RIGHT_CALF_CME, (1/_rightCalf))
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)
ApplyNodeScale(player, NINODE_LEFT_FOOT, _leftFoot)
ApplyNodeScale(player, NINODE_LEFT_FOOT_CME, (1/_leftFoot))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_FOOT, _rightFoot)
ApplyNodeScale(player, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)
ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)
ApplyNodeScale(player, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)
ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)
ApplyNodeScale(player, NINODE_LEFT_UPPERARM, _leftUpperArm)
ApplyNodeScale(player, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_UPPERARM, _rightUpperArm)
ApplyNodeScale(player, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))
Endif
If player.GetActorBase().GetSex() == 1
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
ApplyNodeScale3rdPerson(player, NINODE_LEFT_HAND, _leftHand * 0.8517)
ApplyNodeScale1stPerson(player, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
ApplyNodeScale3rdPerson(player, NINODE_RIGHT_HAND, _rightHand * 0.8517)
ApplyNodeScale1stPerson(player, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))
Endif
Else
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
ApplyNodeScale(player, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
ApplyNodeScale(player, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))
Endif
Endif
ApplyNodeScale(player, NINODE_LEFT_BICEP, _leftBicep)
ApplyNodeScale(player, NINODE_RIGHT_BICEP, _rightBicep)
ApplyNodeScale(player, NINODE_LEFT_BICEP_2, _leftBicep2)
ApplyNodeScale(player, NINODE_RIGHT_BICEP_2, _rightBicep2)
ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)
ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)
ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)
ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)
ApplyNodeScale(player, NINODE_LEFT_BREAST, _leftBreast)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)
ApplyNodeScale(player, NINODE_RIGHT_BREAST, _rightBreast)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)
ApplyNodeScale(player, NINODE_LEFT_BUTT, _leftButt)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)
ApplyNodeScale(player, NINODE_RIGHT_BUTT, _rightButt)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)
ApplyNodeScale(player, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)
ApplyNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)
Endif
If BEAST_ENABLED
If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL05, false)
ApplyNodeScale(player, NINODE_TAIL01, _tail01)
ApplyNodeScale(player, NINODE_TAIL01_CME, (1/_tail01))
ApplyNodeScale(player, NINODE_TAIL02, _tail02)
ApplyNodeScale(player, NINODE_TAIL02_CME, (1/_tail02))
ApplyNodeScale(player, NINODE_TAIL03, _tail03)
ApplyNodeScale(player, NINODE_TAIL03_CME, (1/_tail03))
ApplyNodeScale(player, NINODE_TAIL04, _tail04)
ApplyNodeScale(player, NINODE_TAIL04_CME, (1/_tail04))
ApplyNodeScale(player, NINODE_TAIL05, _tail05)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)
ApplyNodePositionX(player, NINODE_TAIL_PELVIS, _tail_posX)
ApplyNodePositionX(player, NINODE_TAIL_SPINE, _tail_posX)
ApplyNodePositionX(player, NINODE_TAIL_LEFT_THIGH, _tail_posX)
ApplyNodePositionX(player, NINODE_TAIL_RIGHT_THIGH, _tail_posX)
ApplyNodePositionY(player, NINODE_TAIL_PELVIS, _tail_posY)
ApplyNodePositionY(player, NINODE_TAIL_SPINE, _tail_posY)
ApplyNodePositionY(player, NINODE_TAIL_LEFT_THIGH, _tail_posY)
ApplyNodePositionY(player, NINODE_TAIL_RIGHT_THIGH, _tail_posY)
ApplyNodePositionZ(player, NINODE_TAIL_PELVIS, _tail_posZ)
ApplyNodePositionZ(player, NINODE_TAIL_SPINE, _tail_posZ)
ApplyNodePositionZ(player, NINODE_TAIL_LEFT_THIGH, _tail_posZ)
ApplyNodePositionZ(player, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)
EndIf
EndIf
EndFunction

Event On3DLoaded(ObjectReference akRef)
OnReloadSettings(_playerActor, _playerActorBase)
EndEvent

Event OnCellLoaded(ObjectReference akRef)
LoadPlayerNodeScales(_playerActor)
EndEvent

; Add Custom Warpaint here
Event OnWarpaintRequest()
AddWarpaint("$Beauty Mark 01", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_01.dds")
AddWarpaint("$Beauty Mark 02", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_02.dds")
AddWarpaint("$Beauty Mark 03", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_03.dds")
AddWarpaint("$Dragon Tattoo 01", "Actors\\Character\\Character Assets\\TintMasks\\DragonTattoo_01.dds")
EndEvent

Function Normalize()
if _height == 0.0
_height = 1.0
Endif
if _head == 0.0
_head = 1.0
Endif
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If _Shoulders == 0.0
_Shoulders = 1.0
Endif
If _Chest == 0.0
_Chest = 1.0
Endif
If _upperWaist == 0.0
_upperWaist = 1.0
Endif
If _waist == 0.0
_waist = 1.0
Endif
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If _Pelvis == 0.0
_Pelvis = 1.0
Endif
If _ThighGap == 0.0
_ThighGap = 1.0
Endif
If _leftThigh == 0.0
_leftThigh = 1.0
Endif
If _rightThigh == 0.0
_rightThigh = 1.0
Endif
If _leftCalf == 0.0
_leftCalf = 1.0
Endif
If _rightCalf == 0.0
_rightCalf = 1.0
Endif
If _rightFoot == 0.0
_rightFoot = 1.0
Endif
If _rightFoot == 0.0
_rightFoot = 1.0
Endif
If _leftClavicle == 0.0
_leftClavicle = 1.0
Endif
If _rightClavicle == 0.0
_rightClavicle = 1.0
Endif
If _leftUpperArm == 0.0
_leftUpperArm = 1.0
Endif
If _rightUpperArm == 0.0
_rightUpperArm = 1.0
Endif
If _leftHand == 0.0
_leftHand = 1.0
Endif
If _rightHand == 0.0
_rightHand = 1.0
Endif
if _leftBicep == 0.0
_leftBicep = 1.0
Endif
if _rightBicep == 0.0
_rightBicep = 1.0
Endif
if _leftBicep2 == 0.0
_leftBicep2 = 1.0
Endif
if _rightBicep2 == 0.0
_rightBicep2 = 1.0
Endif
if _leftForearmTwist1 == 0.0
_leftForearmTwist1 = 1.0
Endif
if _rightForearmTwist1 == 0.0
_rightForearmTwist1 = 1.0
Endif
if _leftForearmTwist2 == 0.0
_leftForearmTwist2 = 1.0
Endif
if _rightForearmTwist2 == 0.0
_rightForearmTwist2 = 1.0
Endif
if _leftBreast == 0.0
_leftBreast = 1.0
Endif
if _rightBreast == 0.0
_rightBreast = 1.0
Endif
if _leftBreastF == 0.0
_leftBreastF = 1.0
Endif
if _rightBreastF == 0.0
_rightBreastF = 1.0
Endif
if _leftButt == 0.0
_leftButt = 1.0
Endif
if _rightButt == 0.0
_rightButt = 1.0
Endif
EndFunction

Function SavePlayerNodeScales(Actor player)
If NetImmerse.HasNode(player, NINODE_NPC, false)
_height = NetImmerse.GetNodeScale(player, NINODE_NPC, false)
Else
_height = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_HEAD, false)
_head = NetImmerse.GetNodeScale(player, NINODE_HEAD, false)
Else
_head = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_NECK_CME, false)
_headPos = NetImmerse.GetRelativeNodePositionZ(player, NINODE_NECK_CME, NINODE_NECK, false)
Else
_headPos = 0.0
Endif
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
_waist = NetImmerse.GetNodeScale(player, NINODE_SPINE, false)
Else
_waist = 1.0
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
_upperWaist = NetImmerse.GetNodeScale(player, NINODE_SPINE_1, false)
Else
_upperWaist = 1.0
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
_Chest = NetImmerse.GetNodeScale(player, NINODE_SPINE_2, false)
Else
_Chest = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
_Shoulders = NetImmerse.GetNodeScale(player, NINODE_SPINE_2_CME, false) /_Chest
Else
_Shoulders = 1.0
Endif



;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If NetImmerse.HasNode(player, NINODE_PELVIS, false)
_Pelvis = NetImmerse.GetNodeScale(player, NINODE_PELVIS, false)
Else
_Pelvis = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)
_ThighGap = NetImmerse.GetNodeScale(player, NINODE_PELVIS_CME, false)/_Pelvis
Else
_ThighGap = 1.0
Endif



If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)
_leftThigh = NetImmerse.GetNodeScale(player, NINODE_LEFT_THIGH, false)
Else
_leftThigh = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
_rightThigh = NetImmerse.GetNodeScale(player, NINODE_RIGHT_THIGH, false)
Else
_rightThigh = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)
_leftCalf = NetImmerse.GetNodeScale(player, NINODE_LEFT_CALF, false)
Else
_leftCalf = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)
_rightCalf = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CALF, false)
Else
_rightCalf = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)
_leftFoot = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOOT, false)
Else
_leftFoot = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)
_rightFoot = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOOT, false)
Else
_rightFoot = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)
_leftClavicle = NetImmerse.GetNodeScale(player, NINODE_LEFT_CLAVICLE, false)/1.0
Else
_leftClavicle = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)
_rightClavicle = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CLAVICLE, false)/1.0
Else
_rightClavicle = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)
_leftUpperArm = NetImmerse.GetNodeScale(player, NINODE_LEFT_UPPERARM, false)
Else
_leftUpperArm = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)
_rightUpperArm = NetImmerse.GetNodeScale(player, NINODE_RIGHT_UPPERARM, false)
Else
_rightUpperArm = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)
Else
_leftHand = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)
Else
_rightHand = 1.0
Endif
If player.GetActorBase().GetSex() == 1
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false) / 0.8517
Else
_leftHand = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false) / 0.8517
Else
_rightHand = 1.0
Endif
Else
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)
Else
_leftHand = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)
Else
_rightHand = 1.0
Endif
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BICEP, false)
_leftBicep = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP, false)
Else
_leftBicep = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP, false)
_rightBicep = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP, false)
Else
_rightBicep = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BICEP_2, false)
_leftBicep2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP_2, false)
Else
_leftBicep2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP_2, false)
_rightBicep2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP_2, false)
Else
_rightBicep2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_1, false)
_leftForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, false)
Else
_leftForearmTwist1 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_1, false)
_rightForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, false)
Else
_rightForearmTwist1 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_2, false)
_leftForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, false)
Else
_leftForearmTwist2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_2, false)
_rightForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, false)
Else
_rightForearmTwist2 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)
_leftBreast = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST, false)
Else
_leftBreast = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)
_rightBreast = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST, false)
Else
_rightBreast = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)
_leftBreastF = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST_FORWARD, false)
Else
_leftBreastF = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)
_rightBreastF = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, false)
Else
_rightBreastF = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)
_leftButt = NetImmerse.GetNodeScale(player, NINODE_LEFT_BUTT, false)
Else
_leftButt = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)
_rightButt = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BUTT, false)
Else
_rightButt = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)
_tail01 = NetImmerse.GetNodeScale(player, NINODE_TAIL01, false)
Else
_tail01 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)
_tail02 = NetImmerse.GetNodeScale(player, NINODE_TAIL02, false)
Else
_tail02 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)
_tail03 = NetImmerse.GetNodeScale(player, NINODE_TAIL03, false)
Else
_tail03 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)
_tail04 = NetImmerse.GetNodeScale(player, NINODE_TAIL04, false)
Else
_tail04 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL05, false)
_tail05 = NetImmerse.GetNodeScale(player, NINODE_TAIL05, false)
Else
_tail05 = 1.0
Endif
If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)
_tail_posX = NetImmerse.GetRelativeNodePositionX(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)
_tail_posY = NetImmerse.GetRelativeNodePositionY(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)
_tail_posZ = NetImmerse.GetRelativeNodePositionZ(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)
Else
_tail_posX = 0.0
_tail_posY = 0.0
_tail_posZ = 0.0
Endif

Normalize()
EndFunction

Event OnInitializeMenu(Actor player, ActorBase playerBase)
SavePlayerNodeScales(player)
EndEvent

Event OnResetMenu(Actor player, ActorBase playerBase)
_height = 1.0

_head = 1.0
_neck = 1.0
_headPos = 0.0

_Shoulders = 1.0
_Chest = 1.0
_upperWaist =1.0
_waist = 1.0
; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_Pelvis = 1.0
_ThighGap = 1.0
_leftThigh = 1.0
_rightThigh = 1.0
_leftCalf = 1.0
_rightCalf = 1.0
_leftFoot = 1.0
_rightFoot = 1.0
_leftClavicle = 1.0
_rightClavicle = 1.0
_leftUpperArm = 1.0
_rightUpperArm = 1.0
_leftHand = 1.0
_rightHand = 1.0

_leftBicep = 1.0
_rightBicep = 1.0
_leftBicep2 = 1.0
_rightBicep2 = 1.0
_leftForearmTwist1 = 1.0
_rightForearmTwist1 = 1.0
_leftForearmTwist2 = 1.0
_rightForearmTwist2 = 1.0

_leftBreast = 1.0
_rightBreast = 1.0
_leftBreastF = 1.0
_rightBreastF = 1.0
_leftButt = 1.0
_rightButt = 1.0

_tail01 = 1.0
_tail02 = 1.0
_tail03 = 1.0
_tail04 = 1.0
_tail05 = 1.0
_tail_posX = 0.0
_tail_posY = 0.0
_tail_posZ = 0.0

LoadPlayerNodeScales(player)
EndEvent

; Add Custom sliders here
Event OnSliderRequest(Actor player, ActorBase playerBase, Race actorRace, bool isFemale)
If HEIGHT_ENABLED
AddSlider("$Height", CATEGORY_BODY, "ChangeHeight", 0.25, 2.00, 0.01, _height)
Endif
If NetImmerse.HasNode(player, NINODE_HEAD, false)
AddSlider("$Head", CATEGORY_HEAD, "ChangeHeadSize", 0.25, 2.00, 0.01, _head)
Endif
If NetImmerse.HasNode(player, NINODE_NECK_CME, false)
AddSlider("$HeadPos", CATEGORY_HEAD, "ChangeHeadPos", -4.00, 4.00, 0.01, _headPos)
Endif
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
AddSlider("$Shoulders", CATEGORY_BODY, "ChangeShouldersSize", 0.50, 2.00, 0.01, _Shoulders)
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
AddSlider("$Chest", CATEGORY_BODY, "ChangeChestSize", 0.50, 2.00, 0.01, _Chest)
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)
AddSlider("$upperWaist", CATEGORY_BODY, "ChangeUpperWaistSize", 0.50, 2.00, 0.01, _upperWaist)
Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)
AddSlider("$Waist", CATEGORY_BODY, "ChangeWaistSize", 0.50, 2.00, 0.01, _waist)
Endif

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!NINODE_PELVIS_CME

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)
AddSlider("$Pelvis", CATEGORY_BODY, "ChangePelvisSize", 0.50, 2.00, 0.01, _Pelvis)
Endif
If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)&& NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)&& NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
AddSlider("$ThighGap", CATEGORY_BODY, "ChangeThighGapSize", 0.50, 2.00, 0.01, _ThighGap)
Endif


If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)
AddSlider("$Left Thigh", CATEGORY_BODY, "ChangeLeftThighSize", 0.50, 2.00, 0.01, _leftThigh)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)
AddSlider("$Right Thigh", CATEGORY_BODY, "ChangeRightThighSize", 0.50, 2.00, 0.01, _rightThigh)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)
AddSlider("$Left Calf", CATEGORY_BODY, "ChangeLeftCalfSize", 0.90, 1.10, 0.01, _leftCalf)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)
AddSlider("$Right Calf", CATEGORY_BODY, "ChangeRightCalfSize", 0.90, 1.10, 0.01, _rightCalf)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)
AddSlider("$Left Foot", CATEGORY_BODY, "ChangeLeftFootSize", 0.90, 1.10, 0.01, _leftFoot)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)
AddSlider("$Right Foot", CATEGORY_BODY, "ChangeRightFootSize", 0.90, 1.10, 0.01, _rightFoot)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)
AddSlider("$Left Clavicle", CATEGORY_BODY, "ChangeLeftClavicleSize", 0.80, 1.20, 0.01, _leftClavicle)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)
AddSlider("$Right Clavicle", CATEGORY_BODY, "ChangeRightClavicleSize", 0.80, 1.20, 0.01, _rightClavicle)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)
AddSlider("$Left Upper Arm", CATEGORY_BODY, "ChangeLeftUpperArmSize", 0.80, 1.20, 0.01, _leftUpperArm)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)
AddSlider("$Right Upper Arm", CATEGORY_BODY, "ChangeRightUpperArmSize", 0.80, 1.20, 0.01, _rightUpperArm)
Endif
IF isFemale == true
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandFSize", 0.60, 1.40, 0.01, _leftHand)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandFSize", 0.60, 1.40, 0.01, _rightHand)
Endif
Else
If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)
AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandSize", 0.60, 1.40, 0.01, _leftHand)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)
AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandSize", 0.60, 1.40, 0.01, _rightHand)
Endif
EndIf
AddSlider("$Left Biceps", CATEGORY_BODY, "ChangeLeftBiceps", 0.60, 1.40, 0.01, _leftBicep)
AddSlider("$Right Biceps", CATEGORY_BODY, "ChangeRightBiceps", 0.60, 1.40, 0.01, _rightBicep)
AddSlider("$Left Biceps 2", CATEGORY_BODY, "ChangeLeftBiceps2", 0.60, 1.40, 0.01, _leftBicep2)
AddSlider("$Right Biceps 2", CATEGORY_BODY, "ChangeRightBiceps2", 0.60, 1.40, 0.01, _rightBicep2)
AddSlider("$Left ForearmTwist", CATEGORY_BODY, "ChangeLeftForearmTwist", 0.60, 1.40, 0.01, _leftForearmTwist1)
AddSlider("$Right ForearmTwist", CATEGORY_BODY, "ChangeRightForearmTwist", 0.60, 1.40, 0.01, _rightForearmTwist1)
AddSlider("$Left ForearmTwist 2", CATEGORY_BODY, "ChangeLeftForearmTwist2", 0.60, 1.40, 0.01, _leftForearmTwist2)
AddSlider("$Right ForearmTwist 2", CATEGORY_BODY, "ChangeRightForearmTwist2", 0.60, 1.40, 0.01, _rightForearmTwist2)
If isFemale == true
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)
AddSlider("$Left Breast", CATEGORY_BODY, "ChangeLeftBreast", 0.1, 3.00, 0.01, _leftBreast)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)
AddSlider("$Right Breast", CATEGORY_BODY, "ChangeRightBreast", 0.1, 3.00, 0.01, _rightBreast)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)
AddSlider("$Left Breast Curve", CATEGORY_BODY, "ChangeLeftBreastCurve", 0.1, 3.00, 0.01, _leftBreastF)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)
AddSlider("$Right Breast Curve", CATEGORY_BODY, "ChangeRightBreastCurve", 0.1, 3.00, 0.01, _rightBreastF)
Endif
If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)
AddSlider("$Left Glute", CATEGORY_BODY, "ChangeLeftButt", 0.1, 3.00, 0.01, _leftButt)
Endif
If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)
AddSlider("$Right Glute", CATEGORY_BODY, "ChangeRightButt", 0.1, 3.00, 0.01, _rightButt)
Endif
Endif
If BEAST_ENABLED
If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)
AddSlider("$Tail01", CATEGORY_BODY, "ChangeTail01Size", 0.60, 1.40, 0.01, _tail01)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)
AddSlider("$Tail02", CATEGORY_BODY, "ChangeTail02Size", 0.60, 1.40, 0.01, _tail02)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)
AddSlider("$Tail03", CATEGORY_BODY, "ChangeTail03Size", 0.60, 1.40, 0.01, _tail03)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)
AddSlider("$Tail04", CATEGORY_BODY, "ChangeTail04Size", 0.60, 1.40, 0.01, _tail04)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL05, false)
AddSlider("$Tail05", CATEGORY_BODY, "ChangeTail05Size", 0.60, 1.40, 0.01, _tail05)
Endif
If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)
AddSlider("$Tail Pos X", CATEGORY_BODY, "ChangeTailPosX", -10.00, 10.00, 0.01, _tail_posX)
AddSlider("$Tail Pos Y", CATEGORY_BODY, "ChangeTailPosY", -10.00, 10.00, 0.01, _tail_posY)
AddSlider("$Tail Pos Z", CATEGORY_BODY, "ChangeTailPosZ", -10.00, 10.00, 0.01, _tail_posZ)
Endif
Endif
EndEvent

Event OnSliderChanged(string callback, float value)
If callback == "ChangeHeight"
_height = value
ApplyNodeScale(_playerActor, NINODE_NPC, _height)
ElseIf callback == "ChangeHeadSize"
_head = value
ApplyNodeScale(_playerActor, NINODE_HEAD, _head)
ElseIf callback == "ChangeHeadPos"
_headPos = value
ApplyNodePositionZ(_playerActor, NINODE_NECK_CME, _headPos)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


ElseIf callback == "ChangeWaistSize"
_waist = value
ApplyNodeScale(_playerActor, NINODE_SPINE, _waist)
ApplyNodeScale(_playerActor, NINODE_SPINE_CME, (1/_waist))
ElseIf callback == "ChangeUpperWaistSize"
_upperWaist = value
ApplyNodeScale(_playerActor, NINODE_SPINE_1, _upperWaist)
ApplyNodeScale(_playerActor, NINODE_SPINE_1_CME, (1/_upperWaist))
ElseIf callback == "ChangeChestSize"
_Chest = value
ApplyNodeScale(_playerActor, NINODE_SPINE_2, _Chest)
ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
ElseIf callback == "ChangeShouldersSize"
_Shoulders = value
ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))
ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))
ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))
ApplyNodeScale(_playerActor, NINODE_NECK, (_neck/1.0))










;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ElseIf callback == "ChangePelvisSize"
_Pelvis = value
ApplyNodeScale(_playerActor, NINODE_PELVIS, _Pelvis)
ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
ElseIf callback == "ChangeThighGapSize"
_ThighGap = value
ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))




ElseIf callback == "ChangeLeftThighSize"
_leftThigh = value
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))
ElseIf callback == "ChangeRightThighSize"
_rightThigh = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)
ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))
ElseIf callback == "ChangeLeftCalfSize"
_leftCalf = value
ApplyNodeScale(_playerActor, NINODE_LEFT_CALF, _leftCalf)
ApplyNodeScale(_playerActor, NINODE_LEFT_CALF_CME, (1/_leftCalf))
ElseIf callback == "ChangeRightCalfSize"
_rightCalf = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF, _rightCalf)
ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF_CME, (1/_rightCalf))
ElseIf callback == "ChangeLeftFootSize"
_leftFoot = value
ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT, _leftFoot)
ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT_CME, (1/_leftFoot))
ElseIf callback == "ChangeRightFootSize"
_rightFoot = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT, _rightFoot)
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))
ElseIf callback == "ChangeLeftClavicleSize"
_leftClavicle = value
ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)
ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))
ElseIf callback == "ChangeRightClavicleSize"
_rightClavicle = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)
ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))
ElseIf callback == "ChangeLeftUpperArmSize"
_leftUpperArm = value
ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM, _leftUpperArm)
ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))
ElseIf callback == "ChangeRightUpperArmSize"
_rightUpperArm = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM, _rightUpperArm)
ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))
ElseIf callback == "ChangeLeftHandFSize"
_leftHand = value
ApplyNodeScale3rdPerson(_playerActor, NINODE_LEFT_HAND, _leftHand * 0.8517)
ApplyNodeScale1stPerson(_playerActor, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))
ElseIf callback == "ChangeRighHandFSize"
_rightHand = value
ApplyNodeScale3rdPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand * 0.8517)
ApplyNodeScale1stPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))
ElseIf callback == "ChangeLeftHandSize"
_leftHand = value
ApplyNodeScale(_playerActor, NINODE_LEFT_HAND, _leftHand)
ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))
ElseIf callback == "ChangeRighHandSize"
_rightHand = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND, _rightHand)
ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))
Elseif callback == "ChangeLeftBiceps"
_leftBicep = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP, _leftBicep)
Elseif callback == "ChangeRightBiceps"
_rightBicep = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP, _rightBicep)
Elseif callback == "ChangeLeftBiceps2"
_leftBicep2 = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP_2, _leftBicep2)
Elseif callback == "ChangeRightBiceps2"
_rightBicep2 = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP_2, _rightBicep2)
Elseif callback == "ChangeLeftForearmTwist"
_leftForearmTwist1 = value
ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)
Elseif callback == "ChangeRightForearmTwist"
_rightForearmTwist1 = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)
Elseif callback == "ChangeLeftForearmTwist2"
_leftForearmTwist2 = value
ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)
Elseif callback == "ChangeRightForearmTwist2"
_rightForearmTwist2 = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)
Elseif callback == "ChangeLeftBreast"
_leftBreast = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST, _leftBreast)
Elseif callback == "ChangeRightBreast"
_rightBreast = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST, _rightBreast)
Elseif callback == "ChangeLeftBreastCurve"
_leftBreastF = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)
Elseif callback == "ChangeRightBreastCurve"
_rightBreastF = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)
Elseif callback == "ChangeLeftButt"
_leftButt = value
ApplyNodeScale(_playerActor, NINODE_LEFT_BUTT, _leftButt)
Elseif callback == "ChangeRightButt"
_rightButt = value
ApplyNodeScale(_playerActor, NINODE_RIGHT_BUTT, _rightButt)
ElseIf callback == "ChangeTail01Size"
_tail01 = value
ApplyNodeScale(_playerActor, NINODE_TAIL01, _tail01)
ApplyNodeScale(_playerActor, NINODE_TAIL01_CME, (1/_tail01))
ElseIf callback == "ChangeTail02Size"
_tail02 = value
ApplyNodeScale(_playerActor, NINODE_TAIL02, _tail02)
ApplyNodeScale(_playerActor, NINODE_TAIL02_CME, (1/_tail02))
ElseIf callback == "ChangeTail03Size"
_tail03 = value
ApplyNodeScale(_playerActor, NINODE_TAIL03, _tail03)
ApplyNodeScale(_playerActor, NINODE_TAIL03_CME, (1/_tail03))
ElseIf callback == "ChangeTail04Size"
_tail04 = value
ApplyNodeScale(_playerActor, NINODE_TAIL04, _tail04)
ApplyNodeScale(_playerActor, NINODE_TAIL04_CME, (1/_tail04))
ElseIf callback == "ChangeTail05Size"
_tail05 = value
ApplyNodeScale(_playerActor, NINODE_TAIL05, _tail05)
ElseIf callback == "ChangeTailPosX"
_tail_posX = value
ApplyNodePositionX(_playerActor, NINODE_TAIL_PELVIS, _tail_posX)
ApplyNodePositionX(_playerActor, NINODE_TAIL_SPINE, _tail_posX)
ApplyNodePositionX(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posX)
ApplyNodePositionX(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posX)
ElseIf callback == "ChangeTailPosY"
_tail_posY = value
ApplyNodePositionY(_playerActor, NINODE_TAIL_PELVIS, _tail_posY)
ApplyNodePositionY(_playerActor, NINODE_TAIL_SPINE, _tail_posY)
ApplyNodePositionY(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posY)
ApplyNodePositionY(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posY)
ElseIf callback == "ChangeTailPosZ"
_tail_posZ = value
ApplyNodePositionZ(_playerActor, NINODE_TAIL_PELVIS, _tail_posZ)
ApplyNodePositionZ(_playerActor, NINODE_TAIL_SPINE, _tail_posZ)
ApplyNodePositionZ(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posZ)
ApplyNodePositionZ(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)
Endif
EndEvent

Function ApplyNodeScale(Actor _playerActor, String _node, float _scale)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)
EndFunction

Function ApplyNodeScale1stPerson(Actor _playerActor, String _node, float _scale)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)
EndFunction

Function ApplyNodeScale3rdPerson(Actor _playerActor, String _node, float _scale)
NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)
EndFunction

Function ApplyNodePositionX(Actor _playerActor, String _node, float _position)
NetImmerse.SetNodePositionX(_playerActor, _node, _position, false)
NetImmerse.SetNodePositionX(_playerActor, _node, _position, true)
EndFunction

Function ApplyNodePositionY(Actor _playerActor, String _node, float _position)
NetImmerse.SetNodePositionY(_playerActor, _node, _position, false)
NetImmerse.SetNodePositionY(_playerActor, _node, _position, true)
EndFunction

Function ApplyNodePositionZ(Actor _playerActor, String _node, float _position)
NetImmerse.SetNodePositionZ(_playerActor, _node, _position, false)
NetImmerse.SetNodePositionZ(_playerActor, _node, _position, true)
EndFunction

 

Link to comment

My attempt at adding Thigh gap, Pelvis, waist, upper waist, chest and shoulder sliders.

 

 

 

 

Scriptname RaceMenuPlugin extends RaceMenuBase

 

bool Property HEIGHT_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want height

bool Property BEAST_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want beast features

 

string Property NINODE_NPC = "NPC" AutoReadOnly

 

string Property NINODE_HEAD = "NPC Head [Head]" AutoReadOnly

string Property NINODE_NECK = "NPC Neck [Neck]" AutoReadOnly

string Property NINODE_NECK_CME = "CME Neck [Neck]" AutoReadOnly

 

string Property NINODE_PELVIS = "NPC Pelvis [Pelv]" AutoReadOnly

string Property NINODE_PELVIS_CME = "CME Pelvis [Pelv]" AutoReadOnly

string Property NINODE_SPINE = "NPC Spine [spn0]" AutoReadOnly

string Property NINODE_SPINE_CME = "CME Spine [spn0]" AutoReadOnly

string Property NINODE_SPINE_1 = "NPC Spine1 [spn1]" AutoReadOnly

string Property NINODE_SPINE_1_CME = "CME Spine1 [spn1]" AutoReadOnly

string Property NINODE_SPINE_2 = "NPC Spine2 [spn2]" AutoReadOnly

string Property NINODE_SPINE_2_CME = "CME Spine2 [spn2]" AutoReadOnly

 

string Property NINODE_LEFT_KNEE_CME = "CME L Knee [LKne]" AutoReadOnly

string Property NINODE_RIGHT_KNEE_CME = "CME R Knee [RKne]" AutoReadOnly

 

string Property NINODE_LEFT_THIGH = "NPC L Thigh [LThg]" AutoReadOnly

string Property NINODE_LEFT_THIGH_CME = "CME L Thigh [LThg]" AutoReadOnly

string Property NINODE_RIGHT_THIGH = "NPC R Thigh [RThg]" AutoReadOnly

string Property NINODE_RIGHT_THIGH_CME = "CME R Thigh [RThg]" AutoReadOnly

string Property NINODE_LEFT_CALF = "NPC L Calf [LClf]" AutoReadOnly

string Property NINODE_LEFT_CALF_CME = "CME L Calf [LClf]" AutoReadOnly

string Property NINODE_RIGHT_CALF = "NPC R Calf [RClf]" AutoReadOnly

string Property NINODE_RIGHT_CALF_CME = "CME R Calf [RClf]" AutoReadOnly

string Property NINODE_LEFT_FOOT = "NPC L Foot [Lft ]" AutoReadOnly

string Property NINODE_LEFT_FOOT_CME = "CME L Foot [Lft ]" AutoReadOnly

string Property NINODE_RIGHT_FOOT = "NPC R Foot [Rft ]" AutoReadOnly

string Property NINODE_RIGHT_FOOT_CME = "CME R Foot [Rft ]" AutoReadOnly

 

string Property NINODE_LEFT_CLAVICLE = "NPC L Clavicle [LClv]" AutoReadOnly

string Property NINODE_LEFT_CLAVICLE_CME = "CME L Clavicle [LClv]" AutoReadOnly

string Property NINODE_RIGHT_CLAVICLE = "NPC R Clavicle [RClv]" AutoReadOnly

string Property NINODE_RIGHT_CLAVICLE_CME = "CME R Clavicle [RClv]" AutoReadOnly

string Property NINODE_LEFT_UPPERARM = "NPC L UpperArm [LUar]" AutoReadOnly

string Property NINODE_LEFT_UPPERARM_CME = "CME L UpperArm [LUar]" AutoReadOnly

string Property NINODE_RIGHT_UPPERARM = "NPC R UpperArm [RUar]" AutoReadOnly

string Property NINODE_RIGHT_UPPERARM_CME = "CME R UpperArm [RUar]" AutoReadOnly

string Property NINODE_LEFT_HAND = "NPC L Hand [LHnd]" AutoReadOnly

string Property NINODE_LEFT_HAND_CME = "CME L Hand [LHnd]" AutoReadOnly

string Property NINODE_RIGHT_HAND = "NPC R Hand [RHnd]" AutoReadOnly

string Property NINODE_RIGHT_HAND_CME = "CME R Hand [RHnd]" AutoReadOnly

 

string Property NINODE_LEFT_BICEP = "NPC L UpperarmTwist1 [LUt1]" AutoReadOnly

string Property NINODE_RIGHT_BICEP = "NPC R UpperarmTwist1 [RUt1]" AutoReadOnly

string Property NINODE_LEFT_BICEP_2 = "NPC L UpperarmTwist2 [LUt2]" AutoReadOnly

string Property NINODE_RIGHT_BICEP_2 = "NPC R UpperarmTwist2 [RUt2]" AutoReadOnly

 

string Property NINODE_LEFT_FOREARMTWIST_1 = "NPC L ForearmTwist1 [LLt1]" AutoReadOnly

string Property NINODE_RIGHT_FOREARMTWIST_1 = "NPC R ForearmTwist1 [RLt1]" AutoReadOnly

string Property NINODE_LEFT_FOREARMTWIST_2 = "NPC L ForearmTwist2 [LLt2]" AutoReadOnly

string Property NINODE_RIGHT_FOREARMTWIST_2 = "NPC R ForearmTwist2 [RLt2]" AutoReadOnly

 

string Property NINODE_TAIL01 = "TailBone01" AutoReadOnly

string Property NINODE_TAIL01_CME = "CME TailBone01" AutoReadOnly

string Property NINODE_TAIL02 = "TailBone02" AutoReadOnly

string Property NINODE_TAIL02_CME = "CME TailBone02" AutoReadOnly

string Property NINODE_TAIL03 = "TailBone03" AutoReadOnly

string Property NINODE_TAIL03_CME = "CME TailBone03" AutoReadOnly

string Property NINODE_TAIL04 = "TailBone04" AutoReadOnly

string Property NINODE_TAIL04_CME = "CME TailBone05" AutoReadOnly

string Property NINODE_TAIL05 = "TailBone06" AutoReadOnly

 

string Property NINODE_TAIL_PELVIS = "CME Tail Pelvis [Pelv]" AutoReadOnly

string Property NINODE_TAIL_SPINE = "CME Tail Spine [spn0]" AutoReadOnly

string Property NINODE_TAIL_LEFT_THIGH = "CME Tail L Thigh [LThg]" AutoReadOnly

string Property NINODE_TAIL_RIGHT_THIGH = "CME Tail R Thigh [RThg]" AutoReadOnly

 

string Property NINODE_LEFT_BREAST = "NPC L Breast" AutoReadOnly

string Property NINODE_RIGHT_BREAST = "NPC R Breast" AutoReadOnly

string Property NINODE_LEFT_BUTT = "NPC L Butt" AutoReadOnly

string Property NINODE_RIGHT_BUTT = "NPC R Butt" AutoReadOnly

string Property NINODE_LEFT_BREAST_FORWARD = "NPC L Breast01" AutoReadOnly

string Property NINODE_RIGHT_BREAST_FORWARD = "NPC R Breast01" AutoReadOnly

 

; Custom Properties

float _height = 1.0

 

float _head = 1.0

float _neck = 1.0

float _headPos = 0.0

 

float _Shoulders = 1.0

float _Chest = 1.0

Float _upperWaist = 1.0

float _waist = 1.0

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

float _Pelvis = 1.0

float _ThighGap = 1.0

 

float _leftThigh = 1.0

float _rightThigh = 1.0

float _leftCalf = 1.0

float _rightCalf = 1.0

float _leftFoot = 1.0

float _rightFoot = 1.0

float _leftClavicle = 1.0

float _rightClavicle = 1.0

float _leftUpperArm = 1.0

float _rightUpperArm = 1.0

float _leftHand = 1.0

float _rightHand = 1.0

 

float _leftBicep = 1.0

float _rightBicep = 1.0

float _leftBicep2 = 1.0

float _rightBicep2 = 1.0

 

float _leftForearmTwist1 = 1.0

float _rightForearmTwist1 = 1.0

float _leftForearmTwist2 = 1.0

float _rightForearmTwist2 = 1.0

 

float _leftBreast = 1.0

float _rightBreast = 1.0

float _leftBreastF = 1.0

float _rightBreastF = 1.0

float _leftButt = 1.0

float _rightButt = 1.0

 

float _tail01 = 1.0

float _tail02 = 1.0

float _tail03 = 1.0

float _tail04 = 1.0

float _tail05 = 1.0

float _tail_posX = 0.0

float _tail_posY = 0.0

float _tail_posZ = 0.0

 

bool hasInitialized = false ; For one time init, used for loading data inside OnGameLoad instead of Init (Unsafe)

 

Event OnStartup()

parent.OnStartup()

RegisterForModEvent("RSM_RequestNodeSave", "OnSaveScales")

EndEvent

 

Event OnSaveScales(string eventName, string strArg, float numArg, Form formArg)

SavePlayerNodeScales(_playerActor)

EndEvent

 

Event OnReloadSettings(Actor player, ActorBase playerBase)

If !hasInitialized ; Init script values from current player

SavePlayerNodeScales(player)

hasInitialized = true

Else

LoadPlayerNodeScales(player)

Endif

EndEvent

 

Function LoadPlayerNodeScales(Actor player)

Normalize()

 

If HEIGHT_ENABLED ; Load height only if enabled

ApplyNodeScale(player, NINODE_NPC, _height)

Endif

ApplyNodeScale(player, NINODE_HEAD, _head)

If NetImmerse.HasNode(player, NINODE_NECK_CME, false)

ApplyNodePositionZ(player, NINODE_NECK_CME, _headPos)

Endif

 

 

 

 

 

 

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false)

ApplyNodeScale(player, NINODE_SPINE, _waist)

ApplyNodeScale(player, NINODE_SPINE_CME, (1/_waist))

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

ApplyNodeScale(player, NINODE_SPINE_1, _upperWaist)

ApplyNodeScale(player, NINODE_SPINE_1_CME, (1/_upperWaist))

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

ApplyNodeScale(player, NINODE_SPINE_2, _Chest)

ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))

ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))

ApplyNodeScale(player, NINODE_NECK, (_neck/1.0))

Endif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NINODE_PELVIS_CME

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_PELVIS, _Pelvis)

ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

Endif

 

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

Endif

 

 

 

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

Endif

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)

ApplyNodeScale(player, NINODE_LEFT_CALF, _leftCalf)

ApplyNodeScale(player, NINODE_LEFT_CALF_CME, (1/_leftCalf))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_CALF, _rightCalf)

ApplyNodeScale(player, NINODE_RIGHT_CALF_CME, (1/_rightCalf))

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)

ApplyNodeScale(player, NINODE_LEFT_FOOT, _leftFoot)

ApplyNodeScale(player, NINODE_LEFT_FOOT_CME, (1/_leftFoot))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_FOOT, _rightFoot)

ApplyNodeScale(player, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)

ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)

ApplyNodeScale(player, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)

ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)

ApplyNodeScale(player, NINODE_LEFT_UPPERARM, _leftUpperArm)

ApplyNodeScale(player, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_UPPERARM, _rightUpperArm)

ApplyNodeScale(player, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))

Endif

If player.GetActorBase().GetSex() == 1

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

ApplyNodeScale3rdPerson(player, NINODE_LEFT_HAND, _leftHand * 0.8517)

ApplyNodeScale1stPerson(player, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

ApplyNodeScale3rdPerson(player, NINODE_RIGHT_HAND, _rightHand * 0.8517)

ApplyNodeScale1stPerson(player, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))

Endif

Else

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

ApplyNodeScale(player, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))

Endif

Endif

ApplyNodeScale(player, NINODE_LEFT_BICEP, _leftBicep)

ApplyNodeScale(player, NINODE_RIGHT_BICEP, _rightBicep)

ApplyNodeScale(player, NINODE_LEFT_BICEP_2, _leftBicep2)

ApplyNodeScale(player, NINODE_RIGHT_BICEP_2, _rightBicep2)

ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)

ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)

ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)

ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)

ApplyNodeScale(player, NINODE_LEFT_BREAST, _leftBreast)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)

ApplyNodeScale(player, NINODE_RIGHT_BREAST, _rightBreast)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)

ApplyNodeScale(player, NINODE_LEFT_BUTT, _leftButt)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)

ApplyNodeScale(player, NINODE_RIGHT_BUTT, _rightButt)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)

ApplyNodeScale(player, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)

ApplyNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)

Endif

If BEAST_ENABLED

If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL05, false)

ApplyNodeScale(player, NINODE_TAIL01, _tail01)

ApplyNodeScale(player, NINODE_TAIL01_CME, (1/_tail01))

ApplyNodeScale(player, NINODE_TAIL02, _tail02)

ApplyNodeScale(player, NINODE_TAIL02_CME, (1/_tail02))

ApplyNodeScale(player, NINODE_TAIL03, _tail03)

ApplyNodeScale(player, NINODE_TAIL03_CME, (1/_tail03))

ApplyNodeScale(player, NINODE_TAIL04, _tail04)

ApplyNodeScale(player, NINODE_TAIL04_CME, (1/_tail04))

ApplyNodeScale(player, NINODE_TAIL05, _tail05)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)

ApplyNodePositionX(player, NINODE_TAIL_PELVIS, _tail_posX)

ApplyNodePositionX(player, NINODE_TAIL_SPINE, _tail_posX)

ApplyNodePositionX(player, NINODE_TAIL_LEFT_THIGH, _tail_posX)

ApplyNodePositionX(player, NINODE_TAIL_RIGHT_THIGH, _tail_posX)

ApplyNodePositionY(player, NINODE_TAIL_PELVIS, _tail_posY)

ApplyNodePositionY(player, NINODE_TAIL_SPINE, _tail_posY)

ApplyNodePositionY(player, NINODE_TAIL_LEFT_THIGH, _tail_posY)

ApplyNodePositionY(player, NINODE_TAIL_RIGHT_THIGH, _tail_posY)

ApplyNodePositionZ(player, NINODE_TAIL_PELVIS, _tail_posZ)

ApplyNodePositionZ(player, NINODE_TAIL_SPINE, _tail_posZ)

ApplyNodePositionZ(player, NINODE_TAIL_LEFT_THIGH, _tail_posZ)

ApplyNodePositionZ(player, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)

EndIf

EndIf

EndFunction

 

Event On3DLoaded(ObjectReference akRef)

OnReloadSettings(_playerActor, _playerActorBase)

EndEvent

 

Event OnCellLoaded(ObjectReference akRef)

LoadPlayerNodeScales(_playerActor)

EndEvent

 

; Add Custom Warpaint here

Event OnWarpaintRequest()

AddWarpaint("$Beauty Mark 01", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_01.dds")

AddWarpaint("$Beauty Mark 02", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_02.dds")

AddWarpaint("$Beauty Mark 03", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_03.dds")

AddWarpaint("$Dragon Tattoo 01", "Actors\\Character\\Character Assets\\TintMasks\\DragonTattoo_01.dds")

EndEvent

 

Function Normalize()

if _height == 0.0

_height = 1.0

Endif

if _head == 0.0

_head = 1.0

Endif

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

If _Shoulders == 0.0

_Shoulders = 1.0

Endif

If _Chest == 0.0

_Chest = 1.0

Endif

If _upperWaist == 0.0

_upperWaist = 1.0

Endif

If _waist == 0.0

_waist = 1.0

Endif

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If _Pelvis == 0.0

_Pelvis = 1.0

Endif

If _ThighGap == 0.0

_ThighGap = 1.0

Endif

If _leftThigh == 0.0

_leftThigh = 1.0

Endif

If _rightThigh == 0.0

_rightThigh = 1.0

Endif

If _leftCalf == 0.0

_leftCalf = 1.0

Endif

If _rightCalf == 0.0

_rightCalf = 1.0

Endif

If _rightFoot == 0.0

_rightFoot = 1.0

Endif

If _rightFoot == 0.0

_rightFoot = 1.0

Endif

If _leftClavicle == 0.0

_leftClavicle = 1.0

Endif

If _rightClavicle == 0.0

_rightClavicle = 1.0

Endif

If _leftUpperArm == 0.0

_leftUpperArm = 1.0

Endif

If _rightUpperArm == 0.0

_rightUpperArm = 1.0

Endif

If _leftHand == 0.0

_leftHand = 1.0

Endif

If _rightHand == 0.0

_rightHand = 1.0

Endif

if _leftBicep == 0.0

_leftBicep = 1.0

Endif

if _rightBicep == 0.0

_rightBicep = 1.0

Endif

if _leftBicep2 == 0.0

_leftBicep2 = 1.0

Endif

if _rightBicep2 == 0.0

_rightBicep2 = 1.0

Endif

if _leftForearmTwist1 == 0.0

_leftForearmTwist1 = 1.0

Endif

if _rightForearmTwist1 == 0.0

_rightForearmTwist1 = 1.0

Endif

if _leftForearmTwist2 == 0.0

_leftForearmTwist2 = 1.0

Endif

if _rightForearmTwist2 == 0.0

_rightForearmTwist2 = 1.0

Endif

if _leftBreast == 0.0

_leftBreast = 1.0

Endif

if _rightBreast == 0.0

_rightBreast = 1.0

Endif

if _leftBreastF == 0.0

_leftBreastF = 1.0

Endif

if _rightBreastF == 0.0

_rightBreastF = 1.0

Endif

if _leftButt == 0.0

_leftButt = 1.0

Endif

if _rightButt == 0.0

_rightButt = 1.0

Endif

EndFunction

 

Function SavePlayerNodeScales(Actor player)

If NetImmerse.HasNode(player, NINODE_NPC, false)

_height = NetImmerse.GetNodeScale(player, NINODE_NPC, false)

Else

_height = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_HEAD, false)

_head = NetImmerse.GetNodeScale(player, NINODE_HEAD, false)

Else

_head = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_NECK_CME, false)

_headPos = NetImmerse.GetRelativeNodePositionZ(player, NINODE_NECK_CME, NINODE_NECK, false)

Else

_headPos = 0.0

Endif

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

_waist = NetImmerse.GetNodeScale(player, NINODE_SPINE, false)

Else

_waist = 1.0

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

_upperWaist = NetImmerse.GetNodeScale(player, NINODE_SPINE_1, false)

Else

_upperWaist = 1.0

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

_Chest = NetImmerse.GetNodeScale(player, NINODE_SPINE_2, false)

Else

_Chest = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

_Shoulders = NetImmerse.GetNodeScale(player, NINODE_SPINE_2_CME, false) /_Chest

Else

_Shoulders = 1.0

Endif

 

 

 

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If NetImmerse.HasNode(player, NINODE_PELVIS, false)

_Pelvis = NetImmerse.GetNodeScale(player, NINODE_PELVIS, false)

Else

_Pelvis = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)

_ThighGap = NetImmerse.GetNodeScale(player, NINODE_PELVIS_CME, false)/_Pelvis

Else

_ThighGap = 1.0

Endif

 

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)

_leftThigh = NetImmerse.GetNodeScale(player, NINODE_LEFT_THIGH, false)

Else

_leftThigh = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

_rightThigh = NetImmerse.GetNodeScale(player, NINODE_RIGHT_THIGH, false)

Else

_rightThigh = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)

_leftCalf = NetImmerse.GetNodeScale(player, NINODE_LEFT_CALF, false)

Else

_leftCalf = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)

_rightCalf = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CALF, false)

Else

_rightCalf = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)

_leftFoot = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOOT, false)

Else

_leftFoot = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)

_rightFoot = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOOT, false)

Else

_rightFoot = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)

_leftClavicle = NetImmerse.GetNodeScale(player, NINODE_LEFT_CLAVICLE, false)/1.0

Else

_leftClavicle = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)

_rightClavicle = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CLAVICLE, false)/1.0

Else

_rightClavicle = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)

_leftUpperArm = NetImmerse.GetNodeScale(player, NINODE_LEFT_UPPERARM, false)

Else

_leftUpperArm = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)

_rightUpperArm = NetImmerse.GetNodeScale(player, NINODE_RIGHT_UPPERARM, false)

Else

_rightUpperArm = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)

Else

_leftHand = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)

Else

_rightHand = 1.0

Endif

If player.GetActorBase().GetSex() == 1

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false) / 0.8517

Else

_leftHand = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false) / 0.8517

Else

_rightHand = 1.0

Endif

Else

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)

Else

_leftHand = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)

Else

_rightHand = 1.0

Endif

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BICEP, false)

_leftBicep = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP, false)

Else

_leftBicep = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP, false)

_rightBicep = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP, false)

Else

_rightBicep = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BICEP_2, false)

_leftBicep2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP_2, false)

Else

_leftBicep2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP_2, false)

_rightBicep2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP_2, false)

Else

_rightBicep2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_1, false)

_leftForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, false)

Else

_leftForearmTwist1 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_1, false)

_rightForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, false)

Else

_rightForearmTwist1 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_2, false)

_leftForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, false)

Else

_leftForearmTwist2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_2, false)

_rightForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, false)

Else

_rightForearmTwist2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)

_leftBreast = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST, false)

Else

_leftBreast = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)

_rightBreast = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST, false)

Else

_rightBreast = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)

_leftBreastF = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST_FORWARD, false)

Else

_leftBreastF = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)

_rightBreastF = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, false)

Else

_rightBreastF = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)

_leftButt = NetImmerse.GetNodeScale(player, NINODE_LEFT_BUTT, false)

Else

_leftButt = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)

_rightButt = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BUTT, false)

Else

_rightButt = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)

_tail01 = NetImmerse.GetNodeScale(player, NINODE_TAIL01, false)

Else

_tail01 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)

_tail02 = NetImmerse.GetNodeScale(player, NINODE_TAIL02, false)

Else

_tail02 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)

_tail03 = NetImmerse.GetNodeScale(player, NINODE_TAIL03, false)

Else

_tail03 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)

_tail04 = NetImmerse.GetNodeScale(player, NINODE_TAIL04, false)

Else

_tail04 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL05, false)

_tail05 = NetImmerse.GetNodeScale(player, NINODE_TAIL05, false)

Else

_tail05 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)

_tail_posX = NetImmerse.GetRelativeNodePositionX(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)

_tail_posY = NetImmerse.GetRelativeNodePositionY(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)

_tail_posZ = NetImmerse.GetRelativeNodePositionZ(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)

Else

_tail_posX = 0.0

_tail_posY = 0.0

_tail_posZ = 0.0

Endif

 

Normalize()

EndFunction

 

Event OnInitializeMenu(Actor player, ActorBase playerBase)

SavePlayerNodeScales(player)

EndEvent

 

Event OnResetMenu(Actor player, ActorBase playerBase)

_height = 1.0

 

_head = 1.0

_neck = 1.0

_headPos = 0.0

 

_Shoulders = 1.0

_Chest = 1.0

_upperWaist =1.0

_waist = 1.0

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

_Pelvis = 1.0

_ThighGap = 1.0

_leftThigh = 1.0

_rightThigh = 1.0

_leftCalf = 1.0

_rightCalf = 1.0

_leftFoot = 1.0

_rightFoot = 1.0

_leftClavicle = 1.0

_rightClavicle = 1.0

_leftUpperArm = 1.0

_rightUpperArm = 1.0

_leftHand = 1.0

_rightHand = 1.0

 

_leftBicep = 1.0

_rightBicep = 1.0

_leftBicep2 = 1.0

_rightBicep2 = 1.0

_leftForearmTwist1 = 1.0

_rightForearmTwist1 = 1.0

_leftForearmTwist2 = 1.0

_rightForearmTwist2 = 1.0

 

_leftBreast = 1.0

_rightBreast = 1.0

_leftBreastF = 1.0

_rightBreastF = 1.0

_leftButt = 1.0

_rightButt = 1.0

 

_tail01 = 1.0

_tail02 = 1.0

_tail03 = 1.0

_tail04 = 1.0

_tail05 = 1.0

_tail_posX = 0.0

_tail_posY = 0.0

_tail_posZ = 0.0

 

LoadPlayerNodeScales(player)

EndEvent

 

; Add Custom sliders here

Event OnSliderRequest(Actor player, ActorBase playerBase, Race actorRace, bool isFemale)

If HEIGHT_ENABLED

AddSlider("$Height", CATEGORY_BODY, "ChangeHeight", 0.25, 2.00, 0.01, _height)

Endif

If NetImmerse.HasNode(player, NINODE_HEAD, false)

AddSlider("$Head", CATEGORY_HEAD, "ChangeHeadSize", 0.25, 2.00, 0.01, _head)

Endif

If NetImmerse.HasNode(player, NINODE_NECK_CME, false)

AddSlider("$HeadPos", CATEGORY_HEAD, "ChangeHeadPos", -4.00, 4.00, 0.01, _headPos)

Endif

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

AddSlider("$Shoulders", CATEGORY_BODY, "ChangeShouldersSize", 0.50, 2.00, 0.01, _Shoulders)

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

AddSlider("$Chest", CATEGORY_BODY, "ChangeChestSize", 0.50, 2.00, 0.01, _Chest)

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

AddSlider("$upperWaist", CATEGORY_BODY, "ChangeUpperWaistSize", 0.50, 2.00, 0.01, _upperWaist)

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

AddSlider("$Waist", CATEGORY_BODY, "ChangeWaistSize", 0.50, 2.00, 0.01, _waist)

Endif

 

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!NINODE_PELVIS_CME

 

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)

AddSlider("$Pelvis", CATEGORY_BODY, "ChangePelvisSize", 0.50, 2.00, 0.01, _Pelvis)

Endif

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)&& NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)&& NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

AddSlider("$ThighGap", CATEGORY_BODY, "ChangeThighGapSize", 0.50, 2.00, 0.01, _ThighGap)

Endif

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)

AddSlider("$Left Thigh", CATEGORY_BODY, "ChangeLeftThighSize", 0.50, 2.00, 0.01, _leftThigh)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

AddSlider("$Right Thigh", CATEGORY_BODY, "ChangeRightThighSize", 0.50, 2.00, 0.01, _rightThigh)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)

AddSlider("$Left Calf", CATEGORY_BODY, "ChangeLeftCalfSize", 0.90, 1.10, 0.01, _leftCalf)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)

AddSlider("$Right Calf", CATEGORY_BODY, "ChangeRightCalfSize", 0.90, 1.10, 0.01, _rightCalf)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)

AddSlider("$Left Foot", CATEGORY_BODY, "ChangeLeftFootSize", 0.90, 1.10, 0.01, _leftFoot)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)

AddSlider("$Right Foot", CATEGORY_BODY, "ChangeRightFootSize", 0.90, 1.10, 0.01, _rightFoot)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)

AddSlider("$Left Clavicle", CATEGORY_BODY, "ChangeLeftClavicleSize", 0.80, 1.20, 0.01, _leftClavicle)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)

AddSlider("$Right Clavicle", CATEGORY_BODY, "ChangeRightClavicleSize", 0.80, 1.20, 0.01, _rightClavicle)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)

AddSlider("$Left Upper Arm", CATEGORY_BODY, "ChangeLeftUpperArmSize", 0.80, 1.20, 0.01, _leftUpperArm)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)

AddSlider("$Right Upper Arm", CATEGORY_BODY, "ChangeRightUpperArmSize", 0.80, 1.20, 0.01, _rightUpperArm)

Endif

IF isFemale == true

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandFSize", 0.60, 1.40, 0.01, _leftHand)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandFSize", 0.60, 1.40, 0.01, _rightHand)

Endif

Else

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandSize", 0.60, 1.40, 0.01, _leftHand)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandSize", 0.60, 1.40, 0.01, _rightHand)

Endif

EndIf

AddSlider("$Left Biceps", CATEGORY_BODY, "ChangeLeftBiceps", 0.60, 1.40, 0.01, _leftBicep)

AddSlider("$Right Biceps", CATEGORY_BODY, "ChangeRightBiceps", 0.60, 1.40, 0.01, _rightBicep)

AddSlider("$Left Biceps 2", CATEGORY_BODY, "ChangeLeftBiceps2", 0.60, 1.40, 0.01, _leftBicep2)

AddSlider("$Right Biceps 2", CATEGORY_BODY, "ChangeRightBiceps2", 0.60, 1.40, 0.01, _rightBicep2)

AddSlider("$Left ForearmTwist", CATEGORY_BODY, "ChangeLeftForearmTwist", 0.60, 1.40, 0.01, _leftForearmTwist1)

AddSlider("$Right ForearmTwist", CATEGORY_BODY, "ChangeRightForearmTwist", 0.60, 1.40, 0.01, _rightForearmTwist1)

AddSlider("$Left ForearmTwist 2", CATEGORY_BODY, "ChangeLeftForearmTwist2", 0.60, 1.40, 0.01, _leftForearmTwist2)

AddSlider("$Right ForearmTwist 2", CATEGORY_BODY, "ChangeRightForearmTwist2", 0.60, 1.40, 0.01, _rightForearmTwist2)

If isFemale == true

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)

AddSlider("$Left Breast", CATEGORY_BODY, "ChangeLeftBreast", 0.1, 3.00, 0.01, _leftBreast)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)

AddSlider("$Right Breast", CATEGORY_BODY, "ChangeRightBreast", 0.1, 3.00, 0.01, _rightBreast)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)

AddSlider("$Left Breast Curve", CATEGORY_BODY, "ChangeLeftBreastCurve", 0.1, 3.00, 0.01, _leftBreastF)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)

AddSlider("$Right Breast Curve", CATEGORY_BODY, "ChangeRightBreastCurve", 0.1, 3.00, 0.01, _rightBreastF)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)

AddSlider("$Left Glute", CATEGORY_BODY, "ChangeLeftButt", 0.1, 3.00, 0.01, _leftButt)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)

AddSlider("$Right Glute", CATEGORY_BODY, "ChangeRightButt", 0.1, 3.00, 0.01, _rightButt)

Endif

Endif

If BEAST_ENABLED

If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)

AddSlider("$Tail01", CATEGORY_BODY, "ChangeTail01Size", 0.60, 1.40, 0.01, _tail01)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)

AddSlider("$Tail02", CATEGORY_BODY, "ChangeTail02Size", 0.60, 1.40, 0.01, _tail02)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)

AddSlider("$Tail03", CATEGORY_BODY, "ChangeTail03Size", 0.60, 1.40, 0.01, _tail03)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)

AddSlider("$Tail04", CATEGORY_BODY, "ChangeTail04Size", 0.60, 1.40, 0.01, _tail04)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL05, false)

AddSlider("$Tail05", CATEGORY_BODY, "ChangeTail05Size", 0.60, 1.40, 0.01, _tail05)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)

AddSlider("$Tail Pos X", CATEGORY_BODY, "ChangeTailPosX", -10.00, 10.00, 0.01, _tail_posX)

AddSlider("$Tail Pos Y", CATEGORY_BODY, "ChangeTailPosY", -10.00, 10.00, 0.01, _tail_posY)

AddSlider("$Tail Pos Z", CATEGORY_BODY, "ChangeTailPosZ", -10.00, 10.00, 0.01, _tail_posZ)

Endif

Endif

EndEvent

 

Event OnSliderChanged(string callback, float value)

If callback == "ChangeHeight"

_height = value

ApplyNodeScale(_playerActor, NINODE_NPC, _height)

ElseIf callback == "ChangeHeadSize"

_head = value

ApplyNodeScale(_playerActor, NINODE_HEAD, _head)

ElseIf callback == "ChangeHeadPos"

_headPos = value

ApplyNodePositionZ(_playerActor, NINODE_NECK_CME, _headPos)

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

 

ElseIf callback == "ChangeWaistSize"

_waist = value

ApplyNodeScale(_playerActor, NINODE_SPINE, _waist)

ApplyNodeScale(_playerActor, NINODE_SPINE_CME, (1/_waist))

ElseIf callback == "ChangeUpperWaistSize"

_upperWaist = value

ApplyNodeScale(_playerActor, NINODE_SPINE_1, _upperWaist)

ApplyNodeScale(_playerActor, NINODE_SPINE_1_CME, (1/_upperWaist))

ElseIf callback == "ChangeChestSize"

_Chest = value

ApplyNodeScale(_playerActor, NINODE_SPINE_2, _Chest)

ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

ElseIf callback == "ChangeShouldersSize"

_Shoulders = value

ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))

ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))

ApplyNodeScale(_playerActor, NINODE_NECK, (_neck/1.0))

 

 

 

 

 

 

 

 

 

 

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ElseIf callback == "ChangePelvisSize"

_Pelvis = value

ApplyNodeScale(_playerActor, NINODE_PELVIS, _Pelvis)

ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

ElseIf callback == "ChangeThighGapSize"

_ThighGap = value

ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

 

 

 

 

ElseIf callback == "ChangeLeftThighSize"

_leftThigh = value

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ElseIf callback == "ChangeRightThighSize"

_rightThigh = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

ElseIf callback == "ChangeLeftCalfSize"

_leftCalf = value

ApplyNodeScale(_playerActor, NINODE_LEFT_CALF, _leftCalf)

ApplyNodeScale(_playerActor, NINODE_LEFT_CALF_CME, (1/_leftCalf))

ElseIf callback == "ChangeRightCalfSize"

_rightCalf = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF, _rightCalf)

ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF_CME, (1/_rightCalf))

ElseIf callback == "ChangeLeftFootSize"

_leftFoot = value

ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT, _leftFoot)

ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT_CME, (1/_leftFoot))

ElseIf callback == "ChangeRightFootSize"

_rightFoot = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT, _rightFoot)

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))

ElseIf callback == "ChangeLeftClavicleSize"

_leftClavicle = value

ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)

ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))

ElseIf callback == "ChangeRightClavicleSize"

_rightClavicle = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)

ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))

ElseIf callback == "ChangeLeftUpperArmSize"

_leftUpperArm = value

ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM, _leftUpperArm)

ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))

ElseIf callback == "ChangeRightUpperArmSize"

_rightUpperArm = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM, _rightUpperArm)

ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))

ElseIf callback == "ChangeLeftHandFSize"

_leftHand = value

ApplyNodeScale3rdPerson(_playerActor, NINODE_LEFT_HAND, _leftHand * 0.8517)

ApplyNodeScale1stPerson(_playerActor, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))

ElseIf callback == "ChangeRighHandFSize"

_rightHand = value

ApplyNodeScale3rdPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand * 0.8517)

ApplyNodeScale1stPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))

ElseIf callback == "ChangeLeftHandSize"

_leftHand = value

ApplyNodeScale(_playerActor, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))

ElseIf callback == "ChangeRighHandSize"

_rightHand = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))

Elseif callback == "ChangeLeftBiceps"

_leftBicep = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP, _leftBicep)

Elseif callback == "ChangeRightBiceps"

_rightBicep = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP, _rightBicep)

Elseif callback == "ChangeLeftBiceps2"

_leftBicep2 = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP_2, _leftBicep2)

Elseif callback == "ChangeRightBiceps2"

_rightBicep2 = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP_2, _rightBicep2)

Elseif callback == "ChangeLeftForearmTwist"

_leftForearmTwist1 = value

ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)

Elseif callback == "ChangeRightForearmTwist"

_rightForearmTwist1 = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)

Elseif callback == "ChangeLeftForearmTwist2"

_leftForearmTwist2 = value

ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)

Elseif callback == "ChangeRightForearmTwist2"

_rightForearmTwist2 = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)

Elseif callback == "ChangeLeftBreast"

_leftBreast = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST, _leftBreast)

Elseif callback == "ChangeRightBreast"

_rightBreast = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST, _rightBreast)

Elseif callback == "ChangeLeftBreastCurve"

_leftBreastF = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)

Elseif callback == "ChangeRightBreastCurve"

_rightBreastF = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)

Elseif callback == "ChangeLeftButt"

_leftButt = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BUTT, _leftButt)

Elseif callback == "ChangeRightButt"

_rightButt = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BUTT, _rightButt)

ElseIf callback == "ChangeTail01Size"

_tail01 = value

ApplyNodeScale(_playerActor, NINODE_TAIL01, _tail01)

ApplyNodeScale(_playerActor, NINODE_TAIL01_CME, (1/_tail01))

ElseIf callback == "ChangeTail02Size"

_tail02 = value

ApplyNodeScale(_playerActor, NINODE_TAIL02, _tail02)

ApplyNodeScale(_playerActor, NINODE_TAIL02_CME, (1/_tail02))

ElseIf callback == "ChangeTail03Size"

_tail03 = value

ApplyNodeScale(_playerActor, NINODE_TAIL03, _tail03)

ApplyNodeScale(_playerActor, NINODE_TAIL03_CME, (1/_tail03))

ElseIf callback == "ChangeTail04Size"

_tail04 = value

ApplyNodeScale(_playerActor, NINODE_TAIL04, _tail04)

ApplyNodeScale(_playerActor, NINODE_TAIL04_CME, (1/_tail04))

ElseIf callback == "ChangeTail05Size"

_tail05 = value

ApplyNodeScale(_playerActor, NINODE_TAIL05, _tail05)

ElseIf callback == "ChangeTailPosX"

_tail_posX = value

ApplyNodePositionX(_playerActor, NINODE_TAIL_PELVIS, _tail_posX)

ApplyNodePositionX(_playerActor, NINODE_TAIL_SPINE, _tail_posX)

ApplyNodePositionX(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posX)

ApplyNodePositionX(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posX)

ElseIf callback == "ChangeTailPosY"

_tail_posY = value

ApplyNodePositionY(_playerActor, NINODE_TAIL_PELVIS, _tail_posY)

ApplyNodePositionY(_playerActor, NINODE_TAIL_SPINE, _tail_posY)

ApplyNodePositionY(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posY)

ApplyNodePositionY(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posY)

ElseIf callback == "ChangeTailPosZ"

_tail_posZ = value

ApplyNodePositionZ(_playerActor, NINODE_TAIL_PELVIS, _tail_posZ)

ApplyNodePositionZ(_playerActor, NINODE_TAIL_SPINE, _tail_posZ)

ApplyNodePositionZ(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posZ)

ApplyNodePositionZ(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)

Endif

EndEvent

 

Function ApplyNodeScale(Actor _playerActor, String _node, float _scale)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)

EndFunction

 

Function ApplyNodeScale1stPerson(Actor _playerActor, String _node, float _scale)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)

EndFunction

 

Function ApplyNodeScale3rdPerson(Actor _playerActor, String _node, float _scale)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)

EndFunction

 

Function ApplyNodePositionX(Actor _playerActor, String _node, float _position)

NetImmerse.SetNodePositionX(_playerActor, _node, _position, false)

NetImmerse.SetNodePositionX(_playerActor, _node, _position, true)

EndFunction

 

Function ApplyNodePositionY(Actor _playerActor, String _node, float _position)

NetImmerse.SetNodePositionY(_playerActor, _node, _position, false)

NetImmerse.SetNodePositionY(_playerActor, _node, _position, true)

EndFunction

 

Function ApplyNodePositionZ(Actor _playerActor, String _node, float _position)

NetImmerse.SetNodePositionZ(_playerActor, _node, _position, false)

NetImmerse.SetNodePositionZ(_playerActor, _node, _position, true)

EndFunction

 

 

You can't scale the same bones in two different sliders.

Link to comment

My attempt at adding Thigh gap, Pelvis, waist, upper waist, chest and shoulder sliders.

 

 

 

 

Scriptname RaceMenuPlugin extends RaceMenuBase

 

bool Property HEIGHT_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want height

bool Property BEAST_ENABLED = true AutoReadOnly ; Set this to false to rebuild if you don't want beast features

 

string Property NINODE_NPC = "NPC" AutoReadOnly

 

string Property NINODE_HEAD = "NPC Head [Head]" AutoReadOnly

string Property NINODE_NECK = "NPC Neck [Neck]" AutoReadOnly

string Property NINODE_NECK_CME = "CME Neck [Neck]" AutoReadOnly

 

string Property NINODE_PELVIS = "NPC Pelvis [Pelv]" AutoReadOnly

string Property NINODE_PELVIS_CME = "CME Pelvis [Pelv]" AutoReadOnly

string Property NINODE_SPINE = "NPC Spine [spn0]" AutoReadOnly

string Property NINODE_SPINE_CME = "CME Spine [spn0]" AutoReadOnly

string Property NINODE_SPINE_1 = "NPC Spine1 [spn1]" AutoReadOnly

string Property NINODE_SPINE_1_CME = "CME Spine1 [spn1]" AutoReadOnly

string Property NINODE_SPINE_2 = "NPC Spine2 [spn2]" AutoReadOnly

string Property NINODE_SPINE_2_CME = "CME Spine2 [spn2]" AutoReadOnly

 

string Property NINODE_LEFT_KNEE_CME = "CME L Knee [LKne]" AutoReadOnly

string Property NINODE_RIGHT_KNEE_CME = "CME R Knee [RKne]" AutoReadOnly

 

string Property NINODE_LEFT_THIGH = "NPC L Thigh [LThg]" AutoReadOnly

string Property NINODE_LEFT_THIGH_CME = "CME L Thigh [LThg]" AutoReadOnly

string Property NINODE_RIGHT_THIGH = "NPC R Thigh [RThg]" AutoReadOnly

string Property NINODE_RIGHT_THIGH_CME = "CME R Thigh [RThg]" AutoReadOnly

string Property NINODE_LEFT_CALF = "NPC L Calf [LClf]" AutoReadOnly

string Property NINODE_LEFT_CALF_CME = "CME L Calf [LClf]" AutoReadOnly

string Property NINODE_RIGHT_CALF = "NPC R Calf [RClf]" AutoReadOnly

string Property NINODE_RIGHT_CALF_CME = "CME R Calf [RClf]" AutoReadOnly

string Property NINODE_LEFT_FOOT = "NPC L Foot [Lft ]" AutoReadOnly

string Property NINODE_LEFT_FOOT_CME = "CME L Foot [Lft ]" AutoReadOnly

string Property NINODE_RIGHT_FOOT = "NPC R Foot [Rft ]" AutoReadOnly

string Property NINODE_RIGHT_FOOT_CME = "CME R Foot [Rft ]" AutoReadOnly

 

string Property NINODE_LEFT_CLAVICLE = "NPC L Clavicle [LClv]" AutoReadOnly

string Property NINODE_LEFT_CLAVICLE_CME = "CME L Clavicle [LClv]" AutoReadOnly

string Property NINODE_RIGHT_CLAVICLE = "NPC R Clavicle [RClv]" AutoReadOnly

string Property NINODE_RIGHT_CLAVICLE_CME = "CME R Clavicle [RClv]" AutoReadOnly

string Property NINODE_LEFT_UPPERARM = "NPC L UpperArm [LUar]" AutoReadOnly

string Property NINODE_LEFT_UPPERARM_CME = "CME L UpperArm [LUar]" AutoReadOnly

string Property NINODE_RIGHT_UPPERARM = "NPC R UpperArm [RUar]" AutoReadOnly

string Property NINODE_RIGHT_UPPERARM_CME = "CME R UpperArm [RUar]" AutoReadOnly

string Property NINODE_LEFT_HAND = "NPC L Hand [LHnd]" AutoReadOnly

string Property NINODE_LEFT_HAND_CME = "CME L Hand [LHnd]" AutoReadOnly

string Property NINODE_RIGHT_HAND = "NPC R Hand [RHnd]" AutoReadOnly

string Property NINODE_RIGHT_HAND_CME = "CME R Hand [RHnd]" AutoReadOnly

 

string Property NINODE_LEFT_BICEP = "NPC L UpperarmTwist1 [LUt1]" AutoReadOnly

string Property NINODE_RIGHT_BICEP = "NPC R UpperarmTwist1 [RUt1]" AutoReadOnly

string Property NINODE_LEFT_BICEP_2 = "NPC L UpperarmTwist2 [LUt2]" AutoReadOnly

string Property NINODE_RIGHT_BICEP_2 = "NPC R UpperarmTwist2 [RUt2]" AutoReadOnly

 

string Property NINODE_LEFT_FOREARMTWIST_1 = "NPC L ForearmTwist1 [LLt1]" AutoReadOnly

string Property NINODE_RIGHT_FOREARMTWIST_1 = "NPC R ForearmTwist1 [RLt1]" AutoReadOnly

string Property NINODE_LEFT_FOREARMTWIST_2 = "NPC L ForearmTwist2 [LLt2]" AutoReadOnly

string Property NINODE_RIGHT_FOREARMTWIST_2 = "NPC R ForearmTwist2 [RLt2]" AutoReadOnly

 

string Property NINODE_TAIL01 = "TailBone01" AutoReadOnly

string Property NINODE_TAIL01_CME = "CME TailBone01" AutoReadOnly

string Property NINODE_TAIL02 = "TailBone02" AutoReadOnly

string Property NINODE_TAIL02_CME = "CME TailBone02" AutoReadOnly

string Property NINODE_TAIL03 = "TailBone03" AutoReadOnly

string Property NINODE_TAIL03_CME = "CME TailBone03" AutoReadOnly

string Property NINODE_TAIL04 = "TailBone04" AutoReadOnly

string Property NINODE_TAIL04_CME = "CME TailBone05" AutoReadOnly

string Property NINODE_TAIL05 = "TailBone06" AutoReadOnly

 

string Property NINODE_TAIL_PELVIS = "CME Tail Pelvis [Pelv]" AutoReadOnly

string Property NINODE_TAIL_SPINE = "CME Tail Spine [spn0]" AutoReadOnly

string Property NINODE_TAIL_LEFT_THIGH = "CME Tail L Thigh [LThg]" AutoReadOnly

string Property NINODE_TAIL_RIGHT_THIGH = "CME Tail R Thigh [RThg]" AutoReadOnly

 

string Property NINODE_LEFT_BREAST = "NPC L Breast" AutoReadOnly

string Property NINODE_RIGHT_BREAST = "NPC R Breast" AutoReadOnly

string Property NINODE_LEFT_BUTT = "NPC L Butt" AutoReadOnly

string Property NINODE_RIGHT_BUTT = "NPC R Butt" AutoReadOnly

string Property NINODE_LEFT_BREAST_FORWARD = "NPC L Breast01" AutoReadOnly

string Property NINODE_RIGHT_BREAST_FORWARD = "NPC R Breast01" AutoReadOnly

 

; Custom Properties

float _height = 1.0

 

float _head = 1.0

float _neck = 1.0

float _headPos = 0.0

 

float _Shoulders = 1.0

float _Chest = 1.0

Float _upperWaist = 1.0

float _waist = 1.0

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

float _Pelvis = 1.0

float _ThighGap = 1.0

 

float _leftThigh = 1.0

float _rightThigh = 1.0

float _leftCalf = 1.0

float _rightCalf = 1.0

float _leftFoot = 1.0

float _rightFoot = 1.0

float _leftClavicle = 1.0

float _rightClavicle = 1.0

float _leftUpperArm = 1.0

float _rightUpperArm = 1.0

float _leftHand = 1.0

float _rightHand = 1.0

 

float _leftBicep = 1.0

float _rightBicep = 1.0

float _leftBicep2 = 1.0

float _rightBicep2 = 1.0

 

float _leftForearmTwist1 = 1.0

float _rightForearmTwist1 = 1.0

float _leftForearmTwist2 = 1.0

float _rightForearmTwist2 = 1.0

 

float _leftBreast = 1.0

float _rightBreast = 1.0

float _leftBreastF = 1.0

float _rightBreastF = 1.0

float _leftButt = 1.0

float _rightButt = 1.0

 

float _tail01 = 1.0

float _tail02 = 1.0

float _tail03 = 1.0

float _tail04 = 1.0

float _tail05 = 1.0

float _tail_posX = 0.0

float _tail_posY = 0.0

float _tail_posZ = 0.0

 

bool hasInitialized = false ; For one time init, used for loading data inside OnGameLoad instead of Init (Unsafe)

 

Event OnStartup()

parent.OnStartup()

RegisterForModEvent("RSM_RequestNodeSave", "OnSaveScales")

EndEvent

 

Event OnSaveScales(string eventName, string strArg, float numArg, Form formArg)

SavePlayerNodeScales(_playerActor)

EndEvent

 

Event OnReloadSettings(Actor player, ActorBase playerBase)

If !hasInitialized ; Init script values from current player

SavePlayerNodeScales(player)

hasInitialized = true

Else

LoadPlayerNodeScales(player)

Endif

EndEvent

 

Function LoadPlayerNodeScales(Actor player)

Normalize()

 

If HEIGHT_ENABLED ; Load height only if enabled

ApplyNodeScale(player, NINODE_NPC, _height)

Endif

ApplyNodeScale(player, NINODE_HEAD, _head)

If NetImmerse.HasNode(player, NINODE_NECK_CME, false)

ApplyNodePositionZ(player, NINODE_NECK_CME, _headPos)

Endif

 

 

 

 

 

 

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false)

ApplyNodeScale(player, NINODE_SPINE, _waist)

ApplyNodeScale(player, NINODE_SPINE_CME, (1/_waist))

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

ApplyNodeScale(player, NINODE_SPINE_1, _upperWaist)

ApplyNodeScale(player, NINODE_SPINE_1_CME, (1/_upperWaist))

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

ApplyNodeScale(player, NINODE_SPINE_2, _Chest)

ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

ApplyNodeScale(player, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))

ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))

ApplyNodeScale(player, NINODE_NECK, (_neck/1.0))

Endif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NINODE_PELVIS_CME

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_PELVIS, _Pelvis)

ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

Endif

 

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false) && NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false) && NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

Endif

 

 

 

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(player, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(player, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

Endif

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)

ApplyNodeScale(player, NINODE_LEFT_CALF, _leftCalf)

ApplyNodeScale(player, NINODE_LEFT_CALF_CME, (1/_leftCalf))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_CALF, _rightCalf)

ApplyNodeScale(player, NINODE_RIGHT_CALF_CME, (1/_rightCalf))

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)

ApplyNodeScale(player, NINODE_LEFT_FOOT, _leftFoot)

ApplyNodeScale(player, NINODE_LEFT_FOOT_CME, (1/_leftFoot))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_FOOT, _rightFoot)

ApplyNodeScale(player, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)

ApplyNodeScale(player, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)

ApplyNodeScale(player, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)

ApplyNodeScale(player, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)

ApplyNodeScale(player, NINODE_LEFT_UPPERARM, _leftUpperArm)

ApplyNodeScale(player, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_UPPERARM, _rightUpperArm)

ApplyNodeScale(player, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))

Endif

If player.GetActorBase().GetSex() == 1

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

ApplyNodeScale3rdPerson(player, NINODE_LEFT_HAND, _leftHand * 0.8517)

ApplyNodeScale1stPerson(player, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

ApplyNodeScale3rdPerson(player, NINODE_RIGHT_HAND, _rightHand * 0.8517)

ApplyNodeScale1stPerson(player, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))

Endif

Else

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

ApplyNodeScale(player, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(player, NINODE_LEFT_HAND_CME, (1/_leftHand))

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

ApplyNodeScale(player, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(player, NINODE_RIGHT_HAND_CME, (1/_rightHand))

Endif

Endif

ApplyNodeScale(player, NINODE_LEFT_BICEP, _leftBicep)

ApplyNodeScale(player, NINODE_RIGHT_BICEP, _rightBicep)

ApplyNodeScale(player, NINODE_LEFT_BICEP_2, _leftBicep2)

ApplyNodeScale(player, NINODE_RIGHT_BICEP_2, _rightBicep2)

ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)

ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)

ApplyNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)

ApplyNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)

ApplyNodeScale(player, NINODE_LEFT_BREAST, _leftBreast)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)

ApplyNodeScale(player, NINODE_RIGHT_BREAST, _rightBreast)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)

ApplyNodeScale(player, NINODE_LEFT_BUTT, _leftButt)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)

ApplyNodeScale(player, NINODE_RIGHT_BUTT, _rightButt)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)

ApplyNodeScale(player, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)

ApplyNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)

Endif

If BEAST_ENABLED

If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false) && NetImmerse.HasNode(player, NINODE_TAIL05, false)

ApplyNodeScale(player, NINODE_TAIL01, _tail01)

ApplyNodeScale(player, NINODE_TAIL01_CME, (1/_tail01))

ApplyNodeScale(player, NINODE_TAIL02, _tail02)

ApplyNodeScale(player, NINODE_TAIL02_CME, (1/_tail02))

ApplyNodeScale(player, NINODE_TAIL03, _tail03)

ApplyNodeScale(player, NINODE_TAIL03_CME, (1/_tail03))

ApplyNodeScale(player, NINODE_TAIL04, _tail04)

ApplyNodeScale(player, NINODE_TAIL04_CME, (1/_tail04))

ApplyNodeScale(player, NINODE_TAIL05, _tail05)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)

ApplyNodePositionX(player, NINODE_TAIL_PELVIS, _tail_posX)

ApplyNodePositionX(player, NINODE_TAIL_SPINE, _tail_posX)

ApplyNodePositionX(player, NINODE_TAIL_LEFT_THIGH, _tail_posX)

ApplyNodePositionX(player, NINODE_TAIL_RIGHT_THIGH, _tail_posX)

ApplyNodePositionY(player, NINODE_TAIL_PELVIS, _tail_posY)

ApplyNodePositionY(player, NINODE_TAIL_SPINE, _tail_posY)

ApplyNodePositionY(player, NINODE_TAIL_LEFT_THIGH, _tail_posY)

ApplyNodePositionY(player, NINODE_TAIL_RIGHT_THIGH, _tail_posY)

ApplyNodePositionZ(player, NINODE_TAIL_PELVIS, _tail_posZ)

ApplyNodePositionZ(player, NINODE_TAIL_SPINE, _tail_posZ)

ApplyNodePositionZ(player, NINODE_TAIL_LEFT_THIGH, _tail_posZ)

ApplyNodePositionZ(player, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)

EndIf

EndIf

EndFunction

 

Event On3DLoaded(ObjectReference akRef)

OnReloadSettings(_playerActor, _playerActorBase)

EndEvent

 

Event OnCellLoaded(ObjectReference akRef)

LoadPlayerNodeScales(_playerActor)

EndEvent

 

; Add Custom Warpaint here

Event OnWarpaintRequest()

AddWarpaint("$Beauty Mark 01", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_01.dds")

AddWarpaint("$Beauty Mark 02", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_02.dds")

AddWarpaint("$Beauty Mark 03", "Actors\\Character\\Character Assets\\TintMasks\\BeautyMark_03.dds")

AddWarpaint("$Dragon Tattoo 01", "Actors\\Character\\Character Assets\\TintMasks\\DragonTattoo_01.dds")

EndEvent

 

Function Normalize()

if _height == 0.0

_height = 1.0

Endif

if _head == 0.0

_head = 1.0

Endif

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

If _Shoulders == 0.0

_Shoulders = 1.0

Endif

If _Chest == 0.0

_Chest = 1.0

Endif

If _upperWaist == 0.0

_upperWaist = 1.0

Endif

If _waist == 0.0

_waist = 1.0

Endif

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If _Pelvis == 0.0

_Pelvis = 1.0

Endif

If _ThighGap == 0.0

_ThighGap = 1.0

Endif

If _leftThigh == 0.0

_leftThigh = 1.0

Endif

If _rightThigh == 0.0

_rightThigh = 1.0

Endif

If _leftCalf == 0.0

_leftCalf = 1.0

Endif

If _rightCalf == 0.0

_rightCalf = 1.0

Endif

If _rightFoot == 0.0

_rightFoot = 1.0

Endif

If _rightFoot == 0.0

_rightFoot = 1.0

Endif

If _leftClavicle == 0.0

_leftClavicle = 1.0

Endif

If _rightClavicle == 0.0

_rightClavicle = 1.0

Endif

If _leftUpperArm == 0.0

_leftUpperArm = 1.0

Endif

If _rightUpperArm == 0.0

_rightUpperArm = 1.0

Endif

If _leftHand == 0.0

_leftHand = 1.0

Endif

If _rightHand == 0.0

_rightHand = 1.0

Endif

if _leftBicep == 0.0

_leftBicep = 1.0

Endif

if _rightBicep == 0.0

_rightBicep = 1.0

Endif

if _leftBicep2 == 0.0

_leftBicep2 = 1.0

Endif

if _rightBicep2 == 0.0

_rightBicep2 = 1.0

Endif

if _leftForearmTwist1 == 0.0

_leftForearmTwist1 = 1.0

Endif

if _rightForearmTwist1 == 0.0

_rightForearmTwist1 = 1.0

Endif

if _leftForearmTwist2 == 0.0

_leftForearmTwist2 = 1.0

Endif

if _rightForearmTwist2 == 0.0

_rightForearmTwist2 = 1.0

Endif

if _leftBreast == 0.0

_leftBreast = 1.0

Endif

if _rightBreast == 0.0

_rightBreast = 1.0

Endif

if _leftBreastF == 0.0

_leftBreastF = 1.0

Endif

if _rightBreastF == 0.0

_rightBreastF = 1.0

Endif

if _leftButt == 0.0

_leftButt = 1.0

Endif

if _rightButt == 0.0

_rightButt = 1.0

Endif

EndFunction

 

Function SavePlayerNodeScales(Actor player)

If NetImmerse.HasNode(player, NINODE_NPC, false)

_height = NetImmerse.GetNodeScale(player, NINODE_NPC, false)

Else

_height = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_HEAD, false)

_head = NetImmerse.GetNodeScale(player, NINODE_HEAD, false)

Else

_head = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_NECK_CME, false)

_headPos = NetImmerse.GetRelativeNodePositionZ(player, NINODE_NECK_CME, NINODE_NECK, false)

Else

_headPos = 0.0

Endif

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

_waist = NetImmerse.GetNodeScale(player, NINODE_SPINE, false)

Else

_waist = 1.0

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

_upperWaist = NetImmerse.GetNodeScale(player, NINODE_SPINE_1, false)

Else

_upperWaist = 1.0

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

_Chest = NetImmerse.GetNodeScale(player, NINODE_SPINE_2, false)

Else

_Chest = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

_Shoulders = NetImmerse.GetNodeScale(player, NINODE_SPINE_2_CME, false) /_Chest

Else

_Shoulders = 1.0

Endif

 

 

 

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If NetImmerse.HasNode(player, NINODE_PELVIS, false)

_Pelvis = NetImmerse.GetNodeScale(player, NINODE_PELVIS, false)

Else

_Pelvis = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)

_ThighGap = NetImmerse.GetNodeScale(player, NINODE_PELVIS_CME, false)/_Pelvis

Else

_ThighGap = 1.0

Endif

 

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)

_leftThigh = NetImmerse.GetNodeScale(player, NINODE_LEFT_THIGH, false)

Else

_leftThigh = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

_rightThigh = NetImmerse.GetNodeScale(player, NINODE_RIGHT_THIGH, false)

Else

_rightThigh = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)

_leftCalf = NetImmerse.GetNodeScale(player, NINODE_LEFT_CALF, false)

Else

_leftCalf = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)

_rightCalf = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CALF, false)

Else

_rightCalf = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)

_leftFoot = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOOT, false)

Else

_leftFoot = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)

_rightFoot = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOOT, false)

Else

_rightFoot = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)

_leftClavicle = NetImmerse.GetNodeScale(player, NINODE_LEFT_CLAVICLE, false)/1.0

Else

_leftClavicle = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)

_rightClavicle = NetImmerse.GetNodeScale(player, NINODE_RIGHT_CLAVICLE, false)/1.0

Else

_rightClavicle = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)

_leftUpperArm = NetImmerse.GetNodeScale(player, NINODE_LEFT_UPPERARM, false)

Else

_leftUpperArm = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)

_rightUpperArm = NetImmerse.GetNodeScale(player, NINODE_RIGHT_UPPERARM, false)

Else

_rightUpperArm = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)

Else

_leftHand = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)

Else

_rightHand = 1.0

Endif

If player.GetActorBase().GetSex() == 1

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false) / 0.8517

Else

_leftHand = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false) / 0.8517

Else

_rightHand = 1.0

Endif

Else

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

_leftHand = NetImmerse.GetNodeScale(player, NINODE_LEFT_HAND, false)

Else

_leftHand = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

_rightHand = NetImmerse.GetNodeScale(player, NINODE_RIGHT_HAND, false)

Else

_rightHand = 1.0

Endif

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BICEP, false)

_leftBicep = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP, false)

Else

_leftBicep = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP, false)

_rightBicep = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP, false)

Else

_rightBicep = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BICEP_2, false)

_leftBicep2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_BICEP_2, false)

Else

_leftBicep2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BICEP_2, false)

_rightBicep2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BICEP_2, false)

Else

_rightBicep2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_1, false)

_leftForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_1, false)

Else

_leftForearmTwist1 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_1, false)

_rightForearmTwist1 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_1, false)

Else

_rightForearmTwist1 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOREARMTWIST_2, false)

_leftForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_LEFT_FOREARMTWIST_2, false)

Else

_leftForearmTwist2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOREARMTWIST_2, false)

_rightForearmTwist2 = NetImmerse.GetNodeScale(player, NINODE_RIGHT_FOREARMTWIST_2, false)

Else

_rightForearmTwist2 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)

_leftBreast = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST, false)

Else

_leftBreast = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)

_rightBreast = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST, false)

Else

_rightBreast = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)

_leftBreastF = NetImmerse.GetNodeScale(player, NINODE_LEFT_BREAST_FORWARD, false)

Else

_leftBreastF = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)

_rightBreastF = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BREAST_FORWARD, false)

Else

_rightBreastF = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)

_leftButt = NetImmerse.GetNodeScale(player, NINODE_LEFT_BUTT, false)

Else

_leftButt = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)

_rightButt = NetImmerse.GetNodeScale(player, NINODE_RIGHT_BUTT, false)

Else

_rightButt = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)

_tail01 = NetImmerse.GetNodeScale(player, NINODE_TAIL01, false)

Else

_tail01 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)

_tail02 = NetImmerse.GetNodeScale(player, NINODE_TAIL02, false)

Else

_tail02 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)

_tail03 = NetImmerse.GetNodeScale(player, NINODE_TAIL03, false)

Else

_tail03 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)

_tail04 = NetImmerse.GetNodeScale(player, NINODE_TAIL04, false)

Else

_tail04 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL05, false)

_tail05 = NetImmerse.GetNodeScale(player, NINODE_TAIL05, false)

Else

_tail05 = 1.0

Endif

If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)

_tail_posX = NetImmerse.GetRelativeNodePositionX(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)

_tail_posY = NetImmerse.GetRelativeNodePositionY(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)

_tail_posZ = NetImmerse.GetRelativeNodePositionZ(player, NINODE_TAIL_PELVIS, NINODE_PELVIS_CME, false)

Else

_tail_posX = 0.0

_tail_posY = 0.0

_tail_posZ = 0.0

Endif

 

Normalize()

EndFunction

 

Event OnInitializeMenu(Actor player, ActorBase playerBase)

SavePlayerNodeScales(player)

EndEvent

 

Event OnResetMenu(Actor player, ActorBase playerBase)

_height = 1.0

 

_head = 1.0

_neck = 1.0

_headPos = 0.0

 

_Shoulders = 1.0

_Chest = 1.0

_upperWaist =1.0

_waist = 1.0

; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

_Pelvis = 1.0

_ThighGap = 1.0

_leftThigh = 1.0

_rightThigh = 1.0

_leftCalf = 1.0

_rightCalf = 1.0

_leftFoot = 1.0

_rightFoot = 1.0

_leftClavicle = 1.0

_rightClavicle = 1.0

_leftUpperArm = 1.0

_rightUpperArm = 1.0

_leftHand = 1.0

_rightHand = 1.0

 

_leftBicep = 1.0

_rightBicep = 1.0

_leftBicep2 = 1.0

_rightBicep2 = 1.0

_leftForearmTwist1 = 1.0

_rightForearmTwist1 = 1.0

_leftForearmTwist2 = 1.0

_rightForearmTwist2 = 1.0

 

_leftBreast = 1.0

_rightBreast = 1.0

_leftBreastF = 1.0

_rightBreastF = 1.0

_leftButt = 1.0

_rightButt = 1.0

 

_tail01 = 1.0

_tail02 = 1.0

_tail03 = 1.0

_tail04 = 1.0

_tail05 = 1.0

_tail_posX = 0.0

_tail_posY = 0.0

_tail_posZ = 0.0

 

LoadPlayerNodeScales(player)

EndEvent

 

; Add Custom sliders here

Event OnSliderRequest(Actor player, ActorBase playerBase, Race actorRace, bool isFemale)

If HEIGHT_ENABLED

AddSlider("$Height", CATEGORY_BODY, "ChangeHeight", 0.25, 2.00, 0.01, _height)

Endif

If NetImmerse.HasNode(player, NINODE_HEAD, false)

AddSlider("$Head", CATEGORY_HEAD, "ChangeHeadSize", 0.25, 2.00, 0.01, _head)

Endif

If NetImmerse.HasNode(player, NINODE_NECK_CME, false)

AddSlider("$HeadPos", CATEGORY_HEAD, "ChangeHeadPos", -4.00, 4.00, 0.01, _headPos)

Endif

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

AddSlider("$Shoulders", CATEGORY_BODY, "ChangeShouldersSize", 0.50, 2.00, 0.01, _Shoulders)

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)&& NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

AddSlider("$Chest", CATEGORY_BODY, "ChangeChestSize", 0.50, 2.00, 0.01, _Chest)

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_2_CME, false)

AddSlider("$upperWaist", CATEGORY_BODY, "ChangeUpperWaistSize", 0.50, 2.00, 0.01, _upperWaist)

Endif

 

If NetImmerse.HasNode(player, NINODE_SPINE_CME, false) && NetImmerse.HasNode(player, NINODE_SPINE_1_CME, false)

AddSlider("$Waist", CATEGORY_BODY, "ChangeWaistSize", 0.50, 2.00, 0.01, _waist)

Endif

 

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!NINODE_PELVIS_CME

 

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)

AddSlider("$Pelvis", CATEGORY_BODY, "ChangePelvisSize", 0.50, 2.00, 0.01, _Pelvis)

Endif

If NetImmerse.HasNode(player, NINODE_PELVIS_CME, false)&& NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)&& NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

AddSlider("$ThighGap", CATEGORY_BODY, "ChangeThighGapSize", 0.50, 2.00, 0.01, _ThighGap)

Endif

 

 

If NetImmerse.HasNode(player, NINODE_LEFT_THIGH_CME, false)

AddSlider("$Left Thigh", CATEGORY_BODY, "ChangeLeftThighSize", 0.50, 2.00, 0.01, _leftThigh)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_THIGH_CME, false)

AddSlider("$Right Thigh", CATEGORY_BODY, "ChangeRightThighSize", 0.50, 2.00, 0.01, _rightThigh)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CALF_CME, false)

AddSlider("$Left Calf", CATEGORY_BODY, "ChangeLeftCalfSize", 0.90, 1.10, 0.01, _leftCalf)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CALF_CME, false)

AddSlider("$Right Calf", CATEGORY_BODY, "ChangeRightCalfSize", 0.90, 1.10, 0.01, _rightCalf)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_FOOT_CME, false)

AddSlider("$Left Foot", CATEGORY_BODY, "ChangeLeftFootSize", 0.90, 1.10, 0.01, _leftFoot)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_FOOT_CME, false)

AddSlider("$Right Foot", CATEGORY_BODY, "ChangeRightFootSize", 0.90, 1.10, 0.01, _rightFoot)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_CLAVICLE_CME, false)

AddSlider("$Left Clavicle", CATEGORY_BODY, "ChangeLeftClavicleSize", 0.80, 1.20, 0.01, _leftClavicle)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_CLAVICLE_CME, false)

AddSlider("$Right Clavicle", CATEGORY_BODY, "ChangeRightClavicleSize", 0.80, 1.20, 0.01, _rightClavicle)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_UPPERARM_CME, false)

AddSlider("$Left Upper Arm", CATEGORY_BODY, "ChangeLeftUpperArmSize", 0.80, 1.20, 0.01, _leftUpperArm)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_UPPERARM_CME, false)

AddSlider("$Right Upper Arm", CATEGORY_BODY, "ChangeRightUpperArmSize", 0.80, 1.20, 0.01, _rightUpperArm)

Endif

IF isFemale == true

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandFSize", 0.60, 1.40, 0.01, _leftHand)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandFSize", 0.60, 1.40, 0.01, _rightHand)

Endif

Else

If NetImmerse.HasNode(player, NINODE_LEFT_HAND_CME, false)

AddSlider("$Left Hand", CATEGORY_BODY, "ChangeLeftHandSize", 0.60, 1.40, 0.01, _leftHand)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_HAND_CME, false)

AddSlider("$Right Hand", CATEGORY_BODY, "ChangeRighHandSize", 0.60, 1.40, 0.01, _rightHand)

Endif

EndIf

AddSlider("$Left Biceps", CATEGORY_BODY, "ChangeLeftBiceps", 0.60, 1.40, 0.01, _leftBicep)

AddSlider("$Right Biceps", CATEGORY_BODY, "ChangeRightBiceps", 0.60, 1.40, 0.01, _rightBicep)

AddSlider("$Left Biceps 2", CATEGORY_BODY, "ChangeLeftBiceps2", 0.60, 1.40, 0.01, _leftBicep2)

AddSlider("$Right Biceps 2", CATEGORY_BODY, "ChangeRightBiceps2", 0.60, 1.40, 0.01, _rightBicep2)

AddSlider("$Left ForearmTwist", CATEGORY_BODY, "ChangeLeftForearmTwist", 0.60, 1.40, 0.01, _leftForearmTwist1)

AddSlider("$Right ForearmTwist", CATEGORY_BODY, "ChangeRightForearmTwist", 0.60, 1.40, 0.01, _rightForearmTwist1)

AddSlider("$Left ForearmTwist 2", CATEGORY_BODY, "ChangeLeftForearmTwist2", 0.60, 1.40, 0.01, _leftForearmTwist2)

AddSlider("$Right ForearmTwist 2", CATEGORY_BODY, "ChangeRightForearmTwist2", 0.60, 1.40, 0.01, _rightForearmTwist2)

If isFemale == true

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST, false)

AddSlider("$Left Breast", CATEGORY_BODY, "ChangeLeftBreast", 0.1, 3.00, 0.01, _leftBreast)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST, false)

AddSlider("$Right Breast", CATEGORY_BODY, "ChangeRightBreast", 0.1, 3.00, 0.01, _rightBreast)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BREAST_FORWARD, false)

AddSlider("$Left Breast Curve", CATEGORY_BODY, "ChangeLeftBreastCurve", 0.1, 3.00, 0.01, _leftBreastF)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BREAST_FORWARD, false)

AddSlider("$Right Breast Curve", CATEGORY_BODY, "ChangeRightBreastCurve", 0.1, 3.00, 0.01, _rightBreastF)

Endif

If NetImmerse.HasNode(player, NINODE_LEFT_BUTT, false)

AddSlider("$Left Glute", CATEGORY_BODY, "ChangeLeftButt", 0.1, 3.00, 0.01, _leftButt)

Endif

If NetImmerse.HasNode(player, NINODE_RIGHT_BUTT, false)

AddSlider("$Right Glute", CATEGORY_BODY, "ChangeRightButt", 0.1, 3.00, 0.01, _rightButt)

Endif

Endif

If BEAST_ENABLED

If NetImmerse.HasNode(player, NINODE_TAIL01, false) && NetImmerse.HasNode(player, NINODE_TAIL01_CME, false)

AddSlider("$Tail01", CATEGORY_BODY, "ChangeTail01Size", 0.60, 1.40, 0.01, _tail01)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL02, false) && NetImmerse.HasNode(player, NINODE_TAIL02_CME, false)

AddSlider("$Tail02", CATEGORY_BODY, "ChangeTail02Size", 0.60, 1.40, 0.01, _tail02)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL03, false) && NetImmerse.HasNode(player, NINODE_TAIL03_CME, false)

AddSlider("$Tail03", CATEGORY_BODY, "ChangeTail03Size", 0.60, 1.40, 0.01, _tail03)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL04, false) && NetImmerse.HasNode(player, NINODE_TAIL04_CME, false)

AddSlider("$Tail04", CATEGORY_BODY, "ChangeTail04Size", 0.60, 1.40, 0.01, _tail04)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL05, false)

AddSlider("$Tail05", CATEGORY_BODY, "ChangeTail05Size", 0.60, 1.40, 0.01, _tail05)

Endif

If NetImmerse.HasNode(player, NINODE_TAIL_PELVIS, false) && NetImmerse.HasNode(player, NINODE_TAIL_SPINE, false) && NetImmerse.HasNode(player, NINODE_TAIL_LEFT_THIGH, false) && NetImmerse.HasNode(player, NINODE_TAIL_RIGHT_THIGH, false)

AddSlider("$Tail Pos X", CATEGORY_BODY, "ChangeTailPosX", -10.00, 10.00, 0.01, _tail_posX)

AddSlider("$Tail Pos Y", CATEGORY_BODY, "ChangeTailPosY", -10.00, 10.00, 0.01, _tail_posY)

AddSlider("$Tail Pos Z", CATEGORY_BODY, "ChangeTailPosZ", -10.00, 10.00, 0.01, _tail_posZ)

Endif

Endif

EndEvent

 

Event OnSliderChanged(string callback, float value)

If callback == "ChangeHeight"

_height = value

ApplyNodeScale(_playerActor, NINODE_NPC, _height)

ElseIf callback == "ChangeHeadSize"

_head = value

ApplyNodeScale(_playerActor, NINODE_HEAD, _head)

ElseIf callback == "ChangeHeadPos"

_headPos = value

ApplyNodePositionZ(_playerActor, NINODE_NECK_CME, _headPos)

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

 

ElseIf callback == "ChangeWaistSize"

_waist = value

ApplyNodeScale(_playerActor, NINODE_SPINE, _waist)

ApplyNodeScale(_playerActor, NINODE_SPINE_CME, (1/_waist))

ElseIf callback == "ChangeUpperWaistSize"

_upperWaist = value

ApplyNodeScale(_playerActor, NINODE_SPINE_1, _upperWaist)

ApplyNodeScale(_playerActor, NINODE_SPINE_1_CME, (1/_upperWaist))

ElseIf callback == "ChangeChestSize"

_Chest = value

ApplyNodeScale(_playerActor, NINODE_SPINE_2, _Chest)

ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

ElseIf callback == "ChangeShouldersSize"

_Shoulders = value

ApplyNodeScale(_playerActor, NINODE_SPINE_2_CME, (_Shoulders/_Chest))

ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, (_leftClavicle/1.0))

ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, (_rightClavicle/1.0))

ApplyNodeScale(_playerActor, NINODE_NECK, (_neck/1.0))

 

 

 

 

 

 

 

 

 

 

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ElseIf callback == "ChangePelvisSize"

_Pelvis = value

ApplyNodeScale(_playerActor, NINODE_PELVIS, _Pelvis)

ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

ElseIf callback == "ChangeThighGapSize"

_ThighGap = value

ApplyNodeScale(_playerActor, NINODE_PELVIS_CME, (_ThighGap/_Pelvis))

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

 

 

 

 

ElseIf callback == "ChangeLeftThighSize"

_leftThigh = value

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH, _leftThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_LEFT_THIGH_CME, (1/(_leftThigh)))

ElseIf callback == "ChangeRightThighSize"

_rightThigh = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH, _rightThigh/_ThighGap)

ApplyNodeScale(_playerActor, NINODE_RIGHT_THIGH_CME, (1/(_rightThigh)))

ElseIf callback == "ChangeLeftCalfSize"

_leftCalf = value

ApplyNodeScale(_playerActor, NINODE_LEFT_CALF, _leftCalf)

ApplyNodeScale(_playerActor, NINODE_LEFT_CALF_CME, (1/_leftCalf))

ElseIf callback == "ChangeRightCalfSize"

_rightCalf = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF, _rightCalf)

ApplyNodeScale(_playerActor, NINODE_RIGHT_CALF_CME, (1/_rightCalf))

ElseIf callback == "ChangeLeftFootSize"

_leftFoot = value

ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT, _leftFoot)

ApplyNodeScale(_playerActor, NINODE_LEFT_FOOT_CME, (1/_leftFoot))

ElseIf callback == "ChangeRightFootSize"

_rightFoot = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT, _rightFoot)

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOOT_CME, (1/_rightFoot))

ElseIf callback == "ChangeLeftClavicleSize"

_leftClavicle = value

ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE, _leftClavicle/1.0)

ApplyNodeScale(_playerActor, NINODE_LEFT_CLAVICLE_CME, (1/_leftClavicle))

ElseIf callback == "ChangeRightClavicleSize"

_rightClavicle = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE, _rightClavicle/1.0)

ApplyNodeScale(_playerActor, NINODE_RIGHT_CLAVICLE_CME, (1/_rightClavicle))

ElseIf callback == "ChangeLeftUpperArmSize"

_leftUpperArm = value

ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM, _leftUpperArm)

ApplyNodeScale(_playerActor, NINODE_LEFT_UPPERARM_CME, (1/_leftUpperArm/_Shoulders))

ElseIf callback == "ChangeRightUpperArmSize"

_rightUpperArm = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM, _rightUpperArm)

ApplyNodeScale(_playerActor, NINODE_RIGHT_UPPERARM_CME, (1/_rightUpperArm/_Shoulders))

ElseIf callback == "ChangeLeftHandFSize"

_leftHand = value

ApplyNodeScale3rdPerson(_playerActor, NINODE_LEFT_HAND, _leftHand * 0.8517)

ApplyNodeScale1stPerson(_playerActor, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))

ElseIf callback == "ChangeRighHandFSize"

_rightHand = value

ApplyNodeScale3rdPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand * 0.8517)

ApplyNodeScale1stPerson(_playerActor, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))

ElseIf callback == "ChangeLeftHandSize"

_leftHand = value

ApplyNodeScale(_playerActor, NINODE_LEFT_HAND, _leftHand)

ApplyNodeScale(_playerActor, NINODE_LEFT_HAND_CME, (1/_leftHand))

ElseIf callback == "ChangeRighHandSize"

_rightHand = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND, _rightHand)

ApplyNodeScale(_playerActor, NINODE_RIGHT_HAND_CME, (1/_rightHand))

Elseif callback == "ChangeLeftBiceps"

_leftBicep = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP, _leftBicep)

Elseif callback == "ChangeRightBiceps"

_rightBicep = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP, _rightBicep)

Elseif callback == "ChangeLeftBiceps2"

_leftBicep2 = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BICEP_2, _leftBicep2)

Elseif callback == "ChangeRightBiceps2"

_rightBicep2 = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BICEP_2, _rightBicep2)

Elseif callback == "ChangeLeftForearmTwist"

_leftForearmTwist1 = value

ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_1, _leftForearmTwist1)

Elseif callback == "ChangeRightForearmTwist"

_rightForearmTwist1 = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_1, _rightForearmTwist1)

Elseif callback == "ChangeLeftForearmTwist2"

_leftForearmTwist2 = value

ApplyNodeScale(_playerActor, NINODE_LEFT_FOREARMTWIST_2, _leftForearmTwist2)

Elseif callback == "ChangeRightForearmTwist2"

_rightForearmTwist2 = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_FOREARMTWIST_2, _rightForearmTwist2)

Elseif callback == "ChangeLeftBreast"

_leftBreast = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST, _leftBreast)

Elseif callback == "ChangeRightBreast"

_rightBreast = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST, _rightBreast)

Elseif callback == "ChangeLeftBreastCurve"

_leftBreastF = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BREAST_FORWARD, _leftBreastF)

Elseif callback == "ChangeRightBreastCurve"

_rightBreastF = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BREAST_FORWARD, _rightBreastF)

Elseif callback == "ChangeLeftButt"

_leftButt = value

ApplyNodeScale(_playerActor, NINODE_LEFT_BUTT, _leftButt)

Elseif callback == "ChangeRightButt"

_rightButt = value

ApplyNodeScale(_playerActor, NINODE_RIGHT_BUTT, _rightButt)

ElseIf callback == "ChangeTail01Size"

_tail01 = value

ApplyNodeScale(_playerActor, NINODE_TAIL01, _tail01)

ApplyNodeScale(_playerActor, NINODE_TAIL01_CME, (1/_tail01))

ElseIf callback == "ChangeTail02Size"

_tail02 = value

ApplyNodeScale(_playerActor, NINODE_TAIL02, _tail02)

ApplyNodeScale(_playerActor, NINODE_TAIL02_CME, (1/_tail02))

ElseIf callback == "ChangeTail03Size"

_tail03 = value

ApplyNodeScale(_playerActor, NINODE_TAIL03, _tail03)

ApplyNodeScale(_playerActor, NINODE_TAIL03_CME, (1/_tail03))

ElseIf callback == "ChangeTail04Size"

_tail04 = value

ApplyNodeScale(_playerActor, NINODE_TAIL04, _tail04)

ApplyNodeScale(_playerActor, NINODE_TAIL04_CME, (1/_tail04))

ElseIf callback == "ChangeTail05Size"

_tail05 = value

ApplyNodeScale(_playerActor, NINODE_TAIL05, _tail05)

ElseIf callback == "ChangeTailPosX"

_tail_posX = value

ApplyNodePositionX(_playerActor, NINODE_TAIL_PELVIS, _tail_posX)

ApplyNodePositionX(_playerActor, NINODE_TAIL_SPINE, _tail_posX)

ApplyNodePositionX(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posX)

ApplyNodePositionX(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posX)

ElseIf callback == "ChangeTailPosY"

_tail_posY = value

ApplyNodePositionY(_playerActor, NINODE_TAIL_PELVIS, _tail_posY)

ApplyNodePositionY(_playerActor, NINODE_TAIL_SPINE, _tail_posY)

ApplyNodePositionY(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posY)

ApplyNodePositionY(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posY)

ElseIf callback == "ChangeTailPosZ"

_tail_posZ = value

ApplyNodePositionZ(_playerActor, NINODE_TAIL_PELVIS, _tail_posZ)

ApplyNodePositionZ(_playerActor, NINODE_TAIL_SPINE, _tail_posZ)

ApplyNodePositionZ(_playerActor, NINODE_TAIL_LEFT_THIGH, _tail_posZ)

ApplyNodePositionZ(_playerActor, NINODE_TAIL_RIGHT_THIGH, _tail_posZ)

Endif

EndEvent

 

Function ApplyNodeScale(Actor _playerActor, String _node, float _scale)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)

EndFunction

 

Function ApplyNodeScale1stPerson(Actor _playerActor, String _node, float _scale)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, true)

EndFunction

 

Function ApplyNodeScale3rdPerson(Actor _playerActor, String _node, float _scale)

NetImmerse.SetNodeScale(_playerActor, _node, _scale, false)

EndFunction

 

Function ApplyNodePositionX(Actor _playerActor, String _node, float _position)

NetImmerse.SetNodePositionX(_playerActor, _node, _position, false)

NetImmerse.SetNodePositionX(_playerActor, _node, _position, true)

EndFunction

 

Function ApplyNodePositionY(Actor _playerActor, String _node, float _position)

NetImmerse.SetNodePositionY(_playerActor, _node, _position, false)

NetImmerse.SetNodePositionY(_playerActor, _node, _position, true)

EndFunction

 

Function ApplyNodePositionZ(Actor _playerActor, String _node, float _position)

NetImmerse.SetNodePositionZ(_playerActor, _node, _position, false)

NetImmerse.SetNodePositionZ(_playerActor, _node, _position, true)

EndFunction

 

 

yes please! thigh gap especially!

 

 

Link to comment

I have a question about comments in the OP, it says to disable the racemenuplugin.esp and just use the racemenupluginxpmse.esp. My questions is after installing this skeleton I don't have that esp, so my question is. Has something changed or did I install something wrong?

Link to comment

QUESTION / IDEA: How hard/doable would be to add a couple sliders for hair, that allows you to move it up/down, left/right and forward/backwards?

 

It's not doable with how headmesh are handled made right now because they are attached to the head bone. And changing that is a pain in the ass work to do.

 

It's doable with the way I did for tails, but tail are rather overseeable amount of meshes while hair has a shitload of meshes, where I don't think authors would take their time to convert it to such a system and make their hairmods skeleton depended.

 

If I do moveable\scaleable hairs it will probably not work on old hairs.

Link to comment

When are you going to add compability for HDT bodies 

Just asking im curious 

 

Never, because HDT bodies are just bodies weighted to 1.93a XPMSE breast\butt bones for HDT PE which are incompatible to default TBBP\BBP skeletons\bodies\armors.

 

To preserve compatible with old armors\bodies and newer armors\bodies and HDT PE, I changed back to default TBBP\BBP positions. HDT Bodies which are using the XPMSE 1.93a breast bone positions and which are not working correct with XPMSE2 will also not work with XPMS and T\BBP. So annoy the author of the body, you want to have compatiblity with XPMSE2, because I cannot and will do nothing for it.

 

Most of the so called HDT bodies have often an alternative working with XPMSE2.

Link to comment

After installing v2.06, my character's and NPCs' breats and butts became smaller.

I appreciate all work put into this update, but I wish body shape would stay the same with the previous verison of the mod. :(

So I think I will stick with the previous version for now...

Link to comment

Question; is the RaceMenuPluginXPMSE.esp the same for both the Male & Female installations?

I ask because I'm merging various plugins, would like to include this esp in that, and have both male & female character profiles in MO so it would be nice to have a merged patch that works for all.

Thanks for this skeleton and all your continued hard work, thanks to the community as well for their support.

Link to comment

Outstanding! Thank you for the response. BTW, you wouldn't believe how many plugins I shoehorned into that merge.

 

Master Merge Early;
H17c-Argonian Fins
N12i-Insanity's Sorrow
F06d-Episode Parallax
N28b-UNP Boots 4
H03-83Willows 101 Bugs
N03-Aradia Kato Outfit
H16f-Compatibility Brutish + Refined Argonians
H17d-dredtent
N23c-skyforged weapons
N31-UNP Smithy Sex
N08b-Ghosu Weapon PAck 1
G13c-Ash Rocks
Q10c-Treacleman Moonpath Patch
E07-Chesko Lorebased Loading Screens
N33a-Warmonger Armory Vanilla
H08a-Brows
H15b-HDT PE items MTM
H19a-The Eyes of Beauty
I03c-Lefthand Rings
D25-No Combat Boundaries Legendary
J04-DG Rune Weapons FX Replacer
I05e-01ERA
N12a-The Bastard
M02a-Clams drop pearls
E18b-Equipable Map
N22-Scarlet Dawn Armor
D01-Appropriately Attired Jarls
D06-Dead Body Collision
N33b-Warmonger Armory DLC
H24c-Merida Hair
G06a-Footprints
G06b-Footprints - Ash
H04-Beards
N02b-HDT Test Skirts
S03g-Bloodthirst Vampire Feeding
M01b-Arrow Duration 60
L17-Symphonies of Skyrim
N10a-Gladiator Armor
G13d-Sulfur Rocks
Q01b-Neutral Hjerim
N30a-MashUp UNP
G13a-Moss Rocks
N18a-Northgirl
E10b-Race Menu Overlay
H08b-SG Eyebrows
M34c-Interactive Clutter Recipes
G13b-Moss Rocks DB
M20c-SkyTEST USKP
H20a-Race Menu Plugin XPMSE
N24-TS Whipcane
I18b-Tavern Clothes - MTM
H24f-Test Merida
H19b-The Eyes of Beauty - Elves Edition
N26-UNP Academy Dropout
N28a-UNP Boots 2
N28c-UNP Leather Clothes
K09a-WEBS Extended
M23b-Yield 2.0
N29b-Calyps Investigator
N09a-el Gilded Doublet
D07b-fFast travel Speed Mult_4
D24-Humans drop human parts
N01-AethEbonyCrownReplacer
F03a-Skyfalls + Skymills DG DB FS WT
F03a-Skyfalls DB FS small waterfalls
R11b-Falskaar Wildlife
M26b-Become a Highwayman
H14b-Ethereal Elven Overhaul
L08-Random Thunder
L07-IHSS
K21b-Book Covers Skyrim
M28a-Campfire Cooking
R02k-Understone Keep Repair
M28a-Campfire Cooking Alchemy
Q13-Solsteim The Lost Levels
G08b-Weathered Road Signs
N14a-Lore Weapon Expansion
K20b-Better White Phial
N04a-Black Sacrament DB Replacer
I03c-Lefthand Rings DG
M28c-Cooking Expanded DB
D27-Size Does Matter
D26-RV Markers
M28d-Cooking Alchemy
K21c-BCS - ISB Patch
K21a-Improved Skill Books
K21c-BCS CCOR Patch
R19b-MAS Immersion Patch
K21c-TCIY BCS Patch
N33a-Warmonger Armory Leveled List
M28a-Campfire Cooking DB
M28b-Cooking Expanded
M28c-Cooking Expanded HF
M28a-Campfire Cooking DG

 

Link to comment

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...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use