Update FancyHandwork!

This commit is contained in:
hlfstr
2023-01-19 16:45:20 -06:00
parent 5d5972ec3b
commit 2f05d59f31
77 changed files with 144371 additions and 1520 deletions

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FHAddToRecipe</m_Name>
<m_AnimName>Bob_FH_AddToPan</m_AnimName>
<m_Looped>true</m_Looped>
<m_UpperOnly>false</m_UpperOnly>
<m_SyncTrackingEnabled>false</m_SyncTrackingEnabled>
<m_EarlyBlendOut>false</m_EarlyBlendOut>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.30</m_BlendTime>
<m_Scalar></m_Scalar>
<m_Scalar2></m_Scalar2>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>AddToPan</m_StringValue>
</m_Conditions>
</animNode>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="AddToRecipe.xml">
<m_Name>FHAddToRecipe_Griddle</m_Name>
<m_AnimName>Bob_FH_AddToGriddlePan</m_AnimName>
<m_Looped>true</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.30</m_BlendTime>
<m_Conditions />
<m_Conditions>
<m_Name>BaseType</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>GridlePan</m_StringValue>
</m_Conditions>
</animNode>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="AddToRecipe.xml">
<m_Name>FHAddToRecipe_Pot</m_Name>
<m_AnimName>Bob_FH_AddToPot</m_AnimName>
<m_Looped>true</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.30</m_BlendTime>
<m_Conditions />
<m_Conditions>
<m_Name>BaseType</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>CookingPot</m_StringValue>
</m_Conditions>
</animNode>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="AddToRecipe.xml">
<m_Name>FHAddToRecipe_RoastPan</m_Name>
<m_AnimName>Bob_FH_AddToRoast</m_AnimName>
<m_Looped>true</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.30</m_BlendTime>
<m_Conditions />
<m_Conditions>
<m_Name>BaseType</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>RoastingPan</m_StringValue>
</m_Conditions>
</animNode>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="AddToRecipe.xml">
<m_Name>FHAddToRecipe_Saucepan</m_Name>
<m_AnimName>Bob_FH_AddToGriddlePan</m_AnimName>
<m_Looped>true</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.30</m_BlendTime>
<m_Conditions />
<m_Conditions>
<m_Name>BaseType</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>Saucepan</m_StringValue>
</m_Conditions>
</animNode>

View File

@@ -68,6 +68,22 @@
<boneName>Bip01_R_Hand</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0Nub</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1Nub</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>attachConnect</m_EventName>
<m_TimePc>0.5</m_TimePc>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop</m_Name>
<m_AnimName>Bob_FH_Boop</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop_Dual</m_Name>
<m_AnimName>Bob_FH_Boop</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop_Dual</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop2</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.4</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="BoopActionDual.xml">
<m_Name>FH_Boop_HighDual</m_Name>
<m_AnimName>Bob_FH_Boop_High</m_AnimName>
<m_Conditions />
<m_Conditions>
<m_Name>BoopPosition</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>High</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights>
<boneName>Bip01_Neck</boneName>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="BoopActionDual.xml">
<m_Name>FH_BoopDual_Low</m_Name>
<m_AnimName>Bob_FH_Boop_Low</m_AnimName>
<m_Conditions />
<m_Conditions>
<m_Name>BoopPosition</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>Low</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Forearm</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0Nub</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1Nub</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Pelvis</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Dummy01</boneName>
<weight>1.0</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>1.0</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_BoopL</m_Name>
<m_AnimName>Bob_FH_Boop</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_BoopL</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop2</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="BoopActionL.xml">
<m_Name>FH_BoopL_High</m_Name>
<m_AnimName>Bob_FH_Boop_High</m_AnimName>
<m_Conditions />
<m_Conditions>
<m_Name>BoopPosition</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>High</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
</animNode>

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="BoopActionL.xml">
<m_Name>FH_BoopL_Low</m_Name>
<m_AnimName>Bob_FH_Boop_Low</m_AnimName>
<m_Conditions />
<m_Conditions>
<m_Name>BoopPosition</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>Low</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Forearm</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0Nub</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1Nub</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Pelvis</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Dummy01</boneName>
<weight>1.0</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>1.0</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="BoopAction.xml">
<m_Name>FH_Boop_High</m_Name>
<m_AnimName>Bob_FH_Boop_High</m_AnimName>
<m_Conditions />
<m_Conditions>
<m_Name>BoopPosition</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>High</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
</animNode>

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="BoopAction.xml">
<m_Name>FH_Boop_Low</m_Name>
<m_AnimName>Bob_FH_Boop_Low</m_AnimName>
<m_Conditions />
<m_Conditions>
<m_Name>BoopPosition</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>Low</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Forearm</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0Nub</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1Nub</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Pelvis</boneName>
<weight>0.50</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Dummy01</boneName>
<weight>1.0</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>1.0</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop_Rear_L</m_Name>
<m_AnimName>Bob_FH_Boop_Rear_L</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop_Rear_L</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Neck</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Spine1</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop_Rear_L_Aim</m_Name>
<m_AnimName>Bob_FH_Boop_Rear_L</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop_Rear_L</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>Aim</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>true</m_BoolValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Neck</boneName>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Spine1</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.20</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop_Rear_R</m_Name>
<m_AnimName>Bob_FH_Boop_Rear_R</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop_Rear_R</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Neck</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Spine1</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop_Rear_Flick_L</m_Name>
<m_AnimName>Bob_FH_Boop_Rear_Flick_L</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop_Rear_Flick_L</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Neck</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Spine1</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop_Rear_Flick_L_Aim</m_Name>
<m_AnimName>Bob_FH_Boop_Rear_Flick_L</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop_Rear_Flick_L</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>Aim</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>true</m_BoolValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Neck</boneName>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Spine1</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.20</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_Boop_Rear_Flick_R</m_Name>
<m_AnimName>Bob_FH_Boop_Rear_Flick_R</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>false</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_Boop_Rear_Flick_R</m_StringValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Neck</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Spine1</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.80</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.80</weight>
<includeDescendants>false</includeDescendants>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Translation_Data</boneName>
<weight>0.25</weight>
</m_SubStateBoneWeights>
<m_Events>
<m_EventName>SetVariable</m_EventName>
<m_Time>Start</m_Time>
<m_ParameterValue>requiresSlowIdleBlend=true</m_ParameterValue>
</m_Events>
</animNode>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FH_CarWrenchRepair</m_Name>
<m_AnimName>Bob_Idle_CarRepair</m_AnimName>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_Looped>true</m_Looped>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.25</m_BlendTime>
<m_Conditions>
<m_Name>PerformingAction</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>FH_CarWrenchRepair</m_StringValue>
</m_Conditions>
</animNode>

View File

@@ -1,22 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="FHaimgunleft_item.xml">
<m_Name>FHaimgunleft_hgun</m_Name>
<m_AnimName>Bob_HgunAim_Hgun</m_AnimName>
<m_AnimName>Bob_FH_Hgun</m_AnimName>
<m_Conditions>
<m_StringValue>holdinghgunleft</m_StringValue>
</m_Conditions>
<m_Conditions />
<m_Conditions />
<m_Conditions>
<m_Name>hasTimedActions</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_Conditions />
<m_Conditions />
<m_Transitions>
<m_Target>FHholdinggunleft</m_Target>
<m_AnimName>Bob_HgunAimToIdle_Hgun</m_AnimName>
<m_blendInTime>0.5</m_blendInTime>
<m_AnimName>Bob_FH_Hgun</m_AnimName>
<m_blendInTime>0.2</m_blendInTime>
<m_blendOutTime>0.2</m_blendOutTime>
<m_speedScale>1.5</m_speedScale>
<m_speedScale>0.8</m_speedScale>
</m_Transitions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
<weight>0.65</weight>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="FHaimgunleft_item.xml">
<m_Name>FHaimgunleft_hgun_exp</m_Name>
<m_AnimName>Bob_HgunAim_Hgun</m_AnimName>
<m_Conditions>
<m_StringValue>holdinghgunleft</m_StringValue>
</m_Conditions>
<m_Conditions />
<m_Conditions />
<m_Conditions />
<m_Conditions>
<m_BoolValue>true</m_BoolValue>
</m_Conditions>
<m_Transitions>
<m_Target>FHholdinggunleft</m_Target>
<m_AnimName>Bob_HgunAimToIdle_Hgun</m_AnimName>
<m_blendInTime>0.0</m_blendInTime>
<m_blendOutTime>0.0</m_blendOutTime>
<m_speedScale>10.0</m_speedScale>
</m_Transitions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="FHholdingitemleft.xml">
<m_Name>FHaimgunleft_item</m_Name>
<m_AnimName>Bob_HgunAim_Item</m_AnimName>
<m_AnimName>Bob_FH_Item</m_AnimName>
<m_Conditions />
<m_Conditions />
<m_Conditions>
<m_Name>Aim</m_Name>
@@ -12,12 +13,25 @@
<m_Name>Weapon</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>handgun</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>FHExp</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_Transitions>
<m_Target>FHholdingitemleft</m_Target>
<m_AnimName>Bob_HgunAimToIdle_Item</m_AnimName>
<m_blendInTime>0.5</m_blendInTime>
<m_AnimName>Bob_FH_Item</m_AnimName>
<m_blendInTime>0.2</m_blendInTime>
<m_blendOutTime>0.2</m_blendOutTime>
<m_speedScale>1.5</m_speedScale>
<m_speedScale>0.8</m_speedScale>
</m_Transitions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
<weight>0.75</weight>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="FHholdingitemleft.xml">
<m_Name>FHaimgunleft_item_exp</m_Name>
<m_AnimName>Bob_HgunAim_Item</m_AnimName>
<m_Conditions />
<m_Conditions />
<m_Conditions>
<m_Name>Aim</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>true</m_BoolValue>
</m_Conditions>
<m_Conditions>
<m_Name>Weapon</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>handgun</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>FHExp</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>true</m_BoolValue>
</m_Conditions>
<m_Transitions>
<m_Target>FHholdingitemleft</m_Target>
<m_AnimName>Bob_HgunAimToIdle_Item</m_AnimName>
<m_blendInTime>0.8</m_blendInTime>
<m_blendOutTime>0.2</m_blendOutTime>
<m_speedScale>1.5</m_speedScale>
</m_Transitions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FHCarryBody</m_Name>
<m_AnimName>Bob_FH_CarryBody</m_AnimName>
<m_Priority>10</m_Priority>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_SyncTrackingEnabled>false</m_SyncTrackingEnabled>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.20</m_BlendTime>
<m_Conditions>
<m_Name>LeftHandMask</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>holdingbody</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>hasTimedActions</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.75</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.75</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1Nub</boneName>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FHCarryGenerator</m_Name>
<m_AnimName>Bob_FH_CarryGenerator</m_AnimName>
<m_Priority>10</m_Priority>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_SyncTrackingEnabled>false</m_SyncTrackingEnabled>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.20</m_BlendTime>
<m_Conditions>
<m_Name>LeftHandMask</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>holdinggenerator</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>hasTimedActions</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Clavicle</boneName>
<weight>0.75</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Clavicle</boneName>
<weight>0.75</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_UpperArm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Forearm</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0Nub</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger1Nub</boneName>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -1,20 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode x_extends="FHholdingitemleft.xml">
<m_Name>FHholdinggunleft</m_Name>
<m_AnimName>Bob_FH_Hgun</m_AnimName>
<m_Conditions>
<m_StringValue>holdinghgunleft</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>hasTimedActions</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_Transitions>
<m_Name>FHholdinggunleft</m_Name>
<m_AnimName>Bob_FH_Hgun</m_AnimName>
<m_Conditions>
<m_StringValue>holdinghgunleft</m_StringValue>
</m_Conditions>
<m_Conditions />
<m_Transitions>
<m_Target>FHaimgunleft_hgun</m_Target>
<m_AnimName>Bob_HgunIdleToAim_Hgun</m_AnimName>
<m_blendInTime>0.5</m_blendInTime>
<m_blendOutTime>0.2</m_blendOutTime>
<m_speedScale>1.5</m_speedScale>
<m_AnimName>Bob_FH_Hgun</m_AnimName>
<m_blendInTime>0.0</m_blendInTime>
<m_blendOutTime>0.0</m_blendOutTime>
<m_speedScale>10.0</m_speedScale>
</m_Transitions>
<m_Transitions>
<m_Target>FHaimgunleft_hgun_exp</m_Target>
<m_AnimName>Bob_HgunIdleToAim_Hgun</m_AnimName>
<m_blendInTime>0.0</m_blendInTime>
<m_blendOutTime>0.0</m_blendOutTime>
<m_speedScale>10.0</m_speedScale>
</m_Transitions>
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
<m_SubStateBoneWeights />
</animNode>

View File

@@ -5,27 +5,36 @@
<m_Priority>10</m_Priority>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_SyncTrackingEnabled>false</m_SyncTrackingEnabled>
<m_SpeedScale>0.48</m_SpeedScale>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.20</m_BlendTime>
<m_Conditions>
<m_Name>LeftHandMask</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>holdingitemleft</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>FHDoingAction</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_Transitions>
<m_Target>FHaimgunleft_item</m_Target>
<m_AnimName>Bob_FH_Item</m_AnimName>
<m_blendInTime>0.0</m_blendInTime>
<m_blendOutTime>0.0</m_blendOutTime>
<m_speedScale>10.0</m_speedScale>
</m_Transitions>
<m_Transitions>
<m_Target>FHaimgunleft_item_exp</m_Target>
<m_AnimName>Bob_HgunIdleToAim_Item</m_AnimName>
<m_blendInTime>0.5</m_blendInTime>
<m_blendInTime>0.2</m_blendInTime>
<m_blendOutTime>0.2</m_blendOutTime>
<m_speedScale>1.5</m_speedScale>
<m_speedScale>2.0</m_speedScale>
</m_Transitions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Hand</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_L_Finger0</boneName>
</m_SubStateBoneWeights>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FHholdinggunright</m_Name>
<m_AnimName>Bob_FH_Hgun</m_AnimName>
<m_Priority>10</m_Priority>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_SyncTrackingEnabled>false</m_SyncTrackingEnabled>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.20</m_BlendTime>
<m_Conditions>
<m_Name>RightHandMask</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>holdinggunright</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>FHDoingAction</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01</boneName>
<weight>0.00</weight>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop1</boneName>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<animNode>
<m_Name>FHholdingitemright</m_Name>
<m_AnimName>Bob_FH_Item</m_AnimName>
<m_Priority>10</m_Priority>
<m_deferredBoneAxis>Y</m_deferredBoneAxis>
<m_SyncTrackingEnabled>false</m_SyncTrackingEnabled>
<m_SpeedScale>0.80</m_SpeedScale>
<m_BlendTime>0.20</m_BlendTime>
<m_Conditions>
<m_Name>RightHandMask</m_Name>
<m_Type>STRING</m_Type>
<m_StringValue>holdingitemright</m_StringValue>
</m_Conditions>
<m_Conditions>
<m_Name>FHDoingAction</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_Conditions>
<m_Name>AttackAnim</m_Name>
<m_Type>BOOL</m_Type>
<m_BoolValue>false</m_BoolValue>
</m_Conditions>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger0</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_R_Finger1</boneName>
</m_SubStateBoneWeights>
<m_SubStateBoneWeights>
<boneName>Bip01_Prop1</boneName>
</m_SubStateBoneWeights>
</animNode>

View File

@@ -10316,14 +10316,14 @@ AnimationSet Bob_Equip_HolsterLeftL {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

View File

@@ -10316,14 +10316,14 @@ AnimationSet Bob_Equip_HolsterLeft_1HandL {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

View File

@@ -10526,14 +10526,14 @@ AnimationSet Bob_Equip_HolsterLeft_1Hand_OutL {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

View File

@@ -10316,14 +10316,14 @@ AnimationSet Bob_Equip_HolsterLeft_OutL {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

View File

@@ -10316,14 +10316,14 @@ Animation {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

View File

@@ -10526,14 +10526,14 @@ AnimationSet Bob_Equip_HolsterRight_1HandL {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

View File

@@ -10526,14 +10526,14 @@ AnimationSet Bob_Equip_HolsterRight_1Hand_OutL {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

View File

@@ -10316,14 +10316,14 @@ AnimationSet Bob_Equip_HolsterRight_OutL {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -418,17 +418,17 @@ Frame Body {
Mesh Body {
617;
0.071099;0.767838;0.010932;,
0.031069;0.792980;0.030676;,
0.036279;0.768321;0.008014;,
0.031069;0.792983;0.030676;,
0.036279;0.768324;0.008014;,
0.078356;0.749985;0.002908;,
0.088221;0.741329;-0.001190;,
0.043922;0.742164;-0.015989;,
0.043922;0.742167;-0.015989;,
0.057006;0.709648;-0.030946;,
0.093646;0.705681;0.000073;,
0.032036;0.804333;0.071721;,
0.032036;0.804336;0.071721;,
0.074601;0.779948;0.060329;,
0.080351;0.773887;0.089415;,
0.049862;0.777586;0.096740;,
0.049862;0.777589;0.096740;,
0.086349;0.554408;0.050999;,
0.045026;0.549701;0.075344;,
0.045914;0.561457;0.069548;,
@@ -438,7 +438,7 @@ Frame Body {
0.046439;0.562286;-0.039229;,
0.044023;0.506327;-0.028466;,
0.072700;0.515649;-0.019038;,
0.003001;0.744587;-0.018231;,
0.003001;0.744590;-0.018231;,
0.003000;0.710112;-0.038580;,
0.003000;0.545431;0.075113;,
0.003000;0.559334;0.069416;,
@@ -452,7 +452,7 @@ Frame Body {
0.094269;0.463343;0.005813;,
0.065389;0.271490;-0.040401;,
0.094111;0.270933;0.004063;,
0.010932;0.465444;-0.009627;,
0.010932;0.465444;-0.009630;,
0.015105;0.443122;0.078928;,
0.023900;0.362922;0.065628;,
0.017686;0.365578;-0.010040;,
@@ -483,7 +483,7 @@ Frame Body {
0.093324;0.510227;0.015743;,
0.002999;0.498641;-0.040352;,
0.003000;0.464143;-0.026349;,
0.010932;0.465444;-0.009627;,
0.010932;0.465444;-0.009630;,
0.095057;0.504967;0.070084;,
0.045026;0.503652;0.094107;,
0.089157;0.456429;0.068022;,
@@ -498,36 +498,36 @@ Frame Body {
0.051920;0.618796;-0.035400;,
0.003000;0.675647;-0.045232;,
0.003000;0.614784;-0.040780;,
0.129386;0.709026;0.011626;,
0.075937;0.710260;0.005519;,
0.143634;0.663209;0.027833;,
0.085670;0.651042;0.018774;,
0.099509;0.602229;0.037170;,
0.146535;0.611977;0.044560;,
0.065025;0.712006;0.065434;,
0.072835;0.664381;0.082200;,
0.085670;0.651042;0.018774;,
0.088503;0.612519;0.089467;,
0.099509;0.602229;0.037170;,
0.071532;0.716001;0.073808;,
0.116063;0.721473;0.074999;,
0.130845;0.676872;0.091286;,
0.135383;0.622177;0.096900;,
0.130886;0.717090;0.040417;,
0.155720;0.591750;0.038140;,
0.100748;0.577185;0.029995;,
0.122137;0.520428;0.028185;,
0.129386;0.709026;0.011629;,
0.075937;0.710260;0.005522;,
0.143634;0.663209;0.027836;,
0.085670;0.651042;0.018777;,
0.099509;0.602229;0.037173;,
0.146535;0.611977;0.044563;,
0.065025;0.712006;0.065437;,
0.072835;0.664381;0.082203;,
0.085670;0.651042;0.018777;,
0.088503;0.612519;0.089470;,
0.099509;0.602229;0.037173;,
0.071532;0.716001;0.073811;,
0.116063;0.721473;0.075002;,
0.130845;0.676872;0.091289;,
0.135383;0.622177;0.096903;,
0.130886;0.717090;0.040420;,
0.155720;0.591750;0.038143;,
0.100748;0.577185;0.029998;,
0.122137;0.520428;0.028188;,
0.156526;0.532209;0.033271;,
0.132990;0.481655;0.029783;,
0.158559;0.481858;0.033021;,
0.100748;0.577185;0.029995;,
0.091095;0.576208;0.092222;,
0.121720;0.521077;0.085398;,
0.122137;0.520428;0.028185;,
0.100748;0.577185;0.029998;,
0.091095;0.576208;0.092225;,
0.121720;0.521077;0.085401;,
0.122137;0.520428;0.028188;,
0.134831;0.480540;0.069364;,
0.132990;0.481655;0.029783;,
0.145747;0.590743;0.100460;,
0.148064;0.530419;0.088969;,
0.145747;0.590743;0.100463;,
0.148064;0.530419;0.088972;,
0.153443;0.479231;0.070378;,
0.134046;0.349811;0.017226;,
0.118405;0.365118;0.015006;,
@@ -550,21 +550,21 @@ Frame Body {
0.074601;0.779948;0.060329;,
0.073550;0.780661;0.036001;,
0.096799;0.692389;0.080223;,
0.041722;0.803419;0.044757;,
0.041722;0.803422;0.044757;,
0.102388;0.760687;0.007122;,
0.071099;0.767838;0.010932;,
0.078356;0.749985;0.002908;,
0.099092;0.732477;0.001642;,
0.099092;0.732480;0.001642;,
0.097208;0.735170;0.085097;,
0.060779;0.721946;0.101397;,
0.060779;0.721949;0.101397;,
0.099444;0.739917;0.082438;,
0.003001;0.716023;0.103620;,
0.003001;0.774595;0.090344;,
0.003001;0.716026;0.103620;,
0.003001;0.774598;0.090344;,
0.080351;0.773887;0.089415;,
0.099444;0.739917;0.082438;,
0.086027;0.726140;0.025105;,
0.099111;0.730688;0.070350;,
0.075937;0.710260;0.005519;,
0.075937;0.710260;0.005522;,
0.098937;0.695764;0.048084;,
0.092012;0.699542;0.013554;,
0.088221;0.741329;-0.001190;,
@@ -665,12 +665,12 @@ Frame Body {
0.054436;0.862872;0.022493;,
0.037554;0.890750;-0.035382;,
0.056542;0.881930;0.008191;,
0.041722;0.803419;0.044757;,
0.041722;0.803422;0.044757;,
0.038203;0.832609;0.042565;,
0.073550;0.780661;0.036001;,
0.041411;0.856797;0.043261;,
0.003001;0.786898;0.009778;,
0.003001;0.766021;-0.001631;,
0.003001;0.786901;0.009778;,
0.003001;0.766024;-0.001631;,
0.003000;0.560132;-0.042926;,
0.003000;0.501017;0.093877;,
0.003000;0.466850;0.090836;,
@@ -731,14 +731,14 @@ Frame Body {
0.081770;0.725999;0.041575;,
-0.065098;0.767838;0.010933;,
-0.072355;0.749985;0.002908;,
-0.030277;0.768321;0.008014;,
-0.025067;0.792980;0.030676;,
-0.082200;0.741364;-0.001179;,
-0.030277;0.768324;0.008014;,
-0.025067;0.792983;0.030676;,
-0.082200;0.741367;-0.001179;,
-0.087646;0.705681;0.000074;,
-0.051006;0.709648;-0.030945;,
-0.037920;0.742164;-0.015989;,
-0.026034;0.804333;0.071721;,
-0.043860;0.777586;0.096742;,
-0.037920;0.742167;-0.015989;,
-0.026034;0.804336;0.071721;,
-0.043860;0.777589;0.096742;,
-0.074320;0.773826;0.089454;,
-0.068490;0.779919;0.060431;,
-0.080349;0.554408;0.050999;,
@@ -758,40 +758,40 @@ Frame Body {
0.003000;0.648945;0.087562;,
-0.054324;0.465391;-0.031056;,
-0.088927;0.463876;0.005976;,
-0.100037;0.364670;-0.005922;,
-0.062115;0.366719;-0.034438;,
-0.092721;0.271635;0.005407;,
-0.063932;0.271610;-0.039039;,
-0.005692;0.464388;-0.009326;,
-0.014421;0.364675;-0.009170;,
-0.020771;0.362587;0.066505;,
-0.100034;0.364670;-0.005922;,
-0.062112;0.366719;-0.034438;,
-0.092718;0.271635;0.005407;,
-0.063929;0.271610;-0.039039;,
-0.005689;0.464388;-0.009326;,
-0.014418;0.364675;-0.009170;,
-0.020768;0.362587;0.066505;,
-0.009105;0.443122;0.078928;,
-0.036079;0.269479;0.001965;,
-0.038927;0.273289;0.044034;,
-0.100341;0.363959;0.058844;,
-0.036076;0.269479;0.001965;,
-0.038924;0.273289;0.044034;,
-0.100338;0.363959;0.058844;,
-0.083964;0.444600;0.064414;,
-0.079588;0.276615;0.043732;,
-0.079585;0.276615;0.043732;,
-0.091698;-0.001439;0.054150;,
-0.086989;-0.001546;0.099343;,
-0.052132;-0.001523;0.099610;,
-0.046802;-0.001416;0.051083;,
-0.066391;0.216290;-0.007690;,
-0.097738;0.219606;0.020971;,
-0.096026;0.146039;0.033893;,
-0.066857;0.143323;0.005213;,
-0.066388;0.216290;-0.007690;,
-0.097735;0.219606;0.020971;,
-0.096023;0.146039;0.033893;,
-0.066854;0.143323;0.005213;,
-0.089401;0.067947;0.049201;,
-0.069551;0.065871;0.020587;,
-0.025330;0.200749;0.018327;,
-0.037277;0.143765;0.030381;,
-0.034289;0.157921;0.070690;,
-0.026265;0.223284;0.069298;,
-0.025327;0.200749;0.018327;,
-0.037274;0.143765;0.030381;,
-0.034286;0.157921;0.070690;,
-0.026262;0.223284;0.069298;,
-0.052897;0.059931;0.046017;,
-0.056442;0.080015;0.071446;,
-0.096384;0.157635;0.070650;,
-0.098032;0.232140;0.068796;,
-0.096381;0.157635;0.070650;,
-0.098029;0.232140;0.068796;,
-0.080510;0.085234;0.070856;,
-0.087324;0.510227;0.015743;,
-0.005692;0.464388;-0.009326;,
-0.005689;0.464388;-0.009326;,
-0.039026;0.503652;0.094107;,
-0.089057;0.504967;0.070084;,
-0.038080;0.459598;0.089765;,
@@ -828,21 +828,21 @@ Frame Body {
-0.135414;0.480749;0.029545;,
-0.100380;0.575253;0.026866;,
-0.123434;0.519123;0.026777;,
-0.122737;0.521406;0.083954;,
-0.122737;0.521406;0.083957;,
-0.090493;0.575715;0.089013;,
-0.135414;0.480749;0.029545;,
-0.137105;0.480829;0.069148;,
-0.148779;0.531620;0.087351;,
-0.148779;0.531620;0.087354;,
-0.144658;0.592077;0.097043;,
-0.155744;0.480099;0.070269;,
-0.140397;0.348686;0.020800;,
-0.131319;0.362846;0.065433;,
-0.115387;0.377430;0.063285;,
-0.124323;0.363455;0.018080;,
-0.133852;0.399534;-0.002924;,
-0.144457;0.400414;-0.007705;,
-0.147015;0.392337;0.004519;,
-0.136089;0.391096;0.004119;,
-0.140397;0.348686;0.020797;,
-0.131319;0.362846;0.065430;,
-0.115387;0.377430;0.063282;,
-0.124323;0.363455;0.018077;,
-0.133852;0.399534;-0.002927;,
-0.144457;0.400414;-0.007708;,
-0.147015;0.392337;0.004516;,
-0.136089;0.391096;0.004116;,
-0.121774;0.450949;0.066578;,
-0.126902;0.450951;0.017122;,
-0.143787;0.420631;0.019234;,
@@ -856,24 +856,24 @@ Frame Body {
-0.067548;0.780661;0.036002;,
-0.068490;0.779919;0.060431;,
-0.090797;0.692389;0.080223;,
-0.035720;0.803419;0.044757;,
-0.035720;0.803422;0.044757;,
-0.096356;0.760782;0.007129;,
-0.093086;0.732832;0.001569;,
-0.093086;0.732835;0.001569;,
-0.072355;0.749985;0.002908;,
-0.065098;0.767838;0.010933;,
-0.091237;0.734928;0.085124;,
-0.093482;0.739661;0.082462;,
-0.054777;0.721946;0.101397;,
0.003001;0.716023;0.103620;,
0.003001;0.774595;0.090344;,
-0.091237;0.734931;0.085124;,
-0.093482;0.739664;0.082462;,
-0.054777;0.721949;0.101397;,
0.003001;0.716026;0.103620;,
0.003001;0.774598;0.090344;,
-0.074320;0.773826;0.089454;,
-0.093482;0.739661;0.082462;,
-0.093482;0.739664;0.082462;,
-0.080018;0.726113;0.025117;,
-0.070654;0.710276;0.004877;,
-0.093151;0.730476;0.070359;,
-0.086012;0.699542;0.013555;,
-0.092937;0.695764;0.048085;,
-0.082200;0.741364;-0.001179;,
-0.082200;0.741367;-0.001179;,
-0.098287;0.695337;0.064251;,
-0.126902;0.450951;0.017122;,
-0.032203;0.832609;0.042565;,
@@ -881,17 +881,17 @@ Frame Body {
0.003000;0.840662;0.071276;,
0.003124;0.805445;0.076533;,
-0.161117;0.411811;0.023523;,
-0.140397;0.348686;0.020800;,
-0.131319;0.362846;0.065433;,
-0.152463;0.417909;-0.002565;,
-0.126783;0.417814;0.000822;,
-0.126783;0.417814;0.000822;,
-0.133509;0.407190;0.013417;,
-0.156836;0.412985;0.018709;,
-0.156836;0.412985;0.018709;,
-0.144457;0.400414;-0.007705;,
-0.133852;0.399534;-0.002924;,
-0.147015;0.392337;0.004519;,
-0.140397;0.348686;0.020797;,
-0.131319;0.362846;0.065430;,
-0.152463;0.417909;-0.002568;,
-0.126783;0.417814;0.000819;,
-0.126783;0.417814;0.000819;,
-0.133509;0.407190;0.013414;,
-0.156836;0.412985;0.018706;,
-0.156836;0.412985;0.018706;,
-0.144457;0.400414;-0.007708;,
-0.133852;0.399534;-0.002927;,
-0.147015;0.392337;0.004516;,
-0.097939;0.020227;-0.022684;,
-0.103498;-0.001398;-0.029921;,
-0.067684;-0.001386;-0.067431;,
@@ -912,10 +912,10 @@ Frame Body {
-0.032744;-0.001375;-0.056977;,
-0.032744;-0.001375;-0.056977;,
-0.103498;-0.001398;-0.029921;,
-0.014421;0.364675;-0.009170;,
-0.036079;0.269479;0.001965;,
-0.025330;0.200749;0.018327;,
-0.037277;0.143765;0.030381;,
-0.014418;0.364675;-0.009170;,
-0.036076;0.269479;0.001965;,
-0.025327;0.200749;0.018327;,
-0.037274;0.143765;0.030381;,
-0.052897;0.059931;0.046017;,
-0.052897;0.059931;0.046017;,
-0.043110;0.834970;0.022229;,
@@ -968,7 +968,7 @@ Frame Body {
-0.031554;0.890750;-0.035382;,
-0.050542;0.881930;0.008191;,
-0.032203;0.832609;0.042565;,
-0.035720;0.803419;0.044757;,
-0.035720;0.803422;0.044757;,
-0.067548;0.780661;0.036002;,
-0.035411;0.856798;0.043261;,
0.003000;0.501017;0.093877;,
@@ -991,7 +991,7 @@ Frame Body {
-0.093151;0.730476;0.070359;,
-0.075749;0.725892;0.041615;,
-0.080018;0.726113;0.025117;,
-0.082200;0.741364;-0.001179;,
-0.082200;0.741367;-0.001179;,
-0.046953;0.905585;0.050786;,
-0.022283;0.221867;-0.025042;,
-0.031137;0.145709;-0.014293;,
@@ -1009,22 +1009,22 @@ Frame Body {
0.000202;0.081122;-0.017729;,
-0.032460;0.079208;0.107119;,
-0.080496;0.085235;0.070858;,
-0.096384;0.157635;0.070650;,
-0.096381;0.157635;0.070650;,
-0.033442;0.153646;0.095452;,
-0.098032;0.232140;0.068796;,
-0.034320;0.221278;0.084522;,
-0.031597;0.274781;0.078110;,
-0.079588;0.276615;0.043732;,
-0.100341;0.363959;0.058844;,
-0.019385;0.361877;0.083941;,
-0.098029;0.232140;0.068796;,
-0.034317;0.221278;0.084522;,
-0.031594;0.274781;0.078110;,
-0.079585;0.276615;0.043732;,
-0.100338;0.363959;0.058844;,
-0.019382;0.361877;0.083941;,
0.003000;0.466850;0.090836;,
-0.038080;0.459598;0.089765;,
-0.075749;0.725892;0.041615;,
-0.054324;0.465391;-0.031056;,
-0.062115;0.366719;-0.034438;,
-0.063932;0.271610;-0.039039;,
-0.066391;0.216290;-0.007690;,
-0.066857;0.143323;0.005213;,
-0.062112;0.366719;-0.034438;,
-0.063929;0.271610;-0.039039;,
-0.066388;0.216290;-0.007690;,
-0.066854;0.143323;0.005213;,
-0.069551;0.065871;0.020587;,
0.103490;0.362763;0.058066;,
0.043737;0.459563;0.089666;,
@@ -2146,7 +2146,7 @@ Frame Body {
-0.443922;-0.068516;-0.893442;,
-0.724820;-0.051916;-0.686979;,
-0.594439;-0.231924;-0.769970;,
-0.689854;-0.228381;-0.686982;,
-0.689855;-0.228381;-0.686980;,
-0.785319;-0.240066;-0.570651;,
-0.874839;0.462767;-0.143189;,
0.062917;-0.968699;-0.240131;,
@@ -2381,11 +2381,11 @@ Frame Body {
0.036996;-0.986471;0.159705;,
0.701094;-0.707032;0.092590;,
0.756356;0.026337;0.653630;,
0.962820;-0.195704;0.186221;,
0.935898;-0.351633;-0.021199;,
0.962820;-0.195704;0.186218;,
0.935898;-0.351633;-0.021202;,
0.827126;0.095610;0.553824;,
-0.637236;-0.197843;0.744842;,
-0.745285;0.007852;0.666699;,
-0.637234;-0.197845;0.744842;,
-0.745285;0.007849;0.666700;,
-0.830051;0.144789;-0.538564;,
-0.976775;-0.202541;-0.069908;,
-0.723332;0.609303;0.324870;,
@@ -2412,7 +2412,7 @@ Frame Body {
-0.945712;0.178206;-0.271792;,
0.919506;0.368350;0.137211;,
-0.998656;-0.019605;0.047970;,
-0.096899;0.388799;-0.916213;,
-0.096902;0.388799;-0.916212;,
-0.924006;0.061242;0.377441;,
-0.646312;0.058203;0.760850;,
-0.313381;0.017355;0.949469;,
@@ -2421,13 +2421,13 @@ Frame Body {
-0.902236;-0.342997;0.261386;,
-0.209258;-0.230513;0.950303;,
-0.359565;0.188462;-0.913890;,
0.049285;0.410912;-0.910342;,
0.049282;0.410912;-0.910342;,
0.899157;-0.185837;0.396209;,
0.434062;-0.323438;0.840820;,
0.250157;-0.624900;0.739542;,
-0.893129;-0.228413;-0.387489;,
-0.709487;-0.061721;-0.702011;,
0.271645;0.293037;-0.916700;,
-0.709488;-0.061721;-0.702009;,
0.271643;0.293038;-0.916700;,
-0.919897;-0.209954;-0.331223;,
-0.866705;0.393518;-0.306539;,
-0.904270;0.325087;-0.276793;,
@@ -8752,37 +8752,11 @@ AnimationSet Bob_FH_Hgun {
{ Bip01_Prop1 }
AnimationKey R {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
}
AnimationKey T {
2;
2;
0;3;-0.043693,-0.107672,-0.128372;;,
2400;3;-0.043693,-0.107672,-0.128372;;;
}
}
Animation {
{ Bip01_Prop2 }
AnimationKey {
0;
2;
0;4;-0.001456,0.708239,-0.002721,-0.705966;;,
2400;4;-0.001456,0.708239,-0.002721,-0.705966;;;
0;4;0.040267,-0.655903,0.052971,0.751907;;,
2400;4;0.040267,-0.655903,0.052971,0.751907;;;
}
AnimationKey {
@@ -8795,8 +8769,34 @@ AnimationSet Bob_FH_Hgun {
AnimationKey {
2;
2;
0;3;-0.003500,-0.058400,0.132900;;,
2400;3;-0.003500,-0.058400,0.132900;;;
0;3;-0.003523,-0.058440,-0.132865;;,
2400;3;-0.003523,-0.058440,-0.132865;;;
}
}
Animation {
{ Bip01_Prop2 }
AnimationKey {
0;
2;
0;4;0.037459,0.707342,0.036471,-0.704935;;,
2400;4;0.037459,0.707342,0.036471,-0.704935;;;
}
AnimationKey {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
2400;3;1.000000,1.000000,1.000000;;;
}
AnimationKey {
2;
2;
0;3;-0.003500,-0.058400,0.117500;;,
2400;3;-0.003500,-0.058400,0.117500;;;
}
}

View File

@@ -418,17 +418,17 @@ Frame Body {
Mesh Body {
617;
0.071099;0.767838;0.010932;,
0.031069;0.792975;0.030676;,
0.036279;0.768316;0.008014;,
0.031069;0.792977;0.030676;,
0.036279;0.768318;0.008014;,
0.078356;0.749985;0.002908;,
0.088221;0.741329;-0.001190;,
0.043922;0.742159;-0.015989;,
0.043922;0.742161;-0.015989;,
0.057006;0.709648;-0.030946;,
0.093646;0.705681;0.000073;,
0.032036;0.804328;0.071721;,
0.032036;0.804330;0.071721;,
0.074601;0.779948;0.060329;,
0.080351;0.773887;0.089415;,
0.049862;0.777581;0.096740;,
0.049862;0.777583;0.096740;,
0.086349;0.554408;0.050999;,
0.045026;0.549701;0.075344;,
0.045914;0.561457;0.069548;,
@@ -438,7 +438,7 @@ Frame Body {
0.046439;0.562286;-0.039229;,
0.044023;0.506327;-0.028466;,
0.072700;0.515649;-0.019038;,
0.003001;0.744582;-0.018231;,
0.003001;0.744584;-0.018231;,
0.003000;0.710112;-0.038580;,
0.003000;0.545431;0.075113;,
0.003000;0.559334;0.069416;,
@@ -452,7 +452,7 @@ Frame Body {
0.094269;0.463343;0.005813;,
0.065389;0.271490;-0.040401;,
0.094111;0.270933;0.004063;,
0.010932;0.465444;-0.009622;,
0.010932;0.465444;-0.009624;,
0.015105;0.443122;0.078928;,
0.023900;0.362922;0.065628;,
0.017686;0.365578;-0.010040;,
@@ -483,7 +483,7 @@ Frame Body {
0.093324;0.510227;0.015743;,
0.002999;0.498641;-0.040352;,
0.003000;0.464143;-0.026349;,
0.010932;0.465444;-0.009622;,
0.010932;0.465444;-0.009624;,
0.095057;0.504967;0.070084;,
0.045026;0.503652;0.094107;,
0.089157;0.456429;0.068022;,
@@ -498,36 +498,36 @@ Frame Body {
0.051920;0.618796;-0.035400;,
0.003000;0.675647;-0.045232;,
0.003000;0.614784;-0.040780;,
0.129386;0.709026;0.011621;,
0.075937;0.710260;0.005514;,
0.143634;0.663209;0.027828;,
0.085670;0.651042;0.018769;,
0.099509;0.602229;0.037165;,
0.146535;0.611977;0.044555;,
0.065025;0.712006;0.065429;,
0.072835;0.664381;0.082195;,
0.085670;0.651042;0.018769;,
0.088503;0.612519;0.089462;,
0.099509;0.602229;0.037165;,
0.071532;0.716001;0.073803;,
0.116063;0.721473;0.074994;,
0.130845;0.676872;0.091281;,
0.135383;0.622177;0.096895;,
0.130886;0.717090;0.040412;,
0.155720;0.591750;0.038135;,
0.100748;0.577185;0.029990;,
0.122137;0.520428;0.028180;,
0.129386;0.709026;0.011623;,
0.075937;0.710260;0.005516;,
0.143634;0.663209;0.027830;,
0.085670;0.651042;0.018771;,
0.099509;0.602229;0.037167;,
0.146535;0.611977;0.044557;,
0.065025;0.712006;0.065431;,
0.072835;0.664381;0.082197;,
0.085670;0.651042;0.018771;,
0.088503;0.612519;0.089464;,
0.099509;0.602229;0.037167;,
0.071532;0.716001;0.073805;,
0.116063;0.721473;0.074996;,
0.130845;0.676872;0.091283;,
0.135383;0.622177;0.096897;,
0.130886;0.717090;0.040414;,
0.155720;0.591750;0.038137;,
0.100748;0.577185;0.029992;,
0.122137;0.520428;0.028182;,
0.156526;0.532209;0.033271;,
0.132990;0.481655;0.029783;,
0.158559;0.481858;0.033021;,
0.100748;0.577185;0.029990;,
0.091095;0.576208;0.092217;,
0.121720;0.521077;0.085393;,
0.122137;0.520428;0.028180;,
0.100748;0.577185;0.029992;,
0.091095;0.576208;0.092219;,
0.121720;0.521077;0.085395;,
0.122137;0.520428;0.028182;,
0.134831;0.480540;0.069364;,
0.132990;0.481655;0.029783;,
0.145747;0.590743;0.100455;,
0.148064;0.530419;0.088964;,
0.145747;0.590743;0.100457;,
0.148064;0.530419;0.088966;,
0.153443;0.479231;0.070378;,
0.134046;0.349811;0.017226;,
0.118405;0.365118;0.015006;,
@@ -550,21 +550,21 @@ Frame Body {
0.074601;0.779948;0.060329;,
0.073550;0.780661;0.036001;,
0.096799;0.692389;0.080223;,
0.041722;0.803414;0.044757;,
0.041722;0.803416;0.044757;,
0.102388;0.760687;0.007122;,
0.071099;0.767838;0.010932;,
0.078356;0.749985;0.002908;,
0.099092;0.732472;0.001642;,
0.099092;0.732474;0.001642;,
0.097208;0.735170;0.085097;,
0.060779;0.721941;0.101397;,
0.060779;0.721943;0.101397;,
0.099444;0.739917;0.082438;,
0.003001;0.716018;0.103620;,
0.003001;0.774590;0.090344;,
0.003001;0.716020;0.103620;,
0.003001;0.774592;0.090344;,
0.080351;0.773887;0.089415;,
0.099444;0.739917;0.082438;,
0.086027;0.726140;0.025105;,
0.099111;0.730688;0.070350;,
0.075937;0.710260;0.005514;,
0.075937;0.710260;0.005516;,
0.098937;0.695764;0.048084;,
0.092012;0.699542;0.013554;,
0.088221;0.741329;-0.001190;,
@@ -665,12 +665,12 @@ Frame Body {
0.054436;0.862872;0.022493;,
0.037554;0.890750;-0.035382;,
0.056542;0.881930;0.008191;,
0.041722;0.803414;0.044757;,
0.041722;0.803416;0.044757;,
0.038203;0.832609;0.042565;,
0.073550;0.780661;0.036001;,
0.041411;0.856797;0.043261;,
0.003001;0.786893;0.009778;,
0.003001;0.766016;-0.001631;,
0.003001;0.786895;0.009778;,
0.003001;0.766018;-0.001631;,
0.003000;0.560132;-0.042926;,
0.003000;0.501017;0.093877;,
0.003000;0.466850;0.090836;,
@@ -731,14 +731,14 @@ Frame Body {
0.081770;0.725999;0.041575;,
-0.065098;0.767838;0.010933;,
-0.072355;0.749985;0.002908;,
-0.030277;0.768316;0.008014;,
-0.025067;0.792975;0.030676;,
-0.082200;0.741359;-0.001179;,
-0.030277;0.768318;0.008014;,
-0.025067;0.792977;0.030676;,
-0.082200;0.741361;-0.001179;,
-0.087646;0.705681;0.000074;,
-0.051006;0.709648;-0.030945;,
-0.037920;0.742159;-0.015989;,
-0.026034;0.804328;0.071721;,
-0.043860;0.777581;0.096742;,
-0.037920;0.742161;-0.015989;,
-0.026034;0.804330;0.071721;,
-0.043860;0.777583;0.096742;,
-0.074320;0.773826;0.089454;,
-0.068490;0.779919;0.060431;,
-0.080349;0.554408;0.050999;,
@@ -758,40 +758,40 @@ Frame Body {
0.003000;0.648945;0.087562;,
-0.054324;0.465391;-0.031056;,
-0.088927;0.463876;0.005976;,
-0.100042;0.364670;-0.005922;,
-0.062120;0.366719;-0.034438;,
-0.092726;0.271635;0.005407;,
-0.063937;0.271610;-0.039039;,
-0.005697;0.464388;-0.009326;,
-0.014426;0.364675;-0.009170;,
-0.020776;0.362587;0.066505;,
-0.100040;0.364670;-0.005922;,
-0.062118;0.366719;-0.034438;,
-0.092724;0.271635;0.005407;,
-0.063935;0.271610;-0.039039;,
-0.005695;0.464388;-0.009326;,
-0.014424;0.364675;-0.009170;,
-0.020774;0.362587;0.066505;,
-0.009105;0.443122;0.078928;,
-0.036084;0.269479;0.001965;,
-0.038932;0.273289;0.044034;,
-0.100346;0.363959;0.058844;,
-0.036082;0.269479;0.001965;,
-0.038930;0.273289;0.044034;,
-0.100344;0.363959;0.058844;,
-0.083964;0.444600;0.064414;,
-0.079593;0.276615;0.043732;,
-0.079591;0.276615;0.043732;,
-0.091698;-0.001439;0.054150;,
-0.086989;-0.001546;0.099343;,
-0.052132;-0.001523;0.099610;,
-0.046802;-0.001416;0.051083;,
-0.066396;0.216290;-0.007690;,
-0.097743;0.219606;0.020971;,
-0.096031;0.146039;0.033893;,
-0.066862;0.143323;0.005213;,
-0.066394;0.216290;-0.007690;,
-0.097741;0.219606;0.020971;,
-0.096029;0.146039;0.033893;,
-0.066860;0.143323;0.005213;,
-0.089401;0.067947;0.049201;,
-0.069551;0.065871;0.020587;,
-0.025335;0.200749;0.018327;,
-0.037282;0.143765;0.030381;,
-0.034294;0.157921;0.070690;,
-0.026270;0.223284;0.069298;,
-0.025333;0.200749;0.018327;,
-0.037280;0.143765;0.030381;,
-0.034292;0.157921;0.070690;,
-0.026268;0.223284;0.069298;,
-0.052897;0.059931;0.046017;,
-0.056442;0.080015;0.071446;,
-0.096389;0.157635;0.070650;,
-0.098037;0.232140;0.068796;,
-0.096387;0.157635;0.070650;,
-0.098035;0.232140;0.068796;,
-0.080510;0.085234;0.070856;,
-0.087324;0.510227;0.015743;,
-0.005697;0.464388;-0.009326;,
-0.005695;0.464388;-0.009326;,
-0.039026;0.503652;0.094107;,
-0.089057;0.504967;0.070084;,
-0.038080;0.459598;0.089765;,
@@ -828,21 +828,21 @@ Frame Body {
-0.135414;0.480749;0.029545;,
-0.100380;0.575253;0.026866;,
-0.123434;0.519123;0.026777;,
-0.122737;0.521406;0.083949;,
-0.122737;0.521406;0.083951;,
-0.090493;0.575715;0.089013;,
-0.135414;0.480749;0.029545;,
-0.137105;0.480829;0.069148;,
-0.148779;0.531620;0.087346;,
-0.148779;0.531620;0.087348;,
-0.144658;0.592077;0.097043;,
-0.155744;0.480099;0.070269;,
-0.140397;0.348686;0.020805;,
-0.131319;0.362846;0.065438;,
-0.115387;0.377430;0.063290;,
-0.124323;0.363455;0.018085;,
-0.133852;0.399534;-0.002919;,
-0.144457;0.400414;-0.007700;,
-0.147015;0.392337;0.004524;,
-0.136089;0.391096;0.004124;,
-0.140397;0.348686;0.020803;,
-0.131319;0.362846;0.065436;,
-0.115387;0.377430;0.063288;,
-0.124323;0.363455;0.018083;,
-0.133852;0.399534;-0.002921;,
-0.144457;0.400414;-0.007702;,
-0.147015;0.392337;0.004522;,
-0.136089;0.391096;0.004122;,
-0.121774;0.450949;0.066578;,
-0.126902;0.450951;0.017122;,
-0.143787;0.420631;0.019234;,
@@ -856,24 +856,24 @@ Frame Body {
-0.067548;0.780661;0.036002;,
-0.068490;0.779919;0.060431;,
-0.090797;0.692389;0.080223;,
-0.035720;0.803414;0.044757;,
-0.035720;0.803416;0.044757;,
-0.096356;0.760782;0.007129;,
-0.093086;0.732827;0.001569;,
-0.093086;0.732829;0.001569;,
-0.072355;0.749985;0.002908;,
-0.065098;0.767838;0.010933;,
-0.091237;0.734923;0.085124;,
-0.093482;0.739656;0.082462;,
-0.054777;0.721941;0.101397;,
0.003001;0.716018;0.103620;,
0.003001;0.774590;0.090344;,
-0.091237;0.734925;0.085124;,
-0.093482;0.739658;0.082462;,
-0.054777;0.721943;0.101397;,
0.003001;0.716020;0.103620;,
0.003001;0.774592;0.090344;,
-0.074320;0.773826;0.089454;,
-0.093482;0.739656;0.082462;,
-0.093482;0.739658;0.082462;,
-0.080018;0.726113;0.025117;,
-0.070654;0.710276;0.004877;,
-0.093151;0.730476;0.070359;,
-0.086012;0.699542;0.013555;,
-0.092937;0.695764;0.048085;,
-0.082200;0.741359;-0.001179;,
-0.082200;0.741361;-0.001179;,
-0.098287;0.695337;0.064251;,
-0.126902;0.450951;0.017122;,
-0.032203;0.832609;0.042565;,
@@ -881,17 +881,17 @@ Frame Body {
0.003000;0.840662;0.071276;,
0.003124;0.805445;0.076533;,
-0.161117;0.411811;0.023523;,
-0.140397;0.348686;0.020805;,
-0.131319;0.362846;0.065438;,
-0.152463;0.417909;-0.002560;,
-0.126783;0.417814;0.000827;,
-0.126783;0.417814;0.000827;,
-0.133509;0.407190;0.013422;,
-0.156836;0.412985;0.018714;,
-0.156836;0.412985;0.018714;,
-0.144457;0.400414;-0.007700;,
-0.133852;0.399534;-0.002919;,
-0.147015;0.392337;0.004524;,
-0.140397;0.348686;0.020803;,
-0.131319;0.362846;0.065436;,
-0.152463;0.417909;-0.002562;,
-0.126783;0.417814;0.000825;,
-0.126783;0.417814;0.000825;,
-0.133509;0.407190;0.013420;,
-0.156836;0.412985;0.018712;,
-0.156836;0.412985;0.018712;,
-0.144457;0.400414;-0.007702;,
-0.133852;0.399534;-0.002921;,
-0.147015;0.392337;0.004522;,
-0.097939;0.020227;-0.022684;,
-0.103498;-0.001398;-0.029921;,
-0.067684;-0.001386;-0.067431;,
@@ -912,10 +912,10 @@ Frame Body {
-0.032744;-0.001375;-0.056977;,
-0.032744;-0.001375;-0.056977;,
-0.103498;-0.001398;-0.029921;,
-0.014426;0.364675;-0.009170;,
-0.036084;0.269479;0.001965;,
-0.025335;0.200749;0.018327;,
-0.037282;0.143765;0.030381;,
-0.014424;0.364675;-0.009170;,
-0.036082;0.269479;0.001965;,
-0.025333;0.200749;0.018327;,
-0.037280;0.143765;0.030381;,
-0.052897;0.059931;0.046017;,
-0.052897;0.059931;0.046017;,
-0.043110;0.834970;0.022229;,
@@ -968,7 +968,7 @@ Frame Body {
-0.031554;0.890750;-0.035382;,
-0.050542;0.881930;0.008191;,
-0.032203;0.832609;0.042565;,
-0.035720;0.803414;0.044757;,
-0.035720;0.803416;0.044757;,
-0.067548;0.780661;0.036002;,
-0.035411;0.856798;0.043261;,
0.003000;0.501017;0.093877;,
@@ -991,7 +991,7 @@ Frame Body {
-0.093151;0.730476;0.070359;,
-0.075749;0.725892;0.041615;,
-0.080018;0.726113;0.025117;,
-0.082200;0.741359;-0.001179;,
-0.082200;0.741361;-0.001179;,
-0.046953;0.905585;0.050786;,
-0.022283;0.221867;-0.025042;,
-0.031137;0.145709;-0.014293;,
@@ -1009,22 +1009,22 @@ Frame Body {
0.000202;0.081122;-0.017729;,
-0.032460;0.079208;0.107119;,
-0.080496;0.085235;0.070858;,
-0.096389;0.157635;0.070650;,
-0.096387;0.157635;0.070650;,
-0.033442;0.153646;0.095452;,
-0.098037;0.232140;0.068796;,
-0.034325;0.221278;0.084522;,
-0.031602;0.274781;0.078110;,
-0.079593;0.276615;0.043732;,
-0.100346;0.363959;0.058844;,
-0.019390;0.361877;0.083941;,
-0.098035;0.232140;0.068796;,
-0.034323;0.221278;0.084522;,
-0.031600;0.274781;0.078110;,
-0.079591;0.276615;0.043732;,
-0.100344;0.363959;0.058844;,
-0.019388;0.361877;0.083941;,
0.003000;0.466850;0.090836;,
-0.038080;0.459598;0.089765;,
-0.075749;0.725892;0.041615;,
-0.054324;0.465391;-0.031056;,
-0.062120;0.366719;-0.034438;,
-0.063937;0.271610;-0.039039;,
-0.066396;0.216290;-0.007690;,
-0.066862;0.143323;0.005213;,
-0.062118;0.366719;-0.034438;,
-0.063935;0.271610;-0.039039;,
-0.066394;0.216290;-0.007690;,
-0.066860;0.143323;0.005213;,
-0.069551;0.065871;0.020587;,
0.103490;0.362763;0.058066;,
0.043737;0.459563;0.089666;,
@@ -2010,7 +2010,7 @@ Frame Body {
0.961585;-0.177193;-0.209658;,
-0.999397;0.033079;0.010577;,
-0.459617;0.257576;0.849945;,
-0.682723;-0.111471;0.722124;,
-0.682722;-0.111471;0.722125;,
-0.978758;-0.185795;0.086682;,
-0.826095;-0.149041;0.543465;,
-0.965224;-0.115181;0.234681;,
@@ -2138,7 +2138,7 @@ Frame Body {
0.677150;0.160075;0.718223;,
0.990819;0.073898;0.113215;,
0.121059;0.855801;-0.502940;,
0.933202;0.358001;-0.031133;,
0.933202;0.358001;-0.031135;,
-0.627127;0.461638;-0.627377;,
-0.860032;0.456099;-0.228732;,
-0.000328;-1.000000;-0.000308;,
@@ -2146,7 +2146,7 @@ Frame Body {
-0.443922;-0.068516;-0.893442;,
-0.724820;-0.051916;-0.686979;,
-0.594439;-0.231924;-0.769970;,
-0.689851;-0.228381;-0.686984;,
-0.689852;-0.228381;-0.686983;,
-0.785319;-0.240066;-0.570651;,
-0.874839;0.462767;-0.143189;,
0.062917;-0.968699;-0.240131;,
@@ -2381,11 +2381,11 @@ Frame Body {
0.036996;-0.986471;0.159705;,
0.701094;-0.707032;0.092590;,
0.756356;0.026337;0.653630;,
0.962819;-0.195704;0.186225;,
0.935898;-0.351633;-0.021194;,
0.962819;-0.195704;0.186223;,
0.935898;-0.351633;-0.021196;,
0.827126;0.095610;0.553824;,
-0.637238;-0.197838;0.744841;,
-0.745288;0.007857;0.666697;,
-0.637237;-0.197840;0.744841;,
-0.745287;0.007855;0.666698;,
-0.830051;0.144789;-0.538564;,
-0.976775;-0.202541;-0.069908;,
-0.723332;0.609303;0.324870;,
@@ -2412,7 +2412,7 @@ Frame Body {
-0.945712;0.178206;-0.271792;,
0.919506;0.368350;0.137211;,
-0.998656;-0.019605;0.047970;,
-0.096894;0.388798;-0.916214;,
-0.096896;0.388798;-0.916214;,
-0.924006;0.061242;0.377441;,
-0.646312;0.058203;0.760850;,
-0.313381;0.017355;0.949469;,
@@ -2421,13 +2421,13 @@ Frame Body {
-0.902236;-0.342997;0.261386;,
-0.209258;-0.230513;0.950303;,
-0.359565;0.188462;-0.913890;,
0.049290;0.410911;-0.910342;,
0.049288;0.410912;-0.910342;,
0.899157;-0.185837;0.396209;,
0.434062;-0.323438;0.840820;,
0.250157;-0.624900;0.739542;,
-0.893129;-0.228413;-0.387489;,
-0.709484;-0.061721;-0.702013;,
0.271647;0.293034;-0.916700;,
-0.709485;-0.061721;-0.702012;,
0.271646;0.293035;-0.916700;,
-0.919897;-0.209954;-0.331223;,
-0.866705;0.393518;-0.306539;,
-0.904270;0.325087;-0.276793;,
@@ -8752,25 +8752,25 @@ AnimationSet Bob_FH_Item {
{ Bip01_Prop1 }
AnimationKey R {
AnimationKey {
0;
2;
0;4;0.396751,0.555883,0.577866,0.446826;;,
3200;4;0.396751,0.555883,0.577866,0.446826;;;
2400;4;0.396751,0.555883,0.577866,0.446826;;;
}
AnimationKey S {
AnimationKey {
1;
2;
0;3;1.000000,1.000000,1.000000;;,
3200;3;1.000000,1.000000,1.000000;;;
0;3;1.000000,0.999999,1.000000;;,
2400;3;1.000000,0.999999,1.000000;;;
}
AnimationKey T {
AnimationKey {
2;
2;
0;3;-0.043693,-0.107672,-0.128372;;,
2400;3;-0.043693,-0.107672,-0.128372;;;
0;3;-0.043693,-0.079872,-0.128372;;,
2400;3;-0.043693,-0.079872,-0.128372;;;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -5,9 +5,8 @@
-- Override on GameStart
local function doOverride()
-- SwapIt is better, I'd rather use their features than mine.
---- Hopefully we can get compatibility. :)
if getActivatedMods():contains('SwapIt') then print("Not overriding because SwapIt is enabled!") return end
-- SwapIt support was merged! :D Use that if installed
if getActivatedMods():contains('SwapIt') then return end
local _ISHotbar_equipItem = ISHotbar.equipItem

View File

@@ -1,187 +0,0 @@
------------------------------------------
-- Fancy Handwork Init
------------------------------------------
FancyHands = FancyHands or {}
------------------------------------------
-- Fancy Handwork Configuration
------------------------------------------
FancyHands.config = {
applyRotationL = true
}
------------------------------------------
-- Fancy Handwork Utilities
------------------------------------------
function isFHModKeyDown()
return isKeyDown(getCore():getKey('FHModifier'))
end
local count = 0
local FH_OnTick = function()
if not FancyHands.config.applyRotationL then return end
-- Control to not get spammed
count = count + 1
if count % 30 ~= 0 then return end
count = 0
-- First figure out the local player's stuff
local player = getSpecificPlayer(0)
if not player:getModData().FancyHandwork then
player:getModData().FancyHandwork = {}
end
for vari, val in pairs(player:getModData().FancyHandwork) do
player:setVariable(vari, val)
end
if isClient() then
ModData.request("animapi")
local md = ModData.getOrCreate("animapi")
for id, obj in pairs(md) do
local p = getPlayerByOnlineID(id)
if p and p ~= player then
for vari, val in pairs(obj) do
if val == "nil" then
p:clearVariable(vari)
else
p:setVariable(vari, val)
end
end
end
end
end
end
local FH_OnCreatePlayer = function(playerNum, playerObj)
if isClient() then
ModData.request("animapi")
if not ModData.getOrCreate("animapi")[playerObj:getOnlineID()] then
ModData.getOrCreate("animapi")[playerObj:getOnlineID()]= {}
end
ModData.transmit("animapi")
end
if not playerObj:getModData().FancyHandwork then
playerObj:getModData().FancyHandwork = {}
end
end
local FHswapItems = function(character)
local primary = character:getPrimaryHandItem()
local secondary = character:getSecondaryHandItem()
if (primary or secondary) and (primary ~= secondary) then
ISTimedActionQueue.add(FHSwapHandsAction:new(character, primary, secondary, 10))
end
end
local FHswapItemsMod = function(character)
if isFHModKeyDown() then
FHswapItems(character)
end
end
local FHDebugKey = function(character)
if isFHModKeyDown() then
character:Say("I'm not sure what to do with my hands.")
--ISTimedActionQueue.add(FHHamboneAction:new(character))
end
end
local FHcreateBindings = function()
local FHbindings = {
{
value = '[FancyHandwork]'
},
{
value = 'FHModifier',
key = Keyboard.KEY_LCONTROL,
},
{
value = 'FHSwapKey',
action = FHswapItems,
key = 0,
},
{
value = 'FHSwapKeyMod',
action = FHswapItemsMod,
key = Keyboard.KEY_E,
},
-- {
-- value = 'FHDebugKey',
-- action = FHDebugKey,
-- key = Keyboard.KEY_Y,
-- }
}
for _, bind in ipairs(FHbindings) do
if bind.key or not bind.action then
table.insert(keyBinding, { value = bind.value, key = bind.key })
end
end
local FHhandleKeybinds = function(key)
local player = getSpecificPlayer(0)
local action
for _,bind in ipairs(FHbindings) do
if key == getCore():getKey(bind.value) then
action = bind.action
break
end
end
if not action or isGamePaused() or not player or player:isDead() then
return
end
action(player)
end
Events.OnGameStart.Add(function()
Events.OnKeyPressed.Add(FHhandleKeybinds)
end)
end
local function FancyHandwork()
FHcreateBindings()
if ModOptions and ModOptions.getInstance then
local function apply(data)
local values = data.settings.options
FancyHands.config.applyRotationL = values.applyRotationL
end
local FHCONFIG = {
options_data = {
applyRotationL = {
default = true,
name = getText("UI_ModOptions_FHfixLHandRotation"),
OnApplyMainMenu = apply,
OnApplyInGame = apply
}
},
mod_id = "FancyHandwork",
mod_shortname = "FH",
mod_fullname = getText("UI_optionscreen_binding_FancyHandwork"),
mod_version = "1.0"
}
local optionsInstance = ModOptions:getInstance(FHCONFIG)
ModOptions:loadFile()
Events.OnGameStart.Add(function()
apply({settings = FHCONFIG})
end)
end
Events.OnCreatePlayer.Add(FH_OnCreatePlayer)
Events.OnTick.Add(FH_OnTick)
print(getText("UI_Init_FancyHandwork"))
end
FancyHandwork()

View File

@@ -5,49 +5,19 @@
local _ISAttachItemHotbar_start = ISAttachItemHotbar.start
function ISAttachItemHotbar:start()
_ISAttachItemHotbar_start(self)
self.mdata = {}
if isClient() then
local md = ModData.getOrCreate("animapi")
if not md[self.character:getOnlineID()] then
md[self.character:getOnlineID()] = {}
end
self.mdata = md[self.character:getOnlineID()]
end
self.FHIgnore = true
self:setActionAnim("AttachItem")
if self.item == self.character:getPrimaryHandItem() then
self.character:clearVariable("FHAnimHand")
self.mdata["FHAnimHand"] = nil
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
elseif self.item == self.character:getSecondaryHandItem() then
self.character:setVariable("FHAnimHand", "left")
self.mdata["FHAnimHand"] = "left"
self:setAnimVariable("FHAnimHand", "left")
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
else
if ZombRand(3) == 1 then
self.character:setVariable("FHAnimHand", "left")
self.mdata["FHAnimHand"] = "left"
self:setAnimVariable("FHAnimHand", "left")
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
else
self.character:clearVariable("FHAnimHand")
self.mdata["FHAnimHand"] = nil
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
end
end
if isClient() then
ModData.transmit("animapi")
end
end
local _ISAttachItemHotbar_animEvent = ISAttachItemHotbar.animEvent
function ISAttachItemHotbar:animEvent(event, parameter)
_ISAttachItemHotbar_animEvent(self, event, parameter)
if event == 'attachConnect' then
self.character:clearVariable("FHAnimHand")
self.mdata["FHAnimHand"] = nil
if isClient() then
ModData.transmit("animapi")
end
end
end

View File

@@ -7,42 +7,24 @@ local _ISDetachItemHotbar_start = ISDetachItemHotbar.start
function ISDetachItemHotbar:start()
-- Run the base, then override
_ISDetachItemHotbar_start(self)
self.mdata = {}
if isClient() then
local md = ModData.getOrCreate("animapi")
if not md[self.character:getOnlineID()] then
md[self.character:getOnlineID()] = {}
end
self.mdata = md[self.character:getOnlineID()]
end
self.FHIgnore = true
if self.item == self.character:getPrimaryHandItem() then
self.character:clearVariable("FHAnimHand")
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
self.mdata["FHAnimHand"] = nil
elseif self.item == self.character:getSecondaryHandItem() then
self.character:setVariable("FHAnimHand", "left")
self:setAnimVariable("FHAnimHand", "left")
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
self.mdata["FHAnimHand"] = "left"
else
if ZombRand(3) == 1 then
self.character:setVariable("FHAnimHand", "left")
self:setAnimVariable("FHAnimHand", "left")
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
self.mdata["FHAnimHand"] = "left"
else
self.character:clearVariable("FHAnimHand")
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
self.mdata["FHAnimHand"] = nil
end
end
local hotbar = getPlayerHotbar(self.character:getPlayerNum())
hotbar.chr:removeAttachedItem(self.item)
if isClient() then
ModData.transmit("animapi")
end
end
local _ISDetachItemHotbar_animEvent = ISDetachItemHotbar.animEvent
@@ -52,28 +34,13 @@ function ISDetachItemHotbar:animEvent(event, parameter)
-- Fix the models
if event == 'detachConnect' then
-- Fix updating the inventory
self.character:getInventory():setDrawDirty(true)
--self.character:getInventory():setDrawDirty(true)
getPlayerData(self.character:getPlayerNum()).playerInventory:refreshBackpacks()
--self.character:getInventory():refreshBackpacks()
if self.character:getPrimaryHandItem() == self.character:getSecondaryHandItem() then -- special case if 2handed
if self.animHand == "left" then
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
else
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
end
if self.animHand == "left" then
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
else
if self.animHand == "left" then
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
else
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
end
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
end
end
self.character:clearVariable("FHAnimHand")
self.mdata["FHAnimHand"] = nil
if isClient() then
ModData.transmit("animapi")
end
end

View File

@@ -9,76 +9,29 @@ function ISEquipWeaponAction:start()
-- So, items in your other hand are unequiped if a handgun is equipped
--- i.e. a handgun in primary hand will be unequiped if a secondary item is equipped and vice versa
--- this should restore this feature. First, we cache the weapon if needed
self.hgun = nil
if instanceof(self.item, "HandWeapon") and not self.twoHands then
if self.primary then
self.hgun = self.character:getSecondaryHandItem()
else
self.hgun = self.character:getPrimaryHandItem()
end
if instanceof(self.item, "HandWeapon") and not self.twoHands and self.character:getPrimaryHandItem() ~= self.character:getSecondaryHandItem() and self.item ~= self.character:getPrimaryHandItem() and self.item ~= self.character:getSecondaryHandItem() then
self.hgun = (self.primary and self.character:getSecondaryHandItem()) or self.character:getPrimaryHandItem()
end
-- Run the base, then override
_ISEquipWeaponAction_start(self)
self.mdata = {}
if isClient() then
local md = ModData.getOrCreate("animapi")
if not md[self.character:getOnlineID()] then
md[self.character:getOnlineID()] = {}
end
self.mdata = md[self.character:getOnlineID()]
end
self.FHIgnore = true
-- Check if in second hand or not two handed and use left hand, default is primary hand
if not self.primary and not self.twoHands then
self.character:setVariable("FHAnimHand", "left")
self.mdata["FHAnimHand"] = "left"
self:setAnimVariable("FHAnimHand", "left")
self.LHand = true
if instanceof(self.item, "HandWeapon") then
if self.item:isRanged() then
self.character:setVariable("LeftHandMask", "holdinghgunleft")
self.mdata["LeftHandMask"] = "holdinghgunleft"
self.character:getModData().FancyHandwork["LeftHandMask"] = "holdinghgunleft"
else
self.character:setVariable("LeftHandMask", "holdingitemleft")
self.mdata["LeftHandMask"] = "holdingitemleft"
self.character:getModData().FancyHandwork["LeftHandMask"] = "holdingitemleft"
end
else
self.character:clearVariable("LeftHandMask")
self.mdata["LeftHandMask"] = "nil"
self.character:getModData().FancyHandwork["LeftHandMask"] = nil
end
if self.fromHotbar then
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
end
else
self.character:clearVariable("FHAnimHand")
self.mdata["FHAnimHand"] = "nil"
self.character:getModData().FancyHandwork["FHAnimHand"] = nil
if self.fromHotbar and not self.twoHands then
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
end
if self.twoHands or not self.character:getSecondaryHandItem() then
self.character:clearVariable("LeftHandMask")
self.mdata["LeftHandMask"] = "nil"
self.character:getModData().FancyHandwork["LeftHandMask"] = nil
end
end
if self.fromHotbar then
local hotbar = getPlayerHotbar(self.character:getPlayerNum())
hotbar.chr:removeAttachedItem(self.item)
end
if isClient() then
ModData.transmit("animapi")
end
end
end
local _ISEquipWeaponAction_perform = ISEquipWeaponAction.perform
@@ -94,11 +47,11 @@ function ISEquipWeaponAction:perform()
self.character:setPrimaryHandItem(self.hgun)
end
end
-- Fix the models, idk why they always blank out the secondary item. :(
-- Fix the models, idk why they always blank out the secondary item. :(
if self.fromHotbar and not self.twoHands then
if self.LHand then
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
else
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
end

View File

@@ -10,11 +10,7 @@ require "TimedActions/ISBaseTimedAction"
FHSwapHandsAction = ISBaseTimedAction:derive("FHSwapHandsAction")
function FHSwapHandsAction:isValid()
if self.character:getPrimaryHandItem() or self.character:getSecondaryHandItem() then
return true
else
return false
end
return ((self.character:getPrimaryHandItem() or self.character:getSecondaryHandItem()) ~= nil)
end
function FHSwapHandsAction:update()
@@ -28,30 +24,21 @@ end
function FHSwapHandsAction:start()
local sound = nil
self.FHIgnore = true
if self.itemL then
self.itemL:setJobType(getText("ContextMenu_Equip_Primary") .. " " .. self.itemL:getName())
self.itemL:setJobDelta(0.0)
sound = self.itemL:getUnequipSound()
end
if self.itemR then
self.itemR:setJobType(getText("ContextMenu_Equip_Secondary") .. " " .. self.itemR:getName())
self.itemR:setJobDelta(0.0)
if not sound then
sound = self.itemR:getUnequipSound()
end
end
self:setActionAnim("EquipItem")
self:setOverrideHandModels(self.itemR, self.itemL)
if sound then
self.sound = self.character:getEmitter():playSound(sound)
end
end
function FHSwapHandsAction:stop()
if self.sound then
self.character:getEmitter():stopSound(self.sound)
end
if self.itemL then
self.itemL:setJobDelta(0.0)
end
@@ -62,10 +49,6 @@ function FHSwapHandsAction:stop()
end
function FHSwapHandsAction:perform()
if self.sound then
self.character:getEmitter():stopSound(self.sound)
end
if self.itemL then
self.itemL:getContainer():setDrawDirty(true)
self.itemL:setJobDelta(0.0)
@@ -75,43 +58,8 @@ function FHSwapHandsAction:perform()
self.itemR:setJobDelta(0.0)
end
self.character:setPrimaryHandItem(nil)
self.character:setSecondaryHandItem(nil)
self.mdata = {}
if isClient() then
local md = ModData.getOrCreate("animapi")
if not md[self.character:getOnlineID()] then
md[self.character:getOnlineID()] = {}
end
self.mdata = md[self.character:getOnlineID()]
end
if self.itemL then
self.character:setPrimaryHandItem(self.itemL)
end
if self.itemR and FancyHands.config.applyRotationL then
self.character:setSecondaryHandItem(self.itemR)
if self.itemR:isRanged() then
self.character:setVariable("LeftHandMask", "holdinghgunleft")
self.mdata["LeftHandMask"] = "holdinghgunleft"
self.character:getModData().FancyHandwork["LeftHandMask"] = "holdinghgunleft"
else
self.character:setVariable("LeftHandMask", "holdingitemleft")
self.mdata["LeftHandMask"] = "holdingitemleft"
self.character:getModData().FancyHandwork["LeftHandMask"] = "holdingitemleft"
end
else
self.mdata["LeftHandMask"] = "nil"
self.character:getModData().FancyHandwork["LeftHandMask"] = nil
end
if isClient() then
ModData.transmit("animapi")
end
getPlayerInventory(self.character:getPlayerNum()):refreshBackpacks()
self.character:setPrimaryHandItem(self.itemL)
self.character:setSecondaryHandItem(self.itemR)
-- needed to remove from queue / start next.
ISBaseTimedAction.perform(self);

View File

@@ -6,37 +6,18 @@ local _ISUnequipAction_start = ISUnequipAction.start
function ISUnequipAction:start()
-- Run the base, then override
_ISUnequipAction_start(self)
self.mdata = {}
if isClient() then
local md = ModData.getOrCreate("animapi")
if not md[self.character:getOnlineID()] then
md[self.character:getOnlineID()] = {}
end
self.mdata = md[self.character:getOnlineID()]
end
self.FHIgnore = true
-- Check for second hand item that's not 2-handed, use left hand
-- else use right
if self.item == self.character:getSecondaryHandItem() and self.character:getPrimaryHandItem() ~= self.character:getSecondaryHandItem() then
self.character:setVariable("FHAnimHand", "left")
self.mdata["FHAnimHand"] = "left"
self:setAnimVariable("FHAnimHand", "left")
if self.fromHotbar then
self:setOverrideHandModels(self.character:getPrimaryHandItem(), self.item)
end
self.character:clearVariable("LeftHandMask")
self.mdata["LeftHandMask"] = "nil"
self.character:getModData().FancyHandwork["LeftHandMask"] = nil
else
self.character:clearVariable("FHAnimHand")
self.mdata["FHAnimHand"] = "nil"
if self.fromHotbar and self.character:getPrimaryHandItem() ~= self.character:getSecondaryHandItem() then
self:setOverrideHandModels(self.item, self.character:getSecondaryHandItem())
end
end
if isClient() then
ModData.transmit("animapi")
end
end

View File

@@ -0,0 +1,203 @@
--- Various overrides for functions that need animations.
------------------
-- Unused by the base, but we will call the base anyways
local _ISLightActions_start = ISLightActions.start
function ISLightActions:start()
_ISLightActions_start(self)
self:setActionAnim(CharacterActionAnims.Craft)
end
------------------
-- Add the Craft animation to the upgrade
local _ISUpgradeWeapon_start = ISUpgradeWeapon.start
function ISUpgradeWeapon:start()
-- remove the item from being attached
local hotbar = getPlayerHotbar(self.character:getPlayerNum())
if hotbar:isInHotbar(self.weapon) then
hotbar.chr:removeAttachedItem(self.weapon)
end
self:setActionAnim(CharacterActionAnims.Craft)
self:setOverrideHandModels(self.part, self.weapon)
_ISUpgradeWeapon_start(self)
end
------------------
-- Add the Craft animation to the remove upgrade
local _ISRemoveWeaponUpgrade_start = ISRemoveWeaponUpgrade.start
function ISRemoveWeaponUpgrade:start()
-- remove the item from being attached
local hotbar = getPlayerHotbar(self.character:getPlayerNum())
if hotbar:isInHotbar(self.weapon) then
hotbar.chr:removeAttachedItem(self.weapon)
end
self:setActionAnim(CharacterActionAnims.Craft)
self:setOverrideHandModels(nil, self.weapon)
_ISRemoveWeaponUpgrade_start(self)
end
------------------
-- Just add the Craft animation here too.
local _ISFixAction_start = ISFixAction.start
function ISFixAction:start()
-- remove the item from being attached
local hotbar = getPlayerHotbar(self.character:getPlayerNum())
if hotbar:isInHotbar(self.item) then
hotbar.chr:removeAttachedItem(self.item)
end
self:setActionAnim(CharacterActionAnims.Craft)
self:setOverrideHandModels(self.fixing:haveThisFixer(self.character, self.fixer, self.item), self.item)
_ISFixAction_start(self)
end
------------------
-- Index all of the available animations
local WearAnims = {}
Events.OnGameStart.Add(function()
for _,v in pairs(WearClothingAnimations) do
WearAnims[#WearAnims+1] = v
end
end)
-- Adds a random animation while drying yourself
---- If this goes longer than 1 tick, then change animation
local _ISDryMyself_update = ISDryMyself.update
function ISDryMyself:update()
-- I'll just do mine first
if self.tick >= self.timer then
self:setAnimVariable("WearClothingLocation", WearAnims[ZombRand(#WearAnims)+1] or "")
end
_ISDryMyself_update(self)
end
-- Set the Animation with a radom initial location
local _ISDryMyself_start = ISDryMyself.start
function ISDryMyself:start()
self:setActionAnim("WearClothing")
self:setAnimVariable("WearClothingLocation", WearAnims[ZombRand(#WearAnims)+1] or "")
self:setOverrideHandModels(nil, nil)
_ISDryMyself_start(self)
end
------------------
-- Set the loot animation for the Transfer
local _ISFinalizeDealAction_start = ISFinalizeDealAction.start
function ISFinalizeDealAction:start()
self:setActionAnim("Loot")
self:setAnimVariable("LootPosition", "Mid")
self.FHIgnore = true
_ISFinalizeDealAction_start(self)
end
------------------
-- Add the Recipe animation there too
local _ISAddItemInRecipe_start = ISAddItemInRecipe.start
function ISAddItemInRecipe:start()
local base = nil
if luautils.stringStarts(self.baseItem:getType(), "GridlePan") or luautils.stringStarts(self.baseItem:getType(), "GriddlePan") then
base = "GridlePan"
elseif luautils.stringStarts(self.baseItem:getType(), "WaterSaucepan") or luautils.stringStarts(self.baseItem:getType(), "Saucepan") then
base = "SaucePan"
elseif luautils.stringStarts(self.baseItem:getType(), "WaterPot") or luautils.stringStarts(self.baseItem:getType(), "Pot") then
base = "CookingPot"
elseif luautils.stringStarts(self.baseItem:getType(), "RoastingPan") or luautils.stringStarts(self.baseItem:getType(), "RoastingPan") then
base = "RoastingPan"
else
base = self.baseItem:getStaticModel() or "FryingPan"
end
self:setAnimVariable("BaseType", base)
self:setActionAnim("AddToPan")
self:setOverrideHandModelsString(self.usedItem:getStaticModel(), base)
_ISAddItemInRecipe_start(self)
end
-- TODO:
--- I would like to apply the same tweak to the crafting action.
---- let the props take precedence, but also make it so more object show up in hand
---- plus i just made those animations, and putting noodles into a pot is a crafting recipe, so don't work
---- I've been working on these animations, and trying various ways to get things working with hand models
----- i'm just kinda done with that for now. lmao
local _ISEmptyRainBarrelAction_start = ISEmptyRainBarrelAction.start
function ISEmptyRainBarrelAction:start()
self:setActionAnim(CharacterActionAnims.Pour)
self:setAnimVariable("FoodType", "Pot")
self:setOverrideHandModels(nil, nil)
_ISEmptyRainBarrelAction_start(self)
end
local _ISStopAlarmClockAction_start = ISStopAlarmClockAction.start
function ISStopAlarmClockAction:start()
self:setActionAnim("EquipItem")
if not self.character:isEquipped(self.alarm) then
self:setOverrideHandModels(nil, self.alarm)
end
self.FHIgnore = true
_ISStopAlarmClockAction_start(self)
end
local _ISConsolidateDrainable_start = ISConsolidateDrainable.start
function ISConsolidateDrainable:start()
self:setActionAnim("EquipItem")
self:setOverrideHandModels(self.drainable, self.intoItem)
_ISConsolidateDrainable_start(self)
end
local _ISConsolidateDrainableAll_start = ISConsolidateDrainableAll.start
function ISConsolidateDrainableAll:start()
self:setActionAnim("EquipItem")
local item
for _,i in pairs(self.consolidateList) do
item = i
break
end
self:setOverrideHandModels(item, self.drainable)
_ISConsolidateDrainableAll_start(self)
end
--- Lets make some better pour animations sometime
local _ISBBQLightFromKindle_start = ISBBQLightFromKindle.start
function ISBBQLightFromKindle:start()
self:setActionAnim("Loot")
self.character:SetVariable("LootPosition", "Mid")
self.FHIgnore = true
_ISBBQLightFromKindle_start(self)
end
local _ISFireplaceLightFromKindle_start = ISFireplaceLightFromKindle.start
function ISFireplaceLightFromKindle:start()
self:setActionAnim("Loot")
self.character:SetVariable("LootPosition", "Low")
self.FHIgnore = true
_ISFireplaceLightFromKindle_start(self)
end
-- I have included the following fixes in 3 mods now. lmao
--- I will make this the definitive fix for this, and other mods will defer to this
local _ISClothingExtraAction_new = ISClothingExtraAction.new
function ISClothingExtraAction:new(...)
local o = _ISClothingExtraAction_new(self, ...)
o.stopOnAim = false
o.stopOnWalk = false
o.stopOnRun = true
o.maxTime = 25
o.useProgressBar = true
if o.character:isTimedActionInstant() then
o.maxTime = 1
end
return o
end
-- Not a hand tweak, but since i'm fixing stuff may as well
local _ISWearClothing_new = ISWearClothing.new
function ISWearClothing:new(...)
local o = _ISWearClothing_new(self, ...)
o.stopOnAim = false
o.stopOnWalk = false
o.stopOnRun = true
return o
end

View File

@@ -0,0 +1,117 @@
-- These just add the "boop!"
----
-- Why do these on "perform?"
----
--- The perform function is the only function to be guaranteed to run on success
--- it is not run when the action is canceled, so we don't do our bit
local _ISToggleStoveActione_perform = ISToggleStoveAction.perform
function ISToggleStoveAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = 0 }))
_ISToggleStoveActione_perform(self)
end
local _ISToggleLightAction_perform = ISToggleLightAction.perform
function ISToggleLightAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = 0 }))
_ISToggleLightAction_perform(self)
end
local _ISToggleLightSourceAction_perform = ISToggleLightSourceAction.perform
function ISToggleLightSourceAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.lightSource, extra = 0 }))
_ISToggleLightSourceAction_perform(self)
end
local _ISToggleComboWasherDryer_perform = ISToggleComboWasherDryer.perform
function ISToggleComboWasherDryer:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = 0 }))
_ISToggleComboWasherDryer_perform(self)
end
local _ISToggleClothingWasher_perform = ISToggleClothingWasher.perform
function ISToggleClothingWasher:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = 0 }))
_ISToggleClothingWasher_perform(self)
end
local _ISToggleClothingDryer_perform = ISToggleClothingDryer.perform
function ISToggleClothingDryer:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = 0 }))
_ISToggleClothingDryer_perform(self)
end
local _ISSetComboWasherDryerMode_perform = ISSetComboWasherDryerMode.perform
function ISSetComboWasherDryerMode:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = 0 }))
_ISSetComboWasherDryerMode_perform(self)
end
local _ISOvenUITimedAction_perform = ISOvenUITimedAction.perform
function ISOvenUITimedAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = 0 }))
_ISOvenUITimedAction_perform(self)
end
local _ISOpenCloseDoor_perform = ISOpenCloseDoor.perform
function ISOpenCloseDoor:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, FancyHands.checkDoor(self.item, self.character, true)))
_ISOpenCloseDoor_perform(self)
end
local _ISLockDoor_perform = ISLockDoor.perform
function ISLockDoor:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, FancyHands.checkDoor(self.door, self.character, true)))
_ISLockDoor_perform(self)
end
local _ISOpenCloseCurtain_perform = ISOpenCloseCurtain.perform
function ISOpenCloseCurtain:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character,FancyHands.checkDoor(self.item, self.character, true)))
_ISOpenCloseCurtain_perform(self)
end
local _ISPadlockAction_perform = ISPadlockAction.perform
function ISPadlockAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.thump, extra = 1 }))
_ISPadlockAction_perform(self)
end
local _ISBBQInfoAction_perform = ISBBQInfoAction.perform
function ISBBQInfoAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.bbq, extra = 1 }))
_ISBBQInfoAction_perform(self)
end
local _ISCampingInfoAction_perform = ISCampingInfoAction.perform
function ISCampingInfoAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.campfire, extra = 1 }))
_ISCampingInfoAction_perform(self)
end
local _ISFireplaceInfoAction_perform = ISFireplaceInfoAction.perform
function ISFireplaceInfoAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.fireplace, extra = -1 }))
_ISFireplaceInfoAction_perform(self)
end
local _ISGeneratorInfoAction_perform = ISGeneratorInfoAction.perform
function ISGeneratorInfoAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.object, extra = -1 }))
_ISGeneratorInfoAction_perform(self)
end
local _ISInventoryPage_toggleStove = ISInventoryPage.toggleStove
function ISInventoryPage:toggleStove()
_ISInventoryPage_toggleStove(self)
if UIManager.getSpeedControls() and UIManager.getSpeedControls():getCurrentGameSpeed() == 0 then
return
end
ISTimedActionQueue.add(FHBoopAction:new(getSpecificPlayer(self.player), { item = self.inventoryPane.inventory:getParent(), extra = 0 }))
end
local _ISRadioAction_perform = ISRadioAction.perform
function ISRadioAction:perform()
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.device, extra = 0 }))
_ISRadioAction_perform(self)
end

View File

@@ -0,0 +1,118 @@
--- Various overrides for functions that need animations.
-- Vehicles Edition
------------------
-- Just add our low "boop" animation and hold it
local _ISDeflateTire_start = ISDeflateTire.start
function ISDeflateTire:start()
_ISDeflateTire_start(self)
self:setActionAnim("VehicleWorkOnTire")
end
local _ISInflateTire_start = ISInflateTire.start
function ISInflateTire:start()
_ISInflateTire_start(self)
self:setActionAnim("VehicleWorkOnTire")
end
local doorType = {
["DoorRear"] = 0,
["EngineDoor"] = 2,
["TrunkDoor"] = 1
}
local _ISOpenVehicleDoor_start = ISOpenVehicleDoor.start
function ISOpenVehicleDoor:start()
_ISOpenVehicleDoor_start(self)
self.action:setUseProgressBar((SandboxVars.FancyHandwork and not SandboxVars.FancyHandwork.HideVehicleWalkProgressBar) or false)
if not self.seat or not self.character:isSeatedInVehicle() then
self:setActionAnim((self.part:getDoor() and doorType[self.part:getId()] and "FH_Boop_Dual") or ((ZombRand(3) == 1) and "FH_BoopL") or "FH_Boop")
-- Doors with animations break if set higher
self.action:setTime(10)
end
end
local _ISCloseVehicleDoor_start = ISCloseVehicleDoor.start
function ISCloseVehicleDoor:start()
_ISCloseVehicleDoor_start(self)
self.action:setUseProgressBar((SandboxVars.FancyHandwork and not SandboxVars.FancyHandwork.HideVehicleWalkProgressBar) or false)
if not self.seat or not self.character:isSeatedInVehicle() then
local trunkorhood = doorType[self.part:getId()]
self:setActionAnim((self.part:getDoor() and trunkorhood and "FH_Boop_Dual") or ((ZombRand(3) == 1) and "FH_BoopL") or "FH_Boop")
if trunkorhood then
self:setAnimVariable("BoopPosition", "High")
-- Doors with animations break if set higher
self.action:setTime(10)
else
-- Doors with animations break if this is set higher, but any lower and the hand just "flickers" a bit
self.action:setTime(8)
end
end
end
local _ISTakeEngineParts_start = ISTakeEngineParts.start
function ISTakeEngineParts:start()
_ISTakeEngineParts_start(self)
self:setOverrideHandModels(self.item, nil)
self:setActionAnim("FH_CarWrenchRepair")
end
local _ISRepairEngine_start = ISRepairEngine.start
function ISRepairEngine:start()
_ISRepairEngine_start(self)
self:setOverrideHandModels(self.item, nil)
self:setActionAnim("FH_CarWrenchRepair")
end
local _ISInstallVehiclePart_start = ISInstallVehiclePart.start
function ISInstallVehiclePart:start()
_ISInstallVehiclePart_start(self)
if self.part:getId():contains("Suspension") then
self:setActionAnim("VehicleWorkOnTire")
elseif self.part:getId():contains("Door") then
self:setActionAnim("FH_CarWrenchRepair")
end
end
local _ISUninstallVehiclePart_start = ISUninstallVehiclePart.start
function ISUninstallVehiclePart:start()
_ISUninstallVehiclePart_start(self)
if self.part:getId():contains("Suspension") then
self:setActionAnim("VehicleWorkOnTire")
elseif self.part:getId():contains("Door") then
self:setActionAnim("FH_CarWrenchRepair")
end
end
local _ISUnlockVehicleDoor_start = ISUnlockVehicleDoor.start
function ISUnlockVehicleDoor:start()
-- Have to call my stuff first, because start just forceCompletes in vanilla
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.vehicle, extra = 0 }))
_ISUnlockVehicleDoor_start(self)
end
local _ISLockVehicleDoor_perform = ISLockVehicleDoor.perform
function ISLockVehicleDoor:perform()
-- But then, this one works like a normal TimedAction. Consistent much? xD
_ISLockVehicleDoor_perform(self)
ISTimedActionQueue.add(FHBoopAction:new(self.character, { item = self.vehicle, extra = 0 }))
end
local _ISEnterVehicle_start = ISEnterVehicle.start
function ISEnterVehicle:start()
_ISEnterVehicle_start(self)
self.action:setUseProgressBar((SandboxVars.FancyHandwork and not SandboxVars.FancyHandwork.HideDoorProgressBar) or false)
end
local _ISExitVehicle_start = ISExitVehicle.start
function ISExitVehicle:start()
_ISExitVehicle_start(self)
self.action:setUseProgressBar((SandboxVars.FancyHandwork and not SandboxVars.FancyHandwork.HideDoorProgressBar) or false)
end
local _ISPathFindAction_start = ISPathFindAction.start
function ISPathFindAction:start()
_ISPathFindAction_start(self)
self.action:setUseProgressBar((SandboxVars.FancyHandwork and not SandboxVars.FancyHandwork.HideVehicleWalkProgressBar) or false)
end

View File

@@ -1,33 +1,42 @@
-- Animation Framework for Project Zomboid
---- Code inspired and modifed from "Tsarlib"
if not isClient() and not isServer() then return end
if not isClient() and not isServer() or AnimationFramework then return end
AnimationFramework = true
local AF_InitGlobaModData = function(mod, pack)
if not ModData.exists("animapi") then
local t = ModData.create("animapi")
end
end
-- local AF_InitGlobaModData = function(mod, pack)
-- if not ModData.exists("animapi") then
-- local t = ModData.create("animapi")
-- end
-- end
local AF_ReceiveGlobalModData = function(mod, pack)
if mod ~= "animapi" then return; end;
if not pack then
print("ERROR: OnReceiveGlobalModData in AF_ReceiveGlobalModData " .. (pack or "missing packet."))
else
ModData.add(mod, pack)
-- local AF_ReceiveGlobalModData = function(mod, pack)
-- if mod ~= "animapi" then return; end;
-- if not pack then
-- print("ERROR: OnReceiveGlobalModData in AF_ReceiveGlobalModData " .. (pack or "missing packet."))
-- else
-- ModData.add(mod, pack)
-- end
-- end
-- local AF_CleanGlobalModData = function()
-- local md = ModData.getOrCreate("animapi")
-- for id, _ in pairs(md) do
-- local player = getPlayerByOnlineID(id)
-- if not player then
-- md[id] = nil
-- end
-- end
-- end
-- Events.OnInitGlobalModData.Add(AF_InitGlobaModData)
-- Events.OnReceiveGlobalModData.Add(AF_ReceiveGlobalModData)
-- Events.EveryHours.Add(AF_CleanGlobalModData)
-- Well, this global moddata is no longer needed. So lets do a bit of cleanup
---- I'll remove this eventually
Events.OnGameBoot.Add(function()
if ModData.exists("animapi") then
ModData.remove("animapi")
end
end
local AF_CleanGlobalModData = function()
local md = ModData.getOrCreate("animapi")
for id, _ in pairs(md) do
local player = getPlayerByOnlineID(id)
if not player then
md[id] = nil
end
end
end
Events.OnInitGlobalModData.Add(AF_InitGlobaModData)
Events.OnReceiveGlobalModData.Add(AF_ReceiveGlobalModData)
Events.EveryHours.Add(AF_CleanGlobalModData)
end)

View File

@@ -0,0 +1,48 @@
------
FancyHands = FancyHands or {}
------
local _ISObjectClickHandler_doClickCurtain = ISObjectClickHandler.doClickCurtain
function ISObjectClickHandler.doClickCurtain(object, playerNum, playerObj)
if _ISObjectClickHandler_doClickCurtain(object, playerNum, playerObj) then
FancyHands.doAction(playerObj, FancyHands.checkDoor(object, playerObj, true))
return true
end
return false
end
local _ISObjectClickHandler_doClickDoor = ISObjectClickHandler.doClickDoor
function ISObjectClickHandler.doClickDoor(object, playerNum, playerObj)
if _ISObjectClickHandler_doClickDoor(object, playerNum, playerObj) then
FancyHands.doAction(playerObj, FancyHands.checkDoor(object, playerObj, true, true))
return true
end
return false
end
local _ISObjectClickHandler_doClickLightSwitch = ISObjectClickHandler.doClickLightSwitch
function ISObjectClickHandler.doClickLightSwitch(object, playerNum, playerObj)
if _ISObjectClickHandler_doClickLightSwitch(object, playerNum, playerObj) then
FancyHands.doAction(playerObj, {item = object, extra = 0 })
return true
end
return false
end
local _ISObjectClickHandler_doClickThumpable = ISObjectClickHandler.doClickThumpable
function ISObjectClickHandler.doClickThumpable(object, playerNum, playerObj)
if _ISObjectClickHandler_doClickThumpable(object, playerNum, playerObj) then
FancyHands.doAction(playerObj, FancyHands.checkDoor(object, playerObj, true, true))
return true
end
return false
end
local _ISObjectClickHandler_doClickWindow = ISObjectClickHandler.doClickWindow
function ISObjectClickHandler.doClickWindow(object, playerNum, playerObj)
if _ISObjectClickHandler_doClickWindow(object, playerNum, playerObj) then
FancyHands.doAction(playerObj, FancyHands.checkDoor(object, playerObj, true))
return true
end
return false
end

View File

@@ -0,0 +1,233 @@
------
--- This action is just a small animation for when a player does an action in the world
--- Like if they just opened a door or something
------
FancyHands = FancyHands or {}
------
local curtainType = {
["CurtainLong"] = 1,
["CurtainShort"] = 1,
["CurtainShade"] = 2,
["CurtainSheet"] = 2,
["DoorSheet"] = 2
}
-- Delayed parameter is for when the action is done after
FancyHands.checkWindow = function(obj, playerObj, delayed)
local curtains = false
local type = ""
local open = false
if instanceof(obj, "IsoCurtain") then
curtains = true
type = obj:getSoundPrefix()
open = obj:IsOpen()
elseif instanceof(obj, "IsoWindow") and obj:HasCurtains() then
obj = obj:HasCurtains()
curtains = obj:canInteractWith(playerObj) and isKeyDown(Keyboard.KEY_LSHIFT)
type = obj:getSoundPrefix()
open = obj:IsOpen()
elseif instanceof(obj, "IsoDoor") and obj:HasCurtains() then
curtains = playerObj:getCurrentSquare() == obj:getSheetSquare() and isKeyDown(Keyboard.KEY_LSHIFT)
type = "DoorSheet"
open = obj:isCurtainOpen()
end
--if curtains and not curtains:getSquare():getProperties():Is(IsoFlagType.exterior) and not playerObj:getCurrentSquare():Is(IsoFlagType.exterior) then
if curtains then
local cur = curtainType[type]
if not cur or cur > 1 then
if open then
cur = 101
else
cur = 1
end
end
return {item = obj, extra = cur}
end
return nil
end
FancyHands.doorDecide = function(obj, playerObj, delayed, fromClick)
if (fromClick and isKeyDown(Keyboard.KEY_LSHIFT)) or obj:isDestroyed() then return end
if obj:getProperties():Is("GarageDoor") then
return { item = obj, extra = ((delayed and obj:IsOpen() and -1) or (not delayed and not obj:IsOpen() and -1)) or 101 }
else
return { item = obj, extra = 0 }
end
end
FancyHands.checkDoor = function(obj, playerObj, delayed, fromClick)
local out
if obj and playerObj then
if instanceof(obj, "IsoCurtain") or instanceof(obj, "IsoWindow") then
out = FancyHands.checkWindow(obj, playerObj)
elseif instanceof(obj, "IsoDoor") then
out = FancyHands.checkWindow(obj, playerObj) or FancyHands.doorDecide(obj, playerObj, delayed, fromClick)
elseif instanceof(obj, "IsoThumpable") and obj:isDoor() then
out = FancyHands.checkWindow(obj, playerObj) or FancyHands.doorDecide(obj, playerObj, delayed, fromClick)
end
end
return out
end
FancyHands.checkForSwitch = function(obj, playerObj, dir, doIt)
local square1 = playerObj:getCurrentSquare();
local square2 = square1:getAdjacentSquare(dir)
if square2 == nil then return nil end
local out
-- Lightswitch does not seem to be something you can do via the "E" key by default
if obj and square1:getRoom() then
if (SandboxVars.ElecShutModifier > -1 and getGameTime():getNightsSurvived() < SandboxVars.ElecShutModifier) or square1:haveElectricity() then
-- Light switch on the player's square
for i=0,square1:getObjects():size()-1 do
if instanceof(square1:getObjects():get(i), "IsoLightSwitch") then
--print("Found Lightswitch on Square")
if doIt then
print("Flipping Switch")
end
out = { item = obj, extra = 0 }
break
end
end
-- Light switch on adjacent solidtrans square
if not out and square2:getRoom() and not square2:isSomethingTo(square1) and square2:Is(IsoFlagType.solidtrans) then
for i=0,square2:getObjects():size()-1 do
if instanceof(square2:getObjects():get(i), "IsoLightSwitch") then
--print("Found Lightswitch on Adjacent Square")
if doIt then
print("Flipping Switch")
end
out = { item = obj, extra = 0 }
break
end
end
end
end
end
return out
end
FancyHands.doAction = function(player, item)
if not item or not player then
return
end
--local queue = ISTimedActionQueue.queues[player]
if not ISTimedActionQueue.isPlayerDoingAction(player) then
ISTimedActionQueue.add(FHBoopAction:new(player, item))
end
end
FancyHands.testForAction = function(dir, playerObj)
local playerNum = playerObj:getPlayerNum()
local square1 = playerObj:getCurrentSquare()
local square2 = square1:getAdjacentSquare(dir)
if square2 == nil then return nil end
local found = nil
if not found then
found = FancyHands.checkDoor(playerObj:getContextDoorOrWindowOrWindowFrame(dir), playerObj)
end
if not found then
local vehicle = playerObj:getUseableVehicle()
if vehicle then
local part = vehicle:getUseablePart(playerObj)
if part then
if part:getDoor() and part:getDoor():isLocked() and part:getInventoryItem() then
if part:getId() == "EngineDoor" then
-- Skip the hood
elseif part:getId() == "TrunkDoor" or part:getId() == "DoorRear" then
-- Do the trunk/compartments
found = { item = vehicle, extra = 1 }
else
-- Do the doors
found = { item = vehicle, extra = 0 }
end
end
end
end
end
return found
end
local function getBestAction(player)
if UIManager.getSpeedControls() and UIManager.getSpeedControls():getCurrentGameSpeed() == 0 then return end
if getCell():getDrag(player:getPlayerNum()) then return end
if player:getIgnoreMovement() or player:isAsleep() then return end
if player:getVehicle() then return end
local square = player:getCurrentSquare()
if not square then return end
local dir = player:getDir()
local found = nil
if dir == IsoDirections.NE then
found = FancyHands.testForAction(IsoDirections.N, player)
if not found then
found = FancyHands.testForAction(IsoDirections.E, player)
end
elseif dir == IsoDirections.SE then
found = FancyHands.testForAction(IsoDirections.S, player)
if not found then
found = FancyHands.testForAction(IsoDirections.E, player)
end
elseif dir == IsoDirections.SW then
found = FancyHands.testForAction(IsoDirections.S, player)
if not found then
found = FancyHands.testForAction(IsoDirections.W, player)
end
elseif dir == IsoDirections.NW then
found = FancyHands.testForAction(IsoDirections.N, player)
if not found then
found = FancyHands.testForAction(IsoDirections.W, player);
end
else
found = FancyHands.testForAction(dir, player);
end
-- We already did our action, so stop here
if not found then
local dir1 = nil
local dir2 = nil
if dir == IsoDirections.NW then
dir1 = IsoDirections.S
dir2 = IsoDirections.E
elseif dir == IsoDirections.NE then
dir1 = IsoDirections.S
dir2 = IsoDirections.W
elseif dir == IsoDirections.SE then
dir1 = IsoDirections.N
dir2 = IsoDirections.W
elseif dir == IsoDirections.SW then
dir1 = IsoDirections.N
dir2 = IsoDirections.E
else
dir1 = dir:RotLeft(4) -- 180 degrees
end
if dir1 ~= nil then
found = FancyHands.checkDoor(player:getContextDoorOrWindowOrWindowFrame(dir1), player)
end
if not found and dir2 ~= nil then
found = FancyHands.checkDoor(player:getContextDoorOrWindowOrWindowFrame(dir2), player)
end
end
FancyHands.doAction(player,found)
end
Events.OnGameStart.Add(function()
-- Add this here so its not actually added to the available keybindings, just want the function
FancyHands.addKeyBind({
value = 'Interact',
action = getBestAction,
key = Keyboard.KEY_E,
})
end)

View File

@@ -0,0 +1,168 @@
--- These actions all do a small hand movement now.
FHBoopAction = ISBaseTimedAction:derive("FHBoopAction")
local rearObjects = {
["LightSwitch"] = true,
["LightSource"] = true,
["Stove"] = true,
["ClothingDryer"] = true,
["ClothingWasher"] = true,
["CombinationWasherDryer"] = true,
["Door"] = true,
["Radio"] = true,
["Television"] = true,
}
local function skipInstances(obj)
return not obj or rearObjects[obj:getObjectName()]
end
--character:getModData().FancyHands and not character:getModData().FancyHands.recentMove and (character:getModData().FancyHands.recentMove and not skipInstances(data.item) or true)
local function shouldDoTurn(obj, player)
if not obj or not player or player:isAiming() or not SandboxVars.FancyHandwork or SandboxVars.FancyHandwork.DisableTurn == 1 then return false end
if SandboxVars.FancyHandwork.DisableTurn == 3 then return true end
if SandboxVars.FancyHandwork.TurnBehavior <= 2 then
return (player:getModData().FancyHands and not player:getModData().FancyHands.recentMove)
elseif SandboxVars.FancyHandwork.TurnBehavior == 3 then
return not (skipInstances(obj) or not (player:getModData().FancyHands and not player:getModData().FancyHands.recentMove))
end
return false
end
function FHBoopAction:isValid()
return true;
end
-- blech, I really want this, but turning overrides my animation
function FHBoopAction:waitToStart()
if self.character:isSeatedInVehicle() then
-- If we are in a car, we should just stop here actually
self:forceComplete()
return false
elseif self.turn then
self.character:faceThisObject(self.item)
return self.character:shouldBeTurning()
end
return false
end
function FHBoopAction:isInRearRange()
-- This game is weird man
---- I tried to get the angle between the player and the object but its fucking inconsistent because large numbers, AND fucking light switches
---- isFacingObject returns a value of 1,-1 and 0 represents it being perpendicular (left OR right)
---- This is also SUPER picky, in that moving a step in the same direction can go from 0.4 to -0.1 and below, or in the opposite direction who knows man.
---- So already off, not the best function. I will revisit this, I am way to tired to do the math right now and don't give a shit.
---- This function itself has lost me like 3 days. fuck this for now.
return not (self.character:isFacingObject(self.item, -0.65))
end
function FHBoopAction:doRearDoor(left)
if self.turn or not self:isInRearRange() then return false end
if left == 1 then -- left
self:setActionAnim("FH_Boop_Rear_L")
elseif left == 2 then -- right
self:setActionAnim("FH_Boop_Rear_R")
else
if ZombRand(3) == 1 then
self:setActionAnim("FH_Boop_Rear_L")
else
self:setActionAnim("FH_Boop_Rear_R")
end
end
return true
end
function FHBoopAction:doRearFlick(left)
if self.turn or not self:isInRearRange() then return false end
if left == 1 then -- left
self:setActionAnim("FH_Boop_Rear_Flick_L")
elseif left == 2 then -- right
self:setActionAnim("FH_Boop_Rear_Flick_R")
else
if ZombRand(3) == 1 then
self:setActionAnim("FH_Boop_Rear_Flick_L")
else
self:setActionAnim("FH_Boop_Rear_Flick_R")
end
end
return true
end
function FHBoopAction:doThing(left)
left = left or 0
if instanceof(self.item, "IsoDoor") then
if self:doRearDoor(left) then return end
elseif skipInstances(self.item) then
if self:doRearFlick(left) then return end
end
if left == 1 then -- left
self:setActionAnim("FH_BoopL")
elseif left == 2 then -- right
self:setActionAnim("FH_Boop")
else
if ZombRand(3) == 1 then
self:setActionAnim("FH_BoopL")
else
self:setActionAnim("FH_Boop")
end
end
end
function FHBoopAction:start()
if self.extra > 100 then
self:setAnimVariable("BoopPosition", "High")
self.extra = self.extra - 100
elseif self.extra < 0 then
self:setAnimVariable("BoopPosition", "Low")
self.extra = self.extra * -1
end
if self.extra == 1 then
self:setActionAnim("FH_Boop_Dual")
else
local primary = self.character:getPrimaryHandItem()
local secondary = self.character:getSecondaryHandItem()
if primary then
self:doThing((((primary and secondary) and not self.character:isAiming() and primary ~= secondary) and 0) or 1)
else
self:doThing((not secondary and 0) or 2)
end
end
--self.character
-- set this here again to undo any moodles and such
self.action:setTime(15)
end
function FHBoopAction:stop()
ISBaseTimedAction.stop(self);
end
function FHBoopAction:perform()
-- needed to remove from queue / start next.
ISBaseTimedAction.perform(self);
end
function FHBoopAction:new(character, data)
if not data then return nil end
local o = {}
setmetatable(o, self)
self.__index = self
o.character = character
o.item = data.item
o.extra = data.extra
o.stopOnWalk = false
o.stopOnRun = false
o.maxTime = 15
o.FHIgnore = true
o.useProgressBar = false
o.turn = shouldDoTurn(data.item, character)
return o
end

View File

@@ -0,0 +1,29 @@
Sandbox_EN = {
Sandbox_FancyHandwork = "Fancy Handwork",
Sandbox_FancyHandwork_ExperiencedAim = "Firearm aim animation change level",
Sandbox_FancyHandwork_ExperiencedAim_tooltip = "Player Firearm Level to change to Tactical Aiming animation. <LINE> Set to 0 to always use this. Set to 11 to never.",
Sandbox_FancyHandwork_DisableTurn = "Forced turn to object behavior",
Sandbox_FancyHandwork_DisableTurn_tooltip = "Controls when your character is forced to turn to objects when performing the World Interaction",
Sandbox_FancyHandwork_DT_option1 = "Never do forced turn",
Sandbox_FancyHandwork_DT_option2 = "Do forced turn after turn delay",
Sandbox_FancyHandwork_DT_option3 = "Always do forced turn",
Sandbox_FancyHandwork_TurnDelaySec = "Forced turn delay",
Sandbox_FancyHandwork_TurnDelaySec_tooltip = "When the character is not moving, they will turn to face an object they are interacting with after this many seconds. <LINE> Requires Turn Delay to be enabled.",
Sandbox_FancyHandwork_TurnBehavior = "Rear Action Animation Behavior",
Sandbox_FancyHandwork_TurnBehavior_tooltip = "Choose how often characters play the Rear Animations instead of Turning. <LINE> Notes: Character will still turn to objects that do not have a rear animation unless forced turn is disabled. <LINE> Turn delay or disabled turns must be selected to show rear animations. 'Always do forced turn' prevents rear animations.",
Sandbox_FancyHandwork_TB_option1 = "Never do rear animations",
Sandbox_FancyHandwork_TB_option2 = "Do rear animations until turn delay",
Sandbox_FancyHandwork_TB_option3 = "Always do rear animations",
Sandbox_FancyHandwork_HideDoorProgressBar = "Hide Vehicle Door Action Progress Bar",
Sandbox_FancyHandwork_HideDoorProgressBar_tooltip = "Hides the progress bar when a character is opening or closing a door, and when entering or exiting a vehicle.",
Sandbox_FancyHandwork_HideVehicleWalkProgressBar = "Hide Vehicle 'Walk To' Action Progress Bar",
Sandbox_FancyHandwork_HideVehicleWalkProgressBar_tooltip = "Hides the progress bar when a character is walking to a location to interact with a vehicle.",
}

View File

@@ -0,0 +1,233 @@
------------------------------------------
-- Fancy Handwork Init
------------------------------------------
FancyHands = FancyHands or {}
------------------------------------------
-- Fancy Handwork Configuration
------------------------------------------
FancyHands.config = {
applyRotationL = true
}
FancyHands.nomask = {
["Base.Torch"] = true,
["Base.HandTorch"] = true,
["Base.UmbrellaBlack"] = true,
["Base.UmbrellaWhite"] = true,
["Base.UmbrellaBlue"] = true
}
FancyHands.special = {
["Base.Generator"] = "holdinggenerator",
["Base.CorpseMale"] = "holdingbody",
["Base.CorpseFemale"] = "holdingbody"
}
------------------------------------------
-- Fancy Handwork Utilities
------------------------------------------
function isFHModKeyDown()
return isKeyDown(getCore():getKey('FHModifier'))
end
local FHswapItems = function(character)
local primary = character:getPrimaryHandItem()
local secondary = character:getSecondaryHandItem()
if (primary or secondary) and (primary ~= secondary) then
ISTimedActionQueue.add(FHSwapHandsAction:new(character, primary, secondary, 10))
end
end
local FHswapItemsMod = function(character)
if isFHModKeyDown() then
FHswapItems(character)
end
end
local FHcreateBindings = function()
--local FHnewBinds = {}
local FHbindings = {
{
name = '[FancyHandwork]'
},
{
value = 'FHModifier',
key = Keyboard.KEY_LCONTROL,
},
{
value = 'FHSwapKey',
action = FHswapItems,
key = 0,
},
{
value = 'FHSwapKeyMod',
action = FHswapItemsMod,
key = Keyboard.KEY_E,
swap = true
},
}
for _, bind in ipairs(FHbindings) do
if bind.name then
table.insert(keyBinding, { value = bind.name, key = nil })
else
if bind.key then
table.insert(keyBinding, { value = bind.value, key = bind.key })
end
end
end
local FHhandleKeybinds = function(key)
local player = getSpecificPlayer(0)
local action
for _,bind in ipairs(FHbindings) do
if key == getCore():getKey(bind.value) then
if bind.swap then
if isFHModKeyDown() then
action = bind.action
break
end
else
action = bind.action
break
end
end
end
if not action or isGamePaused() or not player or player:isDead() then
return
end
action(player)
end
FancyHands.addKeyBind = function(keybind)
table.insert(FHbindings, keybind)
end
Events.OnGameStart.Add(function()
Events.OnKeyPressed.Add(FHhandleKeybinds)
end)
end
local function calcRecentMove(player)
player:getModData().FancyHands = player:getModData().FancyHands or {
recentMove = false,
recentDelta = 0
}
if player:isPlayerMoving() then
player:getModData().FancyHands.recentMove = true
player:getModData().FancyHands.recentDelta = 0
else
if player:getModData().FancyHands.recentMove then
player:getModData().FancyHands.recentDelta = player:getModData().FancyHands.recentDelta + 1
if player:getModData().FancyHands.recentDelta >= ((SandboxVars.FancyHandwork and SandboxVars.FancyHandwork.TurnDelaySec) or 1)*getPerformance():getFramerate() then
player:getModData().FancyHands.recentMove = false
end
end
end
end
local function fancy(player)
if not player or player:isDead() or player:isAsleep() then return end
local primary = player:getPrimaryHandItem()
local secondary = player:getSecondaryHandItem()
local queue = ISTimedActionQueue.queues[player]
if queue and #queue.queue > 0 and not queue.queue[1].FHIgnore then
player:setVariable("FHDoingAction", true)
else
player:setVariable("FHDoingAction", false)
end
-- 2 hands
if primary == secondary then
if primary then
if FancyHands.special[primary:getFullType()] then
player:setVariable("LeftHandMask", FancyHands.special[primary:getFullType()])
player:clearVariable("RightHandMask")
return
end
-- some other mods do have their own anim masks, so lets keep those!
if primary:getItemReplacementPrimaryHand() then
--player:clearVariable("LeftHandMask")
return
end
end
player:clearVariable("LeftHandMask")
player:clearVariable("RightHandMask")
return
end
if primary then
if not primary:getItemReplacementPrimaryHand() then
if instanceof(primary, "HandWeapon") then
player:setVariable("RightHandMask", (primary:isRanged() and "holdinggunright") or "holdingitemright")
player:setVariable("FHExp", player:getPerkLevel(Perks.Aiming) >= ((SandboxVars.FancyHandwork and SandboxVars.FancyHandwork.ExperiencedAiming) or 3))
else
player:clearVariable("RightHandMask")
end
end
else
player:clearVariable("RightHandMask")
end
if secondary then
if not secondary:getItemReplacementSecondHand() then
if instanceof(secondary, "HandWeapon") then
player:setVariable("LeftHandMask", (secondary:isRanged() and "holdinghgunleft") or "holdingitemleft")
else
player:clearVariable("LeftHandMask")
end
end
else
player:clearVariable("LeftHandMask")
end
end
local curPlayer = 0
local function fancyMP(player)
if not player or player:isDead() or player:isAsleep() then return end
fancy(player)
-- We will do one player per tick to set their state
---- We do this to ensure each tick doesn't take too long
local players = getOnlinePlayers()
if curPlayer > (players:size()-1) then curPlayer = 0 end
local mPlayer = players:get(curPlayer)
if mPlayer ~= player then
fancy(mPlayer)
end
curPlayer = curPlayer + 1
end
local function FancyHandwork()
print(getText("UI_Init_FancyHandwork"))
if isServer() then return end
FHcreateBindings()
Events.OnGameStart.Add(function()
if isClient() then
Events.OnPlayerUpdate.Add(function(player)
fancyMP(player)
calcRecentMove(player)
end)
else
Events.OnPlayerUpdate.Add(function(player)
fancy(player)
calcRecentMove(player)
end)
end
end)
end
FancyHandwork()

View File

@@ -0,0 +1,32 @@
VERSION = 1,
option FancyHandwork.ExperiencedAim {
type = integer, min = 0, max = 11, default = 3,
page = FancyHandwork, translation = FancyHandwork_ExperiencedAim,
}
option FancyHandwork.TurnDelaySec {
type = double, min = 0.01, max = 60.0, default = 1.0,
page = FancyHandwork, translation = FancyHandwork_TurnDelaySec,
}
option FancyHandwork.DisableTurn {
type = enum, numValues = 3, default = 2,
page = FancyHandwork, translation = FancyHandwork_DisableTurn,
valueTranslation = FancyHandwork_DT,
}
option FancyHandwork.TurnBehavior {
type = enum, numValues = 3, default = 2,
page = FancyHandwork, translation = FancyHandwork_TurnBehavior,
valueTranslation = FancyHandwork_TB,
}
option FancyHandwork.HideDoorProgressBar {
type = boolean, default = false,
page = FancyHandwork, translation = FancyHandwork_HideDoorProgressBar,
}
option FancyHandwork.HideVehicleWalkProgressBar {
type = boolean, default = false,
page = FancyHandwork, translation = FancyHandwork_HideVehicleWalkProgressBar,
}

View File

@@ -2,7 +2,7 @@ name=Fancy Handwork
id=FancyHandwork
authors=dhert
description=Got a left arm that's just dangling there and not doing anything? The Zombies haven't gotten it yet, so put it to use!
description=A Suite of Animations to make your player feel more alive!
pzversion=41
tags=Realistic

View File

@@ -4,11 +4,9 @@ title=Fancy Handwork
description=[h1]Supports B41+. Works in Multiplayer[/h1]
description=[h3]A new save is not required[/h3]
description=
description=[h1]Supports B41+. Works in Multiplayer[/h1]
description=[h3]A new save is not required[/h3]
description=[img]https://i.imgur.com/p7Fv1Z6.gif[/img]
description=
description=Got a left arm that's just dangling there and not doing anything? The Zombies haven't gotten it yet, so put it to use!
description=A Suite of Animations to make your player more alive!
description=
description=[h2]Features[/h2]
description=[list]
@@ -16,10 +14,24 @@ description=[*] Attaching or Detaching an item to your Hotbar now has a chance t
description=[*] Equipping and Unequipping your secondary item is now done with the left arm
description=[*] "Hand Swap" action to quickly swap the primary and secondary held items
description=[*] Modifier key to quickly equip items in secondary hand using from your Hotbar
description=[*] Animation mask for the left arm to correct the rotation of the held item
description=[*] Includes a new pose when aiming a pistol and holding a secondary tool (Also lets you do this again)
description=[*] Animation Mask for the Left and Right Arms to correct the Positions and Rotation of the held item
description=[*] Includes 2 new poses when aiming a handgun and holding a secondary tool, based on your "Aim" level! Configurable in the Sandbox Options.
description=[*] World Interaction animations!
description=[*] [b]NEW:[/b] World Interaction animations from the rear!
description=[*] Cooking Animations!
description=[*] Appropriate Vanilla Animations have now been placed on [b]over 50![/b] TimedActions that previously did not have one.
description=[*] [b]NEW:[/b] Wrench Repair Animation!
description=[/list]
description=
description=[h2]Updates[/h2]
description=Important information is updated on this page, but full information and release notes are available in the Discussions. Please see the latest:
description=
description=[h2]IMPORTANT[/h2]
description=If you receive an error about missing actions, or world interactions are simply not playing, you may need to restart Project Zomboid. I have noticed that enabling this mod on an already-existing save and starting the game will result in the animations not being loaded until the game is restarted. This is a [b]BASE GAME[/b] issue!
description=
description=If you receive an error following any update, please see: [url=https://theindiestone.com/forums/index.php?/topic/42925-how-to-fix-updated-mods-in-build-41-multiplayer/]How to fix updated mods in Build 41 Multiplayer[/url]
description=This mod adds many additional animation and action files, which may change between releases. I try to minimize this, but sometimes it is necessary. Unfortunately, Steam sometimes doesn't like to update these correctly.
description=
description=[h2]Usage[/h2]
description=When Attaching or Detaching an item on your Hotbar, you have a chance for the action to automatically be done with your left hand.
description=
@@ -30,18 +42,34 @@ description=When you press the Modifier Key and a Hotbar slot, the item slotted
description=
description=Pressing the Modifier and "E" will swap the items in your hands. (Configurable)
description=
description=[h2]Limitations[/h2]
description=The corrected rotations in the Left Hand will take a brief second to "settle" into place. Additionally, performing another action may reset the Left Hand mask causing the correction to have to be re-applied (it will do so automatically).
description=Interacting with the world normally, such as opening and closing doors and curtains,flicking light switches, and more, all now have an Animation!
description=
description=[h3]Multiplayer[/h3]
description=Animations should sync across multiplayer. However, there are a few limitations that may result in some brief odd behavior.
description=Almost ALL TimedActions now have an Animation! No longer will your character just stand there, waiting for a progress bar to fill up!
description=
description=Custom Animation states are not synced like how built-in states are, and the game seems to change animations on the player outside of what you do in Lua as well. I sync the animation states required for this mod, but this is separate from how the game handles its own synced animations. As such, brief de-sync can happen when a player is performing an action. For example, an equip animation may start with the right hand like normal and quickly change to the left once the custom state syncs.
description=[h3]Notes about World Interactions[/h3]
description=If you are standing still you will turn and face the object you are interacting with if you are not already doing so. There is a Sandbox setting to control how long of a delay before you character is standing still.
description=[b]NOTE:[/b] This is based on your selected Render Framerate. As such, you may need to change this according to your current framerate. A value of 60 is about 1 second at 60 FPS. I will update this at some point.
description=
description=[h2]Compatibility[/h3]
description=Should be compatible with almost everything. The only incompatibility I found is with the mod [url=https://steamcommunity.com/sharedfiles/filedetails/?id=2366717227]Swap It[/url]. [b]Note:[/b]"Swap It's" functionality is way better than this mod, so the quick equip to secondary keybinds are not enabled when using both mods due to incompatibilities.
description=When performing a World Interaction and moving your character will slow down slightly, and stop altogether in the case of opening a Garage Door, for a very brief moment. I have no plans on this being a configurable option, and this is done intentionally. It is a fantastic inclusion for immersion in my opinion, and in tight situations makes planning your movement all the more important. After time, you will hardly notice it.
description=
description=[h2]Multiplayer[/h2]
description=[b]NEW 01/07/2023 [/b] - New Animation Sync method is now being used!
description=Animations should sync across multiplayer with little to no issues!
description=
description=[h2]Controllers[/h2]
description=There is currently no support for controllers, unless an action is done via the Context Menu. I will be working on Controller Support in a future Update.
description=
description=[h2]Compatibility[/h2]
description=Should be compatible with everything.
description=Mouse Click World Interactions are not triggered from: [url=https://steamcommunity.com/sharedfiles/filedetails/?id=2795987309]Left Click Redux - Click To Act[/url]
description=
description=[h3]Recommended other Mods:[/h3]
description=[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2366717227]Swap It[/url] by Chuckleberry Finn
description=[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2706426546]Danger Zone (Dual Wield)[/url] by OgreLeg
description=[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2809719515]Visible Generators and Corpses[/url] by planetalgol
description=[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2651128766]Body Remodel - FINGERS.[/url] by Akyet
description=
description=Source: [url=https://github.com/hlfstr/pz-mods]GitHub[/url]
description=
description=Workshop ID: 2904920097
description=Mod ID: FancyHandwork
tags=Build 41;Realistic;Silly/Fun
visibility=public