diff --git a/.gitignore b/.gitignore
index d392330..1c79e0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -348,15 +348,3 @@ healthchecksdb
/Source/Patches/OtherModPatches/HarmonyPatch_AlienRace.cs
/Source/Patches/ThingAnimationPatches/HarmonyPatch_ThingDrawAt.cs
/Defs/AnimationDefs/Animations_SexToys.xml
-/1.5/Defs/AnimationDefs/BasicBestiality/HumanRotatedOffset.xml
-/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality4v1.xml
-/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality3v1.xml
-/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality2v1.xml
-/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality1v1.xml
-/1.5/Defs/AnimationDefs/BasicBestiality/!BasicBestiality.xml
-/1.5/Defs/TestDoNotPush
-/1.5/Textures/AnimationProps/BEV
-1.6/Defs/HawkTestDefs/Basic Fuck Stage 1.xml
-1.6/Defs/HawkTestDefs/Basic Fuck Stage 2.xml
-1.6/Defs/HawkTestDefs/Basic Fuck Stage 3.xml
-1.6/Defs/HawkTestDefs/BasicFuck.xml
diff --git a/1.1/Assemblies/Rimworld-Animations.dll b/1.1/Assemblies/Rimworld-Animations.dll
new file mode 100644
index 0000000..b2bba40
Binary files /dev/null and b/1.1/Assemblies/Rimworld-Animations.dll differ
diff --git a/1.2/Assemblies/Rimworld-Animations.dll b/1.2/Assemblies/Rimworld-Animations.dll
new file mode 100644
index 0000000..13afe5e
Binary files /dev/null and b/1.2/Assemblies/Rimworld-Animations.dll differ
diff --git a/1.2/Defs/AnimationDefs/AnimationDefs.rar b/1.2/Defs/AnimationDefs/AnimationDefs.rar
new file mode 100644
index 0000000..e7bf2a1
Binary files /dev/null and b/1.2/Defs/AnimationDefs/AnimationDefs.rar differ
diff --git a/1.2/Defs/AnimationDefs/Animations_Beast.xml b/1.2/Defs/AnimationDefs/Animations_Beast.xml
new file mode 100644
index 0000000..30d14fc
--- /dev/null
+++ b/1.2/Defs/AnimationDefs/Animations_Beast.xml
@@ -0,0 +1,2180 @@
+
+
+
+ Dog_Doggystyle
+ dog doggystyle
+ true
+
+ Anal
+ Vaginal
+
+
+
+ VaginalBreeding
+ AnalBreeding
+
+
+
+
+
+ Human
+
+ true
+
+
+
+ Wolf_Timber
+ Wolf_Arctic
+ Whitefox
+ Warg
+ Husky
+ LabradorRetriever
+
+ AEXP_WelshTerrier
+ AEXP_Rottweiler
+ AEXP_Poodle
+ AEXP_GreatDane
+ AEXP_GermanShepherd
+ AEXP_FrenchBulldog
+ AEXP_Corgi
+ AEXP_CatAbyssinian
+ AEXP_CatBengal
+ AEXP_CatMaineCoon
+ AEXP_CatSphynx
+
+
+ QuadrupedAnimalWithHooves
+ QuadrupedAnimalWithPawsAndTail
+
+ true
+ true
+
+
+
+
+
+
+
+ Fuck
+ true
+ 765
+ 0
+
+
+ LayingPawn
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 8
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+ 8
+ Fuck
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+
+
+
+
+ Knot
+ False
+ 71
+ 0
+
+
+ LayingPawn
+
+
+ true
+ 60
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 6
+ Cum
+ 53.7
+ 28.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 4
+ 51.7
+ 33.4
+ 0.098
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 60
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+ 6
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 4
+ Fuck
+ -41.6
+ 0
+ -0.383
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+ Cum
+ true
+ 600
+ 0
+
+
+ LayingPawn
+
+
+ 40
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 40
+ Cum
+ 57.7
+ 28.4
+ 0.073
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ Horse_Cowgirl
+ HorseCowgirl
+ true
+
+ Anal
+ Vaginal
+
+
+
+ RequestVaginalBreeding
+ RequestAnalBreeding
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+ Horse
+
+
+ QuadrupedAnimalWithHooves
+
+ true
+
+
+
+
+
+
+
+ Insertion
+ false
+ 0
+
+
+
+
+ 180
+ -24.337
+ -37.1218948
+ 0
+ 0.698042035
+ -0.20718734
+ 0
+ 3
+ 3
+
+
+ 70
+ -2.54239845
+ 7.31265259
+ 0
+ 0.606091142
+ -0.045959726
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 60
+ -4.84361649
+ -23.6405125
+ 0
+ 0.650456548
+ -0.0570534021
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+ 250
+ 177.083145
+ 0
+ 0
+ -0.256229281
+ -0.362511069
+ 0
+ 1
+ 0
+
+
+
+ 60
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 1
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ SlowFuck
+ true
+ 1300
+ 0
+
+
+
+
+ 80
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+
+
+ 49
+ -49.8178673
+ -35.7418823
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Fuck
+
+
+
+
+ LayingPawn
+
+
+ 80
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+ 49
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 1
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ Transition
+ false
+ 0
+
+
+
+
+ 50
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Fuck
+
+
+
+ 15
+ -49.8178673
+ -35.7418823
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 80
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.48456946
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 50
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+ 15
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+ 80
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ FastFuck
+ true
+ 1260
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 24
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ FasterFuck
+ true
+ 418
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+ 8
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 8
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ Cum
+ True
+ 318
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+ true
+ 80
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+ Cum
+
+
+ 25
+ -49.8178673
+ 2.654541
+ 0
+ 0.5175133
+ -0.547725141
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+
+
+ LayingPawn
+
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 80
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+
+
+ 25
+ 173.81427
+ 0
+ 0
+ -0.197662517
+ -0.545600235
+ 0
+ 1
+ 0
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.2/Defs/AnimationDefs/Animations_Lesbian.xml b/1.2/Defs/AnimationDefs/Animations_Lesbian.xml
new file mode 100644
index 0000000..56d805a
--- /dev/null
+++ b/1.2/Defs/AnimationDefs/Animations_Lesbian.xml
@@ -0,0 +1,1782 @@
+
+
+
+ Tribadism
+ scissoring
+ true
+
+ Scissoring
+
+
+
+
+
+ Human
+
+ true
+
+ Vagina
+
+
+
+
+ Human
+
+ true
+ true
+
+ Vagina
+
+
+
+
+
+
+
+ Tribbing
+ true
+ 992
+ 0
+
+
+ LayingPawn
+
+
+
+ 20
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 20
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 20
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+
+
+ 20
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+ 20
+ 23.82
+ -6.90
+ 0.432
+ 0.403
+ 3
+ 3
+ 0
+
+
+ 20
+ 5.19
+ -6.19
+ 0.442
+ 0.388
+ 3
+ 3
+ 0
+
+
+ 1
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+ TribadismFast
+ true
+ 682
+ 0
+
+
+ LayingPawn
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+ 10
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+ 10
+ 23.82
+ -6.90
+ 0.432
+ 0.403
+ 3
+ 3
+ 0
+
+
+ 10
+ 5.19
+ -6.19
+ 0.442
+ 0.388
+ 3
+ 3
+ 0
+
+
+ 1
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+
+ Cunnilingus
+ cunnilingus
+ true
+
+ Oral
+ Fingering
+ Cunnilingus
+
+
+
+ Cunnilingus
+ CunnilingusF
+ CunnilingusRape
+ CunnilingusRapeF
+
+ Fingering
+ FingeringF
+ FingeringRape
+ FingeringRapeF
+
+ Fisting
+ FistingF
+ FistingRape
+ FistingRapeF
+
+
+
+
+
+ Human
+
+ true
+
+ Vagina
+
+
+ (-0.2, 0.1)
+
+
+
+
+ Human
+
+ true
+
+ (-0.1, 0.15)
+
+
+
+
+
+
+
+
+ Initial
+ False
+ 0
+
+
+
+
+ 60
+ -81.06536
+ -56.4483032
+ 0
+ -0.0624052179
+ -0.437134951
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 60
+ -27.578373
+ 0.2816162
+ 0
+ 0.102704488
+ 0.50675
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+ Slow
+ True
+ 1497
+ 0
+
+
+
+
+ 98
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.26528
+ -65.901825
+ 0
+ -0.0737426062
+ -0.432820916
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 98
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.26528
+ -65.901825
+ 0
+ -0.0737426062
+ -0.432820916
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 60
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 120
+ -86.52611
+ -68.86432
+ 0
+ -0.05432228
+ -0.439906
+ 0
+ 1
+ 1
+
+
+ 40
+ -88.36286
+ -84.3309
+ 0
+ -0.06637782
+ -0.440140843
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+ 60
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+ Transition
+ False
+ 0
+
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 40
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 30
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+ Fast
+ True
+ 710
+ 0
+
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 40
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 30
+ -35.8792953
+ -3.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+ Faster
+ True
+ 360
+ 0
+
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+ Cum
+ True
+ 639
+ 0
+
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ True
+ 80
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+ Cum
+
+
+ 40
+ -99.80413
+ -94.4023743
+ 0
+ -0.01950606
+ -0.447728932
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 80
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.5277061
+ -1.13140869
+ 0
+ 0.0376501828
+ 0.42935127
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+
+
diff --git a/1.2/Defs/AnimationDefs/Animations_Masturbate.xml b/1.2/Defs/AnimationDefs/Animations_Masturbate.xml
new file mode 100644
index 0000000..2968fa1
--- /dev/null
+++ b/1.2/Defs/AnimationDefs/Animations_Masturbate.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/1.2/Defs/AnimationDefs/Animations_Multi.xml b/1.2/Defs/AnimationDefs/Animations_Multi.xml
new file mode 100644
index 0000000..ce4e595
--- /dev/null
+++ b/1.2/Defs/AnimationDefs/Animations_Multi.xml
@@ -0,0 +1,657 @@
+
+
+
+ Double_Penetration
+ double penetration
+ true
+
+ DoublePenetration
+
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+
+
+
+
+ Slow
+ true
+ 976
+ 0
+
+
+
+
+
+ 25
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 35
+ 48.1
+ 16.3
+ 0
+ 0.188
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 30
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 30
+ 12
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ -10
+ 1
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 27
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 33
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+ Face_Fuck
+ true
+ 650
+ 0
+
+
+
+
+
+ 13
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 6
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 6
+ 62.7
+ 0.2
+ 0.08
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 13
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 12
+ 2
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ -10
+ 1
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 13
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 12
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+ Cum
+ true
+ 392
+ 0
+
+
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ true
+ 120
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 30
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 8
+ 0
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 8
+ 0
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 120
+ 9
+ -15.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 30
+ 9
+ 7
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+ -10
+
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 8
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 8
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Cum
+ 120
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 30
+ -6.7
+ -7
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.2/Defs/AnimationDefs/Animations_Vanilla2.xml b/1.2/Defs/AnimationDefs/Animations_Vanilla2.xml
new file mode 100644
index 0000000..fcab1a9
--- /dev/null
+++ b/1.2/Defs/AnimationDefs/Animations_Vanilla2.xml
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.2/Defs/AnimationDefs/Animations_vanilla.xml b/1.2/Defs/AnimationDefs/Animations_vanilla.xml
new file mode 100644
index 0000000..079753a
--- /dev/null
+++ b/1.2/Defs/AnimationDefs/Animations_vanilla.xml
@@ -0,0 +1,2796 @@
+
+
+
+
+ Doggystyle
+ doggystyle
+ true
+
+ Vaginal
+ Anal
+
+
+
+ AnalSex
+ AnalSexF
+ AnalRape
+ VaginalSex
+ VaginalSexF
+ VaginalRape
+
+
+
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 612
+ 0
+
+
+
+
+ 0
+ 10
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 0
+ 1
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 0
+ 10
+ 16.6
+ -0.217
+ 0.175
+ 3
+ 1
+ 1
+
+
+
+ 40
+ Fuck
+ -17
+ -0.217
+ 0.272
+ 5.4
+ 1
+ 1
+
+
+ 1
+ 16.6
+ -0.217
+ 0.175
+ 3
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 609
+ 0
+
+
+
+
+ 8
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+ 1
+ 0
+
+
+ 12
+ 32
+ 0.326
+ 0.190
+ 4
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+ 1
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 8
+ 11
+ -0.217
+ 0.175
+ 8
+ 1
+ 1
+ 0
+
+
+
+ 12
+ Fuck
+ -12
+ -0.217
+ 0.272
+ 9
+ 1
+ 1
+
+
+ 1
+ 11
+ -0.217
+ 0.175
+ 8
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+ Cum
+ true
+ 300
+ 0
+
+
+
+
+ 8
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+ 0
+
+
+ Cum
+ 100
+ 32
+ 0.326
+ 0.190
+ -1
+ 1
+ 1
+ true
+
+
+ 12
+ 35
+ 0.326
+ 0.190
+ -14
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 8
+ 11
+ -0.217
+ 0.175
+ -8
+ 1
+ 1
+ 0
+
+
+ 100
+ -12
+ -0.217
+ 0.272
+ -9
+ 1
+ 1
+
+
+ 12
+ -15
+ -0.227
+ 0.272
+ -4
+ 1
+ 1
+
+
+ 1
+ 11
+ -0.217
+ 0.175
+ -8
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+
+
+ Blowjob
+ blowjob
+ true
+
+ Oral
+ Fellatio
+
+
+ Handjob
+ HandjobF
+ HandjobRape
+ HandjobRapeF
+
+ Breastjob
+ BreastjobF
+ BreastjobRape
+ BreastjobRapeF
+
+ Fellatio
+ FellatioF
+ FellatioRape
+ FellatioRapeF
+
+ Beakjob
+ BeakjobF
+ BeakjobRape
+ BeakjobRapeF
+
+
+
+
+
+
+
+ Human
+
+
+ (0, -0.2)
+
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+ Slow_Suck
+ true
+ 1140
+ 0
+
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ 0
+ -0.33
+ 0
+ 0
+ -0.16
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ 0
+ -0.33
+ 0
+ 0
+ -0.15
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+
+ 6
+ 0
+ -0.33
+ 0
+ 0
+ -0.13
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ -4
+ 0
+ -0.33
+ 0
+ 0
+ -0.12
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 35
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 59
+ 0
+ 0
+ 0.490
+ 2
+ 2
+ -0.003
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+ Face_Fuck
+ true
+ 300
+ 0
+
+
+
+
+ 15
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 14
+ 0
+ 0
+ -0.270
+ 0
+ 0
+ -0.06
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 15
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 14
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+ Cum
+ true
+ 600
+ 0
+
+
+
+
+ 12
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ 7
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 7
+ Suck
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.008
+
+
+ 60
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 14
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 12
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 7
+ Cum
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 7
+ 0
+ 0
+ 0.50
+ 2
+ 2
+ -0.04
+
+
+ true
+ 60
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 14
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+
+
+
+ ReverseStandAndCarry
+ reverse stand-and-carry
+ true
+
+ Anal
+ Vaginal
+
+
+ AnalSex
+ AnalSexF
+ AnalRape
+ VaginalSex
+ VaginalSexF
+ VaginalRape
+
+
+
+
+
+ Human
+
+ true
+
+ (0, 0.2)
+
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 1080
+ 0
+
+
+
+
+ 30
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 29
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 30
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 29
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+ 6
+
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 780
+ 0
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 13
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 12
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+ 6
+
+
+
+
+
+
+
+ Cum
+ true
+ 415
+ 0
+
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ true
+ 75
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 27
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Cum
+ 75
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 40
+ 27
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+ Cowgirl
+ cowgirl
+ true
+
+ Anal
+ Vaginal
+
+
+
+ AnalSex
+ AnalSexF
+ AnalRapeF
+ VaginalSex
+ VaginalSexF
+ VaginalRapeF
+
+
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, -0.2)
+
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 1340
+ 0
+
+
+
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 17
+ 3.5
+ 0
+ -0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 17
+ -3.5
+ 0
+ 0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 17
+ 3.5
+ 0
+ -0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 17
+ -3.5
+ 0
+ 0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.347
+ 2
+ 2
+ 0.015
+ -15
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.331
+ 2
+ 2
+ 0.03
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 15
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.347
+ 2
+ 2
+ 0.015
+ -15
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.331
+ 2
+ 2
+ 0.03
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 15
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 780
+ 0
+
+
+
+
+ 13
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 13
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 13
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 13
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+ Cum
+ true
+ 594
+ 0
+
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ true
+ 45
+ Cum
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ true
+ 40
+ 0
+ 0
+ 0
+ 0.534
+ 2
+ 2
+ 0
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 45
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 40
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.2/Defs/AnimationDefs/TemplateAnimation.xml b/1.2/Defs/AnimationDefs/TemplateAnimation.xml
new file mode 100644
index 0000000..0305903
--- /dev/null
+++ b/1.2/Defs/AnimationDefs/TemplateAnimation.xml
@@ -0,0 +1,54 @@
+
+
+
+
diff --git a/1.2/Defs/JobDefs/Jobs_SexForAnim.xml b/1.2/Defs/JobDefs/Jobs_SexForAnim.xml
new file mode 100644
index 0000000..20c0bca
--- /dev/null
+++ b/1.2/Defs/JobDefs/Jobs_SexForAnim.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ JoinInBedAnimation
+ Rimworld_Animations.JobDriver_SexCasualForAnimation
+ joining someone in bed.
+ false
+
+
+
+ GettinLovedAnimation
+ Rimworld_Animations.JobDriver_SexBaseRecieverLovedForAnimation
+ lovin'.
+ false
+
+
diff --git a/1.6/Defs/MainTabDefs/MainButtonDef.xml b/1.2/Defs/MainTabDefs/MainButtonDef.xml
similarity index 75%
rename from 1.6/Defs/MainTabDefs/MainButtonDef.xml
rename to 1.2/Defs/MainTabDefs/MainButtonDef.xml
index 24be191..0674d24 100644
--- a/1.6/Defs/MainTabDefs/MainButtonDef.xml
+++ b/1.2/Defs/MainTabDefs/MainButtonDef.xml
@@ -3,8 +3,8 @@
OffsetManager
- Animation Manager
- Edit pawn offsets for animations.
+ offset manager
+ Control pawn offsets
Rimworld_Animations.MainTabWindow_OffsetConfigure
54
false
diff --git a/1.2/Defs/SoundDefs/Sounds_Sex.xml b/1.2/Defs/SoundDefs/Sounds_Sex.xml
new file mode 100644
index 0000000..4cce5d0
--- /dev/null
+++ b/1.2/Defs/SoundDefs/Sounds_Sex.xml
@@ -0,0 +1,212 @@
+
+
+
+
+ Cum
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/cum
+
+
+
+ 30
+ 40
+
+
+ 0.8
+ 1.2
+
+
+ 0
+ 51.86047
+
+ False
+
+
+
+
+ Sex
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/kucyu04
+
+
+
+ 16
+ 16
+
+
+ 0.8
+ 1.2
+
+
+ 0
+ 51.86047
+
+ False
+
+
+
+
+ Suck
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/Suck/Suck_1
+
+
+ Sex/Suck/Suck_2
+
+
+ Sex/Suck/Suck_3
+
+
+ Sex/Suck/Suck_4
+
+
+ Sex/Suck/Suck_5
+
+
+ Sex/Suck/Suck_6
+
+
+ Sex/Suck/Suck_7
+
+
+ Sex/Suck/Suck_8
+
+
+ Sex/Suck/Suck_9
+
+
+ Sex/Suck/Suck_10
+
+
+
+ 20
+ 35
+
+
+ 1.0
+ 1.0
+
+
+ 0
+ 51.86047
+
+ NeverTwice
+ false
+
+
+
+
+ Fuck
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/Clap_1
+
+
+ Sex/Clap_2
+
+
+ Sex/Clap_3
+
+
+ Sex/Clap_4
+
+
+ Sex/Clap_5
+
+
+ Sex/Clap_6
+
+
+ Sex/Clap_7
+
+
+ Sex/Clap_8
+
+
+
+ 45
+ 70
+
+
+ 1.0
+ 1.0
+
+
+ 0
+ 51.86047
+
+ NeverTwice
+ false
+
+
+
+
+ Slimy
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/Slime/Slimy1
+
+
+ Sex/Slime/Slimy2
+
+
+ Sex/Slime/Slimy3
+
+
+ Sex/Slime/Slimy4
+
+
+ Sex/Slime/Slimy5
+
+
+
+ 45
+ 75
+
+
+ 1.4
+ 1.8
+
+
+ 0
+ 100
+
+ NeverTwice
+ false
+
+
+
+
\ No newline at end of file
diff --git a/1.6/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj b/1.2/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
similarity index 100%
rename from 1.6/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
rename to 1.2/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
diff --git a/Milkable-Colonists-Animations/Properties/AssemblyInfo.cs b/1.2/Patch_HatsDisplaySelection/Properties/AssemblyInfo.cs
similarity index 83%
rename from Milkable-Colonists-Animations/Properties/AssemblyInfo.cs
rename to 1.2/Patch_HatsDisplaySelection/Properties/AssemblyInfo.cs
index 1032646..6905d78 100644
--- a/Milkable-Colonists-Animations/Properties/AssemblyInfo.cs
+++ b/1.2/Patch_HatsDisplaySelection/Properties/AssemblyInfo.cs
@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("Milkable-Colonists-Animations")]
+[assembly: AssemblyTitle("Patch_HatsDisplaySelection")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Milkable-Colonists-Animations")]
-[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyProduct("Patch_HatsDisplaySelection")]
+[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("11dc70af-ff23-4d4d-a4e5-6453664b1a12")]
+[assembly: Guid("ba766964-1716-422d-a09e-29426f8eb9d5")]
// Version information for an assembly consists of the following four values:
//
diff --git a/1.2/Patch_HatsDisplaySelection/Source/Patches/Patch_HatsDisplaySelection.cs b/1.2/Patch_HatsDisplaySelection/Source/Patches/Patch_HatsDisplaySelection.cs
new file mode 100644
index 0000000..6f00a5a
--- /dev/null
+++ b/1.2/Patch_HatsDisplaySelection/Source/Patches/Patch_HatsDisplaySelection.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using HatDisplaySelection;
+using Rimworld_Animations;
+using UnityEngine;
+using Verse;
+
+namespace Patch_HatsDisplaySelection
+{
+ [HarmonyBefore(new string[] { "velc.HatsDisplaySelection" })]
+ [HarmonyPatch(typeof(HatDisplaySelection.Patch), "Patch_PawnRenderer_RenderPawnInternal_Initialize")]
+ public class Patch_HatsDisplaySelectionInitialize
+
+ {
+
+ public static void Prefix(PawnRenderer __instance, ref Pawn ___pawn, ref Vector3 rootLoc, ref float angle, ref Rot4 bodyFacing, ref Rot4 headFacing)
+ {
+
+ CompBodyAnimator bodyAnim = ___pawn.TryGetComp();
+ bodyAnim.animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing);
+ }
+
+ public static void Postfix(PawnRenderer __instance)
+ {
+ PawnGraphicSet graphics = __instance.graphics;
+ Pawn pawn = graphics.pawn;
+ CompBodyAnimator bodyAnim = pawn.TryGetComp();
+
+ if (!graphics.AllResolved)
+ {
+ graphics.ResolveAllGraphics();
+ }
+
+
+ if (bodyAnim != null && bodyAnim.isAnimating && pawn.Map == Find.CurrentMap)
+ {
+ bodyAnim.tickGraphics(graphics);
+
+
+ }
+ }
+ }
+}
diff --git a/1.2/Patches/AnimationPatch_CompBodyAnimator.xml b/1.2/Patches/AnimationPatch_CompBodyAnimator.xml
new file mode 100644
index 0000000..fe3a27c
--- /dev/null
+++ b/1.2/Patches/AnimationPatch_CompBodyAnimator.xml
@@ -0,0 +1,25 @@
+
+
+
+ Always
+
+
+ /Defs/ThingDef/comps
+ Always
+
+ /Defs/ThingDef
+
+
+
+
+
+
+
+ /Defs/ThingDef/comps
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.6/Patches/CompatibilityPatch_FacialAnimation.xml b/1.2/Patches/CompatibilityPatch_FacialAnimation.xml
similarity index 58%
rename from 1.6/Patches/CompatibilityPatch_FacialAnimation.xml
rename to 1.2/Patches/CompatibilityPatch_FacialAnimation.xml
index 53e3f05..125d79f 100644
--- a/1.6/Patches/CompatibilityPatch_FacialAnimation.xml
+++ b/1.2/Patches/CompatibilityPatch_FacialAnimation.xml
@@ -11,21 +11,68 @@
/Defs/FacialAnimation.FaceAnimationDef[defName="Lovin" or defName="Lovin2"]/targetJobs
Always
+ RJW_Masturbate
+ GettinBred
+ Bestiality
+ BestialityForFemale
+ ViolateCorpse
+ Quickie
+ GettingQuickie
+ GettinRaped
+ JoinInBed
+ GettinLoved
+ GettinLicked
+ GettinSucked
+ WhoreIsServingVisitors
JoinInBedAnimation
GettinLovedAnimation
-
- /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin" or defName="Lovin2"]/animationFrames/li[1]/headOffset
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="WaitCombat" or defName="Wait_Combat_Rare"]/targetJobs
Always
+
+ RapeComfortPawn
+ RandomRape
+ RapeEnemy
+
-
- /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[2]/headOffset
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="StandAndBeSociallyActive"]/targetJobs
Always
+
+ WhoreInvitingVisitors
+
-
- /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[3]/headOffset
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Wear" or defName="Wear2" or defName="Wear3"]/targetJobs
Always
+
+ CleanSelf
+ StruggleInBondageGear
+
+
+
+
+ Rimworld-Animations
+
+
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin" or defName="Lovin2"]/animationFrames/li[1]/headOffset
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[2]/headOffset
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[3]/headOffset
+ Always
+
+
+
diff --git a/1.2/Patches/CompatibilityPatch_HCSK.xml b/1.2/Patches/CompatibilityPatch_HCSK.xml
new file mode 100644
index 0000000..2c0b7a0
--- /dev/null
+++ b/1.2/Patches/CompatibilityPatch_HCSK.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+ Core SK
+
+
+ Always
+
+
+ /Defs/Verse.ThingDef/comps
+ Always
+
+ /Defs/Verse.ThingDef
+
+
+
+
+
+
+
+ /Defs/Verse.ThingDef/comps
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.6/Sounds/Sex/Clap_1.wav b/1.2/Sounds/Sex/Clap_1.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_1.wav
rename to 1.2/Sounds/Sex/Clap_1.wav
diff --git a/1.6/Sounds/Sex/Clap_2.wav b/1.2/Sounds/Sex/Clap_2.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_2.wav
rename to 1.2/Sounds/Sex/Clap_2.wav
diff --git a/1.6/Sounds/Sex/Clap_3.wav b/1.2/Sounds/Sex/Clap_3.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_3.wav
rename to 1.2/Sounds/Sex/Clap_3.wav
diff --git a/1.6/Sounds/Sex/Clap_4.wav b/1.2/Sounds/Sex/Clap_4.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_4.wav
rename to 1.2/Sounds/Sex/Clap_4.wav
diff --git a/1.6/Sounds/Sex/Clap_5.wav b/1.2/Sounds/Sex/Clap_5.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_5.wav
rename to 1.2/Sounds/Sex/Clap_5.wav
diff --git a/1.6/Sounds/Sex/Clap_6.wav b/1.2/Sounds/Sex/Clap_6.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_6.wav
rename to 1.2/Sounds/Sex/Clap_6.wav
diff --git a/1.6/Sounds/Sex/Clap_7.wav b/1.2/Sounds/Sex/Clap_7.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_7.wav
rename to 1.2/Sounds/Sex/Clap_7.wav
diff --git a/1.6/Sounds/Sex/Clap_8.wav b/1.2/Sounds/Sex/Clap_8.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Clap_8.wav
rename to 1.2/Sounds/Sex/Clap_8.wav
diff --git a/1.6/Sounds/Sex/Slime/Slimy1.wav b/1.2/Sounds/Sex/Slime/Slimy1.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Slime/Slimy1.wav
rename to 1.2/Sounds/Sex/Slime/Slimy1.wav
diff --git a/1.6/Sounds/Sex/Slime/Slimy2.wav b/1.2/Sounds/Sex/Slime/Slimy2.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Slime/Slimy2.wav
rename to 1.2/Sounds/Sex/Slime/Slimy2.wav
diff --git a/1.6/Sounds/Sex/Slime/Slimy3.wav b/1.2/Sounds/Sex/Slime/Slimy3.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Slime/Slimy3.wav
rename to 1.2/Sounds/Sex/Slime/Slimy3.wav
diff --git a/1.6/Sounds/Sex/Slime/Slimy4.wav b/1.2/Sounds/Sex/Slime/Slimy4.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Slime/Slimy4.wav
rename to 1.2/Sounds/Sex/Slime/Slimy4.wav
diff --git a/1.6/Sounds/Sex/Slime/Slimy5.wav b/1.2/Sounds/Sex/Slime/Slimy5.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Slime/Slimy5.wav
rename to 1.2/Sounds/Sex/Slime/Slimy5.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_1.wav b/1.2/Sounds/Sex/Suck/Suck_1.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_1.wav
rename to 1.2/Sounds/Sex/Suck/Suck_1.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_10.wav b/1.2/Sounds/Sex/Suck/Suck_10.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_10.wav
rename to 1.2/Sounds/Sex/Suck/Suck_10.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_3.wav b/1.2/Sounds/Sex/Suck/Suck_3.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_3.wav
rename to 1.2/Sounds/Sex/Suck/Suck_3.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_4.wav b/1.2/Sounds/Sex/Suck/Suck_4.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_4.wav
rename to 1.2/Sounds/Sex/Suck/Suck_4.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_5.wav b/1.2/Sounds/Sex/Suck/Suck_5.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_5.wav
rename to 1.2/Sounds/Sex/Suck/Suck_5.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_6.wav b/1.2/Sounds/Sex/Suck/Suck_6.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_6.wav
rename to 1.2/Sounds/Sex/Suck/Suck_6.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_7.wav b/1.2/Sounds/Sex/Suck/Suck_7.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_7.wav
rename to 1.2/Sounds/Sex/Suck/Suck_7.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_8.wav b/1.2/Sounds/Sex/Suck/Suck_8.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_8.wav
rename to 1.2/Sounds/Sex/Suck/Suck_8.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_9.wav b/1.2/Sounds/Sex/Suck/Suck_9.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_9.wav
rename to 1.2/Sounds/Sex/Suck/Suck_9.wav
diff --git a/1.6/Sounds/Sex/Suck/Swallow_1.wav b/1.2/Sounds/Sex/Suck/Swallow_1.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Swallow_1.wav
rename to 1.2/Sounds/Sex/Suck/Swallow_1.wav
diff --git a/1.6/Sounds/Sex/Suck/Swallow_2.wav b/1.2/Sounds/Sex/Suck/Swallow_2.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Swallow_2.wav
rename to 1.2/Sounds/Sex/Suck/Swallow_2.wav
diff --git a/1.6/Sounds/Sex/Suck/Swallow_3.wav b/1.2/Sounds/Sex/Suck/Swallow_3.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Swallow_3.wav
rename to 1.2/Sounds/Sex/Suck/Swallow_3.wav
diff --git a/1.6/Sounds/Sex/Suck/Suck_2.wav b/1.2/Sounds/Sex/Suck/suck_2.wav
similarity index 100%
rename from 1.6/Sounds/Sex/Suck/Suck_2.wav
rename to 1.2/Sounds/Sex/Suck/suck_2.wav
diff --git a/1.6/Sounds/Sex/cum.wav b/1.2/Sounds/Sex/cum.wav
similarity index 100%
rename from 1.6/Sounds/Sex/cum.wav
rename to 1.2/Sounds/Sex/cum.wav
diff --git a/1.6/Sounds/Sex/kucyu04.wav b/1.2/Sounds/Sex/kucyu04.wav
similarity index 100%
rename from 1.6/Sounds/Sex/kucyu04.wav
rename to 1.2/Sounds/Sex/kucyu04.wav
diff --git a/1.2/Textures/UI/MainTab.png b/1.2/Textures/UI/MainTab.png
new file mode 100644
index 0000000..92f855f
Binary files /dev/null and b/1.2/Textures/UI/MainTab.png differ
diff --git a/1.3/Assemblies/Rimworld-Animations.dll b/1.3/Assemblies/Rimworld-Animations.dll
new file mode 100644
index 0000000..7f376ba
Binary files /dev/null and b/1.3/Assemblies/Rimworld-Animations.dll differ
diff --git a/1.3/Defs/AnimationDefs/AnimationDefs.rar b/1.3/Defs/AnimationDefs/AnimationDefs.rar
new file mode 100644
index 0000000..e7bf2a1
Binary files /dev/null and b/1.3/Defs/AnimationDefs/AnimationDefs.rar differ
diff --git a/1.3/Defs/AnimationDefs/Animations_Beast.xml b/1.3/Defs/AnimationDefs/Animations_Beast.xml
new file mode 100644
index 0000000..30d14fc
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/Animations_Beast.xml
@@ -0,0 +1,2180 @@
+
+
+
+ Dog_Doggystyle
+ dog doggystyle
+ true
+
+ Anal
+ Vaginal
+
+
+
+ VaginalBreeding
+ AnalBreeding
+
+
+
+
+
+ Human
+
+ true
+
+
+
+ Wolf_Timber
+ Wolf_Arctic
+ Whitefox
+ Warg
+ Husky
+ LabradorRetriever
+
+ AEXP_WelshTerrier
+ AEXP_Rottweiler
+ AEXP_Poodle
+ AEXP_GreatDane
+ AEXP_GermanShepherd
+ AEXP_FrenchBulldog
+ AEXP_Corgi
+ AEXP_CatAbyssinian
+ AEXP_CatBengal
+ AEXP_CatMaineCoon
+ AEXP_CatSphynx
+
+
+ QuadrupedAnimalWithHooves
+ QuadrupedAnimalWithPawsAndTail
+
+ true
+ true
+
+
+
+
+
+
+
+ Fuck
+ true
+ 765
+ 0
+
+
+ LayingPawn
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 8
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+ 8
+ Fuck
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+
+
+
+
+ Knot
+ False
+ 71
+ 0
+
+
+ LayingPawn
+
+
+ true
+ 60
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 6
+ Cum
+ 53.7
+ 28.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 4
+ 51.7
+ 33.4
+ 0.098
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 60
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+ 6
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 4
+ Fuck
+ -41.6
+ 0
+ -0.383
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+ Cum
+ true
+ 600
+ 0
+
+
+ LayingPawn
+
+
+ 40
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 40
+ Cum
+ 57.7
+ 28.4
+ 0.073
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ Horse_Cowgirl
+ HorseCowgirl
+ true
+
+ Anal
+ Vaginal
+
+
+
+ RequestVaginalBreeding
+ RequestAnalBreeding
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+ Horse
+
+
+ QuadrupedAnimalWithHooves
+
+ true
+
+
+
+
+
+
+
+ Insertion
+ false
+ 0
+
+
+
+
+ 180
+ -24.337
+ -37.1218948
+ 0
+ 0.698042035
+ -0.20718734
+ 0
+ 3
+ 3
+
+
+ 70
+ -2.54239845
+ 7.31265259
+ 0
+ 0.606091142
+ -0.045959726
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 60
+ -4.84361649
+ -23.6405125
+ 0
+ 0.650456548
+ -0.0570534021
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+ 250
+ 177.083145
+ 0
+ 0
+ -0.256229281
+ -0.362511069
+ 0
+ 1
+ 0
+
+
+
+ 60
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 1
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ SlowFuck
+ true
+ 1300
+ 0
+
+
+
+
+ 80
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+
+
+ 49
+ -49.8178673
+ -35.7418823
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Fuck
+
+
+
+
+ LayingPawn
+
+
+ 80
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+ 49
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 1
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ Transition
+ false
+ 0
+
+
+
+
+ 50
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Fuck
+
+
+
+ 15
+ -49.8178673
+ -35.7418823
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 80
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.48456946
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 50
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+ 15
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+ 80
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ FastFuck
+ true
+ 1260
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 24
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ FasterFuck
+ true
+ 418
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+ 8
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 8
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ Cum
+ True
+ 318
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+ true
+ 80
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+ Cum
+
+
+ 25
+ -49.8178673
+ 2.654541
+ 0
+ 0.5175133
+ -0.547725141
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+
+
+ LayingPawn
+
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 80
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+
+
+ 25
+ 173.81427
+ 0
+ 0
+ -0.197662517
+ -0.545600235
+ 0
+ 1
+ 0
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.3/Defs/AnimationDefs/Animations_Lesbian.xml b/1.3/Defs/AnimationDefs/Animations_Lesbian.xml
new file mode 100644
index 0000000..56d805a
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/Animations_Lesbian.xml
@@ -0,0 +1,1782 @@
+
+
+
+ Tribadism
+ scissoring
+ true
+
+ Scissoring
+
+
+
+
+
+ Human
+
+ true
+
+ Vagina
+
+
+
+
+ Human
+
+ true
+ true
+
+ Vagina
+
+
+
+
+
+
+
+ Tribbing
+ true
+ 992
+ 0
+
+
+ LayingPawn
+
+
+
+ 20
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 20
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 20
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+
+
+ 20
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+ 20
+ 23.82
+ -6.90
+ 0.432
+ 0.403
+ 3
+ 3
+ 0
+
+
+ 20
+ 5.19
+ -6.19
+ 0.442
+ 0.388
+ 3
+ 3
+ 0
+
+
+ 1
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+ TribadismFast
+ true
+ 682
+ 0
+
+
+ LayingPawn
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+ 10
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+ 10
+ 23.82
+ -6.90
+ 0.432
+ 0.403
+ 3
+ 3
+ 0
+
+
+ 10
+ 5.19
+ -6.19
+ 0.442
+ 0.388
+ 3
+ 3
+ 0
+
+
+ 1
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+
+ Cunnilingus
+ cunnilingus
+ true
+
+ Oral
+ Fingering
+ Cunnilingus
+
+
+
+ Cunnilingus
+ CunnilingusF
+ CunnilingusRape
+ CunnilingusRapeF
+
+ Fingering
+ FingeringF
+ FingeringRape
+ FingeringRapeF
+
+ Fisting
+ FistingF
+ FistingRape
+ FistingRapeF
+
+
+
+
+
+ Human
+
+ true
+
+ Vagina
+
+
+ (-0.2, 0.1)
+
+
+
+
+ Human
+
+ true
+
+ (-0.1, 0.15)
+
+
+
+
+
+
+
+
+ Initial
+ False
+ 0
+
+
+
+
+ 60
+ -81.06536
+ -56.4483032
+ 0
+ -0.0624052179
+ -0.437134951
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 60
+ -27.578373
+ 0.2816162
+ 0
+ 0.102704488
+ 0.50675
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+ Slow
+ True
+ 1497
+ 0
+
+
+
+
+ 98
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.26528
+ -65.901825
+ 0
+ -0.0737426062
+ -0.432820916
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 98
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.26528
+ -65.901825
+ 0
+ -0.0737426062
+ -0.432820916
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 60
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 120
+ -86.52611
+ -68.86432
+ 0
+ -0.05432228
+ -0.439906
+ 0
+ 1
+ 1
+
+
+ 40
+ -88.36286
+ -84.3309
+ 0
+ -0.06637782
+ -0.440140843
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+ 60
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+ Transition
+ False
+ 0
+
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 40
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 30
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+ Fast
+ True
+ 710
+ 0
+
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 40
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 30
+ -35.8792953
+ -3.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+ Faster
+ True
+ 360
+ 0
+
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+ Cum
+ True
+ 639
+ 0
+
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ True
+ 80
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+ Cum
+
+
+ 40
+ -99.80413
+ -94.4023743
+ 0
+ -0.01950606
+ -0.447728932
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 80
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.5277061
+ -1.13140869
+ 0
+ 0.0376501828
+ 0.42935127
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+
+
diff --git a/1.3/Defs/AnimationDefs/Animations_Masturbate.xml b/1.3/Defs/AnimationDefs/Animations_Masturbate.xml
new file mode 100644
index 0000000..2968fa1
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/Animations_Masturbate.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/AnimationDefs/Animations_Multi.xml b/1.3/Defs/AnimationDefs/Animations_Multi.xml
new file mode 100644
index 0000000..af7ea7a
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/Animations_Multi.xml
@@ -0,0 +1,660 @@
+
+
+
+ Double_Penetration
+ double penetration
+ true
+
+ DoublePenetration
+ Anal
+ Oral
+ Vaginal
+
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+
+
+
+
+ Slow
+ true
+ 976
+ 0
+
+
+
+
+
+ 25
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 35
+ 48.1
+ 16.3
+ 0
+ 0.188
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 30
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 30
+ 12
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ -10
+ 1
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 27
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 33
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+ Face_Fuck
+ true
+ 650
+ 0
+
+
+
+
+
+ 13
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 6
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 6
+ 62.7
+ 0.2
+ 0.08
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 13
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 12
+ 2
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ -10
+ 1
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 13
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 12
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+ Cum
+ true
+ 392
+ 0
+
+
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ true
+ 120
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 30
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 8
+ 0
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 8
+ 0
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 120
+ 9
+ -15.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 30
+ 9
+ 7
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+ -10
+
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 8
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 8
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Cum
+ 120
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 30
+ -6.7
+ -7
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.3/Defs/AnimationDefs/Animations_SexToys.xml b/1.3/Defs/AnimationDefs/Animations_SexToys.xml
new file mode 100644
index 0000000..320d3aa
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/Animations_SexToys.xml
@@ -0,0 +1,59 @@
+
+
+
+
diff --git a/1.3/Defs/AnimationDefs/Animations_Vanilla2.xml b/1.3/Defs/AnimationDefs/Animations_Vanilla2.xml
new file mode 100644
index 0000000..71b02a9
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/Animations_Vanilla2.xml
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/AnimationDefs/Animations_vanilla.xml b/1.3/Defs/AnimationDefs/Animations_vanilla.xml
new file mode 100644
index 0000000..0fd61d5
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/Animations_vanilla.xml
@@ -0,0 +1,2799 @@
+
+
+
+
+ Doggystyle
+ doggystyle
+ true
+
+ Vaginal
+ Anal
+ DoublePenetration
+
+
+
+ AnalSex
+ AnalSexF
+ AnalRape
+ VaginalSex
+ VaginalSexF
+ VaginalRape
+
+
+
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 612
+ 0
+
+
+
+
+ 0
+ 10
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 0
+ 1
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 0
+ 10
+ 16.6
+ -0.217
+ 0.175
+ 3
+ 1
+ 1
+
+
+
+ 40
+ Fuck
+ -17
+ -0.217
+ 0.272
+ 5.4
+ 1
+ 1
+
+
+ 1
+ 16.6
+ -0.217
+ 0.175
+ 3
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 609
+ 0
+
+
+
+
+ 8
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+ 1
+ 0
+
+
+ 12
+ 32
+ 0.326
+ 0.190
+ 4
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+ 1
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 8
+ 11
+ -0.217
+ 0.175
+ 8
+ 1
+ 1
+ 0
+
+
+
+ 12
+ Fuck
+ -12
+ -0.217
+ 0.272
+ 9
+ 1
+ 1
+
+
+ 1
+ 11
+ -0.217
+ 0.175
+ 8
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+ Cum
+ true
+ 300
+ 0
+
+
+
+
+ 8
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+ 0
+
+
+ Cum
+ 100
+ 32
+ 0.326
+ 0.190
+ -1
+ 1
+ 1
+ true
+
+
+ 12
+ 35
+ 0.326
+ 0.190
+ -14
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 8
+ 11
+ -0.217
+ 0.175
+ -8
+ 1
+ 1
+ 0
+
+
+ 100
+ -12
+ -0.217
+ 0.272
+ -9
+ 1
+ 1
+
+
+ 12
+ -15
+ -0.227
+ 0.272
+ -4
+ 1
+ 1
+
+
+ 1
+ 11
+ -0.217
+ 0.175
+ -8
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+
+
+ Blowjob
+ blowjob
+ true
+
+ Oral
+ Fellatio
+
+
+ Handjob
+ HandjobF
+ HandjobRape
+ HandjobRapeF
+
+ Breastjob
+ BreastjobF
+ BreastjobRape
+ BreastjobRapeF
+
+ Fellatio
+ FellatioF
+ FellatioRape
+ FellatioRapeF
+
+ Beakjob
+ BeakjobF
+ BeakjobRape
+ BeakjobRapeF
+
+
+
+
+
+
+
+ Human
+
+
+ (0, -0.2)
+
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+ Slow_Suck
+ true
+ 1140
+ 0
+
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ 0
+ -0.33
+ 0
+ 0
+ -0.16
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ 0
+ -0.33
+ 0
+ 0
+ -0.15
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+
+ 6
+ 0
+ -0.33
+ 0
+ 0
+ -0.13
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ -4
+ 0
+ -0.33
+ 0
+ 0
+ -0.12
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 35
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 59
+ 0
+ 0
+ 0.490
+ 2
+ 2
+ -0.003
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+ Face_Fuck
+ true
+ 300
+ 0
+
+
+
+
+ 15
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 14
+ 0
+ 0
+ -0.270
+ 0
+ 0
+ -0.06
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 15
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 14
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+ Cum
+ true
+ 600
+ 0
+
+
+
+
+ 12
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ 7
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 7
+ Suck
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.008
+
+
+ 60
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 14
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 12
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 7
+ Cum
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 7
+ 0
+ 0
+ 0.50
+ 2
+ 2
+ -0.04
+
+
+ true
+ 60
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 14
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+
+
+
+ ReverseStandAndCarry
+ reverse stand-and-carry
+ true
+
+ Anal
+ Vaginal
+ DoublePenetration
+
+
+ AnalSex
+ AnalSexF
+ AnalRape
+ VaginalSex
+ VaginalSexF
+ VaginalRape
+
+
+
+
+
+ Human
+
+ true
+
+ (0, 0.2)
+
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 1080
+ 0
+
+
+
+
+ 30
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 29
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 30
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 29
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+ 6
+
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 780
+ 0
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 13
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 12
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+ 6
+
+
+
+
+
+
+
+ Cum
+ true
+ 415
+ 0
+
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ true
+ 75
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 27
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Cum
+ 75
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 40
+ 27
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+ Cowgirl
+ cowgirl
+ true
+
+ Anal
+ Vaginal
+ DoublePenetration
+
+
+
+ AnalSex
+ AnalSexF
+ AnalRapeF
+ VaginalSex
+ VaginalSexF
+ VaginalRapeF
+
+
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, -0.2)
+
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 1340
+ 0
+
+
+
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 17
+ 3.5
+ 0
+ -0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 17
+ -3.5
+ 0
+ 0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 17
+ 3.5
+ 0
+ -0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 17
+ -3.5
+ 0
+ 0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.347
+ 2
+ 2
+ 0.015
+ -15
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.331
+ 2
+ 2
+ 0.03
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 15
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.347
+ 2
+ 2
+ 0.015
+ -15
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.331
+ 2
+ 2
+ 0.03
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 15
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 780
+ 0
+
+
+
+
+ 13
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 13
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 13
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 13
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+ Cum
+ true
+ 594
+ 0
+
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ true
+ 45
+ Cum
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ true
+ 40
+ 0
+ 0
+ 0
+ 0.534
+ 2
+ 2
+ 0
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 45
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 40
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.3/Defs/AnimationDefs/TemplateAnimation.xml b/1.3/Defs/AnimationDefs/TemplateAnimation.xml
new file mode 100644
index 0000000..0305903
--- /dev/null
+++ b/1.3/Defs/AnimationDefs/TemplateAnimation.xml
@@ -0,0 +1,54 @@
+
+
+
+
diff --git a/1.3/Defs/MainTabDefs/MainButtonDef.xml b/1.3/Defs/MainTabDefs/MainButtonDef.xml
new file mode 100644
index 0000000..0674d24
--- /dev/null
+++ b/1.3/Defs/MainTabDefs/MainButtonDef.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ OffsetManager
+ offset manager
+ Control pawn offsets
+ Rimworld_Animations.MainTabWindow_OffsetConfigure
+ 54
+ false
+ UI/MainTab
+ true
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/SoundDefs/Sounds_Sex.xml b/1.3/Defs/SoundDefs/Sounds_Sex.xml
new file mode 100644
index 0000000..4cce5d0
--- /dev/null
+++ b/1.3/Defs/SoundDefs/Sounds_Sex.xml
@@ -0,0 +1,212 @@
+
+
+
+
+ Cum
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/cum
+
+
+
+ 30
+ 40
+
+
+ 0.8
+ 1.2
+
+
+ 0
+ 51.86047
+
+ False
+
+
+
+
+ Sex
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/kucyu04
+
+
+
+ 16
+ 16
+
+
+ 0.8
+ 1.2
+
+
+ 0
+ 51.86047
+
+ False
+
+
+
+
+ Suck
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/Suck/Suck_1
+
+
+ Sex/Suck/Suck_2
+
+
+ Sex/Suck/Suck_3
+
+
+ Sex/Suck/Suck_4
+
+
+ Sex/Suck/Suck_5
+
+
+ Sex/Suck/Suck_6
+
+
+ Sex/Suck/Suck_7
+
+
+ Sex/Suck/Suck_8
+
+
+ Sex/Suck/Suck_9
+
+
+ Sex/Suck/Suck_10
+
+
+
+ 20
+ 35
+
+
+ 1.0
+ 1.0
+
+
+ 0
+ 51.86047
+
+ NeverTwice
+ false
+
+
+
+
+ Fuck
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/Clap_1
+
+
+ Sex/Clap_2
+
+
+ Sex/Clap_3
+
+
+ Sex/Clap_4
+
+
+ Sex/Clap_5
+
+
+ Sex/Clap_6
+
+
+ Sex/Clap_7
+
+
+ Sex/Clap_8
+
+
+
+ 45
+ 70
+
+
+ 1.0
+ 1.0
+
+
+ 0
+ 51.86047
+
+ NeverTwice
+ false
+
+
+
+
+ Slimy
+ MapOnly
+
+ 1
+ 1
+
+
+
+
+ Sex/Slime/Slimy1
+
+
+ Sex/Slime/Slimy2
+
+
+ Sex/Slime/Slimy3
+
+
+ Sex/Slime/Slimy4
+
+
+ Sex/Slime/Slimy5
+
+
+
+ 45
+ 75
+
+
+ 1.4
+ 1.8
+
+
+ 0
+ 100
+
+ NeverTwice
+ false
+
+
+
+
\ No newline at end of file
diff --git a/Milkable-Colonists-Animations/Milkable-Colonists-Animations.csproj b/1.3/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
similarity index 66%
rename from Milkable-Colonists-Animations/Milkable-Colonists-Animations.csproj
rename to 1.3/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
index e4e8b55..8da21a6 100644
--- a/Milkable-Colonists-Animations/Milkable-Colonists-Animations.csproj
+++ b/1.3/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
@@ -4,20 +4,20 @@
Debug
AnyCPU
- {11DC70AF-FF23-4D4D-A4E5-6453664B1A12}
+ {BA766964-1716-422D-A09E-29426F8EB9D5}
Library
Properties
- Milkable_Colonists_Animations
- Milkable-Colonists-Animations
- v4.8
+ Patch_HatsDisplaySelection
+ Patch_HatsDisplaySelection
+ v4.7.2
512
true
- true
- full
+ false
+ none
false
- bin\Debug\
+ 1.2\Assemblies\
DEBUG;TRACE
prompt
4
@@ -32,15 +32,19 @@
- ..\..\..\..\..\workshop\content\294100\839005762\1.5\Assemblies\0Harmony.dll
+ ..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll
False
..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
False
-
- ..\..\rjw\1.4\Assemblies\RJW.dll
+
+ ..\..\..\..\..\workshop\content\294100\1542291825\1.2\Assemblies\HatDisplaySelection.dll
+ False
+
+
+ ..\1.2\Assemblies\Rimworld-Animations.dll
False
@@ -55,10 +59,17 @@
..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
False
+
+ ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
+ False
+
-
+
+
+
+
\ No newline at end of file
diff --git a/1.6/Patches/AnimationPatchHSK.xml b/1.3/Patches/AnimationPatchHSK.xml
similarity index 90%
rename from 1.6/Patches/AnimationPatchHSK.xml
rename to 1.3/Patches/AnimationPatchHSK.xml
index e061299..74038ea 100644
--- a/1.6/Patches/AnimationPatchHSK.xml
+++ b/1.3/Patches/AnimationPatchHSK.xml
@@ -21,7 +21,7 @@
Defs/ThingDef[@Name="BaseAnimalPawn" or @Name="SK_BasePawn" or @Name="BasePawnSkynet"]/comps
-
+
diff --git a/1.6/Patches/AnimationPatch_CompExtendedAnimator.xml b/1.3/Patches/AnimationPatch_CompBodyAnimator.xml
similarity index 83%
rename from 1.6/Patches/AnimationPatch_CompExtendedAnimator.xml
rename to 1.3/Patches/AnimationPatch_CompBodyAnimator.xml
index 87f9f7d..e645747 100644
--- a/1.6/Patches/AnimationPatch_CompExtendedAnimator.xml
+++ b/1.3/Patches/AnimationPatch_CompBodyAnimator.xml
@@ -21,13 +21,13 @@
Defs/ThingDef[@Name="BasePawn"]/comps
-
+
Defs/AlienRace.ThingDef_AlienRace/comps
-
+
diff --git a/1.6/Patches/CompPatches/AutoCleaner.xml b/1.3/Patches/CompPatches/AutoCleaner.xml
similarity index 87%
rename from 1.6/Patches/CompPatches/AutoCleaner.xml
rename to 1.3/Patches/CompPatches/AutoCleaner.xml
index c6ba2bb..c2ad860 100644
--- a/1.6/Patches/CompPatches/AutoCleaner.xml
+++ b/1.3/Patches/CompPatches/AutoCleaner.xml
@@ -9,7 +9,7 @@
/Defs/ThingDef[@Name="BaseBaseAutocleaner"]/comps
-
+
diff --git a/1.6/Patches/CompPatches/CombatExtended.xml b/1.3/Patches/CompPatches/CombatExtended.xml
similarity index 86%
rename from 1.6/Patches/CompPatches/CombatExtended.xml
rename to 1.3/Patches/CompPatches/CombatExtended.xml
index aed123b..7d35127 100644
--- a/1.6/Patches/CompPatches/CombatExtended.xml
+++ b/1.3/Patches/CompPatches/CombatExtended.xml
@@ -9,7 +9,7 @@
/Defs/ThingDef[@Name="BasePawnSimple"]/comps
-
+
diff --git a/1.6/Patches/CompPatches/ZombieLand.xml b/1.3/Patches/CompPatches/ZombieLand.xml
similarity index 86%
rename from 1.6/Patches/CompPatches/ZombieLand.xml
rename to 1.3/Patches/CompPatches/ZombieLand.xml
index 87f618c..e950e0e 100644
--- a/1.6/Patches/CompPatches/ZombieLand.xml
+++ b/1.3/Patches/CompPatches/ZombieLand.xml
@@ -9,7 +9,7 @@
/Defs/ThingDef[@Name="BaseZombie"]/comps
-
+
diff --git a/1.3/Patches/CompatibilityPatch_FacialAnimation.xml b/1.3/Patches/CompatibilityPatch_FacialAnimation.xml
new file mode 100644
index 0000000..125d79f
--- /dev/null
+++ b/1.3/Patches/CompatibilityPatch_FacialAnimation.xml
@@ -0,0 +1,130 @@
+
+
+
+
+ [NL] Facial Animation - WIP
+
+
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin" or defName="Lovin2"]/targetJobs
+ Always
+
+ RJW_Masturbate
+ GettinBred
+ Bestiality
+ BestialityForFemale
+ ViolateCorpse
+ Quickie
+ GettingQuickie
+ GettinRaped
+ JoinInBed
+ GettinLoved
+ GettinLicked
+ GettinSucked
+ WhoreIsServingVisitors
+ JoinInBedAnimation
+ GettinLovedAnimation
+
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="WaitCombat" or defName="Wait_Combat_Rare"]/targetJobs
+ Always
+
+ RapeComfortPawn
+ RandomRape
+ RapeEnemy
+
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="StandAndBeSociallyActive"]/targetJobs
+ Always
+
+ WhoreInvitingVisitors
+
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Wear" or defName="Wear2" or defName="Wear3"]/targetJobs
+ Always
+
+ CleanSelf
+ StruggleInBondageGear
+
+
+
+
+ Rimworld-Animations
+
+
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin" or defName="Lovin2"]/animationFrames/li[1]/headOffset
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[2]/headOffset
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[3]/headOffset
+ Always
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.6/Patches/CompatibilityPatch_HCSK.xml b/1.3/Patches/CompatibilityPatch_HCSK.xml
similarity index 95%
rename from 1.6/Patches/CompatibilityPatch_HCSK.xml
rename to 1.3/Patches/CompatibilityPatch_HCSK.xml
index 576a07f..ead8783 100644
--- a/1.6/Patches/CompatibilityPatch_HCSK.xml
+++ b/1.3/Patches/CompatibilityPatch_HCSK.xml
@@ -22,14 +22,14 @@
/Defs/ThingDef[@Name="SK_BasePawn"]/comps
-
+
/Defs/ThingDef[@Name="BaseAnimalPawn"]/comps
-
+
diff --git a/1.3/Patches/RacePatches/Epona race Renaissance.xml b/1.3/Patches/RacePatches/Epona race Renaissance.xml
new file mode 100644
index 0000000..f39b509
--- /dev/null
+++ b/1.3/Patches/RacePatches/Epona race Renaissance.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ Epona race Renaissance
+
+
+
+
+ /Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Epona"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[hediffGraphics/Epona_OHPG_female="Things/Pawn/Addons/Breasts/Breasts"]/drawnInBed
+
+ false
+
+
+
+
+
+
+
diff --git a/1.3/Patches/RacePatches/Nyaron.xml b/1.3/Patches/RacePatches/Nyaron.xml
new file mode 100644
index 0000000..0a7a08e
--- /dev/null
+++ b/1.3/Patches/RacePatches/Nyaron.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ Nyaron race
+
+
+
+
+ /Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Nyaron"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[bodyPart="tail"]
+
+ false
+
+
+
+
+
+
+
diff --git a/1.3/Sounds/Sex/Clap_1.wav b/1.3/Sounds/Sex/Clap_1.wav
new file mode 100644
index 0000000..bccd0f2
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_1.wav differ
diff --git a/1.3/Sounds/Sex/Clap_2.wav b/1.3/Sounds/Sex/Clap_2.wav
new file mode 100644
index 0000000..a382f59
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_2.wav differ
diff --git a/1.3/Sounds/Sex/Clap_3.wav b/1.3/Sounds/Sex/Clap_3.wav
new file mode 100644
index 0000000..65cf39b
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_3.wav differ
diff --git a/1.3/Sounds/Sex/Clap_4.wav b/1.3/Sounds/Sex/Clap_4.wav
new file mode 100644
index 0000000..3ae1b3e
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_4.wav differ
diff --git a/1.3/Sounds/Sex/Clap_5.wav b/1.3/Sounds/Sex/Clap_5.wav
new file mode 100644
index 0000000..65144e7
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_5.wav differ
diff --git a/1.3/Sounds/Sex/Clap_6.wav b/1.3/Sounds/Sex/Clap_6.wav
new file mode 100644
index 0000000..0026325
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_6.wav differ
diff --git a/1.3/Sounds/Sex/Clap_7.wav b/1.3/Sounds/Sex/Clap_7.wav
new file mode 100644
index 0000000..6d7de2a
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_7.wav differ
diff --git a/1.3/Sounds/Sex/Clap_8.wav b/1.3/Sounds/Sex/Clap_8.wav
new file mode 100644
index 0000000..1af5710
Binary files /dev/null and b/1.3/Sounds/Sex/Clap_8.wav differ
diff --git a/1.3/Sounds/Sex/Slime/Slimy1.wav b/1.3/Sounds/Sex/Slime/Slimy1.wav
new file mode 100644
index 0000000..3cfbd74
Binary files /dev/null and b/1.3/Sounds/Sex/Slime/Slimy1.wav differ
diff --git a/1.3/Sounds/Sex/Slime/Slimy2.wav b/1.3/Sounds/Sex/Slime/Slimy2.wav
new file mode 100644
index 0000000..36a9197
Binary files /dev/null and b/1.3/Sounds/Sex/Slime/Slimy2.wav differ
diff --git a/1.3/Sounds/Sex/Slime/Slimy3.wav b/1.3/Sounds/Sex/Slime/Slimy3.wav
new file mode 100644
index 0000000..40aff1e
Binary files /dev/null and b/1.3/Sounds/Sex/Slime/Slimy3.wav differ
diff --git a/1.3/Sounds/Sex/Slime/Slimy4.wav b/1.3/Sounds/Sex/Slime/Slimy4.wav
new file mode 100644
index 0000000..0b6404e
Binary files /dev/null and b/1.3/Sounds/Sex/Slime/Slimy4.wav differ
diff --git a/1.3/Sounds/Sex/Slime/Slimy5.wav b/1.3/Sounds/Sex/Slime/Slimy5.wav
new file mode 100644
index 0000000..ea310db
Binary files /dev/null and b/1.3/Sounds/Sex/Slime/Slimy5.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_1.wav b/1.3/Sounds/Sex/Suck/Suck_1.wav
new file mode 100644
index 0000000..4f1eafd
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_1.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_10.wav b/1.3/Sounds/Sex/Suck/Suck_10.wav
new file mode 100644
index 0000000..284cda3
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_10.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_3.wav b/1.3/Sounds/Sex/Suck/Suck_3.wav
new file mode 100644
index 0000000..95e7348
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_3.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_4.wav b/1.3/Sounds/Sex/Suck/Suck_4.wav
new file mode 100644
index 0000000..753a023
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_4.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_5.wav b/1.3/Sounds/Sex/Suck/Suck_5.wav
new file mode 100644
index 0000000..8ecda9c
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_5.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_6.wav b/1.3/Sounds/Sex/Suck/Suck_6.wav
new file mode 100644
index 0000000..08567d6
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_6.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_7.wav b/1.3/Sounds/Sex/Suck/Suck_7.wav
new file mode 100644
index 0000000..a63b0e4
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_7.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_8.wav b/1.3/Sounds/Sex/Suck/Suck_8.wav
new file mode 100644
index 0000000..320da09
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_8.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Suck_9.wav b/1.3/Sounds/Sex/Suck/Suck_9.wav
new file mode 100644
index 0000000..7ab538a
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Suck_9.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Swallow_1.wav b/1.3/Sounds/Sex/Suck/Swallow_1.wav
new file mode 100644
index 0000000..f3276cc
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Swallow_1.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Swallow_2.wav b/1.3/Sounds/Sex/Suck/Swallow_2.wav
new file mode 100644
index 0000000..09a7a00
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Swallow_2.wav differ
diff --git a/1.3/Sounds/Sex/Suck/Swallow_3.wav b/1.3/Sounds/Sex/Suck/Swallow_3.wav
new file mode 100644
index 0000000..2817b29
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/Swallow_3.wav differ
diff --git a/1.3/Sounds/Sex/Suck/suck_2.wav b/1.3/Sounds/Sex/Suck/suck_2.wav
new file mode 100644
index 0000000..a8305c1
Binary files /dev/null and b/1.3/Sounds/Sex/Suck/suck_2.wav differ
diff --git a/1.3/Sounds/Sex/cum.wav b/1.3/Sounds/Sex/cum.wav
new file mode 100644
index 0000000..ef98437
Binary files /dev/null and b/1.3/Sounds/Sex/cum.wav differ
diff --git a/1.3/Sounds/Sex/kucyu04.wav b/1.3/Sounds/Sex/kucyu04.wav
new file mode 100644
index 0000000..3ae1ce8
Binary files /dev/null and b/1.3/Sounds/Sex/kucyu04.wav differ
diff --git a/1.6/Source/Actors/Actor.cs b/1.3/Source/Actors/Actor.cs
similarity index 100%
rename from 1.6/Source/Actors/Actor.cs
rename to 1.3/Source/Actors/Actor.cs
diff --git a/1.6/Source/Actors/AlienRaceOffset.cs b/1.3/Source/Actors/AlienRaceOffset.cs
similarity index 100%
rename from 1.6/Source/Actors/AlienRaceOffset.cs
rename to 1.3/Source/Actors/AlienRaceOffset.cs
diff --git a/1.3/Source/Actors/BodyTypeOffset.cs b/1.3/Source/Actors/BodyTypeOffset.cs
new file mode 100644
index 0000000..82a23a3
--- /dev/null
+++ b/1.3/Source/Actors/BodyTypeOffset.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace Rimworld_Animations {
+ public class BodyTypeOffset {
+
+ public Vector2? Male;
+ public Vector2? Female;
+ public Vector2? Thin;
+ public Vector2? Hulk;
+ public Vector2? Fat;
+
+ }
+}
diff --git a/1.3/Source/Animations/AnimationStage.cs b/1.3/Source/Animations/AnimationStage.cs
new file mode 100644
index 0000000..7a1304e
--- /dev/null
+++ b/1.3/Source/Animations/AnimationStage.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Rimworld_Animations {
+ public class AnimationStage
+ {
+ public string stageName;
+ public int stageIndex;
+ public int playTimeTicks = 0;
+ public int playTimeTicksQuick = -1;
+ public bool isLooping;
+ public List animationClips;
+ public List tags = new List();
+
+ public void initialize() {
+ foreach (BaseAnimationClip clip in animationClips) {
+ clip.buildSimpleCurves();
+ //select playTimeTicks as longest playtime of all the animations
+ if(clip.duration > playTimeTicks) {
+ playTimeTicks = clip.duration;
+ }
+ }
+ }
+ }
+}
diff --git a/1.3/Source/Animations/Clips/BaseAnimationClip.cs b/1.3/Source/Animations/Clips/BaseAnimationClip.cs
new file mode 100644
index 0000000..aa35b31
--- /dev/null
+++ b/1.3/Source/Animations/Clips/BaseAnimationClip.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+
+namespace Rimworld_Animations {
+ public abstract class BaseAnimationClip
+ {
+ public Dictionary SoundEffects = new Dictionary();
+ public List types; //types of participants
+ public int duration;
+ public abstract void buildSimpleCurves();
+ public string soundDef = null; //for playing sounds
+ public int actor;
+ public List tags = new List();
+ }
+}
diff --git a/1.3/Source/Animations/Clips/PawnAnimationClip.cs b/1.3/Source/Animations/Clips/PawnAnimationClip.cs
new file mode 100644
index 0000000..e9d2489
--- /dev/null
+++ b/1.3/Source/Animations/Clips/PawnAnimationClip.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class PawnAnimationClip : BaseAnimationClip {
+
+ public List keyframes;
+ public AltitudeLayer layer = AltitudeLayer.Pawn;
+
+ public Dictionary quiver = new Dictionary();
+ public SimpleCurve GenitalAngle = new SimpleCurve();
+ public SimpleCurve BodyAngle = new SimpleCurve();
+ public SimpleCurve HeadAngle = new SimpleCurve();
+ public SimpleCurve HeadBob = new SimpleCurve();
+ public SimpleCurve BodyOffsetX = new SimpleCurve();
+ public SimpleCurve BodyOffsetZ = new SimpleCurve();
+ public SimpleCurve HeadFacing = new SimpleCurve();
+ public SimpleCurve BodyFacing = new SimpleCurve();
+
+
+ public override void buildSimpleCurves() {
+
+
+ int duration = 0;
+ //getting the length of the whole clip
+ foreach(PawnKeyframe frame in keyframes) {
+ duration += frame.tickDuration;
+ }
+
+ //guarantees loops don't get cut off mid-anim
+ this.duration = duration;
+
+ int keyframePosition = 0;
+ foreach (PawnKeyframe frame in keyframes) {
+
+ if (frame.atTick.HasValue) {
+ if (frame.bodyAngle.HasValue)
+ BodyAngle.Add((float)frame.atTick / (float)duration, frame.bodyAngle.Value, true);
+
+ if (frame.headAngle.HasValue)
+ HeadAngle.Add((float)frame.atTick / (float)duration, frame.headAngle.Value, true);
+
+ if (frame.bodyOffsetX.HasValue)
+ BodyOffsetX.Add((float)frame.atTick / (float)duration, frame.bodyOffsetX.Value, true);
+
+ if (frame.bodyOffsetZ.HasValue)
+ BodyOffsetZ.Add((float)frame.atTick / (float)duration, frame.bodyOffsetZ.Value, true);
+
+ if (frame.headFacing.HasValue)
+ HeadFacing.Add((float)frame.atTick / (float)duration, frame.headFacing.Value, true);
+
+ if (frame.bodyFacing.HasValue)
+ BodyFacing.Add((float)frame.atTick / (float)duration, frame.bodyFacing.Value, true);
+
+ if (frame.headBob.HasValue)
+ HeadBob.Add((float)frame.atTick / (float)duration, frame.headBob.Value, true);
+
+ if (frame.genitalAngle.HasValue)
+ GenitalAngle.Add((float)frame.atTick / (float)duration, frame.genitalAngle.Value, true);
+
+ if (frame.soundEffect != null) {
+ SoundEffects.Add((int)frame.atTick, frame.soundEffect);
+ }
+
+
+ }
+ else {
+ if (frame.bodyAngle.HasValue)
+ BodyAngle.Add((float)keyframePosition / (float)duration, frame.bodyAngle.Value, true);
+
+ if (frame.headAngle.HasValue)
+ HeadAngle.Add((float)keyframePosition / (float)duration, frame.headAngle.Value, true);
+
+ if (frame.bodyOffsetX.HasValue)
+ BodyOffsetX.Add((float)keyframePosition / (float)duration, frame.bodyOffsetX.Value, true);
+
+ if (frame.bodyOffsetZ.HasValue)
+ BodyOffsetZ.Add((float)keyframePosition / (float)duration, frame.bodyOffsetZ.Value, true);
+
+ if (frame.headFacing.HasValue)
+ HeadFacing.Add((float)keyframePosition / (float)duration, frame.headFacing.Value, true);
+
+ if (frame.bodyFacing.HasValue)
+ BodyFacing.Add((float)keyframePosition / (float)duration, frame.bodyFacing.Value, true);
+
+ if (frame.headBob.HasValue)
+ HeadBob.Add((float)keyframePosition / (float)duration, frame.headBob.Value, true);
+
+ if (frame.genitalAngle.HasValue)
+ GenitalAngle.Add((float)keyframePosition / (float)duration, frame.genitalAngle.Value, true);
+
+ if (frame.soundEffect != null) {
+ SoundEffects.Add(keyframePosition, frame.soundEffect);
+ }
+
+ if(frame.tickDuration != 1 && frame.quiver.HasValue) {
+
+ quiver.Add(keyframePosition, true);
+ quiver.Add(keyframePosition + frame.tickDuration - 1, false);
+ }
+ keyframePosition += frame.tickDuration;
+
+ }
+
+ }
+
+ }
+
+ }
+}
diff --git a/1.3/Source/Animations/Clips/ThingAnimationClip.cs b/1.3/Source/Animations/Clips/ThingAnimationClip.cs
new file mode 100644
index 0000000..26f4d4c
--- /dev/null
+++ b/1.3/Source/Animations/Clips/ThingAnimationClip.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+
+namespace Rimworld_Animations {
+ public class ThingAnimationClip : BaseAnimationClip
+ {
+ public List keyframes;
+
+ public SimpleCurve PositionX = new SimpleCurve();
+ public SimpleCurve PositionZ = new SimpleCurve();
+ public SimpleCurve Rotation = new SimpleCurve();
+
+
+ public override void buildSimpleCurves() {
+ int duration = 0;
+ //getting the length of the whole clip
+ foreach (ThingKeyframe frame in keyframes)
+ {
+ duration += frame.tickDuration;
+ }
+
+ //guarantees loops don't get cut off mid-anim
+ this.duration = duration;
+
+ int keyframePosition = 0;
+ foreach (ThingKeyframe frame in keyframes)
+ {
+
+ if (frame.atTick.HasValue)
+ {
+ if (frame.positionX.HasValue)
+ PositionX.Add((float)frame.atTick / (float)duration, frame.positionX.Value, true);
+
+ if (frame.positionZ.HasValue)
+ PositionZ.Add((float)frame.atTick / (float)duration, frame.positionZ.Value, true);
+
+ if (frame.rotation.HasValue)
+ Rotation.Add((float)frame.atTick / (float)duration, frame.rotation.Value, true);
+
+ if (frame.soundEffect != null)
+ {
+ SoundEffects.Add((int)frame.atTick, frame.soundEffect);
+ }
+
+
+ }
+ else
+ {
+ if (frame.positionX.HasValue)
+ PositionX.Add((float)keyframePosition / (float)duration, frame.positionX.Value, true);
+
+ if (frame.positionZ.HasValue)
+ PositionZ.Add((float)keyframePosition / (float)duration, frame.positionZ.Value, true);
+
+ if (frame.rotation.HasValue)
+ Rotation.Add((float)keyframePosition / (float)duration, frame.rotation.Value, true);
+
+ if (frame.soundEffect != null)
+ {
+ SoundEffects.Add(keyframePosition, frame.soundEffect);
+ }
+ keyframePosition += frame.tickDuration;
+
+ }
+
+ }
+ }
+ }
+}
diff --git a/1.3/Source/Animations/Keyframes/Keyframe.cs b/1.3/Source/Animations/Keyframes/Keyframe.cs
new file mode 100644
index 0000000..8cd859d
--- /dev/null
+++ b/1.3/Source/Animations/Keyframes/Keyframe.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Rimworld_Animations {
+ public abstract class Keyframe
+ {
+ public int tickDuration = 1;
+ public float? atTick;
+ public string soundEffect;
+ public List tags = new List();
+ }
+}
diff --git a/1.3/Source/Animations/Keyframes/PawnKeyframe.cs b/1.3/Source/Animations/Keyframes/PawnKeyframe.cs
new file mode 100644
index 0000000..e710981
--- /dev/null
+++ b/1.3/Source/Animations/Keyframes/PawnKeyframe.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class PawnKeyframe : Keyframe
+ {
+ public float? bodyAngle;
+ public float? headAngle;
+
+ public float? genitalAngle;
+
+ public float? bodyOffsetZ;
+ public float? bodyOffsetX;
+
+ public float? headBob;
+ //todo: add headOffsets l/r?
+
+ public int? bodyFacing;
+ public int? headFacing;
+
+ public bool? quiver;
+
+ }
+}
diff --git a/1.3/Source/Animations/Keyframes/ThingKeyframe.cs b/1.3/Source/Animations/Keyframes/ThingKeyframe.cs
new file mode 100644
index 0000000..6604f5e
--- /dev/null
+++ b/1.3/Source/Animations/Keyframes/ThingKeyframe.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Rimworld_Animations {
+ public class ThingKeyframe : Keyframe
+ {
+
+ public float? positionX;
+ public float? positionZ;
+ public float? rotation;
+
+
+
+ }
+}
diff --git a/1.3/Source/Comps/CompBodyAnimator.cs b/1.3/Source/Comps/CompBodyAnimator.cs
new file mode 100644
index 0000000..7910f7d
--- /dev/null
+++ b/1.3/Source/Comps/CompBodyAnimator.cs
@@ -0,0 +1,527 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using rjw;
+using UnityEngine;
+using Verse;
+using Verse.Sound;
+
+namespace Rimworld_Animations {
+ public class CompBodyAnimator : ThingComp
+ {
+ public Pawn pawn => base.parent as Pawn;
+ public PawnGraphicSet Graphics;
+
+ //public CompProperties_BodyAnimator Props => (CompProperties_BodyAnimator)(object)base.props;
+
+ public bool isAnimating {
+ get {
+ return Animating;
+ }
+ set {
+ Animating = value;
+
+ if (value == true) {
+ SexUtility.DrawNude(pawn);
+ } else {
+ pawn.Drawer.renderer.graphics.ResolveAllGraphics();
+ actorsInCurrentAnimation = null;
+ }
+
+ PortraitsCache.SetDirty(pawn);
+ }
+ }
+ private bool Animating = false;
+ private bool mirror = false, quiver = false, shiver = false;
+ private int actor;
+
+ private int lastDrawFrame = -1;
+
+ private int animTicks = 0, stageTicks = 0, clipTicks = 0;
+ private int curStage = 0;
+ private float clipPercent = 0;
+
+ public Vector3 anchor = Vector3.zero, deltaPos = Vector3.zero, headBob = Vector3.zero;
+ public float bodyAngle = 0, headAngle = 0, genitalAngle = 0;
+ public Rot4 headFacing = Rot4.North, bodyFacing = Rot4.North;
+
+ public List actorsInCurrentAnimation;
+
+ public bool controlGenitalAngle = false;
+ public bool fastAnimForQuickie = false;
+
+ private AnimationDef anim;
+ private AnimationStage stage {
+ get
+ {
+ return anim.animationStages[curStage];
+ }
+
+ }
+ private PawnAnimationClip clip => (PawnAnimationClip)stage.animationClips[actor];
+
+ public bool Mirror {
+ get {
+ return mirror;
+ }
+ }
+
+ public void setAnchor(IntVec3 pos)
+ {
+ anchor = pos.ToVector3Shifted();
+ }
+ public void setAnchor(Thing thing) {
+
+ //center on bed
+ if(thing is Building_Bed) {
+ anchor = thing.Position.ToVector3();
+ if (((Building_Bed)thing).SleepingSlotsCount == 2) {
+ if (thing.Rotation.AsInt == 0) {
+ anchor.x += 1;
+ anchor.z += 1;
+ }
+ else if (thing.Rotation.AsInt == 1) {
+ anchor.x += 1;
+ }
+ else if(thing.Rotation.AsInt == 3) {
+ anchor.z += 1;
+ }
+
+ }
+ else {
+ if(thing.Rotation.AsInt == 0) {
+ anchor.x += 0.5f;
+ anchor.z += 1f;
+ }
+ else if(thing.Rotation.AsInt == 1) {
+ anchor.x += 1f;
+ anchor.z += 0.5f;
+ }
+ else if(thing.Rotation.AsInt == 2) {
+ anchor.x += 0.5f;
+ } else {
+ anchor.z += 0.5f;
+ }
+ }
+ }
+ else {
+ anchor = thing.Position.ToVector3Shifted();
+ }
+ }
+ public void StartAnimation(AnimationDef anim, List actors, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false) {
+
+ actorsInCurrentAnimation = actors;
+
+ if (anim.actors.Count <= actor)
+ {
+ return;
+ }
+ AlienRaceOffset raceOffset = anim?.actors[actor]?.raceOffsets?.Find(x => x.defName == pawn.def.defName);
+
+ if (raceOffset != null) {
+ anchor.x += mirror ? raceOffset.offset.x * -1f : raceOffset.offset.x;
+ anchor.z += raceOffset.offset.y;
+ }
+
+ //change the offset based on pawn body type
+ if(pawn?.story?.bodyType != null) {
+ if (pawn.story.bodyType == BodyTypeDefOf.Fat && anim?.actors[actor]?.bodyTypeOffset?.Fat != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Fat.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Fat.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Female && anim?.actors[actor]?.bodyTypeOffset?.Female != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Female.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Female.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Male && anim?.actors[actor]?.bodyTypeOffset?.Male != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Male.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Male.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Thin && anim?.actors[actor]?.bodyTypeOffset?.Thin != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Thin.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Thin.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Hulk && anim?.actors[actor]?.bodyTypeOffset?.Hulk != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Hulk.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Hulk.Value.y;
+ }
+ }
+
+ pawn.jobs.posture = PawnPosture.Standing;
+
+ this.actor = actor;
+ this.anim = anim;
+ this.mirror = mirror;
+ this.fastAnimForQuickie = fastAnimForQuickie;
+
+ if (fastAnimForQuickie && anim.animationStages.Any(x => x.playTimeTicksQuick >= 0) == false)
+ {
+ curStage = 1;
+ animTicks = anim.animationStages[0].playTimeTicks;
+ } else
+ {
+ curStage = 0;
+ animTicks = 0;
+ }
+
+ stageTicks = 0;
+ clipTicks = 0;
+
+ quiver = false;
+ this.shiver = shiver && AnimationSettings.rapeShiver;
+
+ controlGenitalAngle = anim.actors[actor].controlGenitalAngle;
+
+ isAnimating = true;
+ //tick once for initialization
+ tickAnim();
+
+ }
+
+ public override void CompTick() {
+
+ base.CompTick();
+
+ if(isAnimating) {
+
+ GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn);
+
+ if (pawn.Dead || pawn?.jobs?.curDriver == null || (pawn?.jobs?.curDriver != null && !(pawn?.jobs?.curDriver is rjw.JobDriver_Sex))) {
+ isAnimating = false;
+ }
+ else {
+ tickAnim();
+ }
+ }
+ }
+ public void animatePawnBody(ref Vector3 rootLoc, ref float angle, ref Rot4 bodyFacing) {
+
+ if(!isAnimating) {
+ return;
+ }
+ rootLoc = anchor + deltaPos;
+ angle = bodyAngle;
+ bodyFacing = this.bodyFacing;
+
+ }
+
+ public Rot4 AnimateHeadFacing()
+ {
+ return this.headFacing;
+ }
+
+
+ public void tickGraphics(PawnGraphicSet graphics) {
+ this.Graphics = graphics;
+ }
+
+ public void tickAnim() {
+
+
+
+ if (!isAnimating) return;
+
+ if (anim == null) {
+ isAnimating = false;
+ return;
+ }
+
+ animTicks++;
+
+ if (animTicks < anim.animationTimeTicks) {
+ tickStage();
+ } else {
+
+ if(LoopNeverending())
+ {
+ ResetOnLoop();
+ } else
+ {
+ isAnimating = false;
+ }
+
+
+ }
+
+
+
+ }
+
+ public void tickStage()
+ {
+
+ if(stage == null)
+ {
+ isAnimating = false;
+ return;
+ }
+
+ stageTicks++;
+
+ if(stageTicks >= stage.playTimeTicks || (fastAnimForQuickie && stage.playTimeTicksQuick >= 0 && stageTicks >= stage.playTimeTicksQuick)) {
+
+ curStage++;
+
+ stageTicks = 0;
+ clipTicks = 0;
+ clipPercent = 0;
+ }
+
+ if(curStage >= anim.animationStages.Count) {
+ if (LoopNeverending())
+ {
+ ResetOnLoop();
+ }
+ else
+ {
+ isAnimating = false;
+ pawn.jobs.curDriver.ReadyForNextToil();
+ }
+
+ } else {
+ tickClip();
+ }
+
+
+
+ }
+
+ public void tickClip() {
+
+ clipTicks++;
+
+ //play sound effect
+ if(rjw.RJWSettings.sounds_enabled && clip.SoundEffects.ContainsKey(clipTicks) && AnimationSettings.soundOverride) {
+
+
+ SoundInfo sound = new TargetInfo(pawn.Position, pawn.Map);
+ string soundEffectName = clip.SoundEffects[clipTicks];
+
+
+ if ((pawn.jobs.curDriver as JobDriver_Sex).isAnimalOnAnimal)
+ {
+ sound.volumeFactor *= RJWSettings.sounds_animal_on_animal_volume;
+ }
+
+ if(soundEffectName.StartsWith("Voiceline_"))
+ {
+ sound.volumeFactor *= RJWSettings.sounds_voice_volume;
+ }
+
+ if (clip.SoundEffects[clipTicks] == "Cum") {
+
+ sound.volumeFactor *= RJWSettings.sounds_cum_volume;
+ //considerApplyingSemen();
+
+ } else
+ {
+ sound.volumeFactor *= RJWSettings.sounds_sex_volume;
+ }
+
+ SoundDef.Named(soundEffectName).PlayOneShot(sound);
+
+ }
+ if(AnimationSettings.orgasmQuiver && clip.quiver.ContainsKey(clipTicks)) {
+ quiver = clip.quiver[clipTicks];
+ }
+
+ //loop animation if possible
+ if (clipPercent >= 1 && stage.isLooping) {
+ clipTicks = 1;//warning: don't set to zero or else calculations go wrong
+ }
+ clipPercent = (float)clipTicks / (float)clip.duration;
+
+ calculateDrawValues();
+ }
+
+ public void considerApplyingSemen()
+ {
+ if(AnimationSettings.applySemenOnAnimationOrgasm && (pawn?.jobs?.curDriver is JobDriver_Sex))
+ {
+
+ if (anim.sexTypes.Contains((pawn.jobs.curDriver as JobDriver_Sex).Sexprops.sexType))
+ {
+ //SemenHelper.calculateAndApplySemen((pawn.jobs.curDriver as JobDriver_Sex).Sexprops);
+ }
+ }
+ }
+
+ public void calculateDrawValues() {
+
+ /*if(Find.TickManager.TickRateMultiplier > 1 && (lastDrawFrame + 1 >= RealTime.frameCount || RealTime.deltaTime < 0.05f)) {
+ return;
+ }*/
+
+ deltaPos = new Vector3(clip.BodyOffsetX.Evaluate(clipPercent) * (mirror ? -1 : 1), clip.layer.AltitudeFor(), clip.BodyOffsetZ.Evaluate(clipPercent));
+
+ string bodyTypeDef = (pawn.story?.bodyType != null) ? pawn.story.bodyType.ToString() : "";
+
+ if (AnimationSettings.offsets != null && AnimationSettings.offsets.ContainsKey(CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex)) {
+ deltaPos.x += AnimationSettings.offsets[CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex].x * (mirror ? -1 : 1);
+ deltaPos.z += AnimationSettings.offsets[CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex].y;
+ }
+
+
+ bodyAngle = (clip.BodyAngle.Evaluate(clipPercent) + (quiver || shiver ? ((Rand.Value * AnimationSettings.shiverIntensity) - (AnimationSettings.shiverIntensity / 2f)) : 0f)) * (mirror ? -1 : 1);
+ headAngle = clip.HeadAngle.Evaluate(clipPercent) * (mirror ? -1 : 1);
+
+ if (controlGenitalAngle) {
+ genitalAngle = clip.GenitalAngle.Evaluate(clipPercent) * (mirror ? -1 : 1);
+ }
+
+ if (AnimationSettings.rotation != null && AnimationSettings.rotation.ContainsKey(CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex)) {
+ float offsetRotation = AnimationSettings.rotation[CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex] * (Mirror ? -1 : 1);
+ genitalAngle += offsetRotation;
+ bodyAngle += offsetRotation;
+ headAngle += offsetRotation;
+ }
+
+
+ //don't go past 360 or less than 0
+
+ if (bodyAngle < 0) bodyAngle = 360 - ((-1f*bodyAngle) % 360);
+ if (bodyAngle > 360) bodyAngle %= 360;
+
+
+ if (headAngle < 0) headAngle = 360 - ((-1f * headAngle) % 360);
+ if (headAngle > 360) headAngle %= 360;
+
+ if (genitalAngle < 0) genitalAngle = 360 - ((-1f * genitalAngle) % 360);
+ if (genitalAngle > 360) genitalAngle %= 360;
+
+
+ bodyFacing = mirror ? new Rot4((int)clip.BodyFacing.Evaluate(clipPercent)).Opposite : new Rot4((int)clip.BodyFacing.Evaluate(clipPercent));
+
+ bodyFacing = new Rot4((int)clip.BodyFacing.Evaluate(clipPercent));
+ if(bodyFacing.IsHorizontal && mirror) {
+ bodyFacing = bodyFacing.Opposite;
+ }
+
+ headFacing = new Rot4((int)clip.HeadFacing.Evaluate(clipPercent));
+ if(headFacing.IsHorizontal && mirror) {
+ headFacing = headFacing.Opposite;
+ }
+ headBob = new Vector3(0, 0, clip.HeadBob.Evaluate(clipPercent));
+
+ lastDrawFrame = RealTime.frameCount;
+
+ }
+
+ public Vector3 getPawnHeadPosition() {
+
+ Vector3 headPos = anchor + deltaPos + Quaternion.AngleAxis(bodyAngle, Vector3.up) * (pawn.Drawer.renderer.BaseHeadOffsetAt(headFacing) + headBob);
+
+ return headPos;
+
+ }
+
+ public Vector3 getPawnHeadOffset()
+ {
+ return Quaternion.AngleAxis(bodyAngle, Vector3.up) * (pawn.Drawer.renderer.BaseHeadOffsetAt(headFacing) + headBob);
+
+ }
+
+ public AnimationDef CurrentAnimation {
+ get {
+ return anim;
+ }
+ }
+
+ public int ActorIndex {
+ get {
+ return actor;
+ }
+ }
+
+ public override void PostExposeData() {
+ base.PostExposeData();
+
+ Scribe_Defs.Look(ref anim, "RJWAnimations-Anim");
+
+ Scribe_Values.Look(ref animTicks, "RJWAnimations-animTicks", 1);
+ Scribe_Values.Look(ref stageTicks, "RJWAnimations-stageTicks", 1);
+ Scribe_Values.Look(ref clipTicks, "RJWAnimations-clipTicks", 1);
+ Scribe_Values.Look(ref clipPercent, "RJWAnimations-clipPercent", 1);
+ Scribe_Values.Look(ref mirror, "RJWAnimations-mirror");
+
+ Scribe_Values.Look(ref curStage, "RJWAnimations-curStage", 0);
+ Scribe_Values.Look(ref actor, "RJWAnimations-actor");
+
+ Scribe_Values.Look(ref anchor, "RJWAnimations-anchor");
+ Scribe_Values.Look(ref deltaPos, "RJWAnimations-deltaPos");
+ Scribe_Values.Look(ref headBob, "RJWAnimations-headBob");
+ Scribe_Values.Look(ref bodyAngle, "RJWAnimations-bodyAngle");
+ Scribe_Values.Look(ref headAngle, "RJWAnimations-headAngle");
+
+ Scribe_Values.Look(ref genitalAngle, "RJWAnimations-GenitalAngle");
+ Scribe_Values.Look(ref controlGenitalAngle, "RJWAnimations-controlGenitalAngle");
+
+ Scribe_Values.Look(ref headFacing, "RJWAnimations-headFacing");
+ Scribe_Values.Look(ref headFacing, "RJWAnimations-bodyFacing");
+
+ Scribe_Values.Look(ref quiver, "RJWAnimations-orgasmQuiver");
+ }
+
+ public void shiftActorPositionAndRestartAnimation() {
+ actor = (actor == anim.actors.Count - 1 ? 0 : actor + 1);
+
+ if (pawn?.story?.bodyType != null) {
+ if (pawn.story.bodyType == BodyTypeDefOf.Fat && anim?.actors[actor]?.bodyTypeOffset?.Fat != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Fat.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Fat.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Female && anim?.actors[actor]?.bodyTypeOffset?.Female != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Female.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Female.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Male && anim?.actors[actor]?.bodyTypeOffset?.Male != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Male.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Male.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Thin && anim?.actors[actor]?.bodyTypeOffset?.Thin != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Thin.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Thin.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Hulk && anim?.actors[actor]?.bodyTypeOffset?.Hulk != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Hulk.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Hulk.Value.y;
+ }
+ }
+
+ curStage = 0;
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ controlGenitalAngle = anim.actors[actor].controlGenitalAngle;
+
+ tickAnim();
+ }
+
+ public bool LoopNeverending()
+ {
+ if(pawn?.jobs?.curDriver != null &&
+ (pawn.jobs.curDriver is JobDriver_Sex) && (pawn.jobs.curDriver as JobDriver_Sex).neverendingsex ||
+ (pawn.jobs.curDriver is JobDriver_SexBaseReciever) && (pawn.jobs.curDriver as JobDriver_Sex).Partner?.jobs?.curDriver != null && ((pawn.jobs.curDriver as JobDriver_Sex).Partner.jobs.curDriver as JobDriver_Sex).neverendingsex)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void ResetOnLoop()
+ {
+ curStage = 1;
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ tickAnim();
+ }
+ }
+}
diff --git a/1.6/Source/Comps/CompProperties_ExtendedAnimator.cs b/1.3/Source/Comps/CompProperties_BodyAnimator.cs
similarity index 55%
rename from 1.6/Source/Comps/CompProperties_ExtendedAnimator.cs
rename to 1.3/Source/Comps/CompProperties_BodyAnimator.cs
index 47fc1a5..09df7ce 100644
--- a/1.6/Source/Comps/CompProperties_ExtendedAnimator.cs
+++ b/1.3/Source/Comps/CompProperties_BodyAnimator.cs
@@ -7,12 +7,11 @@ using Verse;
using RimWorld;
namespace Rimworld_Animations {
- public class CompProperties_ExtendedAnimator : CompProperties
+ public class CompProperties_BodyAnimator : CompProperties
{
- public CompProperties_ExtendedAnimator()
+ public CompProperties_BodyAnimator()
{
- base.compClass = typeof(CompExtendedAnimator);
-
+ base.compClass = typeof(CompBodyAnimator);
}
}
}
diff --git a/1.6/Source/Comps/CompProperties_ThingAnimator.cs b/1.3/Source/Comps/CompProperties_ThingAnimator.cs
similarity index 100%
rename from 1.6/Source/Comps/CompProperties_ThingAnimator.cs
rename to 1.3/Source/Comps/CompProperties_ThingAnimator.cs
diff --git a/1.3/Source/Comps/CompThingAnimator.cs b/1.3/Source/Comps/CompThingAnimator.cs
new file mode 100644
index 0000000..f5315e4
--- /dev/null
+++ b/1.3/Source/Comps/CompThingAnimator.cs
@@ -0,0 +1,245 @@
+using RimWorld;
+using rjw;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class CompThingAnimator : ThingComp
+ {
+ Vector3 anchor;
+
+ Pawn pawn;
+
+ public bool isAnimating = false, mirror;
+
+ int animTicks = 0, stageTicks = 0, clipTicks = 0, curStage = 0;
+ float rotation = 0;
+ float clipPercent = 0;
+
+ public Vector3 deltaPos;
+
+ AnimationDef anim;
+ private ThingAnimationClip clip => (ThingAnimationClip)stage.animationClips[1];
+ private AnimationStage stage
+ {
+ get
+ {
+ return anim.animationStages[curStage];
+ }
+
+ }
+
+ public void StartAnimation(AnimationDef anim, Pawn pawn, bool mirror = false)
+ {
+ isAnimating = true;
+
+ this.anim = anim;
+ this.pawn = pawn;
+ this.mirror = mirror;
+
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ curStage = 0;
+ clipPercent = 0;
+
+ tickAnim();
+
+ }
+
+ public void setAnchor(IntVec3 position)
+ {
+ anchor = position.ToVector3();
+ }
+
+ public override void CompTick()
+ {
+ base.CompTick();
+
+ if(isAnimating)
+ {
+ if (pawn.Dead || pawn?.jobs?.curDriver == null || (pawn?.jobs?.curDriver != null && !(pawn?.jobs?.curDriver is rjw.JobDriver_Sex)))
+ {
+ isAnimating = false;
+ }
+ else
+ {
+ tickAnim();
+ }
+ }
+
+
+ }
+
+ public void tickAnim()
+ {
+ if (!isAnimating) return;
+ animTicks++;
+
+ if (animTicks < anim.animationTimeTicks)
+ {
+ tickStage();
+ }
+ else
+ {
+ if (LoopNeverending())
+ {
+ ResetOnLoop();
+ }
+ else
+ {
+ isAnimating = false;
+ }
+
+
+ }
+
+ }
+
+ public void tickStage()
+ {
+ if (stage == null)
+ {
+ isAnimating = false;
+ return;
+ }
+
+ stageTicks++;
+
+ if (stageTicks >= stage.playTimeTicks)
+ {
+
+ curStage++;
+
+ stageTicks = 0;
+ clipTicks = 0;
+ clipPercent = 0;
+ }
+
+ if (curStage >= anim.animationStages.Count)
+ {
+ if (LoopNeverending())
+ {
+ ResetOnLoop();
+ }
+ else
+ {
+ isAnimating = false;
+ }
+
+ }
+ else
+ {
+ tickClip();
+ }
+ }
+
+ public void tickClip()
+ {
+ clipTicks++;
+
+ if (clipPercent >= 1 && stage.isLooping)
+ {
+ clipTicks = 1;//warning: don't set to zero or else calculations go wrong
+ }
+ clipPercent = (float)clipTicks / (float)clip.duration;
+
+ calculateDrawValues();
+ }
+
+ public void setAnchor(Thing thing)
+ {
+
+ //center on bed
+ if (thing is Building_Bed)
+ {
+ anchor = thing.Position.ToVector3();
+ if (((Building_Bed)thing).SleepingSlotsCount == 2)
+ {
+ if (thing.Rotation.AsInt == 0)
+ {
+ anchor.x += 1;
+ anchor.z += 1;
+ }
+ else if (thing.Rotation.AsInt == 1)
+ {
+ anchor.x += 1;
+ }
+ else if (thing.Rotation.AsInt == 3)
+ {
+ anchor.z += 1;
+ }
+
+ }
+ else
+ {
+ if (thing.Rotation.AsInt == 0)
+ {
+ anchor.x += 0.5f;
+ anchor.z += 1f;
+ }
+ else if (thing.Rotation.AsInt == 1)
+ {
+ anchor.x += 1f;
+ anchor.z += 0.5f;
+ }
+ else if (thing.Rotation.AsInt == 2)
+ {
+ anchor.x += 0.5f;
+ }
+ else
+ {
+ anchor.z += 0.5f;
+ }
+ }
+ }
+ else
+ {
+ anchor = thing.Position.ToVector3Shifted();
+ }
+
+ anchor -= new Vector3(0.5f, 0, 0.5f);
+ }
+ private void calculateDrawValues()
+ {
+
+ //shift up and right 0.5f to align center
+ deltaPos = new Vector3((clip.PositionX.Evaluate(clipPercent)) * (mirror ? -1 : 1) + 0.5f, AltitudeLayer.Item.AltitudeFor(), clip.PositionZ.Evaluate(clipPercent) + 0.5f);
+ //Log.Message("Clip percent: " + clipPercent + " deltaPos: " + deltaPos);
+ rotation = clip.Rotation.Evaluate(clipPercent) * (mirror ? -1 : 1);
+ }
+
+ public void AnimateThing(Thing thing)
+ {
+ thing.Graphic.Draw(deltaPos + anchor, mirror ? Rot4.West : Rot4.East, thing, rotation);
+ }
+
+ public bool LoopNeverending()
+ {
+ if (pawn?.jobs?.curDriver != null &&
+ (pawn.jobs.curDriver is JobDriver_Sex) && (pawn.jobs.curDriver as JobDriver_Sex).neverendingsex)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void ResetOnLoop()
+ {
+ curStage = 1;
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ tickAnim();
+ }
+
+ }
+}
diff --git a/1.3/Source/Defs/AnimationDef.cs b/1.3/Source/Defs/AnimationDef.cs
new file mode 100644
index 0000000..395ff83
--- /dev/null
+++ b/1.3/Source/Defs/AnimationDef.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class AnimationDef : Def
+ {
+ public List animationStages;
+ public List actors;
+ public int animationTimeTicks = 0; //do not set manually
+ public bool sounds = false;
+ public List sexTypes = null;
+ public List interactionDefTypes = null;
+ public List tags = new List();
+
+ public override void PostLoad() {
+ base.PostLoad();
+ foreach(AnimationStage stage in animationStages) {
+ stage.initialize();
+ animationTimeTicks += stage.playTimeTicks;
+ }
+ }
+ }
+}
diff --git a/1.3/Source/Extensions/PawnWoundDrawerExtension.cs b/1.3/Source/Extensions/PawnWoundDrawerExtension.cs
new file mode 100644
index 0000000..4901de2
--- /dev/null
+++ b/1.3/Source/Extensions/PawnWoundDrawerExtension.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using RimWorld;
+using UnityEngine;
+using Verse;
+using Rimworld_Animations;
+
+namespace Rimworld_Animations
+{
+ [StaticConstructorOnStartup]
+ public static class PawnWoundDrawerExtension
+ {
+ public static void RenderOverBody(this PawnWoundDrawer pawnWoundDrawer, Vector3 drawLoc, Mesh bodyMesh, Quaternion quat, bool drawNow, BodyTypeDef.WoundLayer layer, Rot4 pawnRot, bool? overApparel = null, Pawn pawn = null, PawnRenderFlags flags = new PawnRenderFlags())
+ {
+ if (pawn == null)
+ { return; }
+
+ if (!flags.FlagSet(PawnRenderFlags.Portrait) && layer == BodyTypeDef.WoundLayer.Head)
+ {
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+ if (pawnAnimator != null && pawnAnimator.isAnimating && pawn.Drawer.renderer.graphics.headGraphic != null)
+ {
+ pawnRot = pawnAnimator.headFacing;
+ quat = Quaternion.AngleAxis(angle: pawnAnimator.headAngle, axis: Vector3.up);
+ float y = drawLoc.y;
+ drawLoc = pawnAnimator.getPawnHeadPosition() - Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up) * pawn.Drawer.renderer.BaseHeadOffsetAt(pawnAnimator.headFacing);
+ drawLoc.y = y;
+ }
+ }
+
+ pawnWoundDrawer.RenderOverBody(drawLoc, bodyMesh, quat, drawNow, layer, pawnRot, overApparel);
+ }
+ }
+}
diff --git a/1.3/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs b/1.3/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs
new file mode 100644
index 0000000..b7fef1d
--- /dev/null
+++ b/1.3/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs
@@ -0,0 +1,143 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+using UnityEngine;
+
+namespace Rimworld_Animations {
+ class MainTabWindow_OffsetConfigure : MainTabWindow
+ {
+
+ public override Vector2 RequestedTabSize => new Vector2(505, 380);
+ public override void DoWindowContents(Rect inRect) {
+
+ Rect position = new Rect(inRect.x, inRect.y, inRect.width, inRect.height);
+
+
+ Listing_Standard listingStandard = new Listing_Standard();
+ listingStandard.Begin(position);
+
+ listingStandard.Label("Animation Manager");
+
+ listingStandard.GapLine();
+
+
+ if (Find.Selector.SingleSelectedThing is Pawn) {
+
+ Pawn curPawn = Find.Selector.SingleSelectedThing as Pawn;
+
+ if (curPawn.TryGetComp().isAnimating) {
+
+ AnimationDef def = curPawn.TryGetComp().CurrentAnimation;
+ int ActorIndex = curPawn.TryGetComp().ActorIndex;
+ float offsetX = 0, offsetZ = 0, rotation = 0;
+
+ string bodyTypeDef = (curPawn.story?.bodyType != null) ? curPawn.story.bodyType.ToString() : "";
+
+ if (AnimationSettings.offsets.ContainsKey(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex)) {
+ offsetX = AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x;
+ offsetZ = AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y;
+ } else {
+ AnimationSettings.offsets.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, new Vector2(0, 0));
+ }
+
+ if (AnimationSettings.rotation.ContainsKey(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex)) {
+ rotation = AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex];
+ }
+ else {
+ AnimationSettings.rotation.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, 0);
+ }
+
+ listingStandard.Label("Name: " + curPawn.Name + " Race: " + curPawn.def.defName + " Actor Index: " + curPawn.TryGetComp().ActorIndex + " Body Type (if any): " + bodyTypeDef + " Animation: " + def.label + (curPawn.TryGetComp().Mirror ? " mirrored" : ""));
+
+ if(curPawn.def.defName == "Human") {
+ listingStandard.Label("Warning--You generally don't want to change human offsets, only alien offsets");
+ }
+
+ bool mirrored = curPawn.TryGetComp().Mirror;
+
+ float.TryParse(listingStandard.TextEntryLabeled("X Offset: ", offsetX.ToString()), out offsetX);
+ offsetX = listingStandard.Slider(offsetX, -2 * (mirrored ? -1 : 1), 2 * (mirrored ? -1 : 1));
+
+ float.TryParse(listingStandard.TextEntryLabeled("Z Offset: ", offsetZ.ToString()), out offsetZ);
+ offsetZ = listingStandard.Slider(offsetZ, -2, 2);
+
+ float.TryParse(listingStandard.TextEntryLabeled("Rotation: ", rotation.ToString()), out rotation);
+ rotation = listingStandard.Slider(rotation, -180, 180);
+
+ if(listingStandard.ButtonText("Reset All")) {
+ offsetX = 0;
+ offsetZ = 0;
+ rotation = 0;
+ }
+
+ listingStandard.GapLine();
+
+ if(listingStandard.ButtonText("Shift Actors")) {
+
+ if(AnimationSettings.debugMode) {
+ Log.Message("Shifting actors in animation...");
+ }
+
+ for(int i = 0; i < curPawn.TryGetComp().actorsInCurrentAnimation.Count; i++) {
+
+ Pawn actor = curPawn.TryGetComp().actorsInCurrentAnimation[i];
+
+ actor.TryGetComp()?.shiftActorPositionAndRestartAnimation();
+
+ //reset the clock time of every pawn in animation
+ if(actor.jobs.curDriver is rjw.JobDriver_Sex) {
+ (actor.jobs.curDriver as rjw.JobDriver_Sex).ticks_left = def.animationTimeTicks;
+ (actor.jobs.curDriver as rjw.JobDriver_Sex).ticksLeftThisToil = def.animationTimeTicks;
+ (actor.jobs.curDriver as rjw.JobDriver_Sex).duration = def.animationTimeTicks;
+ }
+
+ }
+
+ }
+
+ if (offsetX != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x || offsetZ != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y) {
+ AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = new Vector2(offsetX, offsetZ);
+
+ }
+
+ if(rotation != AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex]) {
+ AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = rotation;
+ }
+
+ }
+
+ }
+ else {
+ listingStandard.Label("Select a pawn currently in an animation to change their offsets");
+ }
+
+ listingStandard.End();
+
+ }
+
+ public override void PreOpen() {
+ base.PreOpen();
+ if(AnimationSettings.offsets == null) {
+ if (AnimationSettings.debugMode)
+ Log.Message("New offsets");
+ AnimationSettings.offsets = new Dictionary();
+ }
+
+ if(AnimationSettings.rotation == null) {
+ if (AnimationSettings.debugMode)
+ Log.Message("New rotation");
+ AnimationSettings.rotation = new Dictionary();
+ }
+ }
+
+ public override void PostClose() {
+ base.PostClose();
+
+ LoadedModManager.GetMod().WriteSettings();
+ }
+ }
+}
diff --git a/1.6/Source/MainTabWindows/OffsetMainButtonDefOf.cs b/1.3/Source/MainTabWindows/OffsetMainButtonDefOf.cs
similarity index 100%
rename from 1.6/Source/MainTabWindows/OffsetMainButtonDefOf.cs
rename to 1.3/Source/MainTabWindows/OffsetMainButtonDefOf.cs
diff --git a/1.6/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs b/1.3/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs
similarity index 76%
rename from 1.6/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs
rename to 1.3/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs
index 554f9ab..2694419 100644
--- a/1.6/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs
+++ b/1.3/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs
@@ -14,9 +14,9 @@ namespace Rimworld_Animations {
}
- public override void FinalizeInit(bool fromLoad) {
- base.FinalizeInit(fromLoad);
- OffsetMainButtonDefOf.OffsetManager.buttonVisible = RJWAnimationSettings.offsetTab;
+ public override void FinalizeInit() {
+ base.FinalizeInit();
+ OffsetMainButtonDefOf.OffsetManager.buttonVisible = AnimationSettings.offsetTab;
}
diff --git a/1.6/Source/Patches/Harmony_PatchAll.cs b/1.3/Source/Patches/Harmony_PatchAll.cs
similarity index 100%
rename from 1.6/Source/Patches/Harmony_PatchAll.cs
rename to 1.3/Source/Patches/Harmony_PatchAll.cs
diff --git a/1.3/Source/Patches/OtherModPatches/HarmonyPatch_AlienRace.cs b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_AlienRace.cs
new file mode 100644
index 0000000..b7198da
--- /dev/null
+++ b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_AlienRace.cs
@@ -0,0 +1,397 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+using AlienRace;
+
+namespace Rimworld_Animations {
+
+
+ [StaticConstructorOnStartup]
+ public static class HarmonyPatch_AlienRace
+ {
+ static HarmonyPatch_AlienRace()
+ {
+ (new Harmony("rjwanim")).Patch(AccessTools.Method(AccessTools.TypeByName("AlienRace.HarmonyPatches"), "DrawAddons"),
+ prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_AlienRace), "Prefix_AnimateHeadAddons")));
+ }
+
+
+ public static bool Prefix_AnimateHeadAddons(PawnRenderFlags renderFlags, Vector3 vector /*rootloc*/, Vector3 headOffset, Pawn pawn, Quaternion quat, Rot4 rotation)
+ {
+
+ if (renderFlags.FlagSet(PawnRenderFlags.Portrait) || pawn.TryGetComp() == null || !pawn.TryGetComp().isAnimating) return true;
+ if (!(pawn.def is ThingDef_AlienRace alienProps) || renderFlags.FlagSet(PawnRenderFlags.Invisible)) return false;
+
+ List addons = alienProps.alienRace.generalSettings.alienPartGenerator.bodyAddons;
+ AlienPartGenerator.AlienComp comp = pawn.GetComp();
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+
+ for (int i = 0; i < addons.Count; i++)
+ {
+ AlienPartGenerator.BodyAddon ba = addons[index: i];
+
+ if (!ba.CanDrawAddon(pawn: pawn)) continue;
+
+ bool forceDrawForBody = false;
+ if (alienProps.defName.Contains("Orassan") && ba.path.ToLower().Contains("tail"))
+ {
+ forceDrawForBody = true;
+ }
+ AlienPartGenerator.RotationOffset offset = ba.defaultOffsets.GetOffset((ba.drawnInBed && !forceDrawForBody) || ba.alignWithHead ? pawnAnimator.headFacing : pawnAnimator.bodyFacing);
+ Vector3 a = (offset != null) ? offset.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero;
+ AlienPartGenerator.RotationOffset offset2 = ba.offsets.GetOffset((ba.drawnInBed && !forceDrawForBody) || ba.alignWithHead ? pawnAnimator.headFacing : pawnAnimator.bodyFacing);
+ Vector3 vector2 = a + ((offset2 != null) ? offset2.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero);
+ vector2.y = (ba.inFrontOfBody ? (0.3f + vector2.y) : (-0.3f - vector2.y));
+ float num = ba.angle;
+ if (rotation == Rot4.North)
+ {
+ if (ba.layerInvert)
+ {
+ vector2.y = 0f - vector2.y;
+ }
+ num = 0f;
+ }
+ if (rotation == Rot4.East)
+ {
+ num = 0f - num;
+ vector2.x = 0f - vector2.x;
+ }
+ Graphic addonGraphic = comp.addonGraphics[i];
+
+ addonGraphic.drawSize = ((renderFlags.FlagSet(PawnRenderFlags.Portrait) && ba.drawSizePortrait != Vector2.zero) ? ba.drawSizePortrait : ba.drawSize) * (ba.scaleWithPawnDrawsize ? (ba.alignWithHead ? (renderFlags.FlagSet(PawnRenderFlags.Portrait) ? comp.customPortraitHeadDrawSize : comp.customHeadDrawSize) : (renderFlags.FlagSet(PawnRenderFlags.Portrait) ? comp.customPortraitDrawSize : comp.customDrawSize)) : Vector2.one) * 1.5f;
+
+ Vector3 orassanv = Vector3.zero;
+ bool orassan = false;
+ if ((pawn.def as ThingDef_AlienRace).defName == "Alien_Orassan")
+ {
+ orassan = true;
+
+ if (ba.path.Contains("closed"))
+ {
+ continue;
+ }
+
+ if (ba.bodyPart.Contains("ear"))
+
+ {
+ orassan = true;
+
+ orassanv = new Vector3(0, 0, 0.23f);
+ if (pawnAnimator.headFacing == Rot4.North)
+ {
+ orassanv.z -= 0.1f;
+ orassanv.y += 1f;
+
+ if (ba.bodyPart.Contains("left"))
+ {
+ orassanv.x += 0.03f;
+ }
+ else
+ {
+ orassanv.x -= 0.03f;
+ }
+
+ }
+ else if (pawnAnimator.headFacing == Rot4.East)
+ {
+ orassanv.x -= 0.1f;
+ }
+ else if (pawnAnimator.headFacing == Rot4.West)
+ {
+ orassanv.x = 0.1f;
+ }
+ else
+ {
+ orassanv.z -= 0.1f;
+ orassanv.y += 1f;
+
+ if (ba.bodyPart.Contains("right"))
+ {
+ //orassanv.x += 0.3f;
+ }
+ else
+ {
+ //orassanv.x -= 0.3f;
+ }
+ }
+ orassanv = orassanv.RotatedBy(pawnAnimator.headAngle);
+ }
+ }
+
+
+ if ((ba.drawnInBed && !forceDrawForBody) || ba.alignWithHead)
+ {
+
+ Quaternion addonRotation = Quaternion.AngleAxis(pawnAnimator.headAngle < 0 ? 360 - (360 % pawnAnimator.headAngle) : pawnAnimator.headAngle, Vector3.up);
+ /*
+ *
+ * genital rotation is borked
+ if (AnimationSettings.controlGenitalRotation && pawnAnimator.controlGenitalAngle && ba?.hediffGraphics != null && ba.hediffGraphics.Count != 0 && ba.hediffGraphics[0]?.path != null && (ba.hediffGraphics[0].path.Contains("Penis") || ba.hediffGraphics[0].path.Contains("penis")))
+ {
+ addonRotation = Quaternion.AngleAxis(angle: pawnAnimator.genitalAngle < 0 ? 360 - (360 % pawnAnimator.genitalAngle) : pawnAnimator.genitalAngle, axis: Vector3.up);
+ }
+
+ */
+
+ GenDraw.DrawMeshNowOrLater(mesh: addonGraphic.MeshAt(rot: pawnAnimator.headFacing), loc: vector /*rootloc*/ + orassanv + (ba.alignWithHead && !orassan ? headOffset : headOffset - addonRotation * pawn.Drawer.renderer.BaseHeadOffsetAt(pawnAnimator.headFacing)) + vector2.RotatedBy(angle: Mathf.Acos(f: Quaternion.Dot(a: Quaternion.identity, b: addonRotation)) * 2f * 57.29578f),
+ quat: Quaternion.AngleAxis(angle: num, axis: Vector3.up) * addonRotation, mat: addonGraphic.MatAt(rot: pawnAnimator.headFacing), renderFlags.FlagSet(PawnRenderFlags.DrawNow));
+
+
+ }
+
+ else
+ {
+ Quaternion addonRotation = Quaternion.AngleAxis(pawnAnimator.bodyAngle, Vector3.up);
+ if (AnimationSettings.controlGenitalRotation && pawnAnimator.controlGenitalAngle && ba?.hediffGraphics != null && ba.hediffGraphics.Count != 0 && ba.hediffGraphics[0]?.path != null && (ba.hediffGraphics[0].path.Contains("Penis") || ba.hediffGraphics[0].path.Contains("penis")))
+ {
+ GenDraw.DrawMeshNowOrLater(mesh: addonGraphic.MeshAt(rot: rotation), loc: vector + (ba.alignWithHead ? headOffset : Vector3.zero) + vector2.RotatedBy(angle: Mathf.Acos(f: Quaternion.Dot(a: Quaternion.identity, b: addonRotation)) * 2f * 57.29578f),
+ quat: Quaternion.AngleAxis(angle: pawnAnimator.genitalAngle, axis: Vector3.up), mat: addonGraphic.MatAt(rot: rotation), renderFlags.FlagSet(PawnRenderFlags.DrawNow));
+ }
+
+ else
+ {
+ GenDraw.DrawMeshNowOrLater(mesh: addonGraphic.MeshAt(rot: rotation), loc: vector + (ba.alignWithHead ? headOffset : Vector3.zero) + vector2.RotatedBy(angle: Mathf.Acos(f: Quaternion.Dot(a: Quaternion.identity, b: addonRotation)) * 2f * 57.29578f),
+ quat: Quaternion.AngleAxis(angle: num, axis: Vector3.up) * addonRotation, mat: addonGraphic.MatAt(rot: rotation), renderFlags.FlagSet(PawnRenderFlags.DrawNow));
+ }
+
+ }
+
+
+ }
+
+ return false;
+ }
+ }
+
+ [HarmonyPatch(typeof(PawnGraphicSet), "ResolveApparelGraphics")]
+ public static class HarmonyPatch_ResolveApparelGraphics
+ {
+ public static bool Prefix(ref Pawn ___pawn)
+ {
+
+ if (___pawn.TryGetComp() != null && ___pawn.TryGetComp().isAnimating)
+ {
+ return false;
+ }
+ return true;
+ }
+ }
+
+ /*
+
+ [HarmonyPatch(typeof(AlienRace.HarmonyPatches), "DrawAddons")]
+ public static class HarmonyPatch_AlienRace {
+
+ public static void RenderHeadAddonInAnimation(Mesh mesh, Vector3 loc, Quaternion quat, Material mat, bool drawNow, Graphic graphic, AlienPartGenerator.BodyAddon bodyAddon, Vector3 v, Vector3 headOffset, Pawn pawn, PawnRenderFlags renderFlags, Vector3 vector, Rot4 rotation)
+ {
+
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+ AlienPartGenerator.AlienComp comp = pawn.GetComp();
+
+ if (pawnAnimator != null && pawnAnimator.isAnimating)
+ {
+
+ if((bodyAddon.drawnInBed || bodyAddon.alignWithHead))
+ {
+
+ AlienPartGenerator.RotationOffset offset = bodyAddon.defaultOffsets.GetOffset(rotation);
+ Vector3 a = (offset != null) ? offset.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero;
+ AlienPartGenerator.RotationOffset offset2 = bodyAddon.offsets.GetOffset(rotation);
+ Vector3 vector2 = a + ((offset2 != null) ? offset2.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero);
+ vector2.y = (bodyAddon.inFrontOfBody ? (0.3f + vector2.y) : (-0.3f - vector2.y));
+ float num = bodyAddon.angle;
+ if (rotation == Rot4.North)
+ {
+ if (bodyAddon.layerInvert)
+ {
+ vector2.y = -vector2.y;
+ }
+ num = 0f;
+ }
+ if (rotation == Rot4.East)
+ {
+ num = -num;
+ vector2.x = -vector2.x;
+ }
+
+ vector = vector + Quaternion.AngleAxis(pawnAnimator.bodyAngle, Vector3.up) * pawn.Drawer.renderer.BaseHeadOffsetAt(pawnAnimator.bodyFacing) - pawnAnimator.getPawnHeadOffset(); //convert vector into pseudo body pos for head
+ quat = Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up);
+ loc = vector + (bodyAddon.alignWithHead ? headOffset : Vector3.zero) + vector2.RotatedBy(Mathf.Acos(Quaternion.Dot(Quaternion.identity, quat)) * 2f * 57.29578f);
+ mat = graphic.MatAt(rot: pawnAnimator.headFacing);
+ }
+ else
+ {
+
+ AlienPartGenerator.RotationOffset offset = bodyAddon.defaultOffsets.GetOffset(rotation);
+ Vector3 a = (offset != null) ? offset.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero;
+ AlienPartGenerator.RotationOffset offset2 = bodyAddon.offsets.GetOffset(rotation);
+ Vector3 vector2 = a + ((offset2 != null) ? offset2.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero);
+ vector2.y = (bodyAddon.inFrontOfBody ? (0.3f + vector2.y) : (-0.3f - vector2.y));
+ float num = bodyAddon.angle;
+ if (rotation == Rot4.North)
+ {
+ if (bodyAddon.layerInvert)
+ {
+ vector2.y = -vector2.y;
+ }
+ num = 0f;
+ }
+ if (rotation == Rot4.East)
+ {
+ num = -num;
+ vector2.x = -vector2.x;
+ }
+ quat = Quaternion.AngleAxis(pawnAnimator.bodyAngle, Vector3.up);
+ loc = vector + (bodyAddon.alignWithHead ? headOffset : Vector3.zero) + vector2.RotatedBy(Mathf.Acos(Quaternion.Dot(Quaternion.identity, quat)) * 2f * 57.29578f);
+
+ }
+
+ }
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quat, mat, drawNow);
+
+ /*
+ if (pawnAnimator != null && !renderFlags.FlagSet(PawnRenderFlags.Portrait) && pawnAnimator.isAnimating && (bodyAddon.drawnInBed || bodyAddon.alignWithHead))
+ {
+
+
+ if ((pawn.def as ThingDef_AlienRace).defName == "Alien_Orassan")
+ {
+ orassan = true;
+
+ if(bodyAddon.path.Contains("closed"))
+ {
+ return;
+ }
+
+ if (bodyAddon.bodyPart.Contains("ear"))
+
+ {
+ orassan = true;
+
+ orassanv = new Vector3(0, 0, 0.23f);
+ if (pawnAnimator.headFacing == Rot4.North)
+ {
+ orassanv.z -= 0.1f;
+ orassanv.y += 1f;
+
+ if(bodyAddon.bodyPart.Contains("left"))
+ {
+ orassanv.x += 0.03f;
+ } else
+ {
+ orassanv.x -= 0.03f;
+ }
+
+ }
+ else if (pawnAnimator.headFacing == Rot4.East)
+ {
+ orassanv.x -= 0.1f;
+ }
+ else if (pawnAnimator.headFacing == Rot4.West)
+ {
+ orassanv.x = 0.1f;
+ }
+ else
+ {
+ orassanv.z -= 0.1f;
+ orassanv.y += 1f;
+
+ if (bodyAddon.bodyPart.Contains("right"))
+ {
+ orassanv.x += 0.05f;
+ }
+ else
+ {
+ orassanv.x -= 0.05f;
+ }
+ }
+ orassanv = orassanv.RotatedBy(pawnAnimator.headAngle);
+ }
+ }
+
+
+
+
+
+ GenDraw.DrawMeshNowOrLater(mesh: graphic.MeshAt(rot: headRotInAnimation), loc: loc + orassanv + (bodyAddon.alignWithHead ? headOffset : Vector3.zero),// + v.RotatedBy(Mathf.Acos(Quaternion.Dot(Quaternion.identity, quat)) * 2f * 57.29578f),
+ quat: Quaternion.AngleAxis(angle: num, axis: Vector3.up) * headQuatInAnimation, mat: graphic.MatAt(rot: pawnAnimator.headFacing), drawNow: drawNow);;
+ }
+
+ else
+ {
+
+ }
+
+
+ }
+
+
+ public static IEnumerable Transpiler(IEnumerable instructions)
+ {
+ List ins = instructions.ToList();
+ for (int i = 0; i < ins.Count; i++)
+ {
+
+ Type[] type = new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool) };
+
+
+ if (ins[i].OperandIs(AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater", type)))
+ {
+
+ yield return new CodeInstruction(OpCodes.Ldloc, (object)7); //graphic
+ yield return new CodeInstruction(OpCodes.Ldloc, (object)4); //bodyAddon
+ yield return new CodeInstruction(OpCodes.Ldloc, (object)5); //offsetVector/AddonOffset (v)
+ yield return new CodeInstruction(OpCodes.Ldarg, (object)2); //headOffset
+ yield return new CodeInstruction(OpCodes.Ldarg, (object)3); //pawn
+ yield return new CodeInstruction(OpCodes.Ldarg, (object)0); //renderflags
+ yield return new CodeInstruction(OpCodes.Ldarg, (object)1); //vector
+ yield return new CodeInstruction(OpCodes.Ldarg, (object)5); //rotation
+
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(HarmonyPatch_AlienRace), "RenderHeadAddonInAnimation"));
+
+ }
+
+ else
+ {
+ yield return ins[i];
+ }
+ }
+ }
+
+ public static bool Prefix(PawnRenderFlags renderFlags, ref Vector3 vector, ref Vector3 headOffset, Pawn pawn, ref Quaternion quat, ref Rot4 rotation)
+ {
+ if(pawn == null)
+ {
+ return true;
+ }
+
+ CompBodyAnimator anim = pawn.TryGetComp();
+
+ if(anim == null)
+ {
+ return true;
+ }
+
+ if (anim != null && !renderFlags.FlagSet(PawnRenderFlags.Portrait) && anim.isAnimating)
+ {
+ //quat = Quaternion.AngleAxis(anim.bodyAngle, Vector3.up);
+ }
+
+ return true;
+
+ }
+ }
+
+
+ */
+
+}
+
+
diff --git a/1.3/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs
new file mode 100644
index 0000000..8345ede
--- /dev/null
+++ b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs
@@ -0,0 +1,87 @@
+/*
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using rjw;
+using Verse;
+using RimWorld;
+using System.Reflection.Emit;
+using System.Reflection;
+using UnityEngine;
+
+namespace Rimworld_Animations {
+ [StaticConstructorOnStartup]
+ public static class HarmonyPatch_CSL {
+ static HarmonyPatch_CSL() {
+ try {
+ ((Action)(() => {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Children, school and learning")) {
+
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("Children.PawnRenderer_RenderPawnInternal_Patch"), "RenderPawnInternalScaled"),
+ prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_CSL), "Prefix_CSL")),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_CSL), "Transpiler_CSL")));
+ }
+ }))();
+ }
+ catch (TypeLoadException ex) {
+
+ }
+ }
+
+ public static void Prefix_CSL(PawnRenderer __instance, Pawn pawn, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, ref Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible) {
+
+ PawnGraphicSet graphics = __instance.graphics;
+ CompBodyAnimator bodyAnim = pawn.TryGetComp();
+
+ if (!graphics.AllResolved) {
+ graphics.ResolveAllGraphics();
+ }
+
+
+ if (bodyAnim != null && bodyAnim.isAnimating && !portrait) {
+ bodyAnim.tickGraphics(graphics);
+ pawn.TryGetComp().animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing);
+
+ }
+ }
+
+ public static IEnumerable Transpiler_CSL(IEnumerable instructions) {
+
+ MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater");
+ FieldInfo headGraphic = AccessTools.Field(typeof(PawnGraphicSet), "headGraphic");
+
+
+ List codes = instructions.ToList();
+ bool forHead = true;
+ for (int i = 0; i < codes.Count(); i++) {
+
+ //Instead of calling drawmeshnoworlater, add pawn to the stack and call my special static method
+ if (codes[i].OperandIs(drawMeshNowOrLater) && forHead) {
+
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Ldarg_2);
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn), typeof(float) }));
+
+ }
+ //checking for if(graphics.headGraphic != null)
+ else if (codes[i].opcode == OpCodes.Ldfld && codes[i].OperandIs(headGraphic)) {
+ forHead = true;
+ yield return codes[i];
+ }
+ //checking for if(renderbody)
+ else if (codes[i].opcode == OpCodes.Ldarg_3) {
+ forHead = false;
+ yield return codes[i];
+ }
+ else {
+ yield return codes[i];
+ }
+ }
+ }
+
+ }
+}*/
diff --git a/1.3/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs
new file mode 100644
index 0000000..3cb2a63
--- /dev/null
+++ b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs
@@ -0,0 +1,29 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace Rimworld_Animations {
+ class HarmonyPatch_DontShaveYourHead {
+
+ [StaticConstructorOnStartup]
+ public static class Patch_DontShaveYourHead {
+
+ static Patch_DontShaveYourHead() {
+ try {
+ ((Action)(() =>
+ {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Don't Shave Your Head 1.0")) {
+ (new Harmony("rjwanim")).Patch(AccessTools.Method(AccessTools.TypeByName("DontShaveYourHead.Harmony_PawnRenderer"), "DrawHairReroute"), //typeof(ShowHair.Patch_PawnRenderer_RenderPawnInternal), nameof(ShowHair.Patch_PawnRenderer_RenderPawnInternal.Postfix)),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(Patch_ShowHairWithHats), "Transpiler")));
+ }
+ }))();
+ }
+ catch (TypeLoadException ex) { }
+ }
+ }
+ }
+}
diff --git a/1.3/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs
new file mode 100644
index 0000000..83ffd5b
--- /dev/null
+++ b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs
@@ -0,0 +1,104 @@
+using HarmonyLib;
+using RimWorld;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+ [StaticConstructorOnStartup]
+ public static class Patch_FacialAnimation {
+
+ static Patch_FacialAnimation() {
+ try {
+ ((Action)(() => {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "[NL] Facial Animation - WIP")) {
+ (new Harmony("rjwanim")).Patch(AccessTools.Method(AccessTools.TypeByName("FacialAnimation.DrawFaceGraphicsComp"), "DrawGraphics"),
+ prefix: new HarmonyMethod(AccessTools.Method(typeof(Patch_FacialAnimation), "Prefix")));
+ }
+ }))();
+ }
+ catch (TypeLoadException ex) {
+
+ }
+ }
+
+ public static bool Prefix(ref Pawn ___pawn, ref Rot4 headFacing, ref Vector3 headOrigin, ref Quaternion quaternion, ref bool portrait) {
+
+ CompBodyAnimator bodyAnim = ___pawn.TryGetComp();
+
+ if (bodyAnim != null && bodyAnim.isAnimating && !portrait) {
+
+ headFacing = bodyAnim.headFacing;
+ headOrigin = new Vector3(bodyAnim.getPawnHeadPosition().x, headOrigin.y, bodyAnim.getPawnHeadPosition().z);
+ quaternion = Quaternion.AngleAxis(bodyAnim.headAngle, Vector3.up);
+ }
+
+ return true;
+ }
+ /*
+ public static List rjwLovinDefNames = new List{
+ "Lovin",
+ "Quickie",
+ "GettingQuickie",
+ "JoinInBed",
+ "JoinInBedAnimation",
+ "GettinLovedAnimation",
+ "GettinLoved",
+ "GettinLicked",
+ "GettinSucked",
+ "GettinRaped",
+ "ViolateCorpse",
+ "RJW_Masturbate",
+ "GettinBred",
+ "Breed",
+ "RJW_Mate",
+ "Bestiality",
+ "BestialityForFemale",
+ "StruggleInBondageGear",
+ "WhoreIsServingVisitors",
+ "UseFM"
+ };
+
+ public static List rjwRapeDefNames = new List {
+ "RapeComfortPawn",
+ "RandomRape",
+ "RapeEnemy"
+ };
+
+ public static bool Prefix_IsSameA(JobDef job, string ___jobDef, ref bool __result) {
+
+ if(___jobDef != null && ___jobDef == "Lovin" && job?.defName != null && rjwLovinDefNames.Contains(job?.defName)) {
+ __result = true;
+ return false;
+ }
+ else if (___jobDef != null && ___jobDef == "Wait_Combat" && job?.defName != null && rjwRapeDefNames.Contains(job?.defName)) {
+ __result = true;
+ return false;
+ }
+
+
+ return true;
+ }
+
+ public static bool Prefix_IsSameB(string jobName, string ___jobDef, ref bool __result) {
+
+ if (___jobDef != null && ___jobDef == "Lovin" && jobName != null && rjwLovinDefNames.Contains(jobName)) {
+ __result = true;
+ return false;
+ }
+ if (___jobDef != null && ___jobDef == "Wait_Combat" && jobName != null && rjwRapeDefNames.Contains(jobName)) {
+ __result = true;
+ return false;
+ }
+
+ return true;
+ }
+ */
+ }
+}
\ No newline at end of file
diff --git a/1.3/Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs
new file mode 100644
index 0000000..1cd5707
--- /dev/null
+++ b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs
@@ -0,0 +1,77 @@
+/*using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using UnityEngine;
+using System.Reflection;
+using System.Reflection.Emit;
+
+namespace Rimworld_Animations {
+ public static class HarmonyPatch_HatsDisplaySelection {
+
+ public static void PatchHatsDisplaySelectionArgs() {
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHatCEWithHair"),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "ReplaceDrawMeshOrLaterWithAnimate")));
+
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHatWithHair"),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "ReplaceDrawMeshOrLaterWithAnimate")));
+
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHeadApparelWithHair"),
+ prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "PrefixPatchForDrawHeadApparelWithHair")));
+
+
+ }
+
+ public static void PrefixPatchForDrawHeadApparelWithHair(PawnRenderer renderer, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, ref Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible)
+ {
+ PawnGraphicSet graphics = renderer.graphics;
+ Pawn pawn = graphics.pawn;
+ CompBodyAnimator bodyAnim = pawn.TryGetComp();
+
+ if (!graphics.AllResolved)
+ {
+ graphics.ResolveAllGraphics();
+ }
+
+
+ if (bodyAnim != null && bodyAnim.isAnimating && !portrait && pawn.Map == Find.CurrentMap)
+ {
+ bodyAnim.tickGraphics(graphics);
+ bodyAnim.animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing);
+
+ }
+ }
+
+
+ public static IEnumerable ReplaceDrawMeshOrLaterWithAnimate(IEnumerable instructions) {
+
+ MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater");
+ List codes = instructions.ToList();
+ for (int i = 0; i < instructions.Count(); i++) {
+
+
+ if (codes[i].
+
+
+(drawMeshNowOrLater)) {
+
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(AccessTools.TypeByName("HatDisplaySelection.Patch"), "pawn"));
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn) }));
+
+ }
+ else {
+ yield return codes[i];
+ }
+
+ }
+
+ }
+
+ }
+}
+*/
\ No newline at end of file
diff --git a/1.3/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs
new file mode 100644
index 0000000..a42ab7d
--- /dev/null
+++ b/1.3/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs
@@ -0,0 +1,51 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+ [StaticConstructorOnStartup]
+ public static class Patch_ShowHairWithHats {
+
+ static Patch_ShowHairWithHats() {
+ try {
+ ((Action)(() =>
+ {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "[KV] Show Hair With Hats or Hide All Hats - 1.1")) {
+ (new Harmony("rjwanim")).Patch(AccessTools.Method(AccessTools.TypeByName("ShowHair.Patch_PawnRenderer_RenderPawnInternal"), "Postfix"), //typeof(ShowHair.Patch_PawnRenderer_RenderPawnInternal), nameof(ShowHair.Patch_PawnRenderer_RenderPawnInternal.Postfix)),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(Patch_ShowHairWithHats), "Transpiler")));
+ }
+ }))();
+ }
+ catch (TypeLoadException ex) { }
+ }
+
+
+ public static IEnumerable Transpiler(IEnumerable instructions) {
+
+ MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater");
+
+ List codes = instructions.ToList();
+ for (int i = 0; i < codes.Count(); i++) {
+
+ //Instead of calling drawmeshnoworlater, add pawn to the stack and call my special static method
+ if (codes[i].OperandIs(drawMeshNowOrLater)) {
+
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn) }));
+
+ }
+ else {
+ yield return codes[i];
+ }
+ }
+ }
+ }
+}
diff --git a/1.3/Source/Patches/RJWPatches/HarmonyPatch_PlaySexSounds.cs b/1.3/Source/Patches/RJWPatches/HarmonyPatch_PlaySexSounds.cs
new file mode 100644
index 0000000..6544f13
--- /dev/null
+++ b/1.3/Source/Patches/RJWPatches/HarmonyPatch_PlaySexSounds.cs
@@ -0,0 +1,25 @@
+using HarmonyLib;
+using rjw;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(JobDriver_Sex), "PlaySexSound")]
+ class HarmonyPatch_PlaySexSounds
+ {
+ public static bool Prefix(JobDriver_Sex __instance)
+ {
+ if (__instance.pawn.TryGetComp().isAnimating)
+ {
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_SexTick.cs b/1.3/Source/Patches/RJWPatches/HarmonyPatch_SexTick.cs
similarity index 83%
rename from 1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_SexTick.cs
rename to 1.3/Source/Patches/RJWPatches/HarmonyPatch_SexTick.cs
index 3508837..9ba03b2 100644
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_SexTick.cs
+++ b/1.3/Source/Patches/RJWPatches/HarmonyPatch_SexTick.cs
@@ -38,12 +38,16 @@ namespace Rimworld_Animations
__instance.PlaySexSound();
if (!__instance.Sexprops.isRape)
{
- pawn.GainComfortFromCellIfPossible(__instance.ticks_between_thrusts);
+ pawn.GainComfortFromCellIfPossible(false);
if (target is Pawn)
{
- (target as Pawn).GainComfortFromCellIfPossible(__instance.ticks_between_thrusts);
+ (target as Pawn).GainComfortFromCellIfPossible(false);
}
}
+ if(!__instance.isEndytophile)
+ {
+ SexUtility.DrawNude(pawn, false);
+ }
}
return false;
diff --git a/1.6/Source/Patches/RJWPatches/HarmonyPatch_WorkGiverSex.cs b/1.3/Source/Patches/RJWPatches/HarmonyPatch_WorkGiverSex.cs
similarity index 100%
rename from 1.6/Source/Patches/RJWPatches/HarmonyPatch_WorkGiverSex.cs
rename to 1.3/Source/Patches/RJWPatches/HarmonyPatch_WorkGiverSex.cs
diff --git a/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs
new file mode 100644
index 0000000..18c955e
--- /dev/null
+++ b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using rjw;
+using System.Reflection.Emit;
+using Verse.AI;
+
+namespace Rimworld_Animations
+{
+
+ [HarmonyPatch(typeof(Bed_Utility), "in_same_bed")]
+ public static class HarmonyPatch_JobDriver_InSameBedPatch
+ {
+
+ public static bool Prefix(Pawn partner, ref bool __result)
+ {
+
+ if(partner != null && partner.CurJobDef == xxx.casual_sex)
+ {
+ __result = true;
+ return false;
+ }
+
+ return true;
+
+ }
+
+
+
+ }
+
+ [HarmonyPatch(typeof(JobDriver_JoinInBed), "MakeNewToils")]
+ public static class HarmonyPatch_JobDriver_JoinInBed
+ {
+
+ public static void Postfix(JobDriver_JoinInBed __instance, ref IEnumerable __result)
+ {
+
+ var toils = __result.ToList();
+
+ Toil goToPawnInBed = Toils_Goto.GotoThing(__instance.iTarget, PathEndMode.OnCell);
+ goToPawnInBed.FailOn(() => !RestUtility.InBed(__instance.Partner) && __instance.Partner.CurJobDef != xxx.gettin_loved && !Bed_Utility.in_same_bed(__instance.Partner, __instance.pawn));
+
+ toils[1] = goToPawnInBed;
+
+
+ Toil startPartnerSex = new Toil();
+ startPartnerSex.initAction = delegate {
+
+
+ if (!(__instance.Partner.jobs.curDriver is JobDriver_SexBaseReciever)) // allows threesomes
+ {
+ Job gettinLovedJob = JobMaker.MakeJob(xxx.gettin_loved, __instance.pawn, __instance.Bed); // new gettin loved toil that wakes up the pawn goes here
+ __instance.Partner.jobs.jobQueue.EnqueueFirst(gettinLovedJob);
+ __instance.Partner.jobs.EndCurrentJob(JobCondition.InterruptForced);
+ }
+
+ };
+
+ toils[2] = startPartnerSex;
+
+ toils[3].AddPreTickAction(() =>
+ {
+ if (!__instance.Partner.TryGetComp().isAnimating)
+ {
+ __instance.pawn.TryGetComp().isAnimating = false;
+ }
+ });
+
+
+ __result = toils.AsEnumerable();
+
+
+ }
+
+
+
+ }
+}
diff --git a/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs
new file mode 100644
index 0000000..260d924
--- /dev/null
+++ b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs
@@ -0,0 +1,191 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using rjw;
+
+namespace Rimworld_Animations {
+
+ [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")]
+ static class HarmonyPatch_JobDriver_SexBaseInitiator_Start {
+ public static void Postfix(ref JobDriver_SexBaseInitiator __instance) {
+ /*
+ These particular jobs need special code
+ don't play anim for now
+ */
+ if(__instance is JobDriver_Masturbate || __instance is JobDriver_ViolateCorpse) {
+ return;
+ }
+
+ if(!AnimationSettings.PlayAnimForNonsexualActs && NonSexualAct(__instance))
+ {
+ return;
+ }
+
+ Pawn pawn = __instance.pawn;
+
+ Building_Bed bed = __instance.Bed;
+
+ if ((__instance.Target as Pawn)?.jobs?.curDriver is JobDriver_SexBaseReciever) {
+
+ Pawn Target = __instance.Target as Pawn;
+
+ bool quickie = (__instance is JobDriver_SexQuick) && AnimationSettings.fastAnimForQuickie;
+
+ int preAnimDuration = __instance.duration;
+ int AnimationTimeTicks = 0;
+
+
+ if (bed != null) {
+ RerollAnimations(Target, out AnimationTimeTicks, bed as Thing, __instance.Sexprops.sexType, quickie, sexProps: __instance.Sexprops);
+ }
+ else {
+ RerollAnimations(Target, out AnimationTimeTicks, sexType: __instance.Sexprops.sexType, fastAnimForQuickie: quickie, sexProps: __instance.Sexprops);
+ }
+
+
+ //Modify Orgasm ticks to only orgasm as many times as RJW stock orgasm allows
+ if(AnimationTimeTicks != 0)
+ {
+ __instance.orgasmstick = preAnimDuration * __instance.orgasmstick / AnimationTimeTicks;
+ }
+
+
+ }
+ }
+
+ public static void RerollAnimations(Pawn pawn, out int AnimationTimeTicks, Thing bed = null, xxx.rjwSextype sexType = xxx.rjwSextype.None, bool fastAnimForQuickie = false, rjw.SexProps sexProps = null) {
+
+ AnimationTimeTicks = 0;
+
+ if(pawn == null || !(pawn.jobs?.curDriver is JobDriver_SexBaseReciever)) {
+ Log.Error("Error: Tried to reroll animations when pawn isn't sexing");
+ return;
+ }
+
+ List pawnsToAnimate = (pawn.jobs.curDriver as JobDriver_SexBaseReciever).parteners.ToList();
+
+ if (!pawnsToAnimate.Contains(pawn)) {
+ pawnsToAnimate = pawnsToAnimate.Append(pawn).ToList();
+ }
+
+ for(int i = 0; i < pawnsToAnimate.Count; i++) {
+
+ if(pawnsToAnimate[i].TryGetComp() == null) {
+ Log.Error("Error: " + pawnsToAnimate[i].Name + " of race " + pawnsToAnimate[i].def.defName + " does not have CompBodyAnimator attached!");
+ break;
+ }
+ }
+
+ AnimationDef anim = AnimationUtility.tryFindAnimation(ref pawnsToAnimate, sexType, sexProps);
+
+ if (anim != null) {
+
+ bool mirror = GenTicks.TicksGame % 2 == 0;
+
+ IntVec3 pos = pawn.Position;
+
+ for (int i = 0; i < anim.actors.Count; i++)
+ {
+ pawnsToAnimate[i].TryGetComp().isAnimating = false;
+ }
+
+ for (int i = 0; i < pawnsToAnimate.Count; i++) {
+
+ if (bed != null)
+ pawnsToAnimate[i].TryGetComp().setAnchor(bed);
+ else {
+
+ pawnsToAnimate[i].TryGetComp().setAnchor(pos);
+ }
+
+ bool shiver = pawnsToAnimate[i].jobs.curDriver is JobDriver_SexBaseRecieverRaped;
+ pawnsToAnimate[i].TryGetComp().StartAnimation(anim, pawnsToAnimate, i, mirror, shiver, fastAnimForQuickie);
+
+ int animTicks = anim.animationTimeTicks - (fastAnimForQuickie ? anim.animationStages[0].playTimeTicks : 0);
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).ticks_left = animTicks;
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).sex_ticks = animTicks;
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).duration = animTicks;
+
+
+ AnimationTimeTicks = animTicks;
+
+ if(!AnimationSettings.hearts) {
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).ticks_between_hearts = Int32.MaxValue;
+ }
+
+ }
+ }
+ else {
+ Log.Message("No animation found");
+
+ /*
+
+ //if pawn isn't already animating,
+ if (!pawn.TryGetComp().isAnimating) {
+ (pawn.jobs.curDriver as JobDriver_SexBaseReciever).increase_time(duration);
+ //they'll just do the thrusting anim
+ }
+
+ */
+ }
+ }
+
+
+ static IEnumerable NonSexActRulePackDefNames = new String[]
+ {
+ "MutualHandholdingRP",
+ "MutualMakeoutRP",
+ };
+
+ public static bool NonSexualAct(JobDriver_SexBaseInitiator sexBaseInitiator)
+ {
+ if(NonSexActRulePackDefNames.Contains(sexBaseInitiator.Sexprops.rulePack))
+ {
+ return true;
+ }
+ return false;
+ }
+ }
+
+ [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
+ static class HarmonyPatch_JobDriver_SexBaseInitiator_End {
+
+ public static void Postfix(ref JobDriver_SexBaseInitiator __instance) {
+
+ if ((__instance.Target as Pawn)?.jobs?.curDriver is JobDriver_SexBaseReciever) {
+ if (__instance.pawn.TryGetComp().isAnimating) {
+
+ List parteners = ((__instance.Target as Pawn)?.jobs.curDriver as JobDriver_SexBaseReciever).parteners;
+
+ for (int i = 0; i < parteners.Count; i++) {
+
+ //prevents pawns who started a new anim from stopping their new anim
+ if (!((parteners[i].jobs.curDriver as JobDriver_SexBaseInitiator) != null && (parteners[i].jobs.curDriver as JobDriver_SexBaseInitiator).Target != __instance.pawn))
+ parteners[i].TryGetComp().isAnimating = false;
+
+ }
+
+ __instance.Target.TryGetComp().isAnimating = false;
+
+ if (xxx.is_human((__instance.Target as Pawn))) {
+ (__instance.Target as Pawn)?.Drawer.renderer.graphics.ResolveApparelGraphics();
+ PortraitsCache.SetDirty((__instance.Target as Pawn));
+ }
+ }
+
+ ((__instance.Target as Pawn)?.jobs.curDriver as JobDriver_SexBaseReciever).parteners.Remove(__instance.pawn);
+
+ }
+
+ if (xxx.is_human(__instance.pawn)) {
+ __instance.pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
+ PortraitsCache.SetDirty(__instance.pawn);
+ }
+ }
+ }
+}
diff --git a/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs
new file mode 100644
index 0000000..d328d2b
--- /dev/null
+++ b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using rjw;
+using System.Reflection.Emit;
+
+namespace Rimworld_Animations
+{
+
+ [HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")]
+ public static class HarmonyPatch_JobDriver_SexBaseReceiverLoved
+ {
+
+ public static IEnumerable Transpiler(IEnumerable codeInstructions)
+ {
+
+ var ins = codeInstructions.ToList();
+ for(int i = 0; i < ins.Count; i++)
+ {
+ if(i + 13 < ins.Count && ins[i + 13].opcode == OpCodes.Call && ins[i + 13].OperandIs(AccessTools.DeclaredMethod(typeof(Toils_LayDown), "LayDown"))) {
+
+ ins.RemoveRange(i, 14);
+
+ }
+
+ else
+ {
+ yield return ins[i];
+ }
+ }
+
+ }
+
+ }
+}
diff --git a/1.3/Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs
new file mode 100644
index 0000000..37ba6ce
--- /dev/null
+++ b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs
@@ -0,0 +1,22 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+using UnityEngine;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(PawnRenderer), "DrawHeadHair")]
+ public static class HarmonyPatch_HeadHair
+ {
+ public static void Prefix(ref Vector3 headOffset, ref float angle)
+ {
+
+ }
+
+ }
+}
diff --git a/1.3/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs
new file mode 100644
index 0000000..218e45b
--- /dev/null
+++ b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using UnityEngine;
+using System.Reflection;
+using System.Reflection.Emit;
+
+namespace Rimworld_Animations {
+
+ [HarmonyPatch(typeof(PawnRenderer), "RenderPawnInternal", new Type[]
+ {
+ typeof(Vector3),
+ typeof(float),
+ typeof(bool),
+ typeof(Rot4),
+ typeof(RotDrawMode),
+ typeof(PawnRenderFlags)
+ }
+ )]
+ public static class HarmonyPatch_PawnRenderer
+ {
+
+ [HarmonyBefore(new string[] { "showhair.kv.rw", "erdelf.HumanoidAlienRaces", "Nals.FacialAnimation" })]
+ public static void Prefix(PawnRenderer __instance, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, RotDrawMode bodyDrawType, PawnRenderFlags flags)
+ {
+
+ if (flags.FlagSet(PawnRenderFlags.Portrait)) return;
+
+ PawnGraphicSet graphics = __instance.graphics;
+ Pawn pawn = graphics.pawn;
+ CompBodyAnimator bodyAnim = pawn.TryGetComp();
+
+
+ if (bodyAnim != null && bodyAnim.isAnimating && pawn.Map == Find.CurrentMap)
+ {
+ bodyAnim.animatePawnBody(ref rootLoc, ref angle, ref bodyFacing);
+
+ }
+
+ }
+
+ public static IEnumerable Transpiler(IEnumerable instructions)
+ {
+ List ins = instructions.ToList();
+
+ for(int i = 0; i < instructions.Count(); i++)
+ {
+
+ if (i - 3 >= 0 && ins[i - 3].opcode == OpCodes.Call && ins[i - 3].operand != null && ins[i - 3].OperandIs(AccessTools.DeclaredMethod(typeof(PawnRenderer), "BaseHeadOffsetAt")))
+ {
+
+ yield return new CodeInstruction(OpCodes.Ldloca, (object)0);
+ yield return new CodeInstruction(OpCodes.Ldloca, (object)7);
+ yield return new CodeInstruction(OpCodes.Ldloca, (object)6);
+ yield return new CodeInstruction(OpCodes.Ldarga, (object)2);
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Ldarg, (object)6);
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), "AdjustHead"));
+ yield return ins[i];
+ //headFacing equals true
+ }
+
+ // Fixes the offsets for eye implants and wounds on the head during animations
+ else if (ins[i].opcode == OpCodes.Callvirt && ins[i].operand != null && ins[i].OperandIs(AccessTools.DeclaredMethod(typeof(PawnWoundDrawer), "RenderOverBody")))
+ {
+ // Pass some additional info to a new overload of RenderOverBody
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Ldarg_S, (object)6); // renderer flags
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(PawnWoundDrawerExtension), "RenderOverBody"));
+ }
+
+ else
+ {
+ yield return ins[i];
+ }
+ }
+ }
+ }
+}
diff --git a/1.3/Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs
new file mode 100644
index 0000000..7ec75a1
--- /dev/null
+++ b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs
@@ -0,0 +1,29 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace Rimworld_Animations {
+ [HarmonyPatch(typeof(Thing), "Rotation", MethodType.Getter)]
+ public static class HarmonyPatch_PawnRotation {
+
+ public static bool Prefix(Thing __instance, ref Rot4 __result) {
+
+ if(!(__instance is Pawn) || (__instance as Pawn)?.TryGetComp() == null || !(__instance as Pawn).TryGetComp().isAnimating) {
+ return true;
+ }
+
+ Pawn pawn = (__instance as Pawn);
+ __result = pawn.TryGetComp().bodyFacing;
+
+ return false;
+
+
+ }
+
+ }
+
+}
diff --git a/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs
new file mode 100644
index 0000000..5cdcfce
--- /dev/null
+++ b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs
@@ -0,0 +1,26 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+
+ [HarmonyPatch(typeof(Pawn_DrawTracker), "DrawPos", MethodType.Getter)]
+ public static class HarmonyPatch_Pawn_DrawTracker {
+ public static bool Prefix(ref Pawn ___pawn, ref Vector3 __result) {
+
+ CompBodyAnimator bodyAnim = ___pawn.TryGetComp();
+
+ if (bodyAnim != null && bodyAnim.isAnimating) {
+ __result = ___pawn.TryGetComp().anchor + ___pawn.TryGetComp().deltaPos;
+
+ return false;
+ }
+ return true;
+ }
+ }
+}
diff --git a/1.3/Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs
new file mode 100644
index 0000000..b8c66b8
--- /dev/null
+++ b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs
@@ -0,0 +1,40 @@
+using HarmonyLib;
+using RimWorld;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(PawnRenderer), "RenderPawnAt")]
+ public static class PawnRenderer_RenderPawnAt_Patch
+ {
+ static bool ClearCache(Pawn pawn)
+ {
+ return pawn.IsInvisible() || (pawn.TryGetComp() != null && pawn.TryGetComp().isAnimating);
+ }
+
+ public static IEnumerable Transpiler(IEnumerable instructions)
+ {
+ var list = instructions.ToList();
+
+ foreach (CodeInstruction i in instructions)
+ {
+ if (i.OperandIs(AccessTools.Method(typeof(PawnUtility), "IsInvisible")))
+ {
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(PawnRenderer_RenderPawnAt_Patch), "ClearCache"));
+ }
+ else
+ {
+ yield return i;
+ }
+ }
+ }
+ }
+
+}
diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs
similarity index 96%
rename from 1.6/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs
rename to 1.3/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs
index ec738f7..9477abf 100644
--- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs
+++ b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs
@@ -12,7 +12,7 @@ namespace Rimworld_Animations
[HarmonyPatch(typeof(Thing), "DrawAt")]
public static class HarmonyPatch_Thing
{
- /*
+
public static bool Prefix(Thing __instance)
{
CompThingAnimator thingAnimator = __instance.TryGetComp();
@@ -27,7 +27,5 @@ namespace Rimworld_Animations
}
-
- */
}
}
diff --git a/1.3/Source/Settings/AnimationSettings.cs b/1.3/Source/Settings/AnimationSettings.cs
new file mode 100644
index 0000000..0a96621
--- /dev/null
+++ b/1.3/Source/Settings/AnimationSettings.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using UnityEngine;
+using RimWorld;
+
+namespace Rimworld_Animations {
+
+ public class AnimationSettings : ModSettings {
+
+ public static bool orgasmQuiver, rapeShiver, soundOverride = true, hearts = true, controlGenitalRotation = false, applySemenOnAnimationOrgasm = false, fastAnimForQuickie = false,
+ PlayAnimForNonsexualActs = true;
+ public static bool offsetTab = false, debugMode = false;
+ public static float shiverIntensity = 2f;
+
+ public static Dictionary offsets = new Dictionary();
+ public static Dictionary rotation = new Dictionary();
+
+ public override void ExposeData() {
+
+ base.ExposeData();
+
+ Scribe_Values.Look(ref debugMode, "RJWAnimations-AnimsDebugMode", false);
+ Scribe_Values.Look(ref offsetTab, "RJWAnimations-EnableOffsetTab", false);
+ Scribe_Values.Look(ref controlGenitalRotation, "RJWAnimations-controlGenitalRotation", false);
+ Scribe_Values.Look(ref orgasmQuiver, "RJWAnimations-orgasmQuiver");
+ Scribe_Values.Look(ref fastAnimForQuickie, "RJWAnimations-fastAnimForQuickie");
+ Scribe_Values.Look(ref rapeShiver, "RJWAnimations-rapeShiver");
+ Scribe_Values.Look(ref hearts, "RJWAnimation-sheartsOnLovin");
+ Scribe_Values.Look(ref PlayAnimForNonsexualActs, "RJWAnims-PlayAnimForNonsexualActs");
+ Scribe_Values.Look(ref applySemenOnAnimationOrgasm, "RJWAnimations-applySemenOnOrgasm", false);
+ Scribe_Values.Look(ref soundOverride, "RJWAnimations-rjwAnimSoundOverride", true);
+ Scribe_Values.Look(ref shiverIntensity, "RJWAnimations-shiverIntensity", 2f);
+ //todo: save offsetsByDefName
+
+ Scribe_Collections.Look(ref offsets, "RJWAnimations-animationOffsets");
+ Scribe_Collections.Look(ref rotation, "RJWAnimations-rotationOffsets");
+
+
+
+ //needs to be rewritten
+ //probably somewhere in options?
+
+ }
+
+ }
+
+ public class RJW_Animations : Mod {
+
+ public RJW_Animations(ModContentPack content) : base(content) {
+ GetSettings();
+
+ }
+
+ public override void DoSettingsWindowContents(Rect inRect) {
+
+ Listing_Standard listingStandard = new Listing_Standard();
+ listingStandard.Begin(inRect);
+
+ listingStandard.CheckboxLabeled("Enable Sound Override", ref AnimationSettings.soundOverride);
+ listingStandard.CheckboxLabeled("Control Genital Rotation", ref AnimationSettings.controlGenitalRotation);
+ listingStandard.CheckboxLabeled("Play Fast Animation for Quickie", ref AnimationSettings.fastAnimForQuickie);
+ listingStandard.CheckboxLabeled("Apply Semen on Animation Orgasm", ref AnimationSettings.applySemenOnAnimationOrgasm);
+
+ if(AnimationSettings.applySemenOnAnimationOrgasm) {
+ listingStandard.Label("Recommended--turn down \"Cum on body percent\" in RJW settings to about 33%");
+ }
+
+ listingStandard.CheckboxLabeled("Enable Orgasm Quiver", ref AnimationSettings.orgasmQuiver);
+ listingStandard.CheckboxLabeled("Enable Rape Shiver", ref AnimationSettings.rapeShiver);
+ listingStandard.CheckboxLabeled("Enable hearts during lovin'", ref AnimationSettings.hearts);
+ listingStandard.CheckboxLabeled("Play animation for nonsexual acts (handholding, makeout)", ref AnimationSettings.PlayAnimForNonsexualActs);
+ listingStandard.CheckboxLabeled("Enable Animation Manager Tab", ref AnimationSettings.offsetTab);
+
+ listingStandard.Label("Shiver/Quiver Intensity (default 2): " + AnimationSettings.shiverIntensity);
+ AnimationSettings.shiverIntensity = listingStandard.Slider(AnimationSettings.shiverIntensity, 0.0f, 12f);
+
+ listingStandard.CheckboxLabeled("Debug Mode", ref AnimationSettings.debugMode);
+
+
+ listingStandard.End();
+ base.DoSettingsWindowContents(inRect);
+ }
+
+ public override void WriteSettings() {
+ base.WriteSettings();
+ OffsetMainButtonDefOf.OffsetManager.buttonVisible = AnimationSettings.offsetTab;
+
+ }
+
+ public override string SettingsCategory() {
+ return "RJW Animation Settings";
+ }
+ }
+}
diff --git a/1.3/Source/Utilities/AnimationUtility.cs b/1.3/Source/Utilities/AnimationUtility.cs
new file mode 100644
index 0000000..a75fc32
--- /dev/null
+++ b/1.3/Source/Utilities/AnimationUtility.cs
@@ -0,0 +1,319 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using rjw.Modules.Interactions.Helpers;
+using rjw.Modules.Interactions.Objects;
+using UnityEngine;
+using Verse;
+using Verse.AI;
+using rjw.Modules.Interactions.Enums;
+
+namespace Rimworld_Animations {
+ public static class AnimationUtility {
+ /*
+ Note: always make the list in this order:
+ Female pawns, animal female pawns, male pawns, animal male pawns
+ */
+ public static AnimationDef tryFindAnimation(ref List participants, rjw.xxx.rjwSextype sexType = 0, rjw.SexProps sexProps = null) {
+
+
+ InteractionWithExtension interaction = InteractionHelper.GetWithExtension(sexProps.dictionaryKey);
+
+
+ if(interaction.HasInteractionTag(InteractionTag.Reverse))
+ {
+ Pawn buffer = participants[1];
+ participants[1] = participants[0];
+ participants[0] = buffer;
+ }
+
+ participants =
+ participants.OrderBy(p => p.jobs.curDriver is rjw.JobDriver_SexBaseInitiator)
+ .OrderBy(p => rjw.xxx.can_fuck(p))
+ .ToList();
+
+
+ List localParticipants = new List(participants);
+
+ IEnumerable options = DefDatabase.AllDefs.Where((AnimationDef x) => {
+
+
+ if (x.actors.Count != localParticipants.Count) {
+ return false;
+ }
+ for (int i = 0; i < x.actors.Count; i++) {
+
+ if (rjw.RJWPreferenceSettings.Malesex == rjw.RJWPreferenceSettings.AllowedSex.Nohomo) {
+ if (rjw.xxx.is_male(localParticipants[i]) && x.actors[i].isFucked) {
+ return false;
+ }
+ }
+ if (x.actors[i].requiredGender != null && !x.actors[i].requiredGender.Contains(localParticipants[i].gender.ToStringSafe()))
+ {
+ if (AnimationSettings.debugMode)
+ {
+ Log.Message(string.Concat(new string[]
+ {
+ x.defName.ToStringSafe(),
+ " not selected -- ",
+ localParticipants[i].def.defName.ToStringSafe(),
+ " ",
+ localParticipants[i].Name.ToStringSafe(),
+ " does not match required gender"
+ }));
+ }
+ return false;
+ }
+ if ((x.actors[i].blacklistedRaces != null) && x.actors[i].blacklistedRaces.Contains(localParticipants[i].def.defName)) {
+ if(AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is blacklisted");
+ return false;
+ }
+
+ if(x.actors[i].defNames.Contains("Human")) {
+ if (!rjw.xxx.is_human(localParticipants[i])) {
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is not human");
+
+ return false;
+ }
+
+ }
+ else if (!x.actors[i].bodyDefTypes.Contains(localParticipants[i].RaceProps.body)) {
+
+ if (!x.actors[i].defNames.Contains(localParticipants[i].def.defName)) {
+
+ if (rjw.RJWSettings.DevMode) {
+ string animInfo = x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is not ";
+ foreach(String defname in x.actors[i].defNames) {
+ animInfo += defname + ", ";
+ }
+ if (AnimationSettings.debugMode)
+ Log.Message(animInfo);
+ }
+
+ return false;
+ }
+ }
+ //genitals checking
+
+ if(!GenitalCheckForPawn(x.actors[i].requiredGenitals, localParticipants[i], out string failReason)) {
+ Debug.Log("Didn't select " + x.defName + ", " + localParticipants[i].Name + " " + failReason);
+ return false;
+ }
+
+ //TESTING ANIMATIONS ONLY REMEMBER TO COMMENT OUT BEFORE PUSH
+ /*
+ if (x.defName != "Cunnilingus")
+ return false;
+ */
+
+
+ if (x.actors[i].isFucking && !rjw.xxx.can_fuck(localParticipants[i])) {
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't fuck");
+ return false;
+ }
+
+ if (x.actors[i].isFucked && !rjw.xxx.can_be_fucked(localParticipants[i])) {
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't be fucked");
+ return false;
+ }
+ }
+ return true;
+ });
+ List optionsWithInteractionType = options.ToList().FindAll(x => x.interactionDefTypes != null && x.interactionDefTypes.Contains(sexProps.sexType.ToStringSafe()));
+ if (optionsWithInteractionType.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Selecting animation for interaction type " + sexProps.sexType.ToStringSafe() + "...");
+ return optionsWithInteractionType.RandomElement();
+ }
+ List optionsWithSexType = options.ToList().FindAll(x => x.sexTypes != null && x.sexTypes.Contains(sexType));
+ if (optionsWithSexType.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Selecting animation for rjwSexType " + sexType.ToStringSafe() + "...");
+ return optionsWithSexType.RandomElement();
+ }
+
+ /*
+ if(optionsWithInitiator.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Selecting animation for initiators...");
+ }
+ */
+
+ if (options != null && options.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Randomly selecting animation...");
+ return options.RandomElement();
+ }
+ else
+ return null;
+ }
+
+ public static void RenderPawnHeadMeshInAnimation1(Mesh mesh, Vector3 loc, Quaternion quaternion, Material material, bool drawNow, Pawn pawn) {
+
+ if (pawn == null || pawn.Map != Find.CurrentMap) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, drawNow);
+ return;
+ }
+
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+
+ if (pawnAnimator == null || !pawnAnimator.isAnimating) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, drawNow);
+ } else {
+ Vector3 pawnHeadPosition = pawnAnimator.getPawnHeadPosition();
+ pawnHeadPosition.y = loc.y;
+ GenDraw.DrawMeshNowOrLater(MeshPool.humanlikeHeadSet.MeshAt(pawnAnimator.headFacing), pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, true);
+ }
+ }
+
+ public static void AdjustHead(ref Quaternion quat, ref Rot4 bodyFacing, ref Vector3 pos, ref float angle, Pawn pawn, PawnRenderFlags flags)
+ {
+ if (flags.FlagSet(PawnRenderFlags.Portrait)) return;
+
+ CompBodyAnimator anim = pawn.TryGetComp();
+ if (anim.isAnimating)
+ {
+ bodyFacing = anim.headFacing;
+ angle = anim.headAngle;
+ quat = Quaternion.AngleAxis(anim.headAngle, Vector3.up);
+ pos = anim.getPawnHeadOffset();
+
+ }
+ }
+
+ public static void RenderPawnHeadMeshInAnimation(Mesh mesh, Vector3 loc, Quaternion quaternion, Material material, bool portrait, Pawn pawn, float bodySizeFactor = 1) {
+
+ if (pawn == null) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait);
+ return;
+ }
+
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+
+ if (pawnAnimator == null || !pawnAnimator.isAnimating || portrait) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait);
+ }
+ else {
+ Vector3 pawnHeadPosition = pawnAnimator.getPawnHeadPosition();
+ pawnHeadPosition.x *= bodySizeFactor;
+ pawnHeadPosition.x *= bodySizeFactor;
+ pawnHeadPosition.y = loc.y;
+ GenDraw.DrawMeshNowOrLater(mesh, pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, portrait);
+ }
+ }
+
+ public static bool GenitalCheckForPawn(List requiredGenitals, Pawn pawn, out string failReason) {
+
+ failReason = null;
+ if (requiredGenitals != null) {
+ if (requiredGenitals.Contains("Vagina")) {
+
+ if (!rjw.Genital_Helper.has_vagina(pawn)) {
+ failReason = "missing vagina";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Penis")) {
+
+ if (!(rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn) || rjw.Genital_Helper.has_ovipositorM(pawn) || rjw.Genital_Helper.has_ovipositorF(pawn))) {
+ failReason = "missing penis";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Mouth")) {
+
+ if (!rjw.Genital_Helper.has_mouth(pawn)) {
+ failReason = "missing mouth";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Anus")) {
+
+ if (!rjw.Genital_Helper.has_anus(pawn)) {
+ failReason = "missing anus";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Breasts")) {
+ if (!rjw.Genital_Helper.can_do_breastjob(pawn)) {
+ failReason = "missing breasts";
+ return false;
+ }
+ }
+
+ if (requiredGenitals.Contains("NoVagina")) {
+
+ if (rjw.Genital_Helper.has_vagina(pawn)) {
+ failReason = "has vagina";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoPenis")) {
+
+ if ((rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn))) {
+ failReason = "has penis";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoMouth")) {
+
+ if (rjw.Genital_Helper.has_mouth(pawn)) {
+ failReason = "has mouth";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoAnus")) {
+
+ if (rjw.Genital_Helper.has_anus(pawn)) {
+ failReason = "has anus";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoBreasts")) {
+ if (rjw.Genital_Helper.can_do_breastjob(pawn)) {
+ failReason = "has breasts";
+ return false;
+ }
+ }
+ }
+
+ return true;
+
+ }
+
+ public static Rot4 PawnHeadRotInAnimation(Pawn pawn, Rot4 regularPos)
+ {
+ Debug.Log("Test");
+
+ if(pawn?.TryGetComp() != null && pawn.TryGetComp().isAnimating)
+ {
+ return pawn.TryGetComp().headFacing;
+ }
+
+ return regularPos;
+ }
+ }
+}
diff --git a/1.3/Source/Utilities/PatchOperationAddOrReplace.cs b/1.3/Source/Utilities/PatchOperationAddOrReplace.cs
new file mode 100644
index 0000000..4e1bd85
--- /dev/null
+++ b/1.3/Source/Utilities/PatchOperationAddOrReplace.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using Verse;
+
+namespace Rimworld_Animations
+{
+ public class PatchOperationAddOrReplace : PatchOperationPathed
+ {
+
+ protected string key;
+ private XmlContainer value;
+
+ protected override bool ApplyWorker(XmlDocument xml)
+ {
+ XmlNode valNode = value.node;
+ bool result = false;
+ IEnumerator enumerator = xml.SelectNodes(xpath).GetEnumerator();
+ try
+ {
+ while (enumerator.MoveNext())
+ {
+ object obj = enumerator.Current;
+ result = true;
+ XmlNode parentNode = obj as XmlNode;
+ XmlNode xmlNode = parentNode.SelectSingleNode(key);
+ if (xmlNode == null)
+ {
+ // Add - Add node if not existing
+ xmlNode = parentNode.OwnerDocument.CreateElement(key);
+ parentNode.AppendChild(xmlNode);
+ }
+ else
+ {
+ // Replace - Clear existing children
+ xmlNode.RemoveAll();
+ }
+ // (Re)add value
+ xmlNode.AppendChild(parentNode.OwnerDocument.ImportNode(valNode.FirstChild, true));
+ }
+ }
+ finally
+ {
+ IDisposable disposable = enumerator as IDisposable;
+ if (disposable != null)
+ {
+ disposable.Dispose();
+ }
+ }
+ return result;
+ }
+
+ }
+
+}
diff --git a/1.3/Textures/UI/MainTab.png b/1.3/Textures/UI/MainTab.png
new file mode 100644
index 0000000..92f855f
Binary files /dev/null and b/1.3/Textures/UI/MainTab.png differ
diff --git a/1.4/Assemblies/Rimworld-Animations.dll b/1.4/Assemblies/Rimworld-Animations.dll
new file mode 100644
index 0000000..cfec529
Binary files /dev/null and b/1.4/Assemblies/Rimworld-Animations.dll differ
diff --git a/1.4/Defs/AnimationDefs/AggressiveDoggy.xml b/1.4/Defs/AnimationDefs/AggressiveDoggy.xml
new file mode 100644
index 0000000..1a9098c
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/AggressiveDoggy.xml
@@ -0,0 +1,1534 @@
+
+
+
+ SurpriseAnal
+ surprise anal
+ true
+
+ None
+ Anal
+ Vaginal
+
+
+ AnalRape
+ VaginalRape
+
+
+
+
+ Human
+
+
+ Anus
+ Vagina
+
+
+ (0, 0.02)
+
+
+
+
+ Human
+
+
+ (0.05, 0)
+ (0.12, -0.03)
+ (0.2, 0.15)
+ (0, 0.1)
+
+ true
+ true
+
+
+
+
+ SurpriseAnal
+ 0
+ 147
+ 147
+ false
+
+
+ Pawn
+
+
+ 20
+ 59.1421852
+ 34.3620377
+ 0.009598374
+ 0.7186958
+ -0.184436634
+ 2
+ 1
+ false
+
+
+ 55
+ 59.1421852
+ 34.3620377
+ 0.009598374
+ 0.777692854
+ -0.188369825
+ 2
+ 1
+
+
+ 1
+ 58.53158
+ 34.3620377
+ 0.009598374
+ 0.8240476
+ -0.188369825
+ 2
+ 1
+
+
+ 6
+ 58.52048
+ 34.3620377
+ 0.009598374
+ 0.824890435
+ -0.188369825
+ 2
+ 1
+
+
+ 5
+ 49.6041222
+ 4.66740751
+ 0.009598374
+ 0.8681547
+ -0.101840809
+ 1
+ 1
+
+
+ 59
+ 39.181385
+ 4.66740751
+ 0.009598374
+ 0.8878205
+ -0.0113786012
+ 1
+ 1
+
+
+ 1
+ 49.6041222
+ 4.66740751
+ 0.009598374
+ 0.8681547
+ -0.101840809
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 40
+ 10.116
+ 14.922
+ 0
+ -0.154
+ 0.112
+ 1
+ 1
+
+
+ 18
+ 17.979
+ 14.922
+ 0
+ 0.079
+ 0.165
+ 1
+ 1
+ 32.966
+
+
+ 5
+ 20.754
+ 14.922
+ 0
+ 0.13
+ 0.189
+ 1
+ 1
+ 32
+
+
+ 5
+ 21.525
+ 14.922
+ 0
+ 0.144
+ 0.195
+ 1
+ 1
+ 15
+
+
+ 7
+ 22.296
+ 14.922
+ 0
+ 0.158
+ 0.202
+ 1
+ 1
+ 32
+
+
+ 71
+ Fuck
+ -11.728
+ 14.922
+ 0
+ 0.249
+ 0.248
+ 1
+ 1
+ 27
+
+
+ 1
+ 10.62
+ 19.653
+ 0
+ 0.225
+ 0.271
+ 1
+ 1
+ 32
+
+
+
+
+
+
+ HeadTilt
+ 0
+ 40
+ 40
+ false
+
+
+ Pawn
+
+
+ 5
+ 49.6041222
+ 4.66740751
+ 0.009598374
+ 0.8681547
+ -0.101840809
+ 1
+ 1
+
+
+ 8
+ 49.6041222
+ 4.66740751
+ 0.009598374
+ 0.8327563
+ -0.101840809
+ 1
+ 1
+
+
+ 26
+ 42.0564079
+ -4.599214
+ 0.009598374
+ 0.9187941
+ -0.0035123378
+ 1
+ 1
+
+
+ 1
+ 49.6041222
+ -25.5749664
+ 0.009598374
+ 0.8681547
+ -0.101840809
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 5
+ 10.62
+ 19.653
+ 0
+ 0.225
+ 0.271
+ 1
+ 1
+ 32
+
+
+ 34
+ Fuck
+ -22.045
+ 19.653
+ 0
+ 0.351061
+ 0.2828664
+ 1
+ 1
+ 40
+
+
+ 1
+ 10.62
+ 19.653
+ 0
+ 0.225
+ 0.271
+ 1
+ 1
+ 32
+
+
+
+
+
+
+ HeadUp
+ 0
+ 320
+ 40
+ true
+
+
+ Pawn
+
+
+ 5
+ 49.6041222
+ -25.5749664
+ 0.009598374
+ 0.8681547
+ -0.101840809
+ 1
+ 1
+
+
+ 8
+ 49.6041222
+ -22.5488052
+ 0.009598374
+ 0.8327563
+ -0.101840809
+ 1
+ 1
+
+
+ 26
+ 42.0564079
+ -4.599214
+ 0.009598374
+ 0.9187941
+ -0.0035123378
+ 1
+ 1
+
+
+ 1
+ 49.6041222
+ -25.5749664
+ 0.009598374
+ 0.8681547
+ -0.101840809
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 5
+ 10.62
+ 19.653
+ 0
+ 0.225
+ 0.271
+ 1
+ 1
+ 32
+
+
+ 34
+ Fuck
+ -22.045
+ 19.653
+ 0
+ 0.351061
+ 0.2828664
+ 1
+ 1
+ 40
+
+
+ 1
+ 10.62
+ 19.653
+ 0
+ 0.225
+ 0.271
+ 1
+ 1
+ 32
+
+
+
+
+
+
+ LeanForward
+ 0
+ 40
+ 40
+ false
+
+
+ Pawn
+
+
+ 24
+ 49.6041222
+ -25.5749664
+ 0.009598374
+ 0.8681547
+ -0.101840809
+ 1
+ 1
+
+
+ 6
+ 60.4049644
+ 1.61688948
+ 0.009598374
+ 0.8740543
+ -0.172637418
+ 1
+ 1
+
+
+ 4
+ 65.2660446
+ 1.61688948
+ 0.009598374
+ 0.8917534
+ -0.192303136
+ 1
+ 1
+
+
+ 5
+ 62.2992134
+ 1.40611315
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 1
+ 60.4049644
+ 1.61688948
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 24
+ 10.62
+ 19.653
+ 0
+ 0.225
+ 0.271
+ 1
+ 1
+ 32
+
+
+ 6
+ 48.448
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 4
+ 50.473
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 5
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.546
+ 0.245
+ 1
+ 1
+ 50
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ Superfast
+ 0
+ 56
+ 14
+ true
+
+
+ Pawn
+
+
+ 4
+ 60.4049644
+ 1.61688948
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 3
+ 60.4049644
+ 1.61688948
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+
+
+ 6
+ 62.2992134
+ 1.40611315
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 1
+ 60.4049644
+ 1.61688948
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 4
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 3
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 6
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.593
+ 0.186
+ 1
+ 1
+ 60
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ HeadTiltSuperFast
+ 0
+ 112
+ 14
+ true
+
+
+ Pawn
+
+
+ 4
+ 60.4049644
+ 43.7031746
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 2
+ 1
+
+
+ 3
+ 60.4049644
+ 36.10043
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 2
+ 1
+
+
+ 6
+ 62.2992134
+ 52.47133
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 2
+ 1
+
+
+ 1
+ 60.4049644
+ 37.50244
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 2
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 4
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 3
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 6
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.562
+ 0.182
+ 1
+ 1
+ 60
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ SuperfastFacedown
+ 0
+ 210
+ 14
+ true
+
+
+ Pawn
+
+
+ 2
+ 60.4049644
+ 62.89787
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 5
+ 60.4049644
+ 63.9160767
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 2
+ 60.4049644
+ 65.049614
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+
+
+ 4
+ 62.2992134
+ 59.6089859
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 1
+ 60.4049644
+ 62.89787
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 2
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 5
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 2
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 4
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.591
+ 0.194
+ 1
+ 1
+ 60
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ SuperfastHeadTiltUp
+ 0
+ 36
+ 36
+ false
+
+
+ Pawn
+
+
+ 3
+ 60.4049644
+ 63.9160767
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 2
+ 60.4049644
+ 45.1198158
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+
+
+ 6
+ 62.2992134
+ 32.70548
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 3
+ 60.4049644
+ 23.617775
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 2
+ 60.4049644
+ 13.3330221
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+
+
+ 6
+ 62.2992134
+ 18.4331627
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 3
+ 60.4049644
+ 6.483466
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 2
+ 60.4049644
+ 7.298557
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+
+
+ 8
+ 62.2992134
+ 2.71663713
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 1
+ 60.4049644
+ -25.0596066
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 3
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 2
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 6
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.591
+ 0.194
+ 1
+ 1
+ 60
+
+
+ 3
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 2
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 6
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.591
+ 0.194
+ 1
+ 1
+ 60
+
+
+ 3
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 2
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 8
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.591
+ 0.194
+ 1
+ 1
+ 60
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ Superfastheadtilted
+ 0
+ 420
+ 12
+ true
+
+
+ Pawn
+
+
+ 3
+ 60.4049644
+ -25.0596066
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 3
+ 60.4049644
+ -18.6158123
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+
+
+ 5
+ 62.2992134
+ -21.62202
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 1
+ 60.4049644
+ -25.0596066
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 3
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 3
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 5
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.593
+ 0.186
+ 1
+ 1
+ 60
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ HeadTiltSuperFast (Clone)
+ 0
+ 112
+ 14
+ true
+
+
+ Pawn
+
+
+ 4
+ 60.4049644
+ 43.7031746
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 2
+ 1
+
+
+ 3
+ 60.4049644
+ 36.10043
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 2
+ 1
+
+
+ 6
+ 62.2992134
+ 52.47133
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 2
+ 1
+
+
+ 1
+ 60.4049644
+ 37.50244
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 2
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 4
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 3
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 6
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.562
+ 0.182
+ 1
+ 1
+ 60
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ Superfastheadtilted (Clone)
+ 0
+ 420
+ 12
+ true
+
+
+ Pawn
+
+
+ 3
+ 60.4049644
+ -25.0596066
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+ 3
+ 60.4049644
+ -18.6158123
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+
+
+ 5
+ 62.2992134
+ -21.62202
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+
+
+ 1
+ 60.4049644
+ -25.0596066
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 3
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 3
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 5
+ Fuck
+ 23.512
+ 19.653
+ 0
+ 0.593
+ 0.186
+ 1
+ 1
+ 60
+
+
+ 1
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+ Superfastheadtilted (Clone)
+ 0
+ 240
+ 80
+ true
+
+
+ Pawn
+
+
+ 9
+ 60.4049644
+ -25.0596066
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+ true
+
+
+ 7
+ 60.4049644
+ -18.6158123
+ 0.009598374
+ 0.895686448
+ -0.166737691
+ 1
+ 1
+ true
+
+
+ 15
+ Fuck
+ 62.2992134
+ -21.62202
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+ true
+
+
+ 48
+ Cum
+ 62.2992134
+ -21.62202
+ 0.009598374
+ 0.9379204
+ -0.168517023
+ 1
+ 1
+ true
+
+
+ 1
+ 60.4049644
+ -25.0596066
+ 0.009598374
+ 0.8917534
+ -0.168704227
+ 1
+ 1
+ true
+
+
+
+
+ LayingPawn
+
+
+ 9
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 7
+ 54.333
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+ 15
+ Slimy
+ 23.512
+ 19.653
+ 0
+ 0.593
+ 0.186
+ 1
+ 1
+ 60
+
+
+ 48
+ 33.548
+ 19.653
+ 0
+ 0.593
+ 0.186
+ 1
+ 1
+ 60
+
+
+ 1
+ None
+ 46.041
+ 19.653
+ 0
+ 0.489
+ 0.236
+ 1
+ 1
+ 60
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/AnimationDefs/AnimationDefs.rar b/1.4/Defs/AnimationDefs/AnimationDefs.rar
new file mode 100644
index 0000000..e7bf2a1
Binary files /dev/null and b/1.4/Defs/AnimationDefs/AnimationDefs.rar differ
diff --git a/1.4/Defs/AnimationDefs/Animations_Beast.xml b/1.4/Defs/AnimationDefs/Animations_Beast.xml
new file mode 100644
index 0000000..30d14fc
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/Animations_Beast.xml
@@ -0,0 +1,2180 @@
+
+
+
+ Dog_Doggystyle
+ dog doggystyle
+ true
+
+ Anal
+ Vaginal
+
+
+
+ VaginalBreeding
+ AnalBreeding
+
+
+
+
+
+ Human
+
+ true
+
+
+
+ Wolf_Timber
+ Wolf_Arctic
+ Whitefox
+ Warg
+ Husky
+ LabradorRetriever
+
+ AEXP_WelshTerrier
+ AEXP_Rottweiler
+ AEXP_Poodle
+ AEXP_GreatDane
+ AEXP_GermanShepherd
+ AEXP_FrenchBulldog
+ AEXP_Corgi
+ AEXP_CatAbyssinian
+ AEXP_CatBengal
+ AEXP_CatMaineCoon
+ AEXP_CatSphynx
+
+
+ QuadrupedAnimalWithHooves
+ QuadrupedAnimalWithPawsAndTail
+
+ true
+ true
+
+
+
+
+
+
+
+ Fuck
+ true
+ 765
+ 0
+
+
+ LayingPawn
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+ 6
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 2
+
+
+ 1
+ 56.7
+ 27.5
+ 0.057
+ -0.038
+ 1
+ 2
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+
+
+ 10
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+
+
+ 6
+ 53.7
+ 5.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 56.7
+ 7.5
+ 0.057
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 8
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+ 8
+ Fuck
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+
+
+
+
+ Knot
+ False
+ 71
+ 0
+
+
+ LayingPawn
+
+
+ true
+ 60
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 6
+ Cum
+ 53.7
+ 28.4
+ 0.068
+ -0.038
+ 1
+ 1
+
+
+ 4
+ 51.7
+ 33.4
+ 0.098
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 60
+ -33.7
+ 0
+ -0.492
+ 0.266
+ 1
+ 0
+ 0
+
+
+ 6
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 4
+ Fuck
+ -41.6
+ 0
+ -0.383
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+ Cum
+ true
+ 600
+ 0
+
+
+ LayingPawn
+
+
+ 40
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+ 40
+ Cum
+ 57.7
+ 28.4
+ 0.073
+ -0.038
+ 1
+ 1
+
+
+ 1
+ 53.7
+ 25.4
+ 0.068
+ -0.038
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+
+
+ 10
+ -40.6
+ 0
+ -0.358
+ 0.256
+ 1
+ 0
+
+
+ 1
+ -39.6
+ 0
+ -0.353
+ 0.256
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ Horse_Cowgirl
+ HorseCowgirl
+ true
+
+ Anal
+ Vaginal
+
+
+
+ RequestVaginalBreeding
+ RequestAnalBreeding
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+ Horse
+
+
+ QuadrupedAnimalWithHooves
+
+ true
+
+
+
+
+
+
+
+ Insertion
+ false
+ 0
+
+
+
+
+ 180
+ -24.337
+ -37.1218948
+ 0
+ 0.698042035
+ -0.20718734
+ 0
+ 3
+ 3
+
+
+ 70
+ -2.54239845
+ 7.31265259
+ 0
+ 0.606091142
+ -0.045959726
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 60
+ -4.84361649
+ -23.6405125
+ 0
+ 0.650456548
+ -0.0570534021
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+ 250
+ 177.083145
+ 0
+ 0
+ -0.256229281
+ -0.362511069
+ 0
+ 1
+ 0
+
+
+
+ 60
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 1
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ SlowFuck
+ true
+ 1300
+ 0
+
+
+
+
+ 80
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+
+
+ 49
+ -49.8178673
+ -35.7418823
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Fuck
+
+
+
+
+ LayingPawn
+
+
+ 80
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+ 49
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 1
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ Transition
+ false
+ 0
+
+
+
+
+ 50
+ -35.01766
+ -26.3706665
+ 0
+ 0.455286169
+ -0.3646413
+ 0
+ 3
+ 3
+ Fuck
+
+
+
+ 15
+ -49.8178673
+ -35.7418823
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 80
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.48456946
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 50
+ 179.6811
+ 0
+ 0
+ -0.267210543
+ -0.3991253
+ 0
+ 1
+ 0
+
+
+
+ 15
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+ 80
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ FastFuck
+ true
+ 1260
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 2
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 2
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 24
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 24
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ FasterFuck
+ true
+ 418
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+ 8
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+ LayingPawn
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 8
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+ Fuck
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ Cum
+ True
+ 318
+ 0
+
+
+
+
+
+ 10
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+ true
+ 80
+ -49.8178673
+ -8.273987
+ 0
+ 0.506531835
+ -0.55575326
+ 0
+ 3
+ 3
+ Cum
+
+
+ 25
+ -49.8178673
+ 2.654541
+ 0
+ 0.5175133
+ -0.547725141
+ 0
+ 3
+ 3
+
+
+ 1
+ -49.8178673
+ -14.1647339
+ 0
+ 0.484569454
+ -0.489136577
+ 0
+ 3
+ 3
+
+
+
+
+
+ LayingPawn
+
+
+
+ 10
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+ 80
+ 175.467651
+ 0
+ 0
+ -0.2123042
+ -0.5309518
+ 0
+ 1
+ 0
+
+
+ 25
+ 173.81427
+ 0
+ 0
+ -0.197662517
+ -0.545600235
+ 0
+ 1
+ 0
+
+
+ 1
+ 177.981537
+ 0
+ 0
+ -0.24524799
+ -0.358849227
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.4/Defs/AnimationDefs/Animations_Lesbian.xml b/1.4/Defs/AnimationDefs/Animations_Lesbian.xml
new file mode 100644
index 0000000..56d805a
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/Animations_Lesbian.xml
@@ -0,0 +1,1782 @@
+
+
+
+ Tribadism
+ scissoring
+ true
+
+ Scissoring
+
+
+
+
+
+ Human
+
+ true
+
+ Vagina
+
+
+
+
+ Human
+
+ true
+ true
+
+ Vagina
+
+
+
+
+
+
+
+ Tribbing
+ true
+ 992
+ 0
+
+
+ LayingPawn
+
+
+
+ 20
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 20
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 20
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+
+
+ 20
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+ 20
+ 23.82
+ -6.90
+ 0.432
+ 0.403
+ 3
+ 3
+ 0
+
+
+ 20
+ 5.19
+ -6.19
+ 0.442
+ 0.388
+ 3
+ 3
+ 0
+
+
+ 1
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+ TribadismFast
+ true
+ 682
+ 0
+
+
+ LayingPawn
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+
+ 10
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+ 10
+ -79.56
+ -77.66
+ -0.218
+ 0.082
+ 2
+ 2
+ 0
+
+
+ 10
+ -81.53
+ -77.74
+ -0.219
+ 0.07
+ 2
+ 2
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -73.04
+ -0.218
+ 0.073
+ 2
+ 2
+ 0
+
+
+
+
+ 10
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+ 10
+ -79.56
+ -79.56
+ -0.218
+ 0.082
+ 2
+ 1
+ 0
+
+
+ 10
+ -81.53
+ -81.53
+ -0.219
+ 0.07
+ 2
+ 1
+ 0
+
+
+ Slimy
+ 1
+ -81.3
+ -81.3
+ -0.218
+ 0.073
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+ 10
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+ 10
+ 23.82
+ -6.90
+ 0.432
+ 0.403
+ 3
+ 3
+ 0
+
+
+ 10
+ 5.19
+ -6.19
+ 0.442
+ 0.388
+ 3
+ 3
+ 0
+
+
+ 1
+ 9.97
+ -7.61
+ 0.444
+ 0.368
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+
+ Cunnilingus
+ cunnilingus
+ true
+
+ Oral
+ Fingering
+ Cunnilingus
+
+
+
+ Cunnilingus
+ CunnilingusF
+ CunnilingusRape
+ CunnilingusRapeF
+
+ Fingering
+ FingeringF
+ FingeringRape
+ FingeringRapeF
+
+ Fisting
+ FistingF
+ FistingRape
+ FistingRapeF
+
+
+
+
+
+ Human
+
+ true
+
+ Vagina
+
+
+ (-0.2, 0.1)
+
+
+
+
+ Human
+
+ true
+
+ (-0.1, 0.15)
+
+
+
+
+
+
+
+
+ Initial
+ False
+ 0
+
+
+
+
+ 60
+ -81.06536
+ -56.4483032
+ 0
+ -0.0624052179
+ -0.437134951
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 60
+ -27.578373
+ 0.2816162
+ 0
+ 0.102704488
+ 0.50675
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+ Slow
+ True
+ 1497
+ 0
+
+
+
+
+ 98
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.26528
+ -65.901825
+ 0
+ -0.0737426062
+ -0.432820916
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 98
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.26528
+ -65.901825
+ 0
+ -0.0737426062
+ -0.432820916
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 60
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 120
+ -86.52611
+ -68.86432
+ 0
+ -0.05432228
+ -0.439906
+ 0
+ 1
+ 1
+
+
+ 40
+ -88.36286
+ -84.3309
+ 0
+ -0.06637782
+ -0.440140843
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+ 60
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+ Transition
+ False
+ 0
+
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 40
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 30
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+ Fast
+ True
+ 710
+ 0
+
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 40
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 30
+ -35.8792953
+ -3.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+ Faster
+ True
+ 360
+ 0
+
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+ Cum
+ True
+ 639
+ 0
+
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ True
+ 80
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+ Cum
+
+
+ 40
+ -99.80413
+ -94.4023743
+ 0
+ -0.01950606
+ -0.447728932
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 15
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+ 20
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 80
+ -35.8792953
+ -9.312592
+ 0
+ 0.03684573
+ 0.4285702
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.5277061
+ -1.13140869
+ 0
+ 0.0376501828
+ 0.42935127
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ 0
+ 3
+ 3
+ Slimy
+
+
+
+
+
+
+
+
+
+
diff --git a/1.4/Defs/AnimationDefs/Animations_Masturbate.xml b/1.4/Defs/AnimationDefs/Animations_Masturbate.xml
new file mode 100644
index 0000000..2968fa1
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/Animations_Masturbate.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/AnimationDefs/Animations_Multi.xml b/1.4/Defs/AnimationDefs/Animations_Multi.xml
new file mode 100644
index 0000000..af7ea7a
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/Animations_Multi.xml
@@ -0,0 +1,660 @@
+
+
+
+ Double_Penetration
+ double penetration
+ true
+
+ DoublePenetration
+ Anal
+ Oral
+ Vaginal
+
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+
+
+
+
+ Slow
+ true
+ 976
+ 0
+
+
+
+
+
+ 25
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 35
+ 48.1
+ 16.3
+ 0
+ 0.188
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 30
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 30
+ 12
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ -10
+ 1
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 27
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 33
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+ Face_Fuck
+ true
+ 650
+ 0
+
+
+
+
+
+ 13
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 6
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 6
+ 62.7
+ 0.2
+ 0.08
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 13
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 12
+ 2
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ -10
+ 1
+ 12
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 13
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 12
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+ Cum
+ true
+ 392
+ 0
+
+
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 4
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+ true
+ 120
+ 60.7
+ 5.6
+ 0.025
+ 0.118
+ 1
+ 1
+ 0
+
+
+ 30
+ 62.7
+ 0.2
+ 0.056
+ 0.118
+ 1
+ 1
+ 0
+
+
+ Suck
+ 1
+ 62.7
+ 0.2
+ 0.01
+ 0.118
+ 1
+ 1
+ 0
+
+
+
+
+
+ LayingPawn
+
+
+ -10
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 8
+ 0
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 8
+ 0
+ -15.1
+ 0.729
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+
+
+ 9
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 120
+ 9
+ -15.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 30
+ 9
+ 7
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+
+
+ 1
+ 9
+ -14.1
+ 0.674
+ 0.378
+ 3
+ 3
+ 0
+ -10
+
+
+
+
+
+
+ LayingPawn
+
+
+ 43
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 8
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Fuck
+ 8
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+ 9
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+ Cum
+ 120
+ -6.7
+ 14.1
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 30
+ -6.7
+ -7
+ -0.53
+ 0.378
+ 1
+ 1
+ 0
+
+
+ 43
+ 1
+ 8.7
+ 15.1
+ -0.70
+ 0.378
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.4/Defs/AnimationDefs/Animations_SexToys.xml b/1.4/Defs/AnimationDefs/Animations_SexToys.xml
new file mode 100644
index 0000000..320d3aa
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/Animations_SexToys.xml
@@ -0,0 +1,59 @@
+
+
+
+
diff --git a/1.4/Defs/AnimationDefs/Animations_Vanilla2.xml b/1.4/Defs/AnimationDefs/Animations_Vanilla2.xml
new file mode 100644
index 0000000..71b02a9
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/Animations_Vanilla2.xml
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/AnimationDefs/Animations_vanilla.xml b/1.4/Defs/AnimationDefs/Animations_vanilla.xml
new file mode 100644
index 0000000..0fd61d5
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/Animations_vanilla.xml
@@ -0,0 +1,2799 @@
+
+
+
+
+ Doggystyle
+ doggystyle
+ true
+
+ Vaginal
+ Anal
+ DoublePenetration
+
+
+
+ AnalSex
+ AnalSexF
+ AnalRape
+ VaginalSex
+ VaginalSexF
+ VaginalRape
+
+
+
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 612
+ 0
+
+
+
+
+ 0
+ 10
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 2
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 2
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+
+ 10
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+
+
+ 40
+ 32
+ 0.326
+ 0.190
+ 1
+ 1
+
+
+ 0
+ 1
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 0
+ 10
+ 16.6
+ -0.217
+ 0.175
+ 3
+ 1
+ 1
+
+
+
+ 40
+ Fuck
+ -17
+ -0.217
+ 0.272
+ 5.4
+ 1
+ 1
+
+
+ 1
+ 16.6
+ -0.217
+ 0.175
+ 3
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 609
+ 0
+
+
+
+
+ 8
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+ 1
+ 0
+
+
+ 12
+ 32
+ 0.326
+ 0.190
+ 4
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 1
+ 1
+ 1
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 8
+ 11
+ -0.217
+ 0.175
+ 8
+ 1
+ 1
+ 0
+
+
+
+ 12
+ Fuck
+ -12
+ -0.217
+ 0.272
+ 9
+ 1
+ 1
+
+
+ 1
+ 11
+ -0.217
+ 0.175
+ 8
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+ Cum
+ true
+ 300
+ 0
+
+
+
+
+ 8
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+ 0
+
+
+ Cum
+ 100
+ 32
+ 0.326
+ 0.190
+ -1
+ 1
+ 1
+ true
+
+
+ 12
+ 35
+ 0.326
+ 0.190
+ -14
+ 1
+ 1
+
+
+ 1
+ 27
+ 0.298
+ 0.166
+ 0
+ 1
+ 1
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 27
+ 8
+ 11
+ -0.217
+ 0.175
+ -8
+ 1
+ 1
+ 0
+
+
+ 100
+ -12
+ -0.217
+ 0.272
+ -9
+ 1
+ 1
+
+
+ 12
+ -15
+ -0.227
+ 0.272
+ -4
+ 1
+ 1
+
+
+ 1
+ 11
+ -0.217
+ 0.175
+ -8
+ 1
+ 1
+ 0
+ 27
+
+
+
+
+
+
+
+
+ Blowjob
+ blowjob
+ true
+
+ Oral
+ Fellatio
+
+
+ Handjob
+ HandjobF
+ HandjobRape
+ HandjobRapeF
+
+ Breastjob
+ BreastjobF
+ BreastjobRape
+ BreastjobRapeF
+
+ Fellatio
+ FellatioF
+ FellatioRape
+ FellatioRapeF
+
+ Beakjob
+ BeakjobF
+ BeakjobRape
+ BeakjobRapeF
+
+
+
+
+
+
+
+ Human
+
+
+ (0, -0.2)
+
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+ Slow_Suck
+ true
+ 1140
+ 0
+
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ 0
+ -0.33
+ 0
+ 0
+ -0.16
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ 0
+ -0.33
+ 0
+ 0
+ -0.15
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+
+ 6
+ 0
+ -0.33
+ 0
+ 0
+ -0.13
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+ 35
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 59
+ 0
+ -4
+ 0
+ -0.33
+ 0
+ 0
+ -0.12
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 35
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 59
+ 0
+ 0
+ 0.490
+ 2
+ 2
+ -0.003
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+ Face_Fuck
+ true
+ 300
+ 0
+
+
+
+
+ 15
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ Suck
+ 14
+ 0
+ 0
+ -0.270
+ 0
+ 0
+ -0.06
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 15
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 14
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+ Cum
+ true
+ 600
+ 0
+
+
+
+
+ 12
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+ 7
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 7
+ Suck
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.008
+
+
+ 60
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 14
+ 0
+ 0
+ -0.290
+ 0
+ 0
+ -0.06
+
+
+ 1
+ 0
+ 0
+ 0
+ -0.255
+ 0
+ 0
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 12
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+ 7
+ Cum
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 7
+ 0
+ 0
+ 0.50
+ 2
+ 2
+ -0.04
+
+
+ true
+ 60
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 14
+ 0
+ 0
+ 0.575
+ 2
+ 2
+ -0.051
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.473
+ 2
+ 2
+ 0
+ 180
+
+
+
+
+
+
+
+
+
+ ReverseStandAndCarry
+ reverse stand-and-carry
+ true
+
+ Anal
+ Vaginal
+ DoublePenetration
+
+
+ AnalSex
+ AnalSexF
+ AnalRape
+ VaginalSex
+ VaginalSexF
+ VaginalRape
+
+
+
+
+
+ Human
+
+ true
+
+ (0, 0.2)
+
+
+
+
+ Human
+
+ true
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 1080
+ 0
+
+
+
+
+ 30
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 29
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 30
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 29
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+ 6
+
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 780
+ 0
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 2
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 2
+ 0
+
+
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 12
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 13
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 12
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+ 6
+
+
+
+
+
+
+
+ Cum
+ true
+ 415
+ 0
+
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 7
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+ 3
+ 10.6
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ 4
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+ true
+ 75
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 27
+ 6.04
+ 15
+ -0.175
+ 0.437
+ 3
+ 3
+ 0
+
+
+ 1
+ 11.23
+ 11.23
+ -0.183
+ 0.468
+ 3
+ 3
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Fuck
+ 7
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+ 6
+ 7
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+ 40
+ Cum
+ 75
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 40
+ 27
+ 17.11
+ -2.87
+ 0.114
+ 0.359
+ 3
+ 3
+ 0
+
+
+ 6
+ 1
+ -3.18
+ -0.41
+ 0.122
+ 0.356
+ 3
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+ Cowgirl
+ cowgirl
+ true
+
+ Anal
+ Vaginal
+ DoublePenetration
+
+
+
+ AnalSex
+ AnalSexF
+ AnalRapeF
+ VaginalSex
+ VaginalSexF
+ VaginalRapeF
+
+
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, 0.2)
+
+
+
+
+
+ Human
+
+ true
+ true
+
+ (0, -0.2)
+
+
+
+
+
+
+
+ Slow_Fuck
+ true
+ 1340
+ 0
+
+
+
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 17
+ 3.5
+ 0
+ -0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 17
+ -3.5
+ 0
+ 0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 17
+ 3.5
+ 0
+ -0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 16
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 17
+ -3.5
+ 0
+ 0.03
+ 0.624
+ 2
+ 2
+ -0.02
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 33
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.347
+ 2
+ 2
+ 0.015
+ -15
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.331
+ 2
+ 2
+ 0.03
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 15
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.347
+ 2
+ 2
+ 0.015
+ -15
+
+
+ 16
+ 180
+ 180
+ 0
+ -0.331
+ 2
+ 2
+ 0.03
+ 0
+
+
+ 17
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 15
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 33
+ 180
+ 180
+ 0
+ -0.315
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+ Fast_Fuck
+ true
+ 780
+ 0
+
+
+
+
+ 13
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 13
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 13
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 13
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+ Cum
+ true
+ 594
+ 0
+
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ 1
+ Fuck
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ 10
+ 0
+ 0
+ 0
+ 0.694
+ 2
+ 2
+ -0.03
+
+
+ true
+ 45
+ Cum
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+ true
+ 40
+ 0
+ 0
+ 0
+ 0.534
+ 2
+ 2
+ 0
+
+
+ 1
+ 0
+ 0
+ 0
+ 0.554
+ 2
+ 2
+ 0
+
+
+
+
+ LayingPawn
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 10
+ 180
+ 180
+ 0
+ -0.313
+ 2
+ 2
+ 0.045
+
+
+ 45
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 40
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+
+
+ 1
+ 180
+ 180
+ 0
+ -0.363
+ 2
+ 2
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/1.4/Defs/AnimationDefs/DoubleBlowjob.xml b/1.4/Defs/AnimationDefs/DoubleBlowjob.xml
new file mode 100644
index 0000000..4dd5c9f
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/DoubleBlowjob.xml
@@ -0,0 +1,1921 @@
+
+
+
+ DoubleBlowjob
+ double blowjob
+ true
+
+ None
+ Oral
+ Handjob
+ Fellatio
+
+
+ Rape_Oral
+ Rape_Fellatio
+ Rape_Reverse_Fellatio
+ Sex_Reverse_Fellatio
+ Sex_Fellatio
+ Sex_Handjob
+ Sex_Reverse_Handjob
+ Rape_Reverse_Handjob
+ Rape_Handjob
+ Rape_Beakjob
+ Sex_Beakjob
+ Sex_Reverse_Beakjob
+ Rape_Reverse_Beakjob
+
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+ true
+
+
+
+ Human
+
+
+ Penis
+
+ true
+ true
+
+
+
+
+ LeftGettingOn
+ 70
+ 70
+ false
+
+
+ Pawn
+
+
+ 19.5730782
+ 3.671945
+ -0.00393304229
+ -0.5978373
+ 0.157325149
+ 1
+ 1
+ 69
+
+
+ 25.5458
+ 7.708157
+ -0.00393304229
+ -0.466077149
+ 0.1691246
+ 1
+ 1
+ 1
+
+
+
+
+ Pawn
+
+
+ -28.3147774
+ -0.461400777
+ 0.593902469
+ 0.149458885
+ 3
+ 3
+ 38
+
+
+ -28.3147774
+ -0.461400777
+ -0.02850604
+ 0.58997035
+ 0.1612581
+ 3
+ 3
+ 31
+
+
+ -28.3147774
+ -0.461400777
+ 0.593902469
+ 0.149458885
+ 2
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.6804
+ -179.330887
+ -0.0118003711
+ -0.381514549
+ 2
+ 2
+ 69
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -15
+ 1
+
+
+
+
+
+
+ LeftBlowJob
+ 240
+ 80
+ true
+
+
+ Pawn
+
+
+ 25.5458
+ 7.708157
+ -0.00393304229
+ -0.466077149
+ 0.1691246
+ 1
+ 1
+ 39
+
+
+ 37.29544
+ 3.18303084
+ -0.0481027365
+ -0.44641155
+ 0.163224936
+ 1
+ 1
+ 40
+ Suck
+
+
+ 25.5458
+ 7.708157
+ -0.00393304229
+ -0.466077149
+ 0.1691246
+ 1
+ 1
+ 1
+
+
+
+
+ Pawn
+
+
+ -28.3147774
+ -0.461400777
+ 0.593902469
+ 0.149458885
+ 2
+ 3
+ 31
+
+
+ -28.3147774
+ -0.461400777
+ -0.0127905905
+ 0.582103252
+ 0.161258221
+ 2
+ 3
+ 48
+
+
+ -28.3147774
+ -0.461400777
+ 0.593902469
+ 0.149458885
+ 2
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -15
+ 39
+ None
+
+
+ -179.68
+ -179.331
+ 0.0117773116
+ -0.012
+ -0.374133736
+ 2
+ 2
+ -15
+ 40
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -15
+ 1
+
+
+
+
+
+
+ RightFacing
+ 400
+ 80
+ true
+
+
+ Pawn
+
+
+ 25.5458
+ 7.708157
+ -0.00393304229
+ -0.466077149
+ 0.1691246
+ 1
+ 1
+ 24
+
+
+ 37.29544
+ 3.18303084
+ -0.0481027365
+ -0.44641155
+ 0.163224936
+ 1
+ 1
+ 55
+ Suck
+
+
+ 25.5458
+ 7.708157
+ -0.00393304229
+ -0.466077149
+ 0.1691246
+ 1
+ 1
+ 1
+
+
+
+
+ Pawn
+
+
+ -28.3147774
+ -0.461400777
+ 0.593902469
+ 0.149458885
+ 3
+ 3
+ 30
+
+
+ -28.3147774
+ -0.461400777
+ -0.0123875439
+ 0.5860361
+ 0.155358553
+ 3
+ 3
+ 49
+
+
+ -28.3147774
+ -0.461400777
+ 0.593902469
+ 0.149458885
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -15
+ 24
+ Slimy
+
+
+ -179.68
+ -179.331
+ 0.0117773116
+ -0.012
+ -0.374133736
+ 2
+ 2
+ -15
+ 55
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -15
+ 1
+
+
+
+
+
+
+ Switch
+ 100
+ 100
+ false
+
+
+ Pawn
+
+
+ 25.5458
+ 7.708157
+ -0.00393304229
+ -0.466077149
+ 0.1691246
+ 1
+ 1
+ 16
+
+
+ 15.6320648
+ 7.708157
+ -0.00393304229
+ -0.485742867
+ 0.1828906
+ 1
+ 1
+ 83
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 1
+ 1
+ 1
+
+
+
+
+ Pawn
+
+
+ -28.3147774
+ -0.461400777
+ 0.593902469
+ 0.149458885
+ 3
+ 3
+ 48
+
+
+ -28.3147774
+ 0.4414621
+ 0.58497715
+ 0.161964208
+ 3
+ 3
+ 22
+
+
+ -28.3147774
+ -5.852266
+ -0.0125217736
+ 0.499507248
+ 0.202556252
+ 3
+ 3
+ 29
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -15
+ 9
+ Suck
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 13
+ 41
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 49
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 1
+
+
+
+
+
+
+ RightBlowjobFaster
+ 400
+ 50
+ true
+
+
+ Pawn
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 1
+ 1
+ 29
+
+
+ 23.7728024
+ 7.708157
+ -0.0135100782
+ -0.575847447
+ 0.168677568
+ 1
+ 1
+ 20
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 1
+ 1
+ 1
+
+
+
+
+ Pawn
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 14
+
+
+ -32.7987442
+ -8.49699
+ -0.0141675482
+ 0.432316452
+ 0.15552257
+ 3
+ 3
+ 10
+
+
+ -36.00158
+ -3.62854958
+ -0.0242872238
+ 0.415928543
+ 0.141592741
+ 3
+ 3
+ 9
+
+
+ -33.23433
+ 0.2594432
+ -0.0155438231
+ 0.4300877
+ 0.153628111
+ 3
+ 3
+ 16
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 14
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 1
+
+
+
+
+
+
+ LeftFacing
+ 50
+ 50
+ false
+
+
+ Pawn
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 1
+ 1
+ 29
+
+
+ 23.7728024
+ 7.708157
+ -0.0135100782
+ -0.575847447
+ 0.168677568
+ 2
+ 1
+ 20
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 2
+ 1
+ 1
+
+
+
+
+ Pawn
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 14
+
+
+ -32.7987442
+ -8.49699
+ -0.0141675482
+ 0.432316452
+ 0.15552257
+ 3
+ 3
+ 10
+
+
+ -36.00158
+ -3.62854958
+ -0.0242872238
+ 0.415928543
+ 0.141592741
+ 3
+ 3
+ 9
+
+
+ -33.23433
+ 0.2594432
+ -0.0155438231
+ 0.4300877
+ 0.153628111
+ 3
+ 3
+ 16
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 14
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 1
+
+
+
+
+
+
+ RightBlowjobFasterLeftFacing
+ 270
+ 270
+ false
+
+
+ Pawn
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 2
+ 1
+ 43
+
+
+ 23.7728024
+ 7.708157
+ -0.0135100782
+ -0.575847447
+ 0.168677568
+ 2
+ 1
+ 36
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 2
+ 1
+ 39
+
+
+ 23.7728024
+ 7.708157
+ -0.0135100782
+ -0.575847447
+ 0.168677568
+ 2
+ 1
+ 41
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 2
+ 1
+ 45
+
+
+ 23.7728024
+ 7.708157
+ -0.0135100782
+ -0.575847447
+ 0.168677568
+ 2
+ 1
+ 65
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 2
+ 1
+ 1
+
+
+
+
+ Pawn
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 14
+
+
+ -32.7987442
+ -8.49699
+ -0.0141675482
+ 0.432316452
+ 0.15552257
+ 3
+ 3
+ 10
+
+
+ -36.00158
+ -3.62854958
+ -0.0242872238
+ 0.415928543
+ 0.141592741
+ 3
+ 3
+ 9
+
+
+ -33.23433
+ 0.2594432
+ -0.0155438231
+ 0.4300877
+ 0.153628111
+ 3
+ 3
+ 16
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 14
+
+
+ -32.7987442
+ -8.49699
+ -0.0141675482
+ 0.432316452
+ 0.15552257
+ 3
+ 3
+ 10
+
+
+ -36.00158
+ -3.62854958
+ -0.0242872238
+ 0.415928543
+ 0.141592741
+ 3
+ 3
+ 9
+
+
+ -33.23433
+ 0.2594432
+ -0.0155438231
+ 0.4300877
+ 0.153628111
+ 3
+ 3
+ 16
+ Slimy
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 14
+
+
+ -32.7987442
+ -8.49699
+ -0.0141675482
+ 0.432316452
+ 0.15552257
+ 3
+ 3
+ 10
+
+
+ -36.00158
+ -3.62854958
+ -0.0242872238
+ 0.415928543
+ 0.141592741
+ 3
+ 3
+ 9
+
+
+ -33.23433
+ 0.2594432
+ -0.0155438231
+ 0.4300877
+ 0.153628111
+ 3
+ 3
+ 16
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 14
+
+
+ -32.7987442
+ -8.49699
+ -0.0141675482
+ 0.432316452
+ 0.15552257
+ 3
+ 3
+ 10
+
+
+ -36.00158
+ -3.62854958
+ -0.0242872238
+ 0.415928543
+ 0.141592741
+ 3
+ 3
+ 9
+
+
+ -33.23433
+ 0.2594432
+ -0.0155438231
+ 0.4300877
+ 0.153628111
+ 3
+ 3
+ 16
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 14
+
+
+ -32.7987442
+ -8.49699
+ -0.0141675482
+ 0.432316452
+ 0.15552257
+ 3
+ 3
+ 10
+
+
+ -36.00158
+ -3.62854958
+ -0.0242872238
+ 0.415928543
+ 0.141592741
+ 3
+ 3
+ 23
+
+
+ -33.23433
+ 0.2594432
+ -0.0155438231
+ 0.4300877
+ 0.153628111
+ 3
+ 3
+ 26
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 14
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 14
+ None
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ 0.007
+ -0.012
+ -0.373
+ 2
+ 2
+ 20
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ 0.0117993951
+ -0.012000002
+ -0.366267473
+ 2
+ 2
+ 15
+ 9
+
+
+ -179.68
+ -179.331
+ 0.008
+ -0.012
+ -0.372
+ 2
+ 2
+ 10
+ 16
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 31
+ None
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 1
+
+
+
+
+
+
+ MiddleKissing
+ 249
+ 0
+
+
+
+ Pawn
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 2
+ 1
+ 8
+
+
+ 23.7728024
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 1
+ 1
+ 26
+
+
+ 24.52071
+ 7.708157
+ -0.00393304229
+ -0.5817472
+ 0.162777856
+ 1
+ 1
+ 39
+
+
+ 33.8062363
+ -1.745628
+ -0.00393304229
+ -0.562081456
+ 0.149011865
+ 1
+ 1
+ 40
+
+
+ 20.67817
+ -2.64162827
+ -0.0374405421
+ -0.563148558
+ 0.146207914
+ 1
+ 1
+ 42
+
+
+ 33.67371
+ -10.6781654
+ -0.02562505
+ -0.573191941
+ 0.119817734
+ 1
+ 1
+ 32
+
+
+ 24.55168
+ 1.83792114
+ -0.0187649541
+ -0.568719745
+ 0.120776057
+ 1
+ 1
+ 61
+
+
+ 24.167057
+ 5.30330229
+ -0.03378879
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 1
+
+
+
+
+ PawnUnused
+
+
+ -28.3147774
+ -3.62854958
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 27
+
+
+ -19.5583725
+ -3.62854958
+ 0.0111185312
+ 0.4552595
+ 0.175024331
+ 3
+ 3
+ 26
+
+
+ -21.90327
+ -3.62854958
+ -0.0208243951
+ 0.518189847
+ 0.141592622
+ 3
+ 3
+ 34
+
+
+ -16.8763733
+ -3.62854958
+ -0.0295713171
+ 0.518189847
+ 0.141592622
+ 3
+ 3
+ 22
+
+
+ -32.85453
+ 3.495752
+ -0.0199447311
+ 0.524581254
+ 0.14342092
+ 3
+ 3
+ 81
+
+
+ -26.2668018
+ -3.30659652
+ -0.0487327129
+ 0.518481255
+ 0.146201879
+ 3
+ 3
+ 58
+
+
+ -41.35107
+ -0.843487263
+ -0.06996385
+ 0.5139825
+ 0.148252845
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 15
+ 15
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 12
+ 10
+ Suck
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -15
+ 12
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 31
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -1.541
+ 9
+ None
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 34
+ Suck
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -3
+ 11
+ Suck
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -5
+ 24
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -4.063
+ 26
+ Suck
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ 5
+ 76
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -12
+ 1
+
+
+
+
+
+
+ Double
+ 450
+ 225
+ true
+
+
+ Pawn
+
+
+ 24.167057
+ 5.30330229
+ -0.03378879
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 49
+ Suck
+
+
+ 40.14287
+ 10.45346
+ -0.023175139
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 25
+
+
+ 24.167057
+ 5.30330229
+ -0.03378879
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -41.35107
+ -0.843487263
+ -0.06996385
+ 0.5139825
+ 0.148252845
+ 3
+ 3
+ 21
+
+
+ -47.4342079
+ 8.690771
+ -0.12225467
+ 0.5198823
+ 0.162018836
+ 3
+ 3
+ 53
+ Slimy
+
+
+ -41.35107
+ -0.843487263
+ -0.06996385
+ 0.5139825
+ 0.148252845
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -12
+ 49
+
+
+ -179.68
+ -179.331
+ 0.023598671
+ -0.0119999992
+ -0.37216714
+ 2
+ 2
+ -12
+ 25
+ Slimy
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -12
+ 1
+
+
+
+
+
+
+ Cum
+ 600
+ 600
+ true
+
+
+ Pawn
+
+
+ 24.167057
+ 5.30330229
+ -0.03378879
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 49
+
+
+ 40.14287
+ 10.45346
+ -0.023175139
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 78
+ None
+
+
+ 41.7705231
+ 14.5681791
+ -0.0152118988
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 72
+ Suck
+
+
+ 24.167057
+ 5.30330229
+ -0.03378879
+ -0.465604663
+ 0.178063959
+ 1
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -41.35107
+ -0.843487263
+ -0.06996385
+ 0.5139825
+ 0.148252845
+ 3
+ 3
+ 37
+
+
+ -47.4342079
+ 8.690771
+ -0.12225467
+ 0.5198823
+ 0.162018836
+ 3
+ 3
+ 55
+ Slimy
+
+
+ -41.35107
+ -0.843487263
+ -0.06996385
+ 0.5139825
+ 0.148252845
+ 3
+ 3
+ 58
+ Slimy
+
+
+ -47.4342079
+ 8.690771
+ -0.12225467
+ 0.5198823
+ 0.162018836
+ 3
+ 3
+ 49
+ Slimy
+
+
+ -41.35107
+ -0.843487263
+ -0.06996385
+ 0.5139825
+ 0.148252845
+ 3
+ 3
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -12
+ 49
+
+
+ -179.68
+ -179.331
+ 0.023598671
+ -0.0119999992
+ -0.37216714
+ 2
+ 2
+ -12
+ true
+ 78
+ Cum
+
+
+ -179.68
+ -179.331
+ 0.023598671
+ -0.0119999992
+ -0.37216714
+ 2
+ 2
+ -12
+ 72
+
+
+ -179.68
+ -179.331
+ -0.012
+ -0.382
+ 2
+ 2
+ -12
+ 1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/AnimationDefs/FacingForwardFuck.xml b/1.4/Defs/AnimationDefs/FacingForwardFuck.xml
new file mode 100644
index 0000000..440dd8f
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/FacingForwardFuck.xml
@@ -0,0 +1,686 @@
+
+
+
+ FacingForwardFuck
+ facing forward fuck
+ true
+
+ Vaginal
+ Anal
+ None
+
+
+ Rape_Anal
+ Rape_Cunnilingus
+ Rape_Vaginal
+ Rape_Reverse_Anal
+ Rape_Reverse_Vaginal
+ Sex_Reverse_Anal
+ Sex_Reverse_Vaginal
+ Sex_Anal
+ Sex_Vaginal
+
+
+
+
+ Human
+
+
+ (0, -0.05)
+ (0, -0.05)
+ (0.07, 0.15)
+
+
+
+
+ Human
+
+
+ Penis
+
+ true
+
+ (-0.03, 0.03)
+ (-0.05, 0.2)
+ (-0.02, 0.05)
+
+
+
+
+
+ SlowFuck
+ 500
+ 300
+ true
+
+
+ Pawn
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ 63
+ Fuck
+
+
+ 14.6821575
+ 0.9831765
+ -0.09562898
+ 0.3166983
+ 0.241406
+ 3
+ 2
+ 36
+ Slimy
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ 1
+ None
+
+
+
+
+ LayingPawn
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 63
+
+
+ -19.129
+ -14.649
+ 0.058226347
+ -0.0200669244
+ 0.036534965
+ 1
+ 2
+ 15
+ 36
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 1
+
+
+
+
+
+
+ FemaleFaceForward
+ 200
+ 100
+ true
+
+
+ Pawn
+
+
+ 16.6431561
+ 8.393279
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 2
+ 2
+ 64
+ Fuck
+
+
+ 14.6821575
+ 7.09635925
+ -0.06650379
+ 0.3166983
+ 0.241406
+ 2
+ 2
+ 35
+ Slimy
+
+
+ 16.6431561
+ 8.393279
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 2
+ 2
+ 1
+ None
+
+
+
+
+ LayingPawn
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 64
+
+
+ -19.129
+ -14.649
+ 0.058226347
+ -0.0200669244
+ 0.036534965
+ 1
+ 2
+ 15
+ 35
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 1
+
+
+
+
+
+
+ HipMovement
+ 300
+ 200
+ true
+
+
+ Pawn
+
+
+ 16.6431561
+ 8.393279
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 2
+ 2
+ 55
+ Fuck
+
+
+ 14.6821575
+ 7.09635925
+ -0.06650379
+ 0.3166983
+ 0.241406
+ 2
+ 2
+ 20
+ Slimy
+
+
+ 20.0933418
+ 7.5340724
+ -0.0468387455
+ 0.299985439
+ 0.210036
+ 2
+ 2
+ 24
+
+
+ 16.6431561
+ 8.393279
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 2
+ 2
+ 1
+ None
+
+
+
+
+ LayingPawn
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 55
+
+
+ -19.129
+ -14.649
+ 0.058226347
+ -0.0200669244
+ 0.036534965
+ 1
+ 2
+ 15
+ 20
+
+
+ -19.129
+ -14.649
+ 0.047
+ -0.021
+ 0.047
+ 1
+ 2
+ 5
+ 24
+ Slimy
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 1
+
+
+
+
+
+
+ MediumFuck
+ 560
+ 280
+ true
+
+
+ Pawn
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ 39
+ Fuck
+
+
+ 14.6821575
+ 0.9831765
+ -0.09562898
+ 0.3166983
+ 0.241406
+ 3
+ 2
+ 30
+ Slimy
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ 1
+ None
+
+
+
+
+ LayingPawn
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 39
+
+
+ -19.129
+ -14.649
+ 0.058226347
+ -0.0200669244
+ 0.036534965
+ 1
+ 2
+ 15
+ 30
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 1
+
+
+
+
+
+
+ FastFuckFaceForward
+ 360
+ 270
+ true
+
+
+ Pawn
+
+
+ 16.6431561
+ 8.393279
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 2
+ 2
+ 14
+ Fuck
+
+
+ 14.6821575
+ 7.09635925
+ -0.06650379
+ 0.3166983
+ 0.241406
+ 2
+ 2
+ 15
+ Slimy
+
+
+ 16.6431561
+ 8.489082
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 2
+ 2
+ 1
+ None
+
+
+
+
+ LayingPawn
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 14
+
+
+ -19.129
+ -14.649
+ 0.058226347
+ -0.0200669244
+ 0.036534965
+ 1
+ 2
+ 15
+ 15
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 1
+
+
+
+
+
+
+ FastFuck
+ 144
+ 72
+ true
+
+
+ Pawn
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ 8
+ Fuck
+
+
+ 14.6821575
+ 0.9831765
+ -0.09562898
+ 0.3166983
+ 0.241406
+ 3
+ 2
+ 9
+ Slimy
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ 1
+ None
+
+
+
+
+ LayingPawn
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 8
+
+
+ -19.129
+ -14.649
+ 0.058226347
+ -0.0200669244
+ 0.036534965
+ 1
+ 2
+ 15
+ 9
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 1
+
+
+
+
+
+
+ Orgasm
+ 300
+ 400
+ true
+
+
+ Pawn
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ true
+ 66
+ Cum
+
+
+ 16.6431561
+ 0.9831765
+ 0.0103825331
+ 0.251721561
+ 0.1278264
+ 3
+ 2
+ 16
+ None
+
+
+ 14.6821575
+ 0.9831765
+ -0.09562898
+ 0.3166983
+ 0.241406
+ 3
+ 2
+ 17
+ Slimy
+
+
+ 16.6431561
+ 0.9831765
+ -0.0039331913
+ 0.263521016
+ 0.141592383
+ 3
+ 2
+ 1
+ None
+
+
+
+
+ LayingPawn
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 66
+ Fuck
+
+
+ -19.129
+ -14.649
+ 0.0120656937
+ -0.0200668052
+ 0.0886991248
+ 1
+ 2
+ 10
+ 16
+
+
+ -19.129
+ -14.649
+ 0.058226347
+ -0.0200669244
+ 0.036534965
+ 1
+ 2
+ 15
+ 17
+
+
+ -19.129
+ -14.649
+ 0.022
+ -0.024
+ 0.071
+ 1
+ 2
+ 10
+ 1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/AnimationDefs/LezThreesome.xml b/1.4/Defs/AnimationDefs/LezThreesome.xml
new file mode 100644
index 0000000..49aecc2
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/LezThreesome.xml
@@ -0,0 +1,1086 @@
+
+
+
+ LesbianThreesome
+ lesbian threesome
+ true
+
+ None
+ Vaginal
+ Oral
+ Cunnilingus
+
+
+ Sex_Cunnilingus
+ Sex_Reverse_Cunnilingus
+ Rape_Reverse_Cunnilingus
+ Rape_Oral
+ Rape_Cunnilingus
+
+
+
+
+ Human
+
+
+ (0, 0)
+
+
+
+
+ Human
+
+
+ Vagina
+
+
+
+
+ Human
+
+
+
+
+
+ Lezzing1
+ 644
+ 161
+ true
+
+
+ ItemImportant
+
+
+ -65.71689
+ -49.7821159
+ -0.190476716
+ -0.03571415
+ 2
+ 3
+ 30
+
+
+ -65.71689
+ -49.7821159
+ 0.00174501631
+ -0.20227614
+ -0.0278478861
+ 2
+ 3
+ 48
+ Slimy
+
+
+ -65.71689
+ -49.7821159
+ -0.009596467
+ -0.190476716
+ -0.03571415
+ 2
+ 3
+ 26
+
+
+ -65.71689
+ -49.7821159
+ 0.00174501631
+ -0.1944099
+ -0.0317810178
+ 2
+ 3
+ 56
+
+
+ -65.71689
+ -49.7821159
+ -0.190476716
+ -0.03571415
+ 2
+ 3
+ 1
+
+
+
+
+ Pawn
+
+
+ -69.66737
+ -56.7605171
+ -0.291667134
+ -0.2738092
+ 0
+ 1
+ 30
+
+
+ -69.66737
+ -56.7605171
+ -0.0315095559
+ -0.287733942
+ -0.277742326
+ 0
+ 1
+ 48
+ Suck
+
+
+ -69.66737
+ -56.7605171
+ -0.0137975514
+ -0.291667134
+ -0.2738092
+ 0
+ 1
+ 26
+
+
+ -69.66737
+ -56.7605171
+ -0.0315095559
+ -0.2857674
+ -0.275775731
+ 0
+ 1
+ 56
+
+
+ -69.66737
+ -56.7605171
+ -0.291667134
+ -0.2738092
+ 0
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.301498055
+ -0.103156626
+ 3
+ 3
+ 60
+ Slimy
+
+
+ -46.7103
+ -24.973381
+ -0.0229591429
+ 0.2464343
+ -0.109056413
+ 3
+ 3
+ 100
+ Slimy
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.301498055
+ -0.103156626
+ 3
+ 3
+ 1
+
+
+
+
+
+
+ MoveToPosition
+ 161
+ 161
+ false
+
+
+ LayingPawn
+
+
+ -65.71689
+ -49.7821159
+ -0.190476716
+ -0.03571415
+ 2
+ 3
+ 28
+
+
+ -57.7525177
+ -49.7821159
+ -0.245343938
+ -0.0595096871
+ 2.45901632
+ 3
+ 33
+
+
+ -48.3659363
+ -49.7821159
+ -0.3014404
+ 0.135229915
+ 3
+ 3
+ 87
+
+
+ -38.62952
+ -49.7821159
+ -0.546720743
+ 0.5034208
+ 3
+ 3
+ 12
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 1
+
+
+
+
+ Pawn
+
+
+ -69.66737
+ -56.7605171
+ -0.291667134
+ -0.2738092
+ 0
+ 1
+ 28
+
+
+ -68.99955
+ -62.3791351
+ -0.292355418
+ -0.2751858
+ 0
+ 1
+ 81
+
+
+ -83.754425
+ -78.6329956
+ -0.294346541
+ -0.2791681
+ 1
+ 1
+ 51
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.301498055
+ -0.103156626
+ 3
+ 3
+ 28
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.2612817
+ -0.107483014
+ 3
+ 3
+ 53
+
+
+ -20.61213
+ -15.617774
+ -0.0117702484
+ 0.298052341
+ -0.0857971
+ 3
+ 3
+ 79
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 1
+
+
+
+
+
+
+ TripleCunnilingus
+ 900
+ 150
+ true
+
+
+ PawnUnused
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 42
+
+
+ -30.27183
+ -49.7821159
+ -0.04006213
+ -0.636888
+ 0.491326451
+ 3
+ 3
+ 57
+ Slimy
+
+
+ -40.5961227
+ -51.2084274
+ 0.00613888353
+ -0.5962455
+ 0.412008226
+ 3
+ 3
+ 50
+ Suck
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 1
+
+
+
+
+ Pawn
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 50
+
+
+ -95.84532
+ -83.23129
+ -0.02989915
+ -0.31723246
+ -0.2718426
+ 1
+ 1
+ 99
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 57
+ Suck
+
+
+ -38.4983063
+ -24.4238682
+ -0.05612552
+ 0.5807503
+ -0.122822225
+ 3
+ 3
+ 54
+ Slimy
+
+
+ -41.5732155
+ -19.6205444
+ -0.0244095139
+ 0.581108
+ -0.145705938
+ 3
+ 3
+ 38
+ Slimy
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 1
+
+
+
+
+
+
+ TripleCunnilingusFaster
+ 800
+ 100
+ true
+
+
+ PawnUnused
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 28
+
+
+ -22.28259
+ -49.7821159
+ -0.0527483225
+ -0.6899853
+ 0.489360034
+ 3
+ 3
+ 34
+ Slimy
+
+
+ -22.5491524
+ -49.7821159
+ 0.006459078
+ -0.587723851
+ 0.440195739
+ 3
+ 3
+ 37
+ Slimy
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 1
+
+
+
+
+ Pawn
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 44
+
+
+ -98.2992
+ -99.2658539
+ -0.0368744135
+ -0.372296333
+ -0.267909527
+ 1
+ 1
+ 55
+ Slimy
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 54
+ Slimy
+
+
+ -40.325676
+ 0.126668811
+ -0.0006826222
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 45
+ Fuck
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 1
+
+
+
+
+
+
+ TripleCunnilingusFaster2
+ 576
+ 72
+ true
+
+
+ PawnUnused
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 23
+
+
+ -22.28259
+ -49.7821159
+ -0.0527483225
+ -0.6899853
+ 0.489360034
+ 3
+ 3
+ 24
+ Suck
+
+
+ -22.5491524
+ -49.7821159
+ 0.006459078
+ -0.587723851
+ 0.440195739
+ 3
+ 3
+ 23
+ Slimy
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 1
+
+
+
+
+ Pawn
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 26
+
+
+ -98.2992
+ -99.2658539
+ -0.0368744135
+ -0.372296333
+ -0.267909527
+ 1
+ 1
+ 44
+ Slimy
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 36
+
+
+ -40.325676
+ 0.126668811
+ -0.0006826222
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 34
+ Suck
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 1
+
+
+
+
+
+
+ NewStage
+ 350
+ 350
+ false
+
+
+ PawnUnused
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 44
+
+
+ -20.8286152
+ 9.675526
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ true
+ 45
+ Cum
+
+
+ -29.4644051
+ 4.85463572
+ -0.615255833
+ 0.5031259
+ 3
+ 3
+ 14
+
+
+ -10.1306162
+ 2.49775648
+ -0.6149165
+ 0.5031259
+ 3
+ 3
+ true
+ 77
+ Slimy
+
+
+ -19.30925
+ -4.894
+ -0.014783442
+ -0.6159667
+ 0.53643167
+ 3
+ 3
+ 12
+ Cum
+
+
+ -3.880098
+ 30.4898758
+ -0.0336211622
+ -0.6136687
+ 0.503006339
+ 3
+ 3
+ true
+ 51
+
+
+ -14.4412622
+ 22.0189629
+ -0.0300732013
+ -0.613006055
+ 0.503019
+ 3
+ 3
+ 11
+
+
+ -0.208420008
+ 35.0374336
+ -0.0269476157
+ -0.6124223
+ 0.503030062
+ 3
+ 3
+ 95
+
+
+ -37.3476677
+ -49.7821159
+ -0.60738945
+ 0.5031259
+ 3
+ 3
+ 1
+
+
+
+
+ Pawn
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 44
+
+
+ -95.54599
+ -113.623627
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ true
+ 45
+ Cum
+
+
+ -90.34562
+ -96.01813
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 14
+
+
+ -102.031006
+ -126.010582
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ true
+ 47
+ Cum
+
+
+ -104.3527
+ -108.139137
+ -0.287977844
+ -0.264174432
+ 1
+ 1
+ 30
+
+
+ -90.346
+ -114.442329
+ -0.296
+ -0.282
+ 1
+ 1
+ 12
+ Suck
+
+
+ -90.34598
+ -136.502762
+ -0.295979977
+ -0.281983733
+ 1
+ 1
+ true
+ 28
+ Cum
+
+
+ -109.976593
+ -134.079727
+ -0.284174979
+ -0.238714755
+ 1
+ 1
+ 23
+
+
+ -100.991768
+ -118.849266
+ -0.288073748
+ -0.2563858
+ 1
+ 1
+ 11
+
+
+ -102.096962
+ -139.0435
+ -0.290004969
+ -0.270123124
+ 1
+ 1
+ 95
+
+
+ -90.34562
+ -88.86691
+ -0.2956002
+ -0.281675458
+ 1
+ 1
+ 1
+
+
+
+
+ LayingPawn
+
+
+ -35.6027222
+ -15.617774
+ -0.0117702484
+ 0.588616669
+ -0.1503542
+ 3
+ 3
+ 41
+ Slimy
+
+
+ -40.5730972
+ -17.2931328
+ -0.0380636156
+ 0.5807503
+ -0.152320743
+ 3
+ 3
+ 18
+
+
+ -48.23515
+ -11.4770489
+ 0.00613904
+ 0.581004
+ -0.152257308
+ 3
+ 3
+ 21
+
+
+ -37.596405
+ -18.6857586
+ 0.018463172
+ 0.5813001
+ -0.1521833
+ 3
+ 3
+ 20
+
+
+ -40.5730972
+ -17.2931328
+ -0.0380636156
+ 0.5807503
+ -0.152320743
+ 3
+ 3
+ 18
+
+
+ -48.23515
+ -11.4770489
+ 0.00613904
+ 0.581004
+ -0.152257308
+ 3
+ 3
+ 21
+
+
+ -37.596405
+ -18.6857586
+ 0.018463172
+ 0.5813001
+ -0.1521833
+ 3
+ 3
+ 21
+
+
+ -48.23515
+ -11.4770489
+ 0.00613904
+ 0.581004
+ -0.152257308
+ 3
+ 3
+ 18
+
+
+ -46.5445023
+ -11.4770489
+ -0.03721544
+ 0.581004
+ -0.152257308
+ 3
+ 3
+ 21
+ Slimy
+
+
+ -37.596405
+ -18.6857586
+ 0.018463172
+ 0.5813001
+ -0.1521833
+ 3
+ 3
+ 20
+
+
+ -40.5730972
+ -17.2931328
+ -0.0380636156
+ 0.5807503
+ -0.152320743
+ 3
+ 3
+ 18
+
+
+ -48.23515
+ -11.4770489
+ 0.00613904
+ 0.581004
+ -0.152257308
+ 3
+ 3
+ 21
+
+
+ -37.596405
+ -18.6857586
+ 0.018463172
+ 0.5813001
+ -0.1521833
+ 3
+ 3
+ 91
+
+
+ -48.23515
+ -11.4770489
+ 0.00613904
+ 0.581004
+ -0.152257308
+ 3
+ 3
+ 1
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/AnimationDefs/SidewaysBJ.xml b/1.4/Defs/AnimationDefs/SidewaysBJ.xml
new file mode 100644
index 0000000..a528948
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/SidewaysBJ.xml
@@ -0,0 +1,1283 @@
+
+
+
+ SidewaysBlowjob
+ sideways blowjob
+ true
+
+ Oral
+ Fellatio
+
+
+ Handjob
+ HandjobF
+ HandjobRape
+ HandjobRapeF
+ Breastjob
+ BreastjobF
+ BreastjobRape
+ BreastjobRapeF
+ Fellatio
+ FellatioF
+ FellatioRape
+ FellatioRapeF
+ Beakjob
+ BeakjobF
+ BeakjobRape
+ BeakjobRapeF
+
+
+
+
+ Human
+
+
+
+
+
+ Human
+
+
+ (0, 0)
+ (0.088, 0.038)
+ (0.028, 0.257)
+ (-0.18, 0.028)
+
+ true
+ true
+
+
+
+
+ Initial
+ 0
+ 200
+ 200
+ false
+
+
+ Pawn
+
+
+ 48
+ 5.26700544
+ 4.21946526
+ 0
+ 0.393312037
+ 0.210422277
+ 3
+ 3
+
+
+ 52
+ -11.586771
+ 15.1064863
+ 0
+ 0.440509528
+ 0.0412974358
+ 3
+ 3
+
+
+ 55
+ -31.05862
+ -15.3939009
+ -0.07017967
+ 0.543972135
+ -0.0685991645
+ 3
+ 3
+
+
+ 44
+ -34.522
+ 5.027
+ 0
+ 0.507
+ -0.13
+ 3
+ 3
+
+
+ 1
+ -34.522
+ -3.92795014
+ -0.0326114
+ 0.3909727
+ -0.169331312
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 48
+ -15.66833
+ -10.668
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ false
+
+
+ 4
+ -5.292613
+ 8.845157
+ 0
+ -0.287118852
+ 0.165191889
+ 1
+ 1
+
+
+ 4
+ -4.995
+ 8.906
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ -6
+
+
+ 44
+ -4.697
+ 8.967
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+
+
+ 4
+ 1.26067436
+ 10.1886148
+ 0
+ -0.287118852
+ 0.165191889
+ 1
+ 1
+
+
+ 4
+ 0.629
+ 10.252
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ -6
+
+
+ 20
+ -0.003
+ 10.316
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+
+
+ 27
+ -7.897
+ 11.11
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 7.353
+
+
+ 44
+ -10.739
+ 11.396
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 1
+ -13.7264843
+ 11.396
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+
+
+
+
+ Blow
+ 0
+ 480
+ 360
+ true
+
+
+ Pawn
+
+
+ 59
+ Suck
+ -34.522
+ -3.92795014
+ -0.0326114
+ 0.3909727
+ -0.169331312
+ 3
+ 3
+
+
+ 19
+ -31.3116169
+ -1.68748426
+ -0.08921084
+ 0.4362033
+ -0.061169982
+ 3
+ 3
+
+
+ 41
+ -31.3116169
+ -12.410552
+ -0.08921084
+ 0.418504477
+ -0.0493704081
+ 3
+ 3
+
+
+ 1
+ -34.522
+ -3.92795014
+ -0.0326114
+ 0.3909727
+ -0.169331312
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 59
+ Slimy
+ -13.7264843
+ 11.396
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 19
+ -10.739
+ 11.396
+ -0.029309094
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 41
+ -11.337
+ 11.396
+ -0.023
+ -0.287
+ 0.165
+ 1
+ 1
+ 18
+
+
+ 1
+ -13.7264843
+ 11.396
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+
+
+
+
+ GetOffQuick
+ 0
+ 60
+ 60
+ false
+
+
+ Pawn
+
+
+ 59
+ Suck
+ -34.522
+ -3.92795014
+ -0.0326114
+ 0.3909727
+ -0.169331312
+ 3
+ 3
+
+
+ 1
+ -31.3116169
+ -1.68748426
+ -0.08921084
+ 0.4362033
+ -0.061169982
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 59
+ Slimy
+ -13.7264843
+ 11.396
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 1
+ -10.739
+ 11.396
+ -0.029309094
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+
+
+
+
+ LickFromSide
+ 0
+ 180
+ 180
+ false
+
+
+ LayingPawn
+
+
+ 34
+ -31.312
+ -1.687
+ -0.03
+ 0.3216688
+ -0.09253198
+ 2
+ 3
+
+
+ 37
+ -36.64
+ -10.132
+ -0.058
+ 0.23
+ -0.124
+ 2
+ 3
+ 10
+
+
+ 57
+ Suck
+ -39.8496056
+ -2.66623664
+ -0.03
+ 0.215805382
+ -0.1598633
+ 2
+ 3
+
+
+ 21
+ -35.12374
+ -13.6572018
+ -0.07122117
+ 0.219833642
+ -0.111214638
+ 2
+ 3
+
+
+ 30
+ -31.5715046
+ -8.527115
+ -0.0535549521
+ 0.3209045
+ -0.114978574
+ 3
+ 3
+
+
+ 1
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+
+
+ Pawn
+
+
+ 68
+ -10.739
+ 11.396
+ -0.029309094
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 3
+ Slimy
+ -10.739
+ 11.396
+ -0.029
+ -0.287
+ 0.165
+ 1
+ 1
+ 23
+
+
+ 3
+ -10.739
+ 11.396
+ -0.029
+ -0.287
+ 0.165
+ 1
+ 1
+ 17
+
+
+ 25
+ -10.739
+ 11.396
+ -0.029
+ -0.287
+ 0.165
+ 1
+ 1
+ 22
+
+
+ 3
+ Slimy
+ -10.739
+ 8.529886
+ -0.029
+ -0.287
+ 0.165
+ 1
+ 1
+ 18
+
+
+ 4
+ -10.739
+ -1.653
+ -0.029
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 19
+ -10.739
+ -4.025
+ -0.029
+ -0.287
+ 0.165
+ 1
+ 1
+ 17
+
+
+ 54
+ None
+ -13.7264843
+ -26.2778587
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 1
+ -10.739
+ 11.396
+ -0.029309094
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+
+
+
+
+ FastBlow
+ 0
+ 360
+ 180
+ true
+
+
+ Pawn
+
+
+ 19
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+ 21
+ Slimy
+ -34.522
+ -13.482
+ -0.033
+ 0.383
+ -0.154
+ 3
+ 3
+ 10
+
+
+ 19
+ -32.5603333
+ 4.89252758
+ -0.0310155433
+ 0.430507243
+ -0.139182657
+ 3
+ 3
+
+
+ 1
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 19
+ -10.739
+ 11.396
+ -0.029309094
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+ 21
+ Suck
+ -13.726
+ 14.585372
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 19
+
+
+ 19
+ -11.901
+ 11.396
+ -0.018
+ -0.287
+ 0.165
+ 1
+ 1
+
+
+ 1
+ -10.739
+ 11.396
+ -0.029
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+
+
+
+
+ HeadUp
+ 0
+ 250
+ 250
+ false
+
+
+ Pawn
+
+
+ 25
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+ 39
+ Suck
+ -34.522
+ -13.482
+ -0.033
+ 0.383
+ -0.154
+ 3
+ 3
+ 10
+ false
+
+
+ 143
+ -34.522
+ -14.0979557
+ -0.038907595
+ 0.3747224
+ -0.151634976
+ 3
+ 3
+ 10
+ false
+
+
+ 42
+ -34.522
+ -2.62852883
+ -0.0526491776
+ 0.363334119
+ -0.177598789
+ 3
+ 3
+ 10
+ false
+
+
+ 1
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 25
+ -10.739
+ 11.396
+ -0.029309094
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+ false
+
+
+ 39
+ Slimy
+ -17.69459
+ -10.2001219
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 19
+ false
+
+
+ 77
+ Slimy
+ -18.524
+ -10.2
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 19
+ true
+
+
+ 66
+ Slimy
+ -18.957
+ -10.2
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 19
+ false
+
+
+ 42
+ -20.4536667
+ -10.2001219
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 19
+ false
+
+
+ 1
+ -10.739
+ -10
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+
+
+
+
+ FasterBlow
+ 0
+ 280
+ 112
+ true
+
+
+ Pawn
+
+
+ 13
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+ 14
+ Suck
+ -34.522
+ -13.482
+ -0.033
+ 0.383
+ -0.154
+ 3
+ 3
+ 10
+
+
+ 1
+ None
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 13
+ -10.739
+ -10
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+ false
+
+
+ 14
+ Slimy
+ -17.69459
+ -10.2001219
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 19
+
+
+ 1
+ -10.739
+ -10
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+
+
+
+
+
+
+ EvenFasterBlow
+ 0
+ 160
+ 60
+ true
+
+
+ Pawn
+
+
+ 9
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+ 10
+ Suck
+ -34.522
+ -13.482
+ -0.033
+ 0.383
+ -0.154
+ 3
+ 3
+ 10
+
+
+ 1
+ None
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 9
+ -10.739
+ -10
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+ false
+
+
+ 10
+ Fuck
+ -19.82844
+ -10.2001219
+ 0
+ -0.27323398
+ 0.165
+ 1
+ 1
+ 19
+ true
+
+
+ 1
+ -10.739
+ -10
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+ false
+
+
+
+
+
+
+ Cum
+ 0
+ 260
+ 260
+ false
+
+
+ Pawn
+
+
+ 14
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+ 31
+ Suck
+ -34.522
+ -13.482
+ -0.033
+ 0.383
+ -0.154
+ 3
+ 3
+ 10
+ false
+
+
+ 36
+ -37.6717453
+ -13.482
+ -0.033
+ 0.377100378
+ -0.1598996
+ 3
+ 3
+ 10
+ false
+
+
+ 6
+ -37.672
+ -13.901
+ -0.033
+ 0.377
+ -0.16
+ 3
+ 3
+ 10
+
+
+ 6
+ Suck
+ -34.09249
+ -19.2079468
+ -0.033
+ 0.377009124
+ -0.159990877
+ 3
+ 3
+ 10
+
+
+ 54
+ -37.672
+ -13.901
+ -0.033
+ 0.377
+ -0.16
+ 3
+ 3
+ 10
+
+
+ 18
+ -37.6717453
+ -14.6683264
+ -0.033
+ 0.377100378
+ -0.1598996
+ 3
+ 3
+ 10
+
+
+ 6
+ None
+ -37.672
+ -13.901
+ -0.033
+ 0.377
+ -0.16
+ 3
+ 3
+ 10
+ false
+
+
+ 6
+ Cum
+ -34.09249
+ -19.2079468
+ -0.033
+ 0.377009124
+ -0.159990877
+ 3
+ 3
+ 10
+
+
+ 38
+ Slimy
+ -37.672
+ -13.901
+ -0.033
+ 0.377
+ -0.16
+ 3
+ 3
+ 10
+ false
+
+
+ 44
+ Slimy
+ -37.6717453
+ -13.482
+ -0.033
+ 0.377100378
+ -0.1598996
+ 3
+ 3
+ 10
+
+
+ 1
+ None
+ -26.8351917
+ -1.687
+ -0.03
+ 0.4556656
+ -0.119997159
+ 3
+ 3
+
+
+
+
+ LayingPawn
+
+
+ 14
+ -10.739
+ -10
+ 0
+ -0.287
+ 0.165
+ 1
+ 1
+ 10
+ false
+
+
+ 31
+ Fuck
+ -19.82844
+ -10.2001219
+ 0
+ -0.27323398
+ 0.165
+ 1
+ 1
+ 19
+ true
+
+
+ 36
+ None
+ -19.82844
+ -10.2001219
+ 0
+ -0.27323398
+ 0.165
+ 1
+ 1
+ 19
+ true
+
+
+ 6
+ Cum
+ -19.828
+ -10.2
+ 0
+ -0.273
+ 0.165
+ 1
+ 1
+ 19
+ false
+
+
+ 55
+ Cum
+ -19.828
+ -10.2
+ 0
+ -0.273
+ 0.165
+ 1
+ 1
+ 19
+ true
+
+
+ 23
+ -19.828
+ -10.2
+ 0
+ -0.273
+ 0.165
+ 1
+ 1
+ 19
+ false
+
+
+ 33
+ Cum
+ -19.828
+ -10.2
+ 0
+ -0.273
+ 0.165
+ 1
+ 1
+ 19
+ true
+
+
+ 17
+ -19.828
+ -10.2
+ 0
+ -0.273
+ 0.165
+ 1
+ 1
+ 19
+ false
+
+
+ 1
+ -19.82844
+ -10.2001219
+ 0
+ -0.27323398
+ 0.165
+ 1
+ 1
+ 19
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/AnimationDefs/TemplateAnimation.xml b/1.4/Defs/AnimationDefs/TemplateAnimation.xml
new file mode 100644
index 0000000..0305903
--- /dev/null
+++ b/1.4/Defs/AnimationDefs/TemplateAnimation.xml
@@ -0,0 +1,54 @@
+
+
+
+
diff --git a/1.4/Defs/MainTabDefs/MainButtonDef.xml b/1.4/Defs/MainTabDefs/MainButtonDef.xml
new file mode 100644
index 0000000..0674d24
--- /dev/null
+++ b/1.4/Defs/MainTabDefs/MainButtonDef.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ OffsetManager
+ offset manager
+ Control pawn offsets
+ Rimworld_Animations.MainTabWindow_OffsetConfigure
+ 54
+ false
+ UI/MainTab
+ true
+
+
+
\ No newline at end of file
diff --git a/1.6/Defs/SoundDefs/Sounds_Sex.xml b/1.4/Defs/SoundDefs/Sounds_Sex.xml
similarity index 70%
rename from 1.6/Defs/SoundDefs/Sounds_Sex.xml
rename to 1.4/Defs/SoundDefs/Sounds_Sex.xml
index b42fc01..f05a1a8 100644
--- a/1.6/Defs/SoundDefs/Sounds_Sex.xml
+++ b/1.4/Defs/SoundDefs/Sounds_Sex.xml
@@ -5,8 +5,8 @@
Cum
MapOnly
- 5
- 5
+ 1
+ 1
@@ -34,8 +34,8 @@
Sex
MapOnly
- 5
- 5
+ 1
+ 1
@@ -63,8 +63,8 @@
Suck
MapOnly
- 5
- 5
+ 1
+ 1
@@ -83,21 +83,21 @@
Sex/Suck/Suck_5
-
- Sex/Suck/Suck_6
-
-
- Sex/Suck/Suck_7
-
-
- Sex/Suck/Suck_8
-
-
- Sex/Suck/Suck_9
-
-
- Sex/Suck/Suck_10
-
+
+ Sex/Suck/Suck_6
+
+
+ Sex/Suck/Suck_7
+
+
+ Sex/Suck/Suck_8
+
+
+ Sex/Suck/Suck_9
+
+
+ Sex/Suck/Suck_10
+
20
@@ -120,8 +120,8 @@
Fuck
MapOnly
- 5
- 5
+ 1
+ 1
@@ -150,7 +150,10 @@
Sex/Clap_8
- 35~45
+
+ 45
+ 70
+
1.0
1.0
@@ -168,8 +171,8 @@
Slimy
MapOnly
- 5
- 5
+ 1
+ 1
@@ -206,46 +209,4 @@
-
- Slap
- MapOnly
-
- 5
- 5
-
-
-
-
- Sex/Slap/Slap_1
-
-
- Sex/Slap/Slap_2
-
-
- Sex/Slap/Slap_3
-
-
- Sex/Slap/Slap_4
-
-
- Sex/Slap/Slap_5
-
-
-
- 75
- 85
-
-
- 0.8
- 1.2
-
-
- 0
- 100
-
- NeverTwice
- false
-
-
-
\ No newline at end of file
diff --git a/1.4/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj b/1.4/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
new file mode 100644
index 0000000..8da21a6
--- /dev/null
+++ b/1.4/Patch_HatsDisplaySelection/Patch_HatsDisplaySelection.csproj
@@ -0,0 +1,75 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {BA766964-1716-422D-A09E-29426F8EB9D5}
+ Library
+ Properties
+ Patch_HatsDisplaySelection
+ Patch_HatsDisplaySelection
+ v4.7.2
+ 512
+ true
+
+
+ false
+ none
+ false
+ 1.2\Assemblies\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll
+ False
+
+
+ ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
+ False
+
+
+ ..\..\..\..\..\workshop\content\294100\1542291825\1.2\Assemblies\HatDisplaySelection.dll
+ False
+
+
+ ..\1.2\Assemblies\Rimworld-Animations.dll
+ False
+
+
+
+
+
+
+
+
+
+
+ ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
+ False
+
+
+ ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
+ False
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.6/Patch_HumanoidAlienRaces/Assemblies/Patch_HumanoidAlienRaces.dll b/1.4/Patch_HumanoidAlienRaces/Assemblies/Patch_HumanoidAlienRaces.dll
similarity index 100%
rename from 1.6/Patch_HumanoidAlienRaces/Assemblies/Patch_HumanoidAlienRaces.dll
rename to 1.4/Patch_HumanoidAlienRaces/Assemblies/Patch_HumanoidAlienRaces.dll
diff --git a/1.6/Patch_HumanoidAlienRaces/Patch_HumanoidAlienRaces.csproj b/1.4/Patch_HumanoidAlienRaces/Patch_HumanoidAlienRaces.csproj
similarity index 100%
rename from 1.6/Patch_HumanoidAlienRaces/Patch_HumanoidAlienRaces.csproj
rename to 1.4/Patch_HumanoidAlienRaces/Patch_HumanoidAlienRaces.csproj
diff --git a/1.6/Patch_HumanoidAlienRaces/Properties/AssemblyInfo.cs b/1.4/Patch_HumanoidAlienRaces/Properties/AssemblyInfo.cs
similarity index 100%
rename from 1.6/Patch_HumanoidAlienRaces/Properties/AssemblyInfo.cs
rename to 1.4/Patch_HumanoidAlienRaces/Properties/AssemblyInfo.cs
diff --git a/1.4/Patches/AnimationPatchHSK.xml b/1.4/Patches/AnimationPatchHSK.xml
new file mode 100644
index 0000000..74038ea
--- /dev/null
+++ b/1.4/Patches/AnimationPatchHSK.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ Core SK
+
+
+
+
+
+ Defs/ThingDef/comps
+ Always
+
+ Defs/ThingDef
+
+
+
+
+
+
+
+ Defs/ThingDef[@Name="BaseAnimalPawn" or @Name="SK_BasePawn" or @Name="BasePawnSkynet"]/comps
+
+
+
+
+
+
+
+
+
diff --git a/1.4/Patches/AnimationPatch_CompBodyAnimator.xml b/1.4/Patches/AnimationPatch_CompBodyAnimator.xml
new file mode 100644
index 0000000..e645747
--- /dev/null
+++ b/1.4/Patches/AnimationPatch_CompBodyAnimator.xml
@@ -0,0 +1,35 @@
+
+
+
+ Always
+
+
+ Always
+ Defs/ThingDef[race][not(comps)]
+
+
+
+
+
+ Always
+ Defs/AlienRace.ThingDef_AlienRace[not(comps)]
+
+
+
+
+
+
+ Defs/ThingDef[@Name="BasePawn"]/comps
+
+
+
+
+
+ Defs/AlienRace.ThingDef_AlienRace/comps
+
+
+
+
+
+
+
diff --git a/1.4/Patches/CompPatches/AutoCleaner.xml b/1.4/Patches/CompPatches/AutoCleaner.xml
new file mode 100644
index 0000000..c2ad860
--- /dev/null
+++ b/1.4/Patches/CompPatches/AutoCleaner.xml
@@ -0,0 +1,19 @@
+
+
+
+ Always
+
+
+ /Defs/ThingDef[@Name="BaseBaseAutocleaner"]/comps
+ Always
+
+ /Defs/ThingDef[@Name="BaseBaseAutocleaner"]/comps
+
+
+
+
+
+
+
+
+
diff --git a/1.4/Patches/CompPatches/CombatExtended.xml b/1.4/Patches/CompPatches/CombatExtended.xml
new file mode 100644
index 0000000..7d35127
--- /dev/null
+++ b/1.4/Patches/CompPatches/CombatExtended.xml
@@ -0,0 +1,18 @@
+
+
+
+ Always
+
+
+ /Defs/ThingDef[@Name="BasePawnSimple"]/comps
+ Always
+
+ /Defs/ThingDef[@Name="BasePawnSimple"]/comps
+
+
+
+
+
+
+
+
diff --git a/1.4/Patches/CompPatches/ZombieLand.xml b/1.4/Patches/CompPatches/ZombieLand.xml
new file mode 100644
index 0000000..e950e0e
--- /dev/null
+++ b/1.4/Patches/CompPatches/ZombieLand.xml
@@ -0,0 +1,18 @@
+
+
+
+ Always
+
+
+ /Defs/ThingDef[@Name="BaseZombie"]/comps
+ Always
+
+ /Defs/ThingDef[@Name="BaseZombie"]/comps
+
+
+
+
+
+
+
+
diff --git a/1.4/Patches/CompatibilityPatch_FacialAnimation.xml b/1.4/Patches/CompatibilityPatch_FacialAnimation.xml
new file mode 100644
index 0000000..125d79f
--- /dev/null
+++ b/1.4/Patches/CompatibilityPatch_FacialAnimation.xml
@@ -0,0 +1,130 @@
+
+
+
+
+ [NL] Facial Animation - WIP
+
+
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin" or defName="Lovin2"]/targetJobs
+ Always
+
+ RJW_Masturbate
+ GettinBred
+ Bestiality
+ BestialityForFemale
+ ViolateCorpse
+ Quickie
+ GettingQuickie
+ GettinRaped
+ JoinInBed
+ GettinLoved
+ GettinLicked
+ GettinSucked
+ WhoreIsServingVisitors
+ JoinInBedAnimation
+ GettinLovedAnimation
+
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="WaitCombat" or defName="Wait_Combat_Rare"]/targetJobs
+ Always
+
+ RapeComfortPawn
+ RandomRape
+ RapeEnemy
+
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="StandAndBeSociallyActive"]/targetJobs
+ Always
+
+ WhoreInvitingVisitors
+
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Wear" or defName="Wear2" or defName="Wear3"]/targetJobs
+ Always
+
+ CleanSelf
+ StruggleInBondageGear
+
+
+
+
+ Rimworld-Animations
+
+
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin" or defName="Lovin2"]/animationFrames/li[1]/headOffset
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[2]/headOffset
+ Always
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="Lovin"]/animationFrames/li[3]/headOffset
+ Always
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/CompatibilityPatch_HCSK.xml b/1.4/Patches/CompatibilityPatch_HCSK.xml
new file mode 100644
index 0000000..ead8783
--- /dev/null
+++ b/1.4/Patches/CompatibilityPatch_HCSK.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+ Core SK
+
+
+ Always
+
+
+ /Defs/ThingDef/comps
+ Always
+
+ /Defs/ThingDef
+
+
+
+
+
+
+
+ /Defs/ThingDef[@Name="SK_BasePawn"]/comps
+
+
+
+
+
+
+ /Defs/ThingDef[@Name="BaseAnimalPawn"]/comps
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/RacePatches/Epona race Renaissance.xml b/1.4/Patches/RacePatches/Epona race Renaissance.xml
new file mode 100644
index 0000000..9453030
--- /dev/null
+++ b/1.4/Patches/RacePatches/Epona race Renaissance.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ Epona race Renaissance
+
+
+
+
+ Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Epona"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[hediffGraphics/Epona_OHPG_female="Things/Pawn/Addons/Breasts/Breasts"]/drawnInBed
+
+ Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Epona"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[hediffGraphics/Epona_OHPG_female="Things/Pawn/Addons/Breasts/Breasts"]/drawnInBed
+
+ false
+
+
+
+
+
+
+
diff --git a/1.4/Patches/RacePatches/Nyaron.xml b/1.4/Patches/RacePatches/Nyaron.xml
new file mode 100644
index 0000000..c176521
--- /dev/null
+++ b/1.4/Patches/RacePatches/Nyaron.xml
@@ -0,0 +1,30 @@
+
+
+
+
+ Nyaron race
+
+
+
+
+ Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Nyaron"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[bodyPart="tail"]
+
+ /Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Nyaron"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[bodyPart="tail"]
+
+ false
+
+
+
+
+ Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Nyaron"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[bodyPartLabel="tail"]
+
+ /Defs/AlienRace.ThingDef_AlienRace[defName = "Alien_Nyaron"]/alienRace/generalSettings/alienPartGenerator/bodyAddons/li[bodyPartLabel="tail"]
+
+ false
+
+
+
+
+
+
+
diff --git a/1.4/Sounds/Sex/Clap_1.wav b/1.4/Sounds/Sex/Clap_1.wav
new file mode 100644
index 0000000..bccd0f2
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_1.wav differ
diff --git a/1.4/Sounds/Sex/Clap_2.wav b/1.4/Sounds/Sex/Clap_2.wav
new file mode 100644
index 0000000..a382f59
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_2.wav differ
diff --git a/1.4/Sounds/Sex/Clap_3.wav b/1.4/Sounds/Sex/Clap_3.wav
new file mode 100644
index 0000000..65cf39b
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_3.wav differ
diff --git a/1.4/Sounds/Sex/Clap_4.wav b/1.4/Sounds/Sex/Clap_4.wav
new file mode 100644
index 0000000..3ae1b3e
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_4.wav differ
diff --git a/1.4/Sounds/Sex/Clap_5.wav b/1.4/Sounds/Sex/Clap_5.wav
new file mode 100644
index 0000000..65144e7
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_5.wav differ
diff --git a/1.4/Sounds/Sex/Clap_6.wav b/1.4/Sounds/Sex/Clap_6.wav
new file mode 100644
index 0000000..0026325
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_6.wav differ
diff --git a/1.4/Sounds/Sex/Clap_7.wav b/1.4/Sounds/Sex/Clap_7.wav
new file mode 100644
index 0000000..6d7de2a
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_7.wav differ
diff --git a/1.4/Sounds/Sex/Clap_8.wav b/1.4/Sounds/Sex/Clap_8.wav
new file mode 100644
index 0000000..1af5710
Binary files /dev/null and b/1.4/Sounds/Sex/Clap_8.wav differ
diff --git a/1.4/Sounds/Sex/Slime/Slimy1.wav b/1.4/Sounds/Sex/Slime/Slimy1.wav
new file mode 100644
index 0000000..3cfbd74
Binary files /dev/null and b/1.4/Sounds/Sex/Slime/Slimy1.wav differ
diff --git a/1.4/Sounds/Sex/Slime/Slimy2.wav b/1.4/Sounds/Sex/Slime/Slimy2.wav
new file mode 100644
index 0000000..36a9197
Binary files /dev/null and b/1.4/Sounds/Sex/Slime/Slimy2.wav differ
diff --git a/1.4/Sounds/Sex/Slime/Slimy3.wav b/1.4/Sounds/Sex/Slime/Slimy3.wav
new file mode 100644
index 0000000..40aff1e
Binary files /dev/null and b/1.4/Sounds/Sex/Slime/Slimy3.wav differ
diff --git a/1.4/Sounds/Sex/Slime/Slimy4.wav b/1.4/Sounds/Sex/Slime/Slimy4.wav
new file mode 100644
index 0000000..0b6404e
Binary files /dev/null and b/1.4/Sounds/Sex/Slime/Slimy4.wav differ
diff --git a/1.4/Sounds/Sex/Slime/Slimy5.wav b/1.4/Sounds/Sex/Slime/Slimy5.wav
new file mode 100644
index 0000000..ea310db
Binary files /dev/null and b/1.4/Sounds/Sex/Slime/Slimy5.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_1.wav b/1.4/Sounds/Sex/Suck/Suck_1.wav
new file mode 100644
index 0000000..4f1eafd
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_1.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_10.wav b/1.4/Sounds/Sex/Suck/Suck_10.wav
new file mode 100644
index 0000000..284cda3
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_10.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_2.wav b/1.4/Sounds/Sex/Suck/Suck_2.wav
new file mode 100644
index 0000000..a8305c1
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_2.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_3.wav b/1.4/Sounds/Sex/Suck/Suck_3.wav
new file mode 100644
index 0000000..95e7348
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_3.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_4.wav b/1.4/Sounds/Sex/Suck/Suck_4.wav
new file mode 100644
index 0000000..753a023
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_4.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_5.wav b/1.4/Sounds/Sex/Suck/Suck_5.wav
new file mode 100644
index 0000000..8ecda9c
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_5.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_6.wav b/1.4/Sounds/Sex/Suck/Suck_6.wav
new file mode 100644
index 0000000..08567d6
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_6.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_7.wav b/1.4/Sounds/Sex/Suck/Suck_7.wav
new file mode 100644
index 0000000..a63b0e4
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_7.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_8.wav b/1.4/Sounds/Sex/Suck/Suck_8.wav
new file mode 100644
index 0000000..320da09
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_8.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Suck_9.wav b/1.4/Sounds/Sex/Suck/Suck_9.wav
new file mode 100644
index 0000000..7ab538a
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Suck_9.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Swallow_1.wav b/1.4/Sounds/Sex/Suck/Swallow_1.wav
new file mode 100644
index 0000000..f3276cc
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Swallow_1.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Swallow_2.wav b/1.4/Sounds/Sex/Suck/Swallow_2.wav
new file mode 100644
index 0000000..09a7a00
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Swallow_2.wav differ
diff --git a/1.4/Sounds/Sex/Suck/Swallow_3.wav b/1.4/Sounds/Sex/Suck/Swallow_3.wav
new file mode 100644
index 0000000..2817b29
Binary files /dev/null and b/1.4/Sounds/Sex/Suck/Swallow_3.wav differ
diff --git a/1.4/Sounds/Sex/cum.wav b/1.4/Sounds/Sex/cum.wav
new file mode 100644
index 0000000..ef98437
Binary files /dev/null and b/1.4/Sounds/Sex/cum.wav differ
diff --git a/1.4/Sounds/Sex/kucyu04.wav b/1.4/Sounds/Sex/kucyu04.wav
new file mode 100644
index 0000000..3ae1ce8
Binary files /dev/null and b/1.4/Sounds/Sex/kucyu04.wav differ
diff --git a/1.4/Source/Actors/Actor.cs b/1.4/Source/Actors/Actor.cs
new file mode 100644
index 0000000..3b382dd
--- /dev/null
+++ b/1.4/Source/Actors/Actor.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class Actor {
+ public List defNames;
+ public List requiredGenitals;
+ public List raceOffsets;
+ public List blacklistedRaces;
+ public bool initiator = false;
+ public string gender;
+ public bool isFucking = false;
+ public bool isFucked = false;
+ public bool controlGenitalAngle = false;
+ public List bodyDefTypes = new List();
+ public BodyTypeOffset bodyTypeOffset = new BodyTypeOffset();
+ public Vector3 offset = new Vector2(0, 0);
+ public List requiredGender;
+ public List tags = new List();
+ }
+}
diff --git a/1.4/Source/Actors/AlienRaceOffset.cs b/1.4/Source/Actors/AlienRaceOffset.cs
new file mode 100644
index 0000000..a5bbe20
--- /dev/null
+++ b/1.4/Source/Actors/AlienRaceOffset.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace Rimworld_Animations {
+ public class AlienRaceOffset {
+
+ public string defName;
+ public Vector2 offset;
+
+ }
+}
diff --git a/1.4/Source/Actors/BodyTypeOffset.cs b/1.4/Source/Actors/BodyTypeOffset.cs
new file mode 100644
index 0000000..82a23a3
--- /dev/null
+++ b/1.4/Source/Actors/BodyTypeOffset.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace Rimworld_Animations {
+ public class BodyTypeOffset {
+
+ public Vector2? Male;
+ public Vector2? Female;
+ public Vector2? Thin;
+ public Vector2? Hulk;
+ public Vector2? Fat;
+
+ }
+}
diff --git a/1.4/Source/Animations/AnimationStage.cs b/1.4/Source/Animations/AnimationStage.cs
new file mode 100644
index 0000000..7a1304e
--- /dev/null
+++ b/1.4/Source/Animations/AnimationStage.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Rimworld_Animations {
+ public class AnimationStage
+ {
+ public string stageName;
+ public int stageIndex;
+ public int playTimeTicks = 0;
+ public int playTimeTicksQuick = -1;
+ public bool isLooping;
+ public List animationClips;
+ public List tags = new List();
+
+ public void initialize() {
+ foreach (BaseAnimationClip clip in animationClips) {
+ clip.buildSimpleCurves();
+ //select playTimeTicks as longest playtime of all the animations
+ if(clip.duration > playTimeTicks) {
+ playTimeTicks = clip.duration;
+ }
+ }
+ }
+ }
+}
diff --git a/1.4/Source/Animations/Clips/BaseAnimationClip.cs b/1.4/Source/Animations/Clips/BaseAnimationClip.cs
new file mode 100644
index 0000000..aa35b31
--- /dev/null
+++ b/1.4/Source/Animations/Clips/BaseAnimationClip.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+
+namespace Rimworld_Animations {
+ public abstract class BaseAnimationClip
+ {
+ public Dictionary SoundEffects = new Dictionary();
+ public List types; //types of participants
+ public int duration;
+ public abstract void buildSimpleCurves();
+ public string soundDef = null; //for playing sounds
+ public int actor;
+ public List tags = new List();
+ }
+}
diff --git a/1.4/Source/Animations/Clips/PawnAnimationClip.cs b/1.4/Source/Animations/Clips/PawnAnimationClip.cs
new file mode 100644
index 0000000..e9d2489
--- /dev/null
+++ b/1.4/Source/Animations/Clips/PawnAnimationClip.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class PawnAnimationClip : BaseAnimationClip {
+
+ public List keyframes;
+ public AltitudeLayer layer = AltitudeLayer.Pawn;
+
+ public Dictionary quiver = new Dictionary();
+ public SimpleCurve GenitalAngle = new SimpleCurve();
+ public SimpleCurve BodyAngle = new SimpleCurve();
+ public SimpleCurve HeadAngle = new SimpleCurve();
+ public SimpleCurve HeadBob = new SimpleCurve();
+ public SimpleCurve BodyOffsetX = new SimpleCurve();
+ public SimpleCurve BodyOffsetZ = new SimpleCurve();
+ public SimpleCurve HeadFacing = new SimpleCurve();
+ public SimpleCurve BodyFacing = new SimpleCurve();
+
+
+ public override void buildSimpleCurves() {
+
+
+ int duration = 0;
+ //getting the length of the whole clip
+ foreach(PawnKeyframe frame in keyframes) {
+ duration += frame.tickDuration;
+ }
+
+ //guarantees loops don't get cut off mid-anim
+ this.duration = duration;
+
+ int keyframePosition = 0;
+ foreach (PawnKeyframe frame in keyframes) {
+
+ if (frame.atTick.HasValue) {
+ if (frame.bodyAngle.HasValue)
+ BodyAngle.Add((float)frame.atTick / (float)duration, frame.bodyAngle.Value, true);
+
+ if (frame.headAngle.HasValue)
+ HeadAngle.Add((float)frame.atTick / (float)duration, frame.headAngle.Value, true);
+
+ if (frame.bodyOffsetX.HasValue)
+ BodyOffsetX.Add((float)frame.atTick / (float)duration, frame.bodyOffsetX.Value, true);
+
+ if (frame.bodyOffsetZ.HasValue)
+ BodyOffsetZ.Add((float)frame.atTick / (float)duration, frame.bodyOffsetZ.Value, true);
+
+ if (frame.headFacing.HasValue)
+ HeadFacing.Add((float)frame.atTick / (float)duration, frame.headFacing.Value, true);
+
+ if (frame.bodyFacing.HasValue)
+ BodyFacing.Add((float)frame.atTick / (float)duration, frame.bodyFacing.Value, true);
+
+ if (frame.headBob.HasValue)
+ HeadBob.Add((float)frame.atTick / (float)duration, frame.headBob.Value, true);
+
+ if (frame.genitalAngle.HasValue)
+ GenitalAngle.Add((float)frame.atTick / (float)duration, frame.genitalAngle.Value, true);
+
+ if (frame.soundEffect != null) {
+ SoundEffects.Add((int)frame.atTick, frame.soundEffect);
+ }
+
+
+ }
+ else {
+ if (frame.bodyAngle.HasValue)
+ BodyAngle.Add((float)keyframePosition / (float)duration, frame.bodyAngle.Value, true);
+
+ if (frame.headAngle.HasValue)
+ HeadAngle.Add((float)keyframePosition / (float)duration, frame.headAngle.Value, true);
+
+ if (frame.bodyOffsetX.HasValue)
+ BodyOffsetX.Add((float)keyframePosition / (float)duration, frame.bodyOffsetX.Value, true);
+
+ if (frame.bodyOffsetZ.HasValue)
+ BodyOffsetZ.Add((float)keyframePosition / (float)duration, frame.bodyOffsetZ.Value, true);
+
+ if (frame.headFacing.HasValue)
+ HeadFacing.Add((float)keyframePosition / (float)duration, frame.headFacing.Value, true);
+
+ if (frame.bodyFacing.HasValue)
+ BodyFacing.Add((float)keyframePosition / (float)duration, frame.bodyFacing.Value, true);
+
+ if (frame.headBob.HasValue)
+ HeadBob.Add((float)keyframePosition / (float)duration, frame.headBob.Value, true);
+
+ if (frame.genitalAngle.HasValue)
+ GenitalAngle.Add((float)keyframePosition / (float)duration, frame.genitalAngle.Value, true);
+
+ if (frame.soundEffect != null) {
+ SoundEffects.Add(keyframePosition, frame.soundEffect);
+ }
+
+ if(frame.tickDuration != 1 && frame.quiver.HasValue) {
+
+ quiver.Add(keyframePosition, true);
+ quiver.Add(keyframePosition + frame.tickDuration - 1, false);
+ }
+ keyframePosition += frame.tickDuration;
+
+ }
+
+ }
+
+ }
+
+ }
+}
diff --git a/1.4/Source/Animations/Clips/ThingAnimationClip.cs b/1.4/Source/Animations/Clips/ThingAnimationClip.cs
new file mode 100644
index 0000000..26f4d4c
--- /dev/null
+++ b/1.4/Source/Animations/Clips/ThingAnimationClip.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+
+namespace Rimworld_Animations {
+ public class ThingAnimationClip : BaseAnimationClip
+ {
+ public List keyframes;
+
+ public SimpleCurve PositionX = new SimpleCurve();
+ public SimpleCurve PositionZ = new SimpleCurve();
+ public SimpleCurve Rotation = new SimpleCurve();
+
+
+ public override void buildSimpleCurves() {
+ int duration = 0;
+ //getting the length of the whole clip
+ foreach (ThingKeyframe frame in keyframes)
+ {
+ duration += frame.tickDuration;
+ }
+
+ //guarantees loops don't get cut off mid-anim
+ this.duration = duration;
+
+ int keyframePosition = 0;
+ foreach (ThingKeyframe frame in keyframes)
+ {
+
+ if (frame.atTick.HasValue)
+ {
+ if (frame.positionX.HasValue)
+ PositionX.Add((float)frame.atTick / (float)duration, frame.positionX.Value, true);
+
+ if (frame.positionZ.HasValue)
+ PositionZ.Add((float)frame.atTick / (float)duration, frame.positionZ.Value, true);
+
+ if (frame.rotation.HasValue)
+ Rotation.Add((float)frame.atTick / (float)duration, frame.rotation.Value, true);
+
+ if (frame.soundEffect != null)
+ {
+ SoundEffects.Add((int)frame.atTick, frame.soundEffect);
+ }
+
+
+ }
+ else
+ {
+ if (frame.positionX.HasValue)
+ PositionX.Add((float)keyframePosition / (float)duration, frame.positionX.Value, true);
+
+ if (frame.positionZ.HasValue)
+ PositionZ.Add((float)keyframePosition / (float)duration, frame.positionZ.Value, true);
+
+ if (frame.rotation.HasValue)
+ Rotation.Add((float)keyframePosition / (float)duration, frame.rotation.Value, true);
+
+ if (frame.soundEffect != null)
+ {
+ SoundEffects.Add(keyframePosition, frame.soundEffect);
+ }
+ keyframePosition += frame.tickDuration;
+
+ }
+
+ }
+ }
+ }
+}
diff --git a/1.4/Source/Animations/Keyframes/Keyframe.cs b/1.4/Source/Animations/Keyframes/Keyframe.cs
new file mode 100644
index 0000000..8cd859d
--- /dev/null
+++ b/1.4/Source/Animations/Keyframes/Keyframe.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Rimworld_Animations {
+ public abstract class Keyframe
+ {
+ public int tickDuration = 1;
+ public float? atTick;
+ public string soundEffect;
+ public List tags = new List();
+ }
+}
diff --git a/1.4/Source/Animations/Keyframes/PawnKeyframe.cs b/1.4/Source/Animations/Keyframes/PawnKeyframe.cs
new file mode 100644
index 0000000..e710981
--- /dev/null
+++ b/1.4/Source/Animations/Keyframes/PawnKeyframe.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class PawnKeyframe : Keyframe
+ {
+ public float? bodyAngle;
+ public float? headAngle;
+
+ public float? genitalAngle;
+
+ public float? bodyOffsetZ;
+ public float? bodyOffsetX;
+
+ public float? headBob;
+ //todo: add headOffsets l/r?
+
+ public int? bodyFacing;
+ public int? headFacing;
+
+ public bool? quiver;
+
+ }
+}
diff --git a/1.4/Source/Animations/Keyframes/ThingKeyframe.cs b/1.4/Source/Animations/Keyframes/ThingKeyframe.cs
new file mode 100644
index 0000000..6604f5e
--- /dev/null
+++ b/1.4/Source/Animations/Keyframes/ThingKeyframe.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Rimworld_Animations {
+ public class ThingKeyframe : Keyframe
+ {
+
+ public float? positionX;
+ public float? positionZ;
+ public float? rotation;
+
+
+
+ }
+}
diff --git a/1.4/Source/Comps/CompBodyAnimator.cs b/1.4/Source/Comps/CompBodyAnimator.cs
new file mode 100644
index 0000000..123a8aa
--- /dev/null
+++ b/1.4/Source/Comps/CompBodyAnimator.cs
@@ -0,0 +1,543 @@
+using System.Collections.Generic;
+using System.Linq;
+using RimWorld;
+using rjw;
+using UnityEngine;
+using Verse;
+using Verse.AI;
+using Verse.Sound;
+
+namespace Rimworld_Animations {
+ public class CompBodyAnimator : ThingComp
+ {
+ ///
+ /// Cache of the currently animated pawns for the very fast isAnimating checks
+ ///
+ private static readonly HashSet animatingPawns = new HashSet();
+ ///
+ /// Check if the is currently animated by this comp
+ ///
+ public static bool IsAnimating(Pawn pawn) => animatingPawns.Contains(pawn);
+
+ public Pawn pawn => base.parent as Pawn;
+ public PawnGraphicSet Graphics;
+
+ //public CompProperties_BodyAnimator Props => (CompProperties_BodyAnimator)(object)base.props;
+
+ public bool isAnimating {
+ get {
+ return Animating;
+ }
+ set {
+ Animating = value;
+
+ if (value == true) {
+ SexUtility.DrawNude(pawn);
+ animatingPawns.Add(pawn);
+ } else {
+ pawn.Drawer.renderer.graphics.ResolveAllGraphics();
+ actorsInCurrentAnimation = null;
+ animatingPawns.Remove(pawn);
+ }
+
+ PortraitsCache.SetDirty(pawn);
+ }
+ }
+ private bool Animating = false;
+ private bool mirror = false, quiver = false, shiver = false;
+ private int actor;
+
+ private int lastDrawFrame = -1;
+
+ private int animTicks = 0, stageTicks = 0, clipTicks = 0;
+ private int curStage = 0;
+ private float clipPercent = 0;
+
+ public Vector3 anchor = Vector3.zero, deltaPos = Vector3.zero, headBob = Vector3.zero;
+ public float bodyAngle = 0, headAngle = 0, genitalAngle = 0;
+ public Rot4 headFacing = Rot4.North, bodyFacing = Rot4.North;
+
+ public List actorsInCurrentAnimation;
+
+ public bool controlGenitalAngle = false;
+ public bool fastAnimForQuickie = false;
+
+ private AnimationDef anim;
+ private AnimationStage stage {
+ get
+ {
+ return anim.animationStages[curStage];
+ }
+
+ }
+ private PawnAnimationClip clip => (PawnAnimationClip)stage.animationClips[actor];
+
+ public bool Mirror {
+ get {
+ return mirror;
+ }
+ }
+
+ public void setAnchor(IntVec3 pos)
+ {
+ anchor = pos.ToVector3Shifted();
+ }
+ public void setAnchor(Thing thing) {
+
+ //center on bed
+ if(thing is Building_Bed) {
+ anchor = thing.Position.ToVector3();
+ if (((Building_Bed)thing).SleepingSlotsCount == 2) {
+ if (thing.Rotation.AsInt == 0) {
+ anchor.x += 1;
+ anchor.z += 1;
+ }
+ else if (thing.Rotation.AsInt == 1) {
+ anchor.x += 1;
+ }
+ else if(thing.Rotation.AsInt == 3) {
+ anchor.z += 1;
+ }
+
+ }
+ else {
+ if(thing.Rotation.AsInt == 0) {
+ anchor.x += 0.5f;
+ anchor.z += 1f;
+ }
+ else if(thing.Rotation.AsInt == 1) {
+ anchor.x += 1f;
+ anchor.z += 0.5f;
+ }
+ else if(thing.Rotation.AsInt == 2) {
+ anchor.x += 0.5f;
+ } else {
+ anchor.z += 0.5f;
+ }
+ }
+ }
+ else {
+ anchor = thing.Position.ToVector3Shifted();
+ }
+ }
+ public void StartAnimation(AnimationDef anim, List actors, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false) {
+
+ actorsInCurrentAnimation = actors;
+
+ if (anim.actors.Count <= actor)
+ {
+ return;
+ }
+ AlienRaceOffset raceOffset = anim?.actors[actor]?.raceOffsets?.Find(x => x.defName == pawn.def.defName);
+
+ if (raceOffset != null) {
+ anchor.x += mirror ? raceOffset.offset.x * -1f : raceOffset.offset.x;
+ anchor.z += raceOffset.offset.y;
+ }
+
+ //change the offset based on pawn body type
+ if(pawn?.story?.bodyType != null) {
+ if (pawn.story.bodyType == BodyTypeDefOf.Fat && anim?.actors[actor]?.bodyTypeOffset?.Fat != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Fat.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Fat.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Female && anim?.actors[actor]?.bodyTypeOffset?.Female != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Female.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Female.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Male && anim?.actors[actor]?.bodyTypeOffset?.Male != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Male.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Male.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Thin && anim?.actors[actor]?.bodyTypeOffset?.Thin != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Thin.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Thin.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Hulk && anim?.actors[actor]?.bodyTypeOffset?.Hulk != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Hulk.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Hulk.Value.y;
+ }
+ }
+
+ pawn.jobs.posture = PawnPosture.Standing;
+
+ this.actor = actor;
+ this.anim = anim;
+ this.mirror = mirror;
+ this.fastAnimForQuickie = fastAnimForQuickie;
+
+ if (fastAnimForQuickie && anim.animationStages.Any(x => x.playTimeTicksQuick >= 0) == false)
+ {
+ curStage = 1;
+ animTicks = anim.animationStages[0].playTimeTicks;
+ } else
+ {
+ curStage = 0;
+ animTicks = 0;
+ }
+
+ stageTicks = 0;
+ clipTicks = 0;
+
+ quiver = false;
+ this.shiver = shiver && AnimationSettings.rapeShiver;
+
+ controlGenitalAngle = anim.actors[actor].controlGenitalAngle;
+
+ isAnimating = true;
+ //tick once for initialization
+ tickAnim();
+
+ }
+
+ public override void CompTick() {
+
+ base.CompTick();
+
+ if(isAnimating) {
+
+ GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn);
+
+ if (pawn.Dead || pawn?.jobs?.curDriver == null || (pawn?.jobs?.curDriver != null && !(pawn?.jobs?.curDriver is rjw.JobDriver_Sex))) {
+ isAnimating = false;
+ }
+ else {
+ tickAnim();
+ }
+ }
+ }
+ public void animatePawnBody(ref Vector3 rootLoc, ref float angle, ref Rot4 bodyFacing) {
+
+ if(!isAnimating) {
+ return;
+ }
+ rootLoc = anchor + deltaPos;
+ angle = bodyAngle;
+ bodyFacing = this.bodyFacing;
+
+ }
+
+ public Rot4 AnimateHeadFacing()
+ {
+ return this.headFacing;
+ }
+
+
+ public void tickGraphics(PawnGraphicSet graphics) {
+ this.Graphics = graphics;
+ }
+
+ public void tickAnim() {
+
+
+
+ if (!isAnimating) return;
+
+ if (anim == null) {
+ isAnimating = false;
+ return;
+ }
+
+ animTicks++;
+
+ if (animTicks < anim.animationTimeTicks) {
+ tickStage();
+ } else {
+
+ if(LoopNeverending())
+ {
+ ResetOnLoop();
+ } else
+ {
+ isAnimating = false;
+ }
+
+
+ }
+
+
+
+ }
+
+ public void tickStage()
+ {
+
+ if(stage == null)
+ {
+ isAnimating = false;
+ return;
+ }
+
+ stageTicks++;
+
+ if(stageTicks >= stage.playTimeTicks || (fastAnimForQuickie && stage.playTimeTicksQuick >= 0 && stageTicks >= stage.playTimeTicksQuick)) {
+
+ curStage++;
+
+ stageTicks = 0;
+ clipTicks = 0;
+ clipPercent = 0;
+ }
+
+ if(curStage >= anim.animationStages.Count) {
+ if (LoopNeverending())
+ {
+ ResetOnLoop();
+ }
+ else
+ {
+ isAnimating = false;
+ pawn.jobs.curDriver.ReadyForNextToil();
+ }
+
+ } else {
+ tickClip();
+ }
+
+
+
+ }
+
+ public void tickClip() {
+
+ clipTicks++;
+
+ //play sound effect
+ if(rjw.RJWSettings.sounds_enabled && clip.SoundEffects.ContainsKey(clipTicks) && AnimationSettings.soundOverride) {
+
+
+ SoundInfo sound = new TargetInfo(pawn.Position, pawn.Map);
+ string soundEffectName = clip.SoundEffects[clipTicks];
+
+
+ if ((pawn.jobs.curDriver as JobDriver_Sex).isAnimalOnAnimal)
+ {
+ sound.volumeFactor *= RJWSettings.sounds_animal_on_animal_volume;
+ }
+
+ if(soundEffectName.StartsWith("Voiceline_"))
+ {
+ sound.volumeFactor *= RJWSettings.sounds_voice_volume;
+ }
+
+ if (clip.SoundEffects[clipTicks] == "Cum") {
+
+ sound.volumeFactor *= RJWSettings.sounds_cum_volume;
+ //considerApplyingSemen();
+
+ } else
+ {
+ sound.volumeFactor *= RJWSettings.sounds_sex_volume;
+ }
+
+ SoundDef.Named(soundEffectName).PlayOneShot(sound);
+
+ }
+ if(AnimationSettings.orgasmQuiver && clip.quiver.ContainsKey(clipTicks)) {
+ quiver = clip.quiver[clipTicks];
+ }
+
+ //loop animation if possible
+ if (clipPercent >= 1 && stage.isLooping) {
+ clipTicks = 1;//warning: don't set to zero or else calculations go wrong
+ }
+ clipPercent = (float)clipTicks / (float)clip.duration;
+
+ calculateDrawValues();
+ }
+
+ public void considerApplyingSemen()
+ {
+ if(AnimationSettings.applySemenOnAnimationOrgasm && (pawn?.jobs?.curDriver is JobDriver_Sex))
+ {
+
+ if (anim.sexTypes.Contains((pawn.jobs.curDriver as JobDriver_Sex).Sexprops.sexType))
+ {
+ //SemenHelper.calculateAndApplySemen((pawn.jobs.curDriver as JobDriver_Sex).Sexprops);
+ }
+ }
+ }
+
+ public void calculateDrawValues() {
+
+ /*if(Find.TickManager.TickRateMultiplier > 1 && (lastDrawFrame + 1 >= RealTime.frameCount || RealTime.deltaTime < 0.05f)) {
+ return;
+ }*/
+
+ deltaPos = new Vector3(clip.BodyOffsetX.Evaluate(clipPercent) * (mirror ? -1 : 1), clip.layer.AltitudeFor(), clip.BodyOffsetZ.Evaluate(clipPercent));
+
+ string bodyTypeDef = (pawn.story?.bodyType != null) ? pawn.story.bodyType.ToString() : "";
+
+ if (AnimationSettings.offsets != null && AnimationSettings.offsets.ContainsKey(CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex)) {
+ deltaPos.x += AnimationSettings.offsets[CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex].x * (mirror ? -1 : 1);
+ deltaPos.z += AnimationSettings.offsets[CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex].y;
+ }
+
+
+ bodyAngle = (clip.BodyAngle.Evaluate(clipPercent) + (quiver || shiver ? ((Rand.Value * AnimationSettings.shiverIntensity) - (AnimationSettings.shiverIntensity / 2f)) : 0f)) * (mirror ? -1 : 1);
+ headAngle = clip.HeadAngle.Evaluate(clipPercent) * (mirror ? -1 : 1);
+
+ if (controlGenitalAngle) {
+ genitalAngle = clip.GenitalAngle.Evaluate(clipPercent) * (mirror ? -1 : 1);
+ }
+
+ if (AnimationSettings.rotation != null && AnimationSettings.rotation.ContainsKey(CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex)) {
+ float offsetRotation = AnimationSettings.rotation[CurrentAnimation.defName + pawn.def.defName + bodyTypeDef + ActorIndex] * (Mirror ? -1 : 1);
+ genitalAngle += offsetRotation;
+ bodyAngle += offsetRotation;
+ headAngle += offsetRotation;
+ }
+
+
+ //don't go past 360 or less than 0
+
+ if (bodyAngle < 0) bodyAngle = 360 - ((-1f*bodyAngle) % 360);
+ if (bodyAngle > 360) bodyAngle %= 360;
+
+
+ if (headAngle < 0) headAngle = 360 - ((-1f * headAngle) % 360);
+ if (headAngle > 360) headAngle %= 360;
+
+ if (genitalAngle < 0) genitalAngle = 360 - ((-1f * genitalAngle) % 360);
+ if (genitalAngle > 360) genitalAngle %= 360;
+
+
+ bodyFacing = mirror ? new Rot4((int)clip.BodyFacing.Evaluate(clipPercent)).Opposite : new Rot4((int)clip.BodyFacing.Evaluate(clipPercent));
+
+ bodyFacing = new Rot4((int)clip.BodyFacing.Evaluate(clipPercent));
+ if(bodyFacing.IsHorizontal && mirror) {
+ bodyFacing = bodyFacing.Opposite;
+ }
+
+ headFacing = new Rot4((int)clip.HeadFacing.Evaluate(clipPercent));
+ if(headFacing.IsHorizontal && mirror) {
+ headFacing = headFacing.Opposite;
+ }
+ headBob = new Vector3(0, 0, clip.HeadBob.Evaluate(clipPercent));
+ Vector2 bodyScale = (pawn.story?.bodyType?.bodyGraphicScale != null ? pawn.story.bodyType.bodyGraphicScale : Vector2.one);
+ headBob.z *= bodyScale.x;
+
+ lastDrawFrame = RealTime.frameCount;
+
+ }
+
+ public Vector3 getPawnHeadPosition() {
+
+ Vector3 headPos = anchor + deltaPos + Quaternion.AngleAxis(bodyAngle, Vector3.up) * (pawn.Drawer.renderer.BaseHeadOffsetAt(headFacing) + headBob);
+
+ return headPos;
+
+ }
+
+ public Vector3 getPawnHeadOffset()
+ {
+ return Quaternion.AngleAxis(bodyAngle, Vector3.up) * (pawn.Drawer.renderer.BaseHeadOffsetAt(headFacing) + headBob);
+
+ }
+
+ public AnimationDef CurrentAnimation {
+ get {
+ return anim;
+ }
+ }
+
+ public int ActorIndex {
+ get {
+ return actor;
+ }
+ }
+
+ public override void PostExposeData() {
+ base.PostExposeData();
+
+ Scribe_Defs.Look(ref anim, "RJWAnimations-Anim");
+
+ Scribe_Values.Look(ref animTicks, "RJWAnimations-animTicks", 1);
+ Scribe_Values.Look(ref stageTicks, "RJWAnimations-stageTicks", 1);
+ Scribe_Values.Look(ref clipTicks, "RJWAnimations-clipTicks", 1);
+ Scribe_Values.Look(ref clipPercent, "RJWAnimations-clipPercent", 1);
+ Scribe_Values.Look(ref mirror, "RJWAnimations-mirror");
+
+ Scribe_Values.Look(ref curStage, "RJWAnimations-curStage", 0);
+ Scribe_Values.Look(ref actor, "RJWAnimations-actor");
+
+ Scribe_Values.Look(ref anchor, "RJWAnimations-anchor");
+ Scribe_Values.Look(ref deltaPos, "RJWAnimations-deltaPos");
+ Scribe_Values.Look(ref headBob, "RJWAnimations-headBob");
+ Scribe_Values.Look(ref bodyAngle, "RJWAnimations-bodyAngle");
+ Scribe_Values.Look(ref headAngle, "RJWAnimations-headAngle");
+
+ Scribe_Values.Look(ref genitalAngle, "RJWAnimations-GenitalAngle");
+ Scribe_Values.Look(ref controlGenitalAngle, "RJWAnimations-controlGenitalAngle");
+
+ Scribe_Values.Look(ref headFacing, "RJWAnimations-headFacing");
+ Scribe_Values.Look(ref headFacing, "RJWAnimations-bodyFacing");
+
+ Scribe_Values.Look(ref quiver, "RJWAnimations-orgasmQuiver");
+ }
+
+ public void shiftActorPositionAndRestartAnimation() {
+ actor = (actor == anim.actors.Count - 1 ? 0 : actor + 1);
+
+ if (pawn?.story?.bodyType != null) {
+ if (pawn.story.bodyType == BodyTypeDefOf.Fat && anim?.actors[actor]?.bodyTypeOffset?.Fat != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Fat.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Fat.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Female && anim?.actors[actor]?.bodyTypeOffset?.Female != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Female.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Female.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Male && anim?.actors[actor]?.bodyTypeOffset?.Male != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Male.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Male.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Thin && anim?.actors[actor]?.bodyTypeOffset?.Thin != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Thin.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Thin.Value.y;
+ }
+ else if (pawn.story.bodyType == BodyTypeDefOf.Hulk && anim?.actors[actor]?.bodyTypeOffset?.Hulk != null) {
+ anchor.x += anim.actors[actor].bodyTypeOffset.Hulk.Value.x * (mirror ? -1f : 1f);
+ anchor.z += anim.actors[actor].bodyTypeOffset.Hulk.Value.y;
+ }
+ }
+
+ curStage = 0;
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ controlGenitalAngle = anim.actors[actor].controlGenitalAngle;
+
+ tickAnim();
+ }
+
+ public bool LoopNeverending()
+ {
+ JobDriver jobDriver = pawn?.jobs?.curDriver;
+ if (jobDriver == null) return false;
+
+ if (jobDriver is JobDriver_Sex sexDriver && sexDriver.neverendingsex)
+ {
+ return true;
+ }
+
+ if (jobDriver is JobDriver_SexBaseReciever sexReceiverDriver && sexReceiverDriver.Partner?.jobs?.curDriver is JobDriver_Sex partnerSexDriver && partnerSexDriver.neverendingsex)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void ResetOnLoop()
+ {
+ curStage = 1;
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ tickAnim();
+ }
+ }
+}
diff --git a/1.4/Source/Comps/CompProperties_BodyAnimator.cs b/1.4/Source/Comps/CompProperties_BodyAnimator.cs
new file mode 100644
index 0000000..09df7ce
--- /dev/null
+++ b/1.4/Source/Comps/CompProperties_BodyAnimator.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+
+namespace Rimworld_Animations {
+ public class CompProperties_BodyAnimator : CompProperties
+ {
+ public CompProperties_BodyAnimator()
+ {
+ base.compClass = typeof(CompBodyAnimator);
+ }
+ }
+}
diff --git a/1.4/Source/Comps/CompProperties_ThingAnimator.cs b/1.4/Source/Comps/CompProperties_ThingAnimator.cs
new file mode 100644
index 0000000..34c67b1
--- /dev/null
+++ b/1.4/Source/Comps/CompProperties_ThingAnimator.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class CompProperties_ThingAnimator : CompProperties
+ {
+
+ public CompProperties_ThingAnimator()
+ {
+ base.compClass = typeof(CompThingAnimator);
+ }
+ }
+}
diff --git a/1.4/Source/Comps/CompThingAnimator.cs b/1.4/Source/Comps/CompThingAnimator.cs
new file mode 100644
index 0000000..f5315e4
--- /dev/null
+++ b/1.4/Source/Comps/CompThingAnimator.cs
@@ -0,0 +1,245 @@
+using RimWorld;
+using rjw;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class CompThingAnimator : ThingComp
+ {
+ Vector3 anchor;
+
+ Pawn pawn;
+
+ public bool isAnimating = false, mirror;
+
+ int animTicks = 0, stageTicks = 0, clipTicks = 0, curStage = 0;
+ float rotation = 0;
+ float clipPercent = 0;
+
+ public Vector3 deltaPos;
+
+ AnimationDef anim;
+ private ThingAnimationClip clip => (ThingAnimationClip)stage.animationClips[1];
+ private AnimationStage stage
+ {
+ get
+ {
+ return anim.animationStages[curStage];
+ }
+
+ }
+
+ public void StartAnimation(AnimationDef anim, Pawn pawn, bool mirror = false)
+ {
+ isAnimating = true;
+
+ this.anim = anim;
+ this.pawn = pawn;
+ this.mirror = mirror;
+
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ curStage = 0;
+ clipPercent = 0;
+
+ tickAnim();
+
+ }
+
+ public void setAnchor(IntVec3 position)
+ {
+ anchor = position.ToVector3();
+ }
+
+ public override void CompTick()
+ {
+ base.CompTick();
+
+ if(isAnimating)
+ {
+ if (pawn.Dead || pawn?.jobs?.curDriver == null || (pawn?.jobs?.curDriver != null && !(pawn?.jobs?.curDriver is rjw.JobDriver_Sex)))
+ {
+ isAnimating = false;
+ }
+ else
+ {
+ tickAnim();
+ }
+ }
+
+
+ }
+
+ public void tickAnim()
+ {
+ if (!isAnimating) return;
+ animTicks++;
+
+ if (animTicks < anim.animationTimeTicks)
+ {
+ tickStage();
+ }
+ else
+ {
+ if (LoopNeverending())
+ {
+ ResetOnLoop();
+ }
+ else
+ {
+ isAnimating = false;
+ }
+
+
+ }
+
+ }
+
+ public void tickStage()
+ {
+ if (stage == null)
+ {
+ isAnimating = false;
+ return;
+ }
+
+ stageTicks++;
+
+ if (stageTicks >= stage.playTimeTicks)
+ {
+
+ curStage++;
+
+ stageTicks = 0;
+ clipTicks = 0;
+ clipPercent = 0;
+ }
+
+ if (curStage >= anim.animationStages.Count)
+ {
+ if (LoopNeverending())
+ {
+ ResetOnLoop();
+ }
+ else
+ {
+ isAnimating = false;
+ }
+
+ }
+ else
+ {
+ tickClip();
+ }
+ }
+
+ public void tickClip()
+ {
+ clipTicks++;
+
+ if (clipPercent >= 1 && stage.isLooping)
+ {
+ clipTicks = 1;//warning: don't set to zero or else calculations go wrong
+ }
+ clipPercent = (float)clipTicks / (float)clip.duration;
+
+ calculateDrawValues();
+ }
+
+ public void setAnchor(Thing thing)
+ {
+
+ //center on bed
+ if (thing is Building_Bed)
+ {
+ anchor = thing.Position.ToVector3();
+ if (((Building_Bed)thing).SleepingSlotsCount == 2)
+ {
+ if (thing.Rotation.AsInt == 0)
+ {
+ anchor.x += 1;
+ anchor.z += 1;
+ }
+ else if (thing.Rotation.AsInt == 1)
+ {
+ anchor.x += 1;
+ }
+ else if (thing.Rotation.AsInt == 3)
+ {
+ anchor.z += 1;
+ }
+
+ }
+ else
+ {
+ if (thing.Rotation.AsInt == 0)
+ {
+ anchor.x += 0.5f;
+ anchor.z += 1f;
+ }
+ else if (thing.Rotation.AsInt == 1)
+ {
+ anchor.x += 1f;
+ anchor.z += 0.5f;
+ }
+ else if (thing.Rotation.AsInt == 2)
+ {
+ anchor.x += 0.5f;
+ }
+ else
+ {
+ anchor.z += 0.5f;
+ }
+ }
+ }
+ else
+ {
+ anchor = thing.Position.ToVector3Shifted();
+ }
+
+ anchor -= new Vector3(0.5f, 0, 0.5f);
+ }
+ private void calculateDrawValues()
+ {
+
+ //shift up and right 0.5f to align center
+ deltaPos = new Vector3((clip.PositionX.Evaluate(clipPercent)) * (mirror ? -1 : 1) + 0.5f, AltitudeLayer.Item.AltitudeFor(), clip.PositionZ.Evaluate(clipPercent) + 0.5f);
+ //Log.Message("Clip percent: " + clipPercent + " deltaPos: " + deltaPos);
+ rotation = clip.Rotation.Evaluate(clipPercent) * (mirror ? -1 : 1);
+ }
+
+ public void AnimateThing(Thing thing)
+ {
+ thing.Graphic.Draw(deltaPos + anchor, mirror ? Rot4.West : Rot4.East, thing, rotation);
+ }
+
+ public bool LoopNeverending()
+ {
+ if (pawn?.jobs?.curDriver != null &&
+ (pawn.jobs.curDriver is JobDriver_Sex) && (pawn.jobs.curDriver as JobDriver_Sex).neverendingsex)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void ResetOnLoop()
+ {
+ curStage = 1;
+ animTicks = 0;
+ stageTicks = 0;
+ clipTicks = 0;
+
+ tickAnim();
+ }
+
+ }
+}
diff --git a/1.4/Source/Defs/AnimationDef.cs b/1.4/Source/Defs/AnimationDef.cs
new file mode 100644
index 0000000..395ff83
--- /dev/null
+++ b/1.4/Source/Defs/AnimationDef.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class AnimationDef : Def
+ {
+ public List animationStages;
+ public List actors;
+ public int animationTimeTicks = 0; //do not set manually
+ public bool sounds = false;
+ public List sexTypes = null;
+ public List interactionDefTypes = null;
+ public List tags = new List();
+
+ public override void PostLoad() {
+ base.PostLoad();
+ foreach(AnimationStage stage in animationStages) {
+ stage.initialize();
+ animationTimeTicks += stage.playTimeTicks;
+ }
+ }
+ }
+}
diff --git a/1.4/Source/Extensions/PawnWoundDrawerExtension.cs b/1.4/Source/Extensions/PawnWoundDrawerExtension.cs
new file mode 100644
index 0000000..77594e6
--- /dev/null
+++ b/1.4/Source/Extensions/PawnWoundDrawerExtension.cs
@@ -0,0 +1,32 @@
+using RimWorld;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+
+ [StaticConstructorOnStartup]
+ public static class PawnWoundDrawerExtension
+ {
+ public static void RenderPawnOverlay(this PawnWoundDrawer pawnWoundDrawer, Vector3 drawLoc, Mesh bodyMesh, Quaternion quat, bool drawNow, PawnOverlayDrawer.OverlayLayer layer, Rot4 pawnRot, bool? overApparel = null, Pawn pawn = null, PawnRenderFlags flags = new PawnRenderFlags())
+ {
+ if (pawn == null)
+ { return; }
+
+ if (!flags.FlagSet(PawnRenderFlags.Portrait) && layer == PawnOverlayDrawer.OverlayLayer.Head)
+ {
+ if (CompBodyAnimator.IsAnimating(pawn) && pawn.Drawer.renderer.graphics.headGraphic != null)
+ {
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+ pawnRot = pawnAnimator.headFacing;
+ quat = Quaternion.AngleAxis(angle: pawnAnimator.headAngle, axis: Vector3.up);
+ float y = drawLoc.y;
+ drawLoc = pawnAnimator.getPawnHeadPosition() - Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up) * pawn.Drawer.renderer.BaseHeadOffsetAt(pawnAnimator.headFacing);
+ drawLoc.y = y;
+ }
+ }
+
+ pawnWoundDrawer.RenderPawnOverlay(drawLoc, bodyMesh, quat, drawNow, layer, pawnRot, overApparel);
+ }
+ }
+
+}
diff --git a/1.4/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs b/1.4/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs
new file mode 100644
index 0000000..1cbc26d
--- /dev/null
+++ b/1.4/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs
@@ -0,0 +1,136 @@
+using System.Collections.Generic;
+using Verse;
+using RimWorld;
+using UnityEngine;
+
+namespace Rimworld_Animations {
+ class MainTabWindow_OffsetConfigure : MainTabWindow
+ {
+
+ public override Vector2 RequestedTabSize => new Vector2(505, 380);
+ public override void DoWindowContents(Rect inRect) {
+
+ Rect position = new Rect(inRect.x, inRect.y, inRect.width, inRect.height);
+
+
+ Listing_Standard listingStandard = new Listing_Standard();
+ listingStandard.Begin(position);
+
+ listingStandard.Label("Animation Manager");
+
+ listingStandard.GapLine();
+
+
+ if (Find.Selector.SingleSelectedThing is Pawn curPawn) {
+
+ if (CompBodyAnimator.IsAnimating(curPawn)) {
+
+ CompBodyAnimator compBodyAnimator = curPawn.TryGetComp();
+ AnimationDef def = compBodyAnimator.CurrentAnimation;
+ int ActorIndex = compBodyAnimator.ActorIndex;
+ float offsetX = 0, offsetZ = 0, rotation = 0;
+
+ string bodyTypeDef = (curPawn.story?.bodyType != null) ? curPawn.story.bodyType.ToString() : "";
+
+ if (AnimationSettings.offsets.ContainsKey(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex)) {
+ offsetX = AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x;
+ offsetZ = AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y;
+ } else {
+ AnimationSettings.offsets.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, new Vector2(0, 0));
+ }
+
+ if (AnimationSettings.rotation.ContainsKey(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex)) {
+ rotation = AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex];
+ }
+ else {
+ AnimationSettings.rotation.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, 0);
+ }
+
+ listingStandard.Label("Name: " + curPawn.Name + " Race: " + curPawn.def.defName + " Actor Index: " + curPawn.TryGetComp().ActorIndex + " Body Type (if any): " + bodyTypeDef + " Animation: " + def.label + (curPawn.TryGetComp().Mirror ? " mirrored" : ""));
+
+ if(curPawn.def.defName == "Human") {
+ listingStandard.Label("Warning--You generally don't want to change human offsets, only alien offsets");
+ }
+
+ float.TryParse(listingStandard.TextEntryLabeled("X Offset: ", offsetX.ToString()), out offsetX);
+ offsetX = listingStandard.Slider(offsetX, -2, 2);
+
+ float.TryParse(listingStandard.TextEntryLabeled("Z Offset: ", offsetZ.ToString()), out offsetZ);
+ offsetZ = listingStandard.Slider(offsetZ, -2, 2);
+
+ float.TryParse(listingStandard.TextEntryLabeled("Rotation: ", rotation.ToString()), out rotation);
+ rotation = listingStandard.Slider(rotation, -180, 180);
+
+ if(listingStandard.ButtonText("Reset All")) {
+ offsetX = 0;
+ offsetZ = 0;
+ rotation = 0;
+ }
+
+ listingStandard.GapLine();
+
+ if(listingStandard.ButtonText("Shift Actors")) {
+
+ if(AnimationSettings.debugMode) {
+ Log.Message("Shifting actors in animation...");
+ }
+
+ for(int i = 0; i < curPawn.TryGetComp().actorsInCurrentAnimation.Count; i++) {
+
+ Pawn actor = curPawn.TryGetComp().actorsInCurrentAnimation[i];
+
+ actor.TryGetComp()?.shiftActorPositionAndRestartAnimation();
+
+ //reset the clock time of every pawn in animation
+ if(actor.jobs.curDriver is rjw.JobDriver_Sex) {
+ (actor.jobs.curDriver as rjw.JobDriver_Sex).ticks_left = def.animationTimeTicks;
+ (actor.jobs.curDriver as rjw.JobDriver_Sex).ticksLeftThisToil = def.animationTimeTicks;
+ (actor.jobs.curDriver as rjw.JobDriver_Sex).duration = def.animationTimeTicks;
+ }
+
+ }
+
+ }
+
+ if (offsetX != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x || offsetZ != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y) {
+ AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = new Vector2(offsetX, offsetZ);
+
+ }
+
+ if(rotation != AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex]) {
+ AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = rotation;
+ }
+
+ }
+
+ }
+ else {
+ listingStandard.Label("Select a pawn currently in an animation to change their offsets");
+ }
+
+ listingStandard.End();
+
+ }
+
+ public override void PreOpen() {
+ base.PreOpen();
+ if(AnimationSettings.offsets == null) {
+ if (AnimationSettings.debugMode)
+ Log.Message("New offsets");
+ AnimationSettings.offsets = new Dictionary();
+ }
+
+ if(AnimationSettings.rotation == null) {
+ if (AnimationSettings.debugMode)
+ Log.Message("New rotation");
+ AnimationSettings.rotation = new Dictionary();
+ }
+ }
+
+ public override void PostClose() {
+ base.PostClose();
+
+ LoadedModManager.GetMod().WriteSettings();
+ }
+ }
+}
diff --git a/1.4/Source/MainTabWindows/OffsetMainButtonDefOf.cs b/1.4/Source/MainTabWindows/OffsetMainButtonDefOf.cs
new file mode 100644
index 0000000..e7ad9eb
--- /dev/null
+++ b/1.4/Source/MainTabWindows/OffsetMainButtonDefOf.cs
@@ -0,0 +1,22 @@
+using RimWorld;
+using Verse;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Rimworld_Animations {
+
+ [DefOf]
+ public static class OffsetMainButtonDefOf {
+
+ public static MainButtonDef OffsetManager;
+
+
+ static OffsetMainButtonDefOf() {
+ DefOfHelper.EnsureInitializedInCtor(typeof(OffsetMainButtonDefOf));
+ }
+
+ }
+}
diff --git a/1.4/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs b/1.4/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs
new file mode 100644
index 0000000..2694419
--- /dev/null
+++ b/1.4/Source/MainTabWindows/WorldComponent_UpdateMainTab.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using RimWorld.Planet;
+using Verse;
+
+namespace Rimworld_Animations {
+ public class WorldComponent_UpdateMainTab : WorldComponent {
+
+ public WorldComponent_UpdateMainTab(World world) : base(world) {
+
+ }
+
+ public override void FinalizeInit() {
+ base.FinalizeInit();
+ OffsetMainButtonDefOf.OffsetManager.buttonVisible = AnimationSettings.offsetTab;
+ }
+
+
+ }
+}
diff --git a/Milkable-Colonists-Animations/Source/Patches/Harmony_PatchAll.cs b/1.4/Source/Patches/Harmony_PatchAll.cs
similarity index 81%
rename from Milkable-Colonists-Animations/Source/Patches/Harmony_PatchAll.cs
rename to 1.4/Source/Patches/Harmony_PatchAll.cs
index a7e1fce..1c1d63f 100644
--- a/Milkable-Colonists-Animations/Source/Patches/Harmony_PatchAll.cs
+++ b/1.4/Source/Patches/Harmony_PatchAll.cs
@@ -7,14 +7,14 @@ using Verse;
using HarmonyLib;
using System.Reflection;
-namespace MC_Animations {
+namespace Rimworld_Animations {
[StaticConstructorOnStartup]
public static class Harmony_PatchAll {
static Harmony_PatchAll() {
- Harmony val = new Harmony("mcanim");
+ Harmony val = new Harmony("rjwanim");
val.PatchAll(Assembly.GetExecutingAssembly());
}
diff --git a/1.4/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs
new file mode 100644
index 0000000..8345ede
--- /dev/null
+++ b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs
@@ -0,0 +1,87 @@
+/*
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using rjw;
+using Verse;
+using RimWorld;
+using System.Reflection.Emit;
+using System.Reflection;
+using UnityEngine;
+
+namespace Rimworld_Animations {
+ [StaticConstructorOnStartup]
+ public static class HarmonyPatch_CSL {
+ static HarmonyPatch_CSL() {
+ try {
+ ((Action)(() => {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Children, school and learning")) {
+
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("Children.PawnRenderer_RenderPawnInternal_Patch"), "RenderPawnInternalScaled"),
+ prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_CSL), "Prefix_CSL")),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_CSL), "Transpiler_CSL")));
+ }
+ }))();
+ }
+ catch (TypeLoadException ex) {
+
+ }
+ }
+
+ public static void Prefix_CSL(PawnRenderer __instance, Pawn pawn, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, ref Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible) {
+
+ PawnGraphicSet graphics = __instance.graphics;
+ CompBodyAnimator bodyAnim = pawn.TryGetComp();
+
+ if (!graphics.AllResolved) {
+ graphics.ResolveAllGraphics();
+ }
+
+
+ if (bodyAnim != null && bodyAnim.isAnimating && !portrait) {
+ bodyAnim.tickGraphics(graphics);
+ pawn.TryGetComp().animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing);
+
+ }
+ }
+
+ public static IEnumerable Transpiler_CSL(IEnumerable instructions) {
+
+ MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater");
+ FieldInfo headGraphic = AccessTools.Field(typeof(PawnGraphicSet), "headGraphic");
+
+
+ List codes = instructions.ToList();
+ bool forHead = true;
+ for (int i = 0; i < codes.Count(); i++) {
+
+ //Instead of calling drawmeshnoworlater, add pawn to the stack and call my special static method
+ if (codes[i].OperandIs(drawMeshNowOrLater) && forHead) {
+
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Ldarg_2);
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn), typeof(float) }));
+
+ }
+ //checking for if(graphics.headGraphic != null)
+ else if (codes[i].opcode == OpCodes.Ldfld && codes[i].OperandIs(headGraphic)) {
+ forHead = true;
+ yield return codes[i];
+ }
+ //checking for if(renderbody)
+ else if (codes[i].opcode == OpCodes.Ldarg_3) {
+ forHead = false;
+ yield return codes[i];
+ }
+ else {
+ yield return codes[i];
+ }
+ }
+ }
+
+ }
+}*/
diff --git a/1.4/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs
new file mode 100644
index 0000000..3cb2a63
--- /dev/null
+++ b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs
@@ -0,0 +1,29 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace Rimworld_Animations {
+ class HarmonyPatch_DontShaveYourHead {
+
+ [StaticConstructorOnStartup]
+ public static class Patch_DontShaveYourHead {
+
+ static Patch_DontShaveYourHead() {
+ try {
+ ((Action)(() =>
+ {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Don't Shave Your Head 1.0")) {
+ (new Harmony("rjwanim")).Patch(AccessTools.Method(AccessTools.TypeByName("DontShaveYourHead.Harmony_PawnRenderer"), "DrawHairReroute"), //typeof(ShowHair.Patch_PawnRenderer_RenderPawnInternal), nameof(ShowHair.Patch_PawnRenderer_RenderPawnInternal.Postfix)),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(Patch_ShowHairWithHats), "Transpiler")));
+ }
+ }))();
+ }
+ catch (TypeLoadException ex) { }
+ }
+ }
+ }
+}
diff --git a/1.4/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs
new file mode 100644
index 0000000..59631b8
--- /dev/null
+++ b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs
@@ -0,0 +1,103 @@
+using HarmonyLib;
+using RimWorld;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+ [StaticConstructorOnStartup]
+ public static class Patch_FacialAnimation {
+
+ static Patch_FacialAnimation() {
+ try {
+ ((Action)(() => {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "[NL] Facial Animation - WIP")) {
+ (new Harmony("rjwanim")).Patch(AccessTools.Method(AccessTools.TypeByName("FacialAnimation.DrawFaceGraphicsComp"), "DrawGraphics"),
+ prefix: new HarmonyMethod(AccessTools.Method(typeof(Patch_FacialAnimation), "Prefix")));
+ }
+ }))();
+ }
+ catch (TypeLoadException) {
+
+ }
+ }
+
+ public static bool Prefix(Pawn ___pawn, ref Rot4 headFacing, ref Vector3 headOrigin, ref Quaternion quaternion, bool portrait) {
+
+ if (!portrait && CompBodyAnimator.IsAnimating(___pawn)) {
+
+ CompBodyAnimator bodyAnim = ___pawn.TryGetComp();
+ headFacing = bodyAnim.headFacing;
+ headOrigin = new Vector3(bodyAnim.getPawnHeadPosition().x, headOrigin.y, bodyAnim.getPawnHeadPosition().z);
+ quaternion = Quaternion.AngleAxis(bodyAnim.headAngle, Vector3.up);
+ }
+
+ return true;
+ }
+ /*
+ public static List rjwLovinDefNames = new List{
+ "Lovin",
+ "Quickie",
+ "GettingQuickie",
+ "JoinInBed",
+ "JoinInBedAnimation",
+ "GettinLovedAnimation",
+ "GettinLoved",
+ "GettinLicked",
+ "GettinSucked",
+ "GettinRaped",
+ "ViolateCorpse",
+ "RJW_Masturbate",
+ "GettinBred",
+ "Breed",
+ "RJW_Mate",
+ "Bestiality",
+ "BestialityForFemale",
+ "StruggleInBondageGear",
+ "WhoreIsServingVisitors",
+ "UseFM"
+ };
+
+ public static List rjwRapeDefNames = new List {
+ "RapeComfortPawn",
+ "RandomRape",
+ "RapeEnemy"
+ };
+
+ public static bool Prefix_IsSameA(JobDef job, string ___jobDef, ref bool __result) {
+
+ if(___jobDef != null && ___jobDef == "Lovin" && job?.defName != null && rjwLovinDefNames.Contains(job?.defName)) {
+ __result = true;
+ return false;
+ }
+ else if (___jobDef != null && ___jobDef == "Wait_Combat" && job?.defName != null && rjwRapeDefNames.Contains(job?.defName)) {
+ __result = true;
+ return false;
+ }
+
+
+ return true;
+ }
+
+ public static bool Prefix_IsSameB(string jobName, string ___jobDef, ref bool __result) {
+
+ if (___jobDef != null && ___jobDef == "Lovin" && jobName != null && rjwLovinDefNames.Contains(jobName)) {
+ __result = true;
+ return false;
+ }
+ if (___jobDef != null && ___jobDef == "Wait_Combat" && jobName != null && rjwRapeDefNames.Contains(jobName)) {
+ __result = true;
+ return false;
+ }
+
+ return true;
+ }
+ */
+ }
+}
\ No newline at end of file
diff --git a/1.4/Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs
new file mode 100644
index 0000000..1cd5707
--- /dev/null
+++ b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs
@@ -0,0 +1,77 @@
+/*using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using UnityEngine;
+using System.Reflection;
+using System.Reflection.Emit;
+
+namespace Rimworld_Animations {
+ public static class HarmonyPatch_HatsDisplaySelection {
+
+ public static void PatchHatsDisplaySelectionArgs() {
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHatCEWithHair"),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "ReplaceDrawMeshOrLaterWithAnimate")));
+
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHatWithHair"),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "ReplaceDrawMeshOrLaterWithAnimate")));
+
+ (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHeadApparelWithHair"),
+ prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "PrefixPatchForDrawHeadApparelWithHair")));
+
+
+ }
+
+ public static void PrefixPatchForDrawHeadApparelWithHair(PawnRenderer renderer, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, ref Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible)
+ {
+ PawnGraphicSet graphics = renderer.graphics;
+ Pawn pawn = graphics.pawn;
+ CompBodyAnimator bodyAnim = pawn.TryGetComp();
+
+ if (!graphics.AllResolved)
+ {
+ graphics.ResolveAllGraphics();
+ }
+
+
+ if (bodyAnim != null && bodyAnim.isAnimating && !portrait && pawn.Map == Find.CurrentMap)
+ {
+ bodyAnim.tickGraphics(graphics);
+ bodyAnim.animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing);
+
+ }
+ }
+
+
+ public static IEnumerable ReplaceDrawMeshOrLaterWithAnimate(IEnumerable instructions) {
+
+ MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater");
+ List codes = instructions.ToList();
+ for (int i = 0; i < instructions.Count(); i++) {
+
+
+ if (codes[i].
+
+
+(drawMeshNowOrLater)) {
+
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(AccessTools.TypeByName("HatDisplaySelection.Patch"), "pawn"));
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn) }));
+
+ }
+ else {
+ yield return codes[i];
+ }
+
+ }
+
+ }
+
+ }
+}
+*/
\ No newline at end of file
diff --git a/1.4/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs
new file mode 100644
index 0000000..a42ab7d
--- /dev/null
+++ b/1.4/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs
@@ -0,0 +1,51 @@
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+ [StaticConstructorOnStartup]
+ public static class Patch_ShowHairWithHats {
+
+ static Patch_ShowHairWithHats() {
+ try {
+ ((Action)(() =>
+ {
+ if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "[KV] Show Hair With Hats or Hide All Hats - 1.1")) {
+ (new Harmony("rjwanim")).Patch(AccessTools.Method(AccessTools.TypeByName("ShowHair.Patch_PawnRenderer_RenderPawnInternal"), "Postfix"), //typeof(ShowHair.Patch_PawnRenderer_RenderPawnInternal), nameof(ShowHair.Patch_PawnRenderer_RenderPawnInternal.Postfix)),
+ transpiler: new HarmonyMethod(AccessTools.Method(typeof(Patch_ShowHairWithHats), "Transpiler")));
+ }
+ }))();
+ }
+ catch (TypeLoadException ex) { }
+ }
+
+
+ public static IEnumerable Transpiler(IEnumerable instructions) {
+
+ MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater");
+
+ List codes = instructions.ToList();
+ for (int i = 0; i < codes.Count(); i++) {
+
+ //Instead of calling drawmeshnoworlater, add pawn to the stack and call my special static method
+ if (codes[i].OperandIs(drawMeshNowOrLater)) {
+
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn) }));
+
+ }
+ else {
+ yield return codes[i];
+ }
+ }
+ }
+ }
+}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_PlaySexSounds.cs b/1.4/Source/Patches/RJWPatches/HarmonyPatch_PlaySexSounds.cs
similarity index 65%
rename from 1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_PlaySexSounds.cs
rename to 1.4/Source/Patches/RJWPatches/HarmonyPatch_PlaySexSounds.cs
index dfbefe6..25d93b9 100644
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_PlaySexSounds.cs
+++ b/1.4/Source/Patches/RJWPatches/HarmonyPatch_PlaySexSounds.cs
@@ -1,6 +1,5 @@
using HarmonyLib;
using rjw;
-using Verse;
namespace Rimworld_Animations
{
@@ -9,14 +8,12 @@ namespace Rimworld_Animations
{
public static bool Prefix(JobDriver_Sex __instance)
{
- if (__instance.pawn?.TryGetComp() != null
- && __instance.pawn.TryGetComp().IsAnimating)
+ if (CompBodyAnimator.IsAnimating(__instance.pawn))
{
return false;
}
return true;
-
}
}
}
diff --git a/1.4/Source/Patches/RJWPatches/HarmonyPatch_SexTick.cs b/1.4/Source/Patches/RJWPatches/HarmonyPatch_SexTick.cs
new file mode 100644
index 0000000..9ba03b2
--- /dev/null
+++ b/1.4/Source/Patches/RJWPatches/HarmonyPatch_SexTick.cs
@@ -0,0 +1,61 @@
+using HarmonyLib;
+using RimWorld;
+using rjw;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using Verse.AI;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(JobDriver_Sex), "SexTick")]
+ public class HarmonyPatch_SexTick
+ {
+ public static bool Prefix(JobDriver_Sex __instance, Pawn pawn, Thing target)
+ {
+
+ if ((target is Pawn) &&
+ !(
+ (target as Pawn)?.jobs?.curDriver is JobDriver_SexBaseReciever
+ &&
+ ((target as Pawn).jobs.curDriver as JobDriver_SexBaseReciever).parteners.Any()
+ &&
+ ((target as Pawn).jobs.curDriver as JobDriver_SexBaseReciever).parteners[0] == pawn))
+ {
+
+ __instance.ticks_left--;
+ __instance.sex_ticks--;
+ __instance.Orgasm();
+
+
+ if (pawn.IsHashIntervalTick(__instance.ticks_between_thrusts))
+ {
+ __instance.ChangePsyfocus(pawn, target);
+ __instance.Animate(pawn, target);
+ __instance.PlaySexSound();
+ if (!__instance.Sexprops.isRape)
+ {
+ pawn.GainComfortFromCellIfPossible(false);
+ if (target is Pawn)
+ {
+ (target as Pawn).GainComfortFromCellIfPossible(false);
+ }
+ }
+ if(!__instance.isEndytophile)
+ {
+ SexUtility.DrawNude(pawn, false);
+ }
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ }
+
+}
diff --git a/1.4/Source/Patches/RJWPatches/HarmonyPatch_WorkGiverSex.cs b/1.4/Source/Patches/RJWPatches/HarmonyPatch_WorkGiverSex.cs
new file mode 100644
index 0000000..af4a755
--- /dev/null
+++ b/1.4/Source/Patches/RJWPatches/HarmonyPatch_WorkGiverSex.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using rjw;
+using HarmonyLib;
+using Verse;
+using RimWorld;
+using Verse.AI;
+
+namespace Rimworld_Animations {
+ /*
+ [HarmonyPatch(typeof(WorkGiver_Sex), "JobOnThing")]
+ public static class HarmonyPatch_WorkGiverSex {
+
+ public static bool Prefix(ref Job __result, ref Thing t) {
+
+ Building_Bed bed = RestUtility.CurrentBed(t as Pawn);
+ if (bed == null) {
+ return false;
+ }
+ __result = JobMaker.MakeJob(DefDatabase.GetNamed("JoinInBedAnimation", true), t as Pawn, bed);
+ return false;
+
+ }
+
+ }
+
+ */
+}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs b/1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs
similarity index 87%
rename from 1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs
rename to 1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs
index 0f63b7d..bbbb0b8 100644
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs
+++ b/1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs
@@ -56,6 +56,14 @@ namespace Rimworld_Animations
toils[2] = startPartnerSex;
+ toils[3].AddPreTickAction(() =>
+ {
+ if (!CompBodyAnimator.IsAnimating(__instance.Partner))
+ {
+ __instance.pawn.TryGetComp().isAnimating = false;
+ }
+ });
+
__result = toils.AsEnumerable();
}
}
diff --git a/1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs
new file mode 100644
index 0000000..530600b
--- /dev/null
+++ b/1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs
@@ -0,0 +1,192 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using rjw;
+
+namespace Rimworld_Animations {
+
+ [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")]
+ static class HarmonyPatch_JobDriver_SexBaseInitiator_Start {
+ public static void Postfix(ref JobDriver_SexBaseInitiator __instance) {
+ /*
+ These particular jobs need special code
+ don't play anim for now
+ */
+ if(__instance is JobDriver_Masturbate || __instance is JobDriver_ViolateCorpse) {
+ return;
+ }
+
+ if(!AnimationSettings.PlayAnimForNonsexualActs && NonSexualAct(__instance))
+ {
+ return;
+ }
+
+ Pawn pawn = __instance.pawn;
+
+ Building_Bed bed = __instance.Bed;
+
+ if ((__instance.Target as Pawn)?.jobs?.curDriver is JobDriver_SexBaseReciever) {
+
+ Pawn Target = __instance.Target as Pawn;
+
+ bool quickie = (__instance is JobDriver_SexQuick) && AnimationSettings.fastAnimForQuickie;
+
+ int preAnimDuration = __instance.duration;
+ int AnimationTimeTicks = 0;
+
+
+ if (bed != null) {
+ RerollAnimations(Target, out AnimationTimeTicks, bed as Thing, __instance.Sexprops.sexType, quickie, sexProps: __instance.Sexprops);
+ }
+ else {
+ RerollAnimations(Target, out AnimationTimeTicks, sexType: __instance.Sexprops.sexType, fastAnimForQuickie: quickie, sexProps: __instance.Sexprops);
+ }
+
+
+ //Modify Orgasm ticks to only orgasm as many times as RJW stock orgasm allows
+ if(AnimationTimeTicks != 0)
+ {
+ __instance.orgasmstick = preAnimDuration * __instance.orgasmstick / AnimationTimeTicks;
+ }
+
+
+ }
+ }
+
+ public static void RerollAnimations(Pawn pawn, out int AnimationTimeTicks, Thing bed = null, xxx.rjwSextype sexType = xxx.rjwSextype.None, bool fastAnimForQuickie = false, rjw.SexProps sexProps = null) {
+
+ AnimationTimeTicks = 0;
+
+ if(pawn == null || !(pawn.jobs?.curDriver is JobDriver_SexBaseReciever)) {
+ Log.Error("Error: Tried to reroll animations when pawn isn't sexing");
+ return;
+ }
+
+ List pawnsToAnimate = (pawn.jobs.curDriver as JobDriver_SexBaseReciever).parteners.ToList();
+
+ if (!pawnsToAnimate.Contains(pawn)) {
+ pawnsToAnimate = pawnsToAnimate.Append(pawn).ToList();
+ }
+
+ for(int i = 0; i < pawnsToAnimate.Count; i++) {
+
+ if(pawnsToAnimate[i].TryGetComp() == null) {
+ Log.Error("Error: " + pawnsToAnimate[i].Name + " of race " + pawnsToAnimate[i].def.defName + " does not have CompBodyAnimator attached!");
+ break;
+ }
+ }
+
+ AnimationDef anim = AnimationUtility.tryFindAnimation(ref pawnsToAnimate, sexType, sexProps);
+
+ if (anim != null) {
+
+ bool mirror = GenTicks.TicksGame % 2 == 0;
+
+ IntVec3 pos = pawn.Position;
+
+ for (int i = 0; i < anim.actors.Count; i++)
+ {
+ pawnsToAnimate[i].TryGetComp().isAnimating = false;
+ }
+
+ for (int i = 0; i < pawnsToAnimate.Count; i++) {
+
+ if (bed != null)
+ pawnsToAnimate[i].TryGetComp().setAnchor(bed);
+ else {
+
+ pawnsToAnimate[i].TryGetComp().setAnchor(pos);
+ }
+
+ bool shiver = pawnsToAnimate[i].jobs.curDriver is JobDriver_SexBaseRecieverRaped;
+ pawnsToAnimate[i].TryGetComp().StartAnimation(anim, pawnsToAnimate, i, mirror, shiver, fastAnimForQuickie);
+
+ int animTicks = anim.animationTimeTicks - (fastAnimForQuickie ? anim.animationStages[0].playTimeTicks : 0);
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).ticks_left = animTicks;
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).sex_ticks = animTicks;
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).orgasmStartTick = animTicks;
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).duration = animTicks;
+
+
+ AnimationTimeTicks = animTicks;
+
+ if(!AnimationSettings.hearts) {
+ (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).ticks_between_hearts = Int32.MaxValue;
+ }
+
+ }
+ }
+ else {
+ Log.Message("No animation found");
+
+ /*
+
+ //if pawn isn't already animating,
+ if (!pawn.TryGetComp().isAnimating) {
+ (pawn.jobs.curDriver as JobDriver_SexBaseReciever).increase_time(duration);
+ //they'll just do the thrusting anim
+ }
+
+ */
+ }
+ }
+
+
+ static IEnumerable NonSexActRulePackDefNames = new String[]
+ {
+ "MutualHandholdingRP",
+ "MutualMakeoutRP",
+ };
+
+ public static bool NonSexualAct(JobDriver_SexBaseInitiator sexBaseInitiator)
+ {
+ if(NonSexActRulePackDefNames.Contains(sexBaseInitiator.Sexprops.rulePack))
+ {
+ return true;
+ }
+ return false;
+ }
+ }
+
+ [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
+ static class HarmonyPatch_JobDriver_SexBaseInitiator_End {
+
+ public static void Postfix(ref JobDriver_SexBaseInitiator __instance) {
+
+ Pawn reciever = __instance.Target as Pawn;
+
+ if (reciever?.jobs?.curDriver is JobDriver_SexBaseReciever recieverJobDriver) {
+ if (CompBodyAnimator.IsAnimating(__instance.pawn)) {
+
+ List parteners = recieverJobDriver.parteners;
+
+ for (int i = 0; i < parteners.Count; i++) {
+
+ //prevents pawns who started a new anim from stopping their new anim
+ if (!((parteners[i].jobs.curDriver as JobDriver_SexBaseInitiator) != null && (parteners[i].jobs.curDriver as JobDriver_SexBaseInitiator).Target != __instance.pawn))
+ parteners[i].TryGetComp().isAnimating = false;
+
+ }
+
+ __instance.Target.TryGetComp().isAnimating = false;
+
+ if (xxx.is_human(reciever)) {
+ reciever?.Drawer.renderer.graphics.ResolveApparelGraphics();
+ PortraitsCache.SetDirty(reciever);
+ }
+ }
+
+ recieverJobDriver?.parteners.Remove(__instance.pawn);
+
+ }
+
+ if (xxx.is_human(__instance.pawn)) {
+ __instance.pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
+ PortraitsCache.SetDirty(__instance.pawn);
+ }
+ }
+ }
+}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs b/1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs
similarity index 64%
rename from 1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs
rename to 1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs
index ca4df23..dfa116e 100644
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs
+++ b/1.4/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs
@@ -1,35 +1,28 @@
-using HarmonyLib;
-using RimWorld;
-using rjw;
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
-using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using rjw;
+using System.Reflection.Emit;
using Verse.AI;
namespace Rimworld_Animations
{
- [HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")]
- public class HarmonyPatch_JobDriver_SexBaseReceiverLoved
- {
- public static void Postfix(JobDriver_SexBaseRecieverLoved __instance, ref Toil __result)
- {
- //added for sudden end of jobdriver
- __result.AddFinishAction(delegate {
- AnimationUtility.StopGroupAnimation(__instance.pawn);
- });
- }
+ [HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")]
+ public static class HarmonyPatch_JobDriver_SexBaseReceiverLoved
+ {
public static IEnumerable Transpiler(IEnumerable codeInstructions)
{
var ins = codeInstructions.ToList();
- for (int i = 0; i < ins.Count; i++)
+ for(int i = 0; i < ins.Count; i++)
{
- if (i < ins.Count && ins[i].opcode == OpCodes.Call && ins[i].OperandIs(AccessTools.DeclaredMethod(typeof(Toils_LayDown), "LayDown")))
- {
+ if(i < ins.Count && ins[i].opcode == OpCodes.Call && ins[i].OperandIs(AccessTools.DeclaredMethod(typeof(Toils_LayDown), "LayDown"))) {
ins[i].operand = AccessTools.DeclaredMethod(typeof(HarmonyPatch_JobDriver_SexBaseReceiverLoved), "DoNotLayDown");
yield return ins[i];
@@ -48,5 +41,6 @@ namespace Rimworld_Animations
{
return new Toil();
}
+
}
}
diff --git a/1.4/Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs
new file mode 100644
index 0000000..401f1b5
--- /dev/null
+++ b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs
@@ -0,0 +1,22 @@
+/*using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+using UnityEngine;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(PawnRenderer), "DrawHeadHair")]
+ public static class HarmonyPatch_HeadHair
+ {
+ public static void Prefix(ref Vector3 headOffset, ref float angle)
+ {
+
+ }
+
+ }
+}*/
diff --git a/1.4/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs
new file mode 100644
index 0000000..518f24c
--- /dev/null
+++ b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+using UnityEngine;
+using System.Reflection.Emit;
+
+namespace Rimworld_Animations {
+
+ [HarmonyPatch(typeof(PawnRenderer), "RenderPawnInternal", new Type[]
+ {
+ typeof(Vector3),
+ typeof(float),
+ typeof(bool),
+ typeof(Rot4),
+ typeof(RotDrawMode),
+ typeof(PawnRenderFlags)
+ }
+ )]
+ public static class HarmonyPatch_PawnRenderer
+ {
+
+ [HarmonyBefore(new string[] { "showhair.kv.rw", "erdelf.HumanoidAlienRaces", "Nals.FacialAnimation" })]
+ public static void Prefix(PawnRenderer __instance, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, RotDrawMode bodyDrawType, PawnRenderFlags flags)
+ {
+
+ if (flags.FlagSet(PawnRenderFlags.Portrait)) return;
+
+ PawnGraphicSet graphics = __instance.graphics;
+ Pawn pawn = graphics.pawn;
+
+ if (CompBodyAnimator.IsAnimating(pawn) && pawn.Map == Find.CurrentMap)
+ {
+ pawn.TryGetComp().animatePawnBody(ref rootLoc, ref angle, ref bodyFacing);
+
+ }
+
+ }
+
+ public static IEnumerable Transpiler(IEnumerable instructions)
+ {
+ List ins = instructions.ToList();
+
+ for(int i = 0; i < instructions.Count(); i++)
+ {
+
+ if (i - 3 >= 0 && ins[i - 3].opcode == OpCodes.Call && ins[i - 3].operand != null && ins[i - 3].OperandIs(AccessTools.DeclaredMethod(typeof(PawnRenderer), "BaseHeadOffsetAt")))
+ {
+
+ yield return new CodeInstruction(OpCodes.Ldloca, (object)0);
+ yield return new CodeInstruction(OpCodes.Ldloca, (object)9);
+ yield return new CodeInstruction(OpCodes.Ldloca, (object)8);
+ yield return new CodeInstruction(OpCodes.Ldarga, (object)2);
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Ldarg, (object)6);
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), "AdjustHead"));
+ yield return ins[i];
+ //headFacing equals true
+ }
+ // Fixes the offsets for eye implants and wounds on the head during animations
+ else if (ins[i].opcode == OpCodes.Callvirt && ins[i].operand != null && ins[i].OperandIs(AccessTools.DeclaredMethod(typeof(PawnOverlayDrawer), "RenderPawnOverlay")))
+ {
+ // Pass some additional info to a new overload of RenderOverBody
+ yield return new CodeInstruction(OpCodes.Ldarg_0);
+ yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn"));
+ yield return new CodeInstruction(OpCodes.Ldarg_S, (object)6); // renderer flags
+ yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(PawnWoundDrawerExtension), "RenderPawnOverlay"));
+ }
+ else
+ {
+ yield return ins[i];
+ }
+ }
+ }
+ }
+}
diff --git a/1.4/Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs
new file mode 100644
index 0000000..cf2a7d9
--- /dev/null
+++ b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs
@@ -0,0 +1,23 @@
+using HarmonyLib;
+using Verse;
+
+namespace Rimworld_Animations {
+ [HarmonyPatch(typeof(Thing), nameof(Thing.Rotation), MethodType.Getter)]
+ public static class HarmonyPatch_PawnRotation {
+
+ public static bool Prefix(Thing __instance, ref Rot4 __result) {
+
+ if (!(__instance is Pawn pawn)) {
+ return true;
+ }
+
+ if (!CompBodyAnimator.IsAnimating(pawn)) {
+ return true;
+ }
+
+ __result = pawn.TryGetComp().bodyFacing;
+
+ return false;
+ }
+ }
+}
diff --git a/1.4/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs
new file mode 100644
index 0000000..fdd3e07
--- /dev/null
+++ b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs
@@ -0,0 +1,20 @@
+using HarmonyLib;
+using UnityEngine;
+using Verse;
+
+namespace Rimworld_Animations {
+
+ [HarmonyPatch(typeof(Pawn_DrawTracker), "DrawPos", MethodType.Getter)]
+ public static class HarmonyPatch_Pawn_DrawTracker {
+ public static bool Prefix(ref Pawn ___pawn, ref Vector3 __result) {
+
+ if (CompBodyAnimator.IsAnimating(___pawn)) {
+ CompBodyAnimator bodyAnim = ___pawn.TryGetComp();
+ __result = bodyAnim.anchor + bodyAnim.deltaPos;
+
+ return false;
+ }
+ return true;
+ }
+ }
+}
diff --git a/1.4/Source/Patches/RimworldPatches/HarmonyPatch_ResolveApparelGraphics.cs b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_ResolveApparelGraphics.cs
new file mode 100644
index 0000000..379f85e
--- /dev/null
+++ b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_ResolveApparelGraphics.cs
@@ -0,0 +1,18 @@
+using HarmonyLib;
+using Verse;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(PawnGraphicSet), "ResolveApparelGraphics")]
+ public static class HarmonyPatch_ResolveApparelGraphics
+ {
+ public static bool Prefix(ref Pawn ___pawn)
+ {
+ if (CompBodyAnimator.IsAnimating(___pawn))
+ {
+ return false;
+ }
+ return true;
+ }
+ }
+}
diff --git a/1.4/Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs
new file mode 100644
index 0000000..f495bff
--- /dev/null
+++ b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs
@@ -0,0 +1,32 @@
+using HarmonyLib;
+using RimWorld;
+using System.Collections.Generic;
+using Verse;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(PawnRenderer), "RenderPawnAt")]
+ public static class PawnRenderer_RenderPawnAt_Patch
+ {
+ static bool ClearCache(Pawn pawn)
+ {
+ return pawn.IsInvisible() || CompBodyAnimator.IsAnimating(pawn);
+ }
+
+ public static IEnumerable Transpiler(IEnumerable instructions)
+ {
+ foreach (CodeInstruction i in instructions)
+ {
+ if (i.Calls(AccessTools.Method(typeof(PawnUtility), nameof(PawnUtility.IsInvisible))))
+ {
+ yield return CodeInstruction.Call(typeof(PawnRenderer_RenderPawnAt_Patch), nameof(ClearCache));
+ }
+ else
+ {
+ yield return i;
+ }
+ }
+ }
+ }
+
+}
diff --git a/1.4/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs
new file mode 100644
index 0000000..9477abf
--- /dev/null
+++ b/1.4/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HarmonyLib;
+using RimWorld;
+using Verse;
+
+namespace Rimworld_Animations
+{
+ [HarmonyPatch(typeof(Thing), "DrawAt")]
+ public static class HarmonyPatch_Thing
+ {
+
+ public static bool Prefix(Thing __instance)
+ {
+ CompThingAnimator thingAnimator = __instance.TryGetComp();
+ if (thingAnimator != null && thingAnimator.isAnimating)
+ {
+ thingAnimator.AnimateThing(__instance);
+ return false;
+
+ }
+
+ return true;
+
+ }
+
+ }
+}
diff --git a/1.4/Source/Settings/AnimationSettings.cs b/1.4/Source/Settings/AnimationSettings.cs
new file mode 100644
index 0000000..0a96621
--- /dev/null
+++ b/1.4/Source/Settings/AnimationSettings.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using UnityEngine;
+using RimWorld;
+
+namespace Rimworld_Animations {
+
+ public class AnimationSettings : ModSettings {
+
+ public static bool orgasmQuiver, rapeShiver, soundOverride = true, hearts = true, controlGenitalRotation = false, applySemenOnAnimationOrgasm = false, fastAnimForQuickie = false,
+ PlayAnimForNonsexualActs = true;
+ public static bool offsetTab = false, debugMode = false;
+ public static float shiverIntensity = 2f;
+
+ public static Dictionary offsets = new Dictionary();
+ public static Dictionary rotation = new Dictionary();
+
+ public override void ExposeData() {
+
+ base.ExposeData();
+
+ Scribe_Values.Look(ref debugMode, "RJWAnimations-AnimsDebugMode", false);
+ Scribe_Values.Look(ref offsetTab, "RJWAnimations-EnableOffsetTab", false);
+ Scribe_Values.Look(ref controlGenitalRotation, "RJWAnimations-controlGenitalRotation", false);
+ Scribe_Values.Look(ref orgasmQuiver, "RJWAnimations-orgasmQuiver");
+ Scribe_Values.Look(ref fastAnimForQuickie, "RJWAnimations-fastAnimForQuickie");
+ Scribe_Values.Look(ref rapeShiver, "RJWAnimations-rapeShiver");
+ Scribe_Values.Look(ref hearts, "RJWAnimation-sheartsOnLovin");
+ Scribe_Values.Look(ref PlayAnimForNonsexualActs, "RJWAnims-PlayAnimForNonsexualActs");
+ Scribe_Values.Look(ref applySemenOnAnimationOrgasm, "RJWAnimations-applySemenOnOrgasm", false);
+ Scribe_Values.Look(ref soundOverride, "RJWAnimations-rjwAnimSoundOverride", true);
+ Scribe_Values.Look(ref shiverIntensity, "RJWAnimations-shiverIntensity", 2f);
+ //todo: save offsetsByDefName
+
+ Scribe_Collections.Look(ref offsets, "RJWAnimations-animationOffsets");
+ Scribe_Collections.Look(ref rotation, "RJWAnimations-rotationOffsets");
+
+
+
+ //needs to be rewritten
+ //probably somewhere in options?
+
+ }
+
+ }
+
+ public class RJW_Animations : Mod {
+
+ public RJW_Animations(ModContentPack content) : base(content) {
+ GetSettings();
+
+ }
+
+ public override void DoSettingsWindowContents(Rect inRect) {
+
+ Listing_Standard listingStandard = new Listing_Standard();
+ listingStandard.Begin(inRect);
+
+ listingStandard.CheckboxLabeled("Enable Sound Override", ref AnimationSettings.soundOverride);
+ listingStandard.CheckboxLabeled("Control Genital Rotation", ref AnimationSettings.controlGenitalRotation);
+ listingStandard.CheckboxLabeled("Play Fast Animation for Quickie", ref AnimationSettings.fastAnimForQuickie);
+ listingStandard.CheckboxLabeled("Apply Semen on Animation Orgasm", ref AnimationSettings.applySemenOnAnimationOrgasm);
+
+ if(AnimationSettings.applySemenOnAnimationOrgasm) {
+ listingStandard.Label("Recommended--turn down \"Cum on body percent\" in RJW settings to about 33%");
+ }
+
+ listingStandard.CheckboxLabeled("Enable Orgasm Quiver", ref AnimationSettings.orgasmQuiver);
+ listingStandard.CheckboxLabeled("Enable Rape Shiver", ref AnimationSettings.rapeShiver);
+ listingStandard.CheckboxLabeled("Enable hearts during lovin'", ref AnimationSettings.hearts);
+ listingStandard.CheckboxLabeled("Play animation for nonsexual acts (handholding, makeout)", ref AnimationSettings.PlayAnimForNonsexualActs);
+ listingStandard.CheckboxLabeled("Enable Animation Manager Tab", ref AnimationSettings.offsetTab);
+
+ listingStandard.Label("Shiver/Quiver Intensity (default 2): " + AnimationSettings.shiverIntensity);
+ AnimationSettings.shiverIntensity = listingStandard.Slider(AnimationSettings.shiverIntensity, 0.0f, 12f);
+
+ listingStandard.CheckboxLabeled("Debug Mode", ref AnimationSettings.debugMode);
+
+
+ listingStandard.End();
+ base.DoSettingsWindowContents(inRect);
+ }
+
+ public override void WriteSettings() {
+ base.WriteSettings();
+ OffsetMainButtonDefOf.OffsetManager.buttonVisible = AnimationSettings.offsetTab;
+
+ }
+
+ public override string SettingsCategory() {
+ return "RJW Animation Settings";
+ }
+ }
+}
diff --git a/1.4/Source/Utilities/AnimationUtility.cs b/1.4/Source/Utilities/AnimationUtility.cs
new file mode 100644
index 0000000..fa60198
--- /dev/null
+++ b/1.4/Source/Utilities/AnimationUtility.cs
@@ -0,0 +1,325 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using rjw.Modules.Interactions.Helpers;
+using rjw.Modules.Interactions.Objects;
+using UnityEngine;
+using Verse;
+using Verse.AI;
+using rjw.Modules.Interactions.Enums;
+
+namespace Rimworld_Animations {
+ public static class AnimationUtility {
+ /*
+ Note: always make the list in this order:
+ Female pawns, animal female pawns, male pawns, animal male pawns
+ */
+ public static AnimationDef tryFindAnimation(ref List participants, rjw.xxx.rjwSextype sexType = 0, rjw.SexProps sexProps = null) {
+
+
+ InteractionWithExtension interaction = InteractionHelper.GetWithExtension(sexProps.dictionaryKey);
+
+ participants =
+ participants.OrderBy(p =>
+ p.jobs.curDriver is rjw.JobDriver_Sex
+ && !(p.jobs.curDriver as rjw.JobDriver_Sex).Sexprops.isRevese /*Gargulefix!!!*/
+ && !(p.jobs.curDriver as rjw.JobDriver_Sex).Sexprops.isReceiver)
+ .OrderBy(p => rjw.xxx.can_fuck(p))
+ .ToList();
+
+
+ List localParticipants = new List(participants);
+
+ IEnumerable options = DefDatabase.AllDefs.Where((AnimationDef x) => {
+
+
+ if (x.actors.Count != localParticipants.Count) {
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- doesn't match count");
+ return false;
+ }
+ for (int i = 0; i < x.actors.Count; i++) {
+
+ if (rjw.RJWPreferenceSettings.Malesex == rjw.RJWPreferenceSettings.AllowedSex.Nohomo) {
+ if (rjw.xxx.is_male(localParticipants[i]) && x.actors[i].isFucked) {
+
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " is fucked, shouldn't be due to homo rules");
+
+ return false;
+ }
+ }
+ if (x.actors[i].requiredGender != null && !x.actors[i].requiredGender.Contains(localParticipants[i].gender.ToStringSafe()))
+ {
+ if (AnimationSettings.debugMode)
+ {
+ Log.Message(string.Concat(new string[]
+ {
+ x.defName.ToStringSafe(),
+ " not selected -- ",
+ localParticipants[i].def.defName.ToStringSafe(),
+ " ",
+ localParticipants[i].Name.ToStringSafe(),
+ " does not match required gender"
+ }));
+ }
+ return false;
+ }
+ if ((x.actors[i].blacklistedRaces != null) && x.actors[i].blacklistedRaces.Contains(localParticipants[i].def.defName)) {
+ if(AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is blacklisted");
+ return false;
+ }
+
+ if(x.actors[i].defNames.Contains("Human")) {
+ if (!rjw.xxx.is_human(localParticipants[i])) {
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is not human");
+
+ return false;
+ }
+
+ }
+ else if (!x.actors[i].bodyDefTypes.Contains(localParticipants[i].RaceProps.body)) {
+
+ if (!x.actors[i].defNames.Contains(localParticipants[i].def.defName)) {
+
+ if (AnimationSettings.debugMode)
+ {
+ string animInfo = x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is not ";
+ foreach(String defname in x.actors[i].defNames) {
+ animInfo += defname + ", ";
+ }
+ if (AnimationSettings.debugMode)
+ Log.Message(animInfo);
+ }
+
+ return false;
+ }
+ }
+ //genitals checking
+
+ if(!GenitalCheckForPawn(x.actors[i].requiredGenitals, localParticipants[i], out string failReason)) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Didn't select " + x.defName + ", " + localParticipants[i].Name + " " + failReason);
+ return false;
+ }
+
+ //TESTING ANIMATIONS ONLY REMEMBER TO COMMENT OUT BEFORE PUSH
+ /*
+ if (x.defName != "Cunnilingus")
+ return false;
+ */
+
+
+ if (x.actors[i].isFucking && !rjw.xxx.can_fuck(localParticipants[i])) {
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't fuck");
+ return false;
+ }
+
+ if (x.actors[i].isFucked && !rjw.xxx.can_be_fucked(localParticipants[i])) {
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't be fucked");
+ return false;
+ }
+ }
+
+ if (AnimationSettings.debugMode)
+ Log.Message(x.defName.ToStringSafe() + " selected");
+
+ return true;
+ });
+
+ List optionsWithInteractionType = options.ToList().FindAll(x => x.interactionDefTypes != null && x.interactionDefTypes.Contains(sexProps.sexType.ToStringSafe()));
+ if (optionsWithInteractionType.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Selecting animation for interaction type " + sexProps.sexType.ToStringSafe() + "...");
+ return optionsWithInteractionType.RandomElement();
+ }
+ List optionsWithSexType = options.ToList().FindAll(x => x.sexTypes != null && x.sexTypes.Contains(sexType));
+ if (optionsWithSexType.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Selecting animation for rjwSexType " + sexType.ToStringSafe() + "...");
+ return optionsWithSexType.RandomElement();
+ }
+
+ /*
+ if(optionsWithInitiator.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Selecting animation for initiators...");
+ }
+ */
+
+ if (options != null && options.Any()) {
+ if (AnimationSettings.debugMode)
+ Log.Message("Randomly selecting animation...");
+ return options.RandomElement();
+ }
+ else
+ return null;
+ }
+
+ public static void RenderPawnHeadMeshInAnimation1(Mesh mesh, Vector3 loc, Quaternion quaternion, Material material, bool drawNow, Pawn pawn) {
+
+ if (pawn == null || pawn.Map != Find.CurrentMap) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, drawNow);
+ return;
+ }
+
+ if (!CompBodyAnimator.IsAnimating(pawn)) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, drawNow);
+ } else {
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+ Vector3 pawnHeadPosition = pawnAnimator.getPawnHeadPosition();
+ pawnHeadPosition.y = loc.y;
+ GenDraw.DrawMeshNowOrLater(MeshPool.humanlikeHeadSet.MeshAt(pawnAnimator.headFacing), pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, true);
+ }
+ }
+
+ public static void AdjustHead(ref Quaternion quat, ref Rot4 bodyFacing, ref Vector3 pos, ref float angle, Pawn pawn, PawnRenderFlags flags)
+ {
+ if (flags.FlagSet(PawnRenderFlags.Portrait)) return;
+
+ if (CompBodyAnimator.IsAnimating(pawn))
+ {
+ CompBodyAnimator anim = pawn.TryGetComp();
+ bodyFacing = anim.headFacing;
+ angle = anim.headAngle;
+ quat = Quaternion.AngleAxis(anim.headAngle, Vector3.up);
+ pos = anim.getPawnHeadOffset();
+ }
+ }
+
+ public static void RenderPawnHeadMeshInAnimation(Mesh mesh, Vector3 loc, Quaternion quaternion, Material material, bool portrait, Pawn pawn, float bodySizeFactor = 1) {
+
+ if (pawn == null) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait);
+ return;
+ }
+
+
+ if (!CompBodyAnimator.IsAnimating(pawn) || portrait) {
+ GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait);
+ }
+ else {
+ CompBodyAnimator pawnAnimator = pawn.TryGetComp();
+ Vector3 pawnHeadPosition = pawnAnimator.getPawnHeadPosition();
+ pawnHeadPosition.x *= bodySizeFactor;
+ pawnHeadPosition.x *= bodySizeFactor;
+ pawnHeadPosition.y = loc.y;
+ GenDraw.DrawMeshNowOrLater(mesh, pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, portrait);
+ }
+ }
+
+ public static bool GenitalCheckForPawn(List requiredGenitals, Pawn pawn, out string failReason) {
+
+ failReason = null;
+ if (requiredGenitals != null) {
+ if (requiredGenitals.Contains("Vagina")) {
+
+ if (!rjw.Genital_Helper.has_vagina(pawn)) {
+ failReason = "missing vagina";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Penis")) {
+
+ if (!(rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn) || rjw.Genital_Helper.has_ovipositorM(pawn) || rjw.Genital_Helper.has_ovipositorF(pawn))) {
+ failReason = "missing penis";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Mouth")) {
+
+ if (!rjw.Genital_Helper.has_mouth(pawn)) {
+ failReason = "missing mouth";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Anus")) {
+
+ if (!rjw.Genital_Helper.has_anus(pawn)) {
+ failReason = "missing anus";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("Breasts")) {
+ if (!rjw.Genital_Helper.can_do_breastjob(pawn)) {
+ failReason = "missing breasts";
+ return false;
+ }
+ }
+
+ if (requiredGenitals.Contains("NoVagina")) {
+
+ if (rjw.Genital_Helper.has_vagina(pawn)) {
+ failReason = "has vagina";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoPenis")) {
+
+ if ((rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn))) {
+ failReason = "has penis";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoMouth")) {
+
+ if (rjw.Genital_Helper.has_mouth(pawn)) {
+ failReason = "has mouth";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoAnus")) {
+
+ if (rjw.Genital_Helper.has_anus(pawn)) {
+ failReason = "has anus";
+ return false;
+ }
+
+ }
+
+ if (requiredGenitals.Contains("NoBreasts")) {
+ if (rjw.Genital_Helper.can_do_breastjob(pawn)) {
+ failReason = "has breasts";
+ return false;
+ }
+ }
+ }
+
+ return true;
+
+ }
+
+ public static Rot4 PawnHeadRotInAnimation(Pawn pawn, Rot4 regularPos)
+ {
+ Debug.Log("Test");
+
+ if(pawn?.TryGetComp() != null && pawn.TryGetComp().isAnimating)
+ {
+ return pawn.TryGetComp().headFacing;
+ }
+
+ return regularPos;
+ }
+ }
+}
diff --git a/1.4/Source/Utilities/PatchOperationAddOrReplace.cs b/1.4/Source/Utilities/PatchOperationAddOrReplace.cs
new file mode 100644
index 0000000..4e1bd85
--- /dev/null
+++ b/1.4/Source/Utilities/PatchOperationAddOrReplace.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using Verse;
+
+namespace Rimworld_Animations
+{
+ public class PatchOperationAddOrReplace : PatchOperationPathed
+ {
+
+ protected string key;
+ private XmlContainer value;
+
+ protected override bool ApplyWorker(XmlDocument xml)
+ {
+ XmlNode valNode = value.node;
+ bool result = false;
+ IEnumerator enumerator = xml.SelectNodes(xpath).GetEnumerator();
+ try
+ {
+ while (enumerator.MoveNext())
+ {
+ object obj = enumerator.Current;
+ result = true;
+ XmlNode parentNode = obj as XmlNode;
+ XmlNode xmlNode = parentNode.SelectSingleNode(key);
+ if (xmlNode == null)
+ {
+ // Add - Add node if not existing
+ xmlNode = parentNode.OwnerDocument.CreateElement(key);
+ parentNode.AppendChild(xmlNode);
+ }
+ else
+ {
+ // Replace - Clear existing children
+ xmlNode.RemoveAll();
+ }
+ // (Re)add value
+ xmlNode.AppendChild(parentNode.OwnerDocument.ImportNode(valNode.FirstChild, true));
+ }
+ }
+ finally
+ {
+ IDisposable disposable = enumerator as IDisposable;
+ if (disposable != null)
+ {
+ disposable.Dispose();
+ }
+ }
+ return result;
+ }
+
+ }
+
+}
diff --git a/1.4/Textures/UI/MainTab.png b/1.4/Textures/UI/MainTab.png
new file mode 100644
index 0000000..92f855f
Binary files /dev/null and b/1.4/Textures/UI/MainTab.png differ
diff --git a/1.6/Assemblies/Rimworld-Animations.dll b/1.6/Assemblies/Rimworld-Animations.dll
deleted file mode 100644
index a52d4f5..0000000
Binary files a/1.6/Assemblies/Rimworld-Animations.dll and /dev/null differ
diff --git a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Banana.xml b/1.6/Defs/AnimationPropDefs/AnimationPropDef_Banana.xml
deleted file mode 100644
index 235c9fa..0000000
--- a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Banana.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
- RenderNodeTag_Banana
-
-
-
- AnimationProp_Banana
-
- Banana
- RenderNodeTag_Banana
- Body
- AnimationProps/Banana/Banana
-
-
-
diff --git a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Hand.xml b/1.6/Defs/AnimationPropDefs/AnimationPropDef_Hand.xml
deleted file mode 100644
index d5ba7da..0000000
--- a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Hand.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- RenderNodeTag_Hand
-
-
-
- AnimationProp_Hand
-
- Hand
- RenderNodeTag_Hand
- True
- Root
- AnimationProps/Hand/Hand
-
- True
- LeftHand
- Skin
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Knees.xml b/1.6/Defs/AnimationPropDefs/AnimationPropDef_Knees.xml
deleted file mode 100644
index a5dac3a..0000000
--- a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Knees.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
- RenderNodeTag_Knees
-
-
-
- AnimationProp_Knees
-
- Knees
- RenderNodeTag_Knees
- False
- Root
-
- Head
- True
- Skin
- 95
-
-
- Female
- TexPathVariants_Knees
-
-
-
-
-
-
- RenderNodeTag_Arms
-
-
-
- AnimationProp_Arms
-
- Arms
- RenderNodeTag_Knees
- False
- Root
- True
- Skin
-
- Body
- -1
-
-
- Female
- TexPathVariants_Arms
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Inside.xml b/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Inside.xml
deleted file mode 100644
index 9211de5..0000000
--- a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Inside.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- RenderNodeTag_Xray_Inside
-
-
-
- AnimationProp_Xray_Inside
-
- Xray Inside
- RenderNodeTag_Xray_Inside
- True
- Body
-
- TexPathVariants_Xray_Inside
-
-
-
-
diff --git a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Penis.xml b/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Penis.xml
deleted file mode 100644
index 260617b..0000000
--- a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Penis.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- RenderNodeTag_Xray_Penis
-
-
- AnimationProp_Penis
-
- Xray Penis
- RenderNodeTag_Xray_Penis
- Body
- AnimationProps/Banana/Banana
-
- True
-
-
- TexPathVariants_XrayPenis_Human
-
-
-
-
-
- HorsePenis
- RaccoonPenis
-
- TexPathVariants_XrayPenis_Horse
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Race.xml b/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Race.xml
deleted file mode 100644
index aa90bcc..0000000
--- a/1.6/Defs/AnimationPropDefs/AnimationPropDef_Xray_Race.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
- RenderNodeTag_Xray_Vagina
-
-
-
-
-
- AnimationProp_Vagina
-
-
-
- Xray Vagina
- RenderNodeTag_Xray_Vagina
- Body
- AnimationProps/Banana/Banana
-
- True
- TexPathVariants_Xray_Inside
-
-
-
-
-
-
-
- Wolf_Timber
- Wolf_Arctic
- Warg
- Husky
- LabradorRetriever
-
-
-
-
- Xray Vagina
- RenderNodeTag_Xray_Vagina
- Body
- AnimationProps/Banana/Banana
-
- True
- TexPathVariants_Xray_Inside
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/GroupAnimation_DogBeast.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/GroupAnimation_DogBeast.xml
deleted file mode 100644
index 6f95f49..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/GroupAnimation_DogBeast.xml
+++ /dev/null
@@ -1,219 +0,0 @@
-
-
-
- GroupAnimation_DogBeast
- 2
-
-
- 1
-
-
- 1
-
- DogBeast_Human1
- DogBeast_Dog1
-
-
-
-
-
-
-
- 1
-
-
- 1
-
- DogBeast_Human2
- DogBeast_Dog2
-
-
-
-
-
-
-
- 60
-
-
- 1
-
- DogBeast_Human3_1
- DogBeast_Dog3_1
-
-
-
-
- 1
-
- DogBeast_Human3_2
- DogBeast_Dog3_2
-
-
-
-
- 1
-
- DogBeast_Human3_3
- DogBeast_Dog3_3
-
-
-
-
-
-
-
- 1
-
-
- 1
-
- DogBeast_Human4
- DogBeast_Dog4
-
-
-
-
-
-
-
- 30
-
-
- 1
-
- DogBeast_Human5_1
- DogBeast_Dog5_1
-
-
-
-
- 1
-
- DogBeast_Human5_2
- DogBeast_Dog5_2
-
-
-
-
- 1
-
- DogBeast_Human5_3
- DogBeast_Dog5_3
-
-
-
-
-
-
-
-
- 1
-
-
- 1
-
- DogBeast_Human6
- DogBeast_Dog6
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
- Bestiality_Reverse_Vaginal
- Bestiality_Reverse_Anal
- Bestiality_Reverse_Double_Penetration_M
-
-
-
-
-
-
-
-
-
- Wolf_Timber
- Wolf_Arctic
- Warg
- Husky
- LabradorRetriever
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
- Wolf_Timber
- Wolf_Arctic
- Warg
- Husky
- LabradorRetriever
-
-
-
-
- Bestiality_Vaginal
- Bestiality_Anal
- Bestiality_Double_Penetration_M
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
- Wolf_Timber
- Wolf_Arctic
- Warg
- Husky
- LabradorRetriever
-
-
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_Placeholder
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage1.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage1.xml
deleted file mode 100644
index 68eb5e1..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage1.xml
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-
- DogBeast_Human1
- 85
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 4
- true
- (-0.3716815, 0, 0.2713863)
- East
-
-
- 15
- 8
- true
- (-0.3539823, 0, 0.2654868)
- East
-
-
- 25
- -14
- true
- (-0.4011799, 0, 0.2241887)
- East
-
-
- 35
- -7
- true
- (-0.3834807, 0, 0.2359883)
- East
-
-
- 55
- -9
- true
- (-0.4011799, 0, 0.2359883)
- East
-
-
- 85
- -7
- true
- (-0.3893807, 0, 0.2359883)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- East
-
-
- 25
- 0
- true
- South
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.1946907, 1, 0.4483777)
- North
-
-
- 5
- 0
- true
- (0.235988, 1, 0.4365782)
- North
-
-
- 10
- 0
- true
- (0.1238946, 1, 0.377581)
- North
-
-
- 13
- 0
- true
- (0.1710922, 1, 0.3952804)
- North
-
-
- 17
- 0
- true
- (0.05899817, 1, 0.4660767)
- North
-
-
- 25
- 0
- true
- (-0.1828904, 1, 0.4896755)
- North
-
-
- 35
- 0
- true
- (-0.1356928, 1, 0.4778759)
- North
-
-
-
-
-
-
-
- DogBeast_Dog1
- 85
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.6666666, 1, 0.1120945)
- West
-
-
- 15
- -5
- true
- (0.5722714, 1, 0.06489658)
- (1, 1, 0.9351034)
- West
-
-
- 25
- 35
- true
- (0.1356932, 1, 0.2477875)
- (0.9999999, 1, 1.053097)
- West
-
-
- 35
- 31
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
- 45
- 35
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
- 55
- 31
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
- 65
- 35
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
- 75
- 31
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
- 85
- 35
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, -2, 0)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage2.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage2.xml
deleted file mode 100644
index 5bfddcd..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage2.xml
+++ /dev/null
@@ -1,309 +0,0 @@
-
-
-
- DogBeast_Human2
- 105
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -7
- true
- (-0.3893807, 0, 0.2359883)
- East
-
-
- 19
- 0
- true
- (-0.5073746, 0, 0.2300885)
- South
-
-
- 25
- -13
- true
- (-0.5899706, 0, 0.2005899)
- West
-
-
- 45
- -65
- true
- (-0.737463, 0, 0.02359879)
- (0.9764012, 1, 1)
- West
-
-
- 55
- -52
- true
- (-0.6843658, 0, 0.08849573)
- West
-
-
- 75
- -56
- true
- (-0.702065, 0, 0.07079637)
- West
-
-
- 85
- -56
- true
- (-0.702065, 0, 0.07079637)
- West
-
-
- 90
- -46
- true
- (-0.743363, 0, 0.1474925)
- West
- Grunt
-
-
- 95
- -48
- true
- (-0.7315634, 0, 0.1415931)
- West
-
-
- 100
- -45
- true
- (-0.737463, 0, 0.1533923)
- West
-
-
- 105
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 20
- 0
- true
- South
-
-
- 90
- 0
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (-0.1356928, 1, 0.4778759)
- North
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog2
- 105
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 35
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
- 10
- 39
- true
- (0.1651919, 1, 0.2477875)
- West
-
-
- 20
- 35
- true
- (0.1356932, 1, 0.2477875)
- West
-
-
- 30
- 29
- true
- (-0.01769918, 1, 0.259587)
- West
-
-
- 40
- 24
- true
- (-0.07079639, 1, 0.2300885)
- (1, 1, 0.9528024)
- West
-
-
- 50
- 33
- true
- (-0.117994, 1, 0.3008848)
- West
-
-
- 55
- 28
- true
- (-0.06489678, 1, 0.2713863)
- West
-
-
- 60
- 33
- true
- (-0.1238939, 1, 0.2772861)
- West
-
-
- 65
- 28
- true
- (-0.06489678, 1, 0.259587)
- West
-
-
- 70
- 36
- true
- (-0.1769911, 1, 0.3008848)
- West
-
-
- 75
- 33
- true
- (-0.1651916, 1, 0.3008848)
- West
-
-
- 80
- 33
- true
- (-0.1415928, 1, 0.2890856)
- West
-
-
- 83
- 31
- true
- (-0.1356932, 1, 0.2772861)
- West
-
-
- 90
- 37
- true
- (-0.2595871, 1, 0.342183)
- West
- Fuck
-
-
- 95
- 31
- true
- (-0.2123895, 1, 0.3303834)
- West
-
-
- 100
- 37
- true
- (-0.2654867, 1, 0.342183)
- West
- Fuck
-
-
- 105
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, -2, 0)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant1.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant1.xml
deleted file mode 100644
index df355fd..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant1.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
- DogBeast_Human3_1
- 24
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
- Moan
-
-
- 4
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 8
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
- 12
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 16
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
- 20
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 24
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 8
- 5
- true
- West
-
-
- 16
- 0
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog3_1
- 24
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 4
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 8
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 12
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 16
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 20
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 24
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, -2, 0)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant2_FollowupWithVariant1.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant2_FollowupWithVariant1.xml
deleted file mode 100644
index cef2bc5..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant2_FollowupWithVariant1.xml
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
-
- DogBeast_Human3_2
- 32
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
- 4
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 8
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
- 12
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
- MoanShort
-
-
- 16
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
- 20
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 24
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
- 28
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 32
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 16
- -10
- true
- (-0.01769918, 0, -0.01769918)
- West
-
-
- 32
- 0
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog3_2
- 32
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 4
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 8
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 12
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 16
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 20
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 24
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 28
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 32
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, -2, 0)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant3.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant3.xml
deleted file mode 100644
index 8253831..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage3_Variant3.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
-
- DogBeast_Human3_3
- 16
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
- Moan
-
-
- 4
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 8
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
- 12
- -51
- true
- (-0.7315634, 0, 0.1238937)
- West
-
-
- 16
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- South
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog3_3
- 16
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 4
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 8
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
- 12
- 38
- true
- (-0.2713863, 1, 0.3185842)
- West
- Fuck
-
-
- 16
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, -2, 0)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage4.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage4.xml
deleted file mode 100644
index 9464f36..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage4.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-
-
-
- DogBeast_Human4
- 100
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -52
- true
- (-0.7197642, 0, 0.1120945)
- West
- Scream
-
-
- 4
- -45
- true
- (-0.6902654, 0, 0.1474925)
- West
-
-
- 30
- -50
- true
- (-0.6784662, 0, 0.1120945)
- West
-
-
- 60
- -55
- true
- (-0.6784662, 0, 0.1120945)
- West
-
-
- 70
- -55
- true
- (-0.6784662, 0, 0.1120945)
- West
-
-
- 80
- -51
- true
- (-0.6666666, 0, 0.1474925)
- West
-
-
- 100
- -54
- true
- (-0.6725662, 0, 0.1120945)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 8
- 30
- true
- West
-
-
- 30
- 25
- true
- South
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog4
- 100
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 34
- true
- (-0.2123895, 1, 0.3126844)
- West
- Fuck
-
-
- 4
- 36
- true
- (-0.3067847, 1, 0.342183)
- West
-
-
- 30
- 35
- true
- (-0.2772863, 1, 0.3067846)
- West
-
-
- 45
- 3
- true
- (-0.2064896, 1, 0.2005899)
- South
-
-
- 60
- 19
- true
- (0.2123888, 1, 0.1297935)
- East
-
-
- 70
- 12
- true
- (0.1769905, 1, 0.1946901)
- East
-
-
- 80
- 17
- true
- (0.2005889, 1, 0.1474925)
- East
-
-
- 100
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, -1, 0)
- West
-
-
- 30
- 0
- true
- (0, -1, 0)
- West
-
-
- 35
- 0
- true
- (-0.1002951, -2, 0)
- West
-
-
- 45
- 34
- true
- (-0.01769918, -2, 0.1592921)
- West
-
-
- 60
- 5
- true
- (-0.5722714, -2, -0.0294984)
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant1.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant1.xml
deleted file mode 100644
index e7c787b..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant1.xml
+++ /dev/null
@@ -1,201 +0,0 @@
-
-
-
- DogBeast_Human5_1
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -54
- true
- (-0.6725662, 0, 0.1120945)
- West
-
-
- 20
- -60
- true
- (-0.6843658, 0, 0.08849573)
- West
-
-
- 40
- -58
- true
- (-0.6725662, 0, 0.09439516)
- West
- Grunt
-
-
- 80
- -54
- true
- (-0.6725662, 0, 0.1120945)
- West
- Grunt
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- West
-
-
- 10
- 20
- true
- West
-
-
- 50
- 25
- true
- West
-
-
- 80
- 30
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog5_1
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
- Cum
-
-
- 10
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 20
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 30
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 40
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 50
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 60
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 70
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 80
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 60
- 5
- true
- (-0.5722714, -2, -0.0294984)
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant2.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant2.xml
deleted file mode 100644
index daff31d..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant2.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-
- DogBeast_Human5_2
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -54
- true
- (-0.6725662, 0, 0.1120945)
- West
-
-
- 40
- -58
- true
- (-0.6725662, 0, 0.09439516)
- West
- Grunt
-
-
- 80
- -54
- true
- (-0.6725662, 0, 0.1120945)
- West
- Grunt
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- West
-
-
- 50
- 25
- true
- West
-
-
- 80
- 30
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog5_2
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
- Cum
-
-
- 10
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 20
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 30
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 40
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 50
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 60
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 70
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 80
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 60
- 5
- true
- (-0.5722714, -2, -0.0294984)
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant3.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant3.xml
deleted file mode 100644
index dac2f49..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage5_Variant3.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-
- DogBeast_Human5_3
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -54
- true
- (-0.6725662, 0, 0.1120945)
- West
-
-
- 40
- -58
- true
- (-0.6725662, 0, 0.09439516)
- West
- Grunt
-
-
- 80
- -54
- true
- (-0.6725662, 0, 0.1120945)
- West
- Grunt
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- South
-
-
- 50
- 25
- true
- South
-
-
- 80
- 30
- true
- South
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog5_3
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 10
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 20
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 30
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 40
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
- Cum
-
-
- 50
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 60
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 70
- 15
- true
- (0.2005889, 1, 0.1710913)
- East
-
-
- 80
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 60
- 5
- true
- (-0.5722714, -2, -0.0294984)
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage6.xml b/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage6.xml
deleted file mode 100644
index 542a315..0000000
--- a/1.6/Defs/GroupAnimationDefs/Beast/DogBeast/Stage6.xml
+++ /dev/null
@@ -1,232 +0,0 @@
-
-
-
- DogBeast_Human6
- 200
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -48
- true
- (-0.6725662, 0, 0.1356933)
- West
- Grunt
-
-
- 120
- -62
- true
- (-0.6666666, 0, 0.1238937)
- West
-
-
- 160
- -65
- true
- (-0.660767, 0, 0.117994)
- West
- Scream
-
-
- 170
- -43
- true
- (-0.6312686, 0, 0.2536873)
- West
-
-
- 180
- -46
- true
- (-0.6430678, 0, 0.2359883)
- West
-
-
- 200
- -42
- true
- (-0.619469, 0, 0.2536873)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- West
-
-
- 120
- 55
- true
- West
-
-
- 165
- 54
- true
- West
-
-
- 180
- 25
- true
- West
-
-
- 200
- 22
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 20
- 0
- false
- (-0.5309731, -2, -0.06489676)
- North
-
-
-
-
-
-
-
- DogBeast_Dog6
- 200
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 13
- true
- (0.1946893, 1, 0.1828909)
- East
-
-
- 60
- 20
- true
- (0.2595864, 1, 0.2123895)
- East
-
-
- 140
- 23
- true
- (0.3008844, 1, 0.2241887)
- East
-
-
- 160
- 26
- true
- (0.3775801, 1, 0.2241887)
- East
- Fuck
-
-
- 180
- 11
- true
- (0.5958685, 1, 0.1474925)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- North
-
-
-
-
-
- AnimalPenis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 60
- 5
- true
- (-0.5722714, -2, -0.0294984)
- West
-
-
- 160
- 5
- true
- (-0.5722714, -2, -0.0294984)
- West
- Slimy
-
-
- 165
- -39
- true
- (-0.5722714, -2, -0.0294984)
- West
-
-
-
-
-
- Saliva
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -55
- true
- (-0.4837759, -2, -0.2949852)
- (0.2153394, 1, 0.6342184)
- North
-
-
- 160
- -55
- false
- (-0.4601771, -2, -0.3067846)
- (0.2153394, 1, 0.6342184)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/AnimationPropDef_Cum.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/AnimationPropDef_Cum.xml
deleted file mode 100644
index 1b54b64..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/AnimationPropDef_Cum.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
- Cum
-
-
-
- AnimProp_Cum
-
- Cum
- Rimworld_Animations.PawnRenderNode_GraphicVariants
- Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants
- Cum
- Head
-
- AnimationProps/Cum/Cum
- Head
- 95
-
-
-
-
- Cumshot
-
-
-
- AnimProp_Cumshot
-
- Cumshot
- Rimworld_Animations.PawnRenderNode_GraphicVariants
- Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants
- Cumshot
- Root
-
- AnimationProps/Saliva/Saliva
- Head
- 95
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/GroupAnimation_Blowjob.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/GroupAnimation_Blowjob.xml
deleted file mode 100644
index 9e22a78..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/GroupAnimation_Blowjob.xml
+++ /dev/null
@@ -1,398 +0,0 @@
-
-
-
- GroupAnimation_Blowjob
- 2
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator1
- Blowjob_Receiver1
-
-
-
-
-
-
-
- 10
-
- Blowjob_Stage2_Branch1
- Blowjob_Stage2_Branch2
- Blowjob_Stage2_Branch3
-
-
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator3
- Blowjob_Receiver3
-
-
-
-
-
-
-
- 20
-
- Blowjob_Stage4_Branch1
- Blowjob_Stage4_Branch2
-
-
-
-
-
- 20
-
-
- 1
-
- Blowjob_Initiator5
- Blowjob_Receiver5
-
-
-
-
-
-
-
-
- 1
-
- Blowjob_Stage6_Branch1
- Blowjob_Stage6_Branch2
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
- Sex_Reverse_Fellatio
- Sex_Reverse_Beakjob
- Sex_Reverse_Handjob
- Rape_Reverse_Fellatio
- Rape_Reverse_Handjob
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- Sex_Fellatio
- Sex_Beakjob
- Sex_Handjob
- Rape_Fellatio
- Rape_Handjob
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage2_Branch1
- 2
-
-
- 2
-
-
- 1
-
- Blowjob_Initiator2a
- Blowjob_Receiver2a
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage2_Branch2
- 2
-
-
- 2
-
-
- 1
-
- Blowjob_Initiator2b
- Blowjob_Receiver2b
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage2_Branch3
- 2
-
-
- 2
-
-
- 1
-
- Blowjob_Initiator2c
- Blowjob_Receiver2c
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage4_Branch1
- 2
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator4a
- Blowjob_Receiver4a
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage4_Branch2
- 2
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator4b
- Blowjob_Receiver4b
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage4_Branch3
- 2
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator4a
- Blowjob_Receiver4a
-
-
-
-
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator4c
- Blowjob_Receiver4c
-
-
-
-
-
-
- 2
-
-
- 1
-
- Blowjob_Initiator4a
- Blowjob_Receiver4a
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage6_Branch1
- 2
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator6a
- Blowjob_Receiver6a
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
- Blowjob_Stage6_Branch2
- 2
-
-
- 1
-
-
- 1
-
- Blowjob_Initiator6b
- Blowjob_Receiver6b
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
- Offset_Blowjob_Receiver
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/OffsetDef_Blowjob.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/OffsetDef_Blowjob.xml
deleted file mode 100644
index fb69523..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/OffsetDef_Blowjob.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- Offset_Blowjob_Receiver
-
-
-
- Human
-
-
-
-
-
-
-
-
- Offset_Blowjob_Initiator
-
-
-
- Human
-
-
- Hulk (0, 0, 0.223)
-
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage1.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage1.xml
deleted file mode 100644
index e581ee9..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage1.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-
-
-
- Blowjob_Initiator1
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -7
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 20
- -17
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 60
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- East
-
-
- 60
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 2
- true
- East
-
-
- 5
- 6
- true
- East
-
-
- 10
- 2
- true
- East
-
-
- 15
- 6
- true
- East
-
-
- 20
- 0
- true
- East
-
-
- 40
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver1
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.3421831, 0, 0.3303834)
- West
-
-
- 30
- -13
- true
- (0.2536875, 0, 0.2713863)
- West
-
-
- 60
- -23
- true
- (0.1828908, 0, 0.2123895)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 9
- true
- West
-
-
- 30
- 29
- true
- West
-
-
- 45
- 7
- true
- West
-
-
- 60
- 9
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.0471976, 1, 0.1533923)
- North
-
-
- 20
- 0
- true
- (-0.2890855, 1, 0.1002949)
- North
-
-
- 40
- 0
- true
- (-0.2595871, 1, 0.08849573)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2a.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2a.xml
deleted file mode 100644
index ed3684c..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2a.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-
-
-
- Blowjob_Initiator2a
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 30
- -21
- true
- (-0.5309734, 0, 0.4778759)
- East
- Moan
-
-
- 60
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
- 30
- 35
- true
- East
-
-
- 60
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver2a
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -23
- true
- (0.1828908, 1, 0.2123895)
- West
-
-
- 35
- -28
- true
- (0.153392, 1, 0.1946901)
- West
- Suck
-
-
- 60
- -23
- true
- (0.1828908, 1, 0.2123895)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 9
- true
- West
-
-
- 35
- 9
- true
- (-0.06489678, 0, -0.01769918)
- West
-
-
- 60
- 9
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (-0.2595871, 1, 0.08849573)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2b.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2b.xml
deleted file mode 100644
index 6f11543..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2b.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
- Blowjob_Initiator2b
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 30
- -21
- true
- (-0.5309734, 0, 0.4778759)
- East
- Moan
-
-
- 60
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
- 30
- 35
- true
- East
-
-
- 60
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver2b
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -23
- true
- (0.1828908, 1, 0.2123895)
- West
-
-
- 35
- -28
- true
- (0.153392, 1, 0.1946901)
- West
- Suck
-
-
- 60
- -23
- true
- (0.1828908, 1, 0.2123895)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 9
- true
- West
-
-
- 35
- 9
- true
- (-0.06489678, 0, -0.01769918)
- West
-
-
- 60
- 9
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (-0.2595871, 1, 0.08849573)
- North
-
-
- 10
- 0
- true
- (-0.1769911, 1, 0.1828909)
- North
-
-
- 30
- 0
- true
- (-0.2654867, 1, 0.1120945)
- North
-
-
- 60
- 0
- true
- (-0.2595871, 1, 0.08849573)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2c.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2c.xml
deleted file mode 100644
index adac6e9..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage2c.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-
-
-
- Blowjob_Initiator2c
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 30
- -21
- true
- (-0.5309734, 0, 0.4778759)
- East
- Moan
-
-
- 80
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
- 30
- 35
- true
- East
-
-
- 80
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver2c
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -23
- true
- (0.1828908, 1, 0.2123895)
- West
-
-
- 35
- -28
- true
- (0.153392, 1, 0.1946901)
- West
- Suck
-
-
- 50
- -28
- true
- (0.153392, 1, 0.1946901)
- West
-
-
- 80
- -23
- true
- (0.1828908, 1, 0.2123895)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 9
- true
- West
-
-
- 35
- 9
- true
- (-0.06489678, 0, -0.01769918)
- West
-
-
- 50
- 17
- true
- (-0.06489678, 0, -0.01769918)
- West
- Slimy
-
-
- 80
- 9
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (-0.2595871, 1, 0.08849573)
- North
-
-
- 10
- 0
- true
- (-0.1769911, 1, 0.1828909)
- North
-
-
- 30
- 0
- true
- (-0.2654867, 1, 0.1120945)
- North
-
-
- 80
- 0
- true
- (-0.2595871, 1, 0.08849573)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage3.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage3.xml
deleted file mode 100644
index 078aa81..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage3.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
- Blowjob_Initiator3
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -19
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 25
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver3
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -23
- true
- (0.1828908, 1, 0.2123895)
- West
- Suck
-
-
- 25
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 9
- true
- West
-
-
- 20
- 9
- true
- (-0.05309721, 0, -0.02949858)
- West
-
-
- 25
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (-0.2595871, 1, 0.08849573)
- North
-
-
- 20
- 0
- false
- (0.3480827, -2, -0.04129779)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4a.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4a.xml
deleted file mode 100644
index cc2e144..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4a.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
- Blowjob_Initiator4a
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 15
- -8
- true
- (-0.5486726, 0, 0.4778759)
- East
-
-
- 30
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
- 15
- 22
- true
- East
-
-
- 30
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver4a
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
-
-
- 12
- -23
- true
- (0.1651919, 1, 0.1946901)
- West
- Slimy
-
-
- 30
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
- Suck
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 15
- 19
- true
- (-0.01179957, 0, -0.03539819)
- West
-
-
- 30
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- false
- (0.3480827, 1, -0.04129779)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4b.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4b.xml
deleted file mode 100644
index 88340a4..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4b.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
-
- Blowjob_Initiator4b
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 15
- -8
- true
- (-0.5486726, 0, 0.4778759)
- East
- MoanShort
-
-
- 30
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
- 15
- 14
- true
- East
-
-
- 30
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver4b
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
-
-
- 12
- -23
- true
- (0.1651919, 1, 0.1946901)
- West
- Slimy
-
-
- 30
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
- Suck
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 15
- 19
- true
- (-0.01179957, 0, -0.03539819)
- West
-
-
- 30
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- false
- (0.3480827, 1, -0.04129779)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4c.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4c.xml
deleted file mode 100644
index b759f5b..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage4c.xml
+++ /dev/null
@@ -1,237 +0,0 @@
-
-
-
- Blowjob_Initiator4c
- 120
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 100
- -24
- true
- (-0.5309734, 0, 0.4778759)
- East
- Grunt
-
-
- 120
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
- 20
- 31
- true
- East
-
-
- 80
- 8
- true
- East
-
-
- 120
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver4c
- 120
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
- Suck
-
-
- 20
- -22
- true
- (0.1238939, 1, 0.1828909)
- West
-
-
- 22
- -22
- true
- (0.1238939, -1, 0.1828909)
- West
- Slimy
-
-
- 40
- -30
- true
- (0.08259596, -1, 0.1828909)
- West
-
-
- 60
- -34
- true
- (0.08259596, -1, 0.1828909)
- West
-
-
- 90
- -22
- true
- (0.1238939, 0, 0.1828909)
- West
-
-
- 92
- -22
- true
- (0.1238939, 0, 0.1828909)
- West
-
-
- 120
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 20
- 19
- true
- (0.1002955, 0, -0.01769918)
- South
-
-
- 22
- 19
- true
- (0.1002955, 0, -0.01769918)
- South
-
-
- 40
- 19
- true
- (-0.01179889, 0, 0.005899787)
- South
-
-
- 60
- 19
- true
- (-0.03539803, 0, -0.005899787)
- South
- Slimy
-
-
- 90
- 19
- true
- (0.1002955, 0, -0.01769918)
- South
-
-
- 92
- 19
- true
- (0.1002955, 0, -0.01769918)
- West
-
-
- 120
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- false
- (0.3480827, 1, -0.04129779)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage5.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage5.xml
deleted file mode 100644
index 3b2d6ef..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage5.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
- Blowjob_Initiator5
- 15
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
- Grunt
-
-
- 9
- -2
- true
- (-0.5132743, 0, 0.5191741)
- East
-
-
- 15
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 31
- true
- East
-
-
- 7
- 15
- true
- East
-
-
- 15
- 31
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
-
-
- Blowjob_Receiver5
- 15
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
- Suck
-
-
- 5
- -23
- true
- (0.1592923, 1, 0.1887907)
- West
-
-
- 15
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 7
- 13
- true
- (-0.01179889, 0, -0.04129797)
- West
-
-
- 15
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- false
- (0.3480827, 1, -0.04129779)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage6a.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage6a.xml
deleted file mode 100644
index 7f94029..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage6a.xml
+++ /dev/null
@@ -1,363 +0,0 @@
-
-
-
- Blowjob_Initiator6a
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 20
- -7
- true
- (-0.6312686, 0, 0.5132743)
- East
- Scream
-
-
- 27
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
- Cum
-
-
- 50
- -17
- true
- (-0.5309734, 0, 0.4778759)
- East
- Scream
-
-
- 55
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
- Cum
-
-
- 80
- -16
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 85
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 120
- -13
- true
- (-0.6548674, 0, 0.4778759)
- East
-
-
- 180
- -8
- true
- (-0.6548674, 0, 0.4778759)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 15
- 31
- true
- East
-
-
- 85
- 34
- true
- East
-
-
- 120
- 21
- true
- (0.005899615, 0, -0.04129797)
- East
-
-
- 140
- 21
- true
- (-0.005899615, 0, -0.005899608)
- East
-
-
- 160
- 21
- true
- (0, 0, -0.02359879)
- East
-
-
- 180
- 14
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (-0.5073746, -1, 0.3067846)
- North
-
-
- 17
- 0
- true
- (0.08259596, -1, 0.6135693)
- North
-
-
- 25
- 0
- true
- (-0.01179856, 0, 0.6076695)
- North
-
-
- 80
- 0
- true
- (-0.01769851, 0, 0.5958703)
- North
-
-
- 95
- 0
- false
- (0.04129865, 0, 0.5309733)
- North
-
-
- 120
- 0
- false
- (-0.4542764, 0, 0.2300885)
- North
-
-
-
-
-
-
-
- Blowjob_Receiver6a
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
-
-
- 20
- -27
- true
- (0.1474924, 1, 0.1828909)
- West
-
-
- 25
- -31
- true
- (0.1061937, 1, 0.1887907)
- West
-
-
- 85
- -33
- true
- (0.1061937, 1, 0.1887907)
- West
- Suck
-
-
- 160
- -11
- true
- (0.4424765, 1, 0.3008848)
- West
- Moan
-
-
- 180
- -4
- true
- (0.4424765, 1, 0.3008848)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 17
- 19
- true
- (0.005899615, 0, -0.0117994)
- West
-
-
- 25
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 50
- 19
- true
- (-0.07079639, 0, -0.02359879)
- West
-
-
- 55
- 19
- true
- (-0.0471976, 0, -0.02949858)
- West
-
-
- 80
- 19
- true
- (-0.07079639, 0, -0.02359879)
- West
-
-
- 85
- 19
- true
- (-0.0471976, 0, -0.02949858)
- West
-
-
- 180
- 11
- true
- (-0.0471976, 0, -0.02949858)
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- false
- (0.3480827, 1, -0.04129779)
- North
-
-
-
-
-
- Saliva
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- false
- (0, -2, 0)
- North
-
-
- 85
- -6
- true
- (-0.1946903, -2, -0.08849555)
- (0.2153401, 1, 0.415929)
- North
-
-
- 180
- -52
- true
- (-0.4601771, -2, -0.40118)
- (0.4808269, 1, 0.59882)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage6b.xml b/1.6/Defs/GroupAnimationDefs/Blowjob/Stage6b.xml
deleted file mode 100644
index 8cc8edb..0000000
--- a/1.6/Defs/GroupAnimationDefs/Blowjob/Stage6b.xml
+++ /dev/null
@@ -1,450 +0,0 @@
-
-
-
- Blowjob_Initiator6b
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 30
- -17
- true
- (-0.5309734, 0, 0.4778759)
- East
- Scream
-
-
- 40
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 50
- -17
- true
- (-0.5309734, 0, 0.4778759)
- East
- Scream
-
-
- 60
- -20
- true
- (-0.5309734, 0, 0.4778759)
- East
-
-
- 80
- -17
- true
- (-0.5309734, 0, 0.4778759)
- East
- Cum
-
-
- 85
- -21
- true
- (-0.5309734, 0, 0.4837757)
- East
- Scream
-
-
- 110
- -16
- true
- (-0.5309734, 0, 0.4837757)
- East
- Cum
-
-
- 115
- -19
- true
- (-0.5309734, 0, 0.4837757)
- East
- Grunt
-
-
- 180
- -15
- true
- (-0.5309734, 0, 0.4837757)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 15
- 31
- true
- East
-
-
- 30
- 27
- true
- East
-
-
- 40
- 33
- true
- East
-
-
- 50
- 28
- true
- East
-
-
- 60
- 32
- true
- East
-
-
- 180
- 23
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 14
- true
- East
-
-
-
-
-
- Cumshot
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 75
- -64
- false
- (0.1769911, 0, -0.2300885)
- (0.333334, 1, 0.7758115)
- North
-
-
- 80
- -64
- true
- (0.1769911, 0, -0.2300885)
- (0.333334, 1, 0.7758115)
- North
-
-
- 85
- -64
- false
- (0.1769911, 0, -0.2300885)
- (0.333334, 1, 0.7758115)
- North
-
-
- 105
- -64
- false
- (0.1769911, 0, -0.2300885)
- (0.333334, 1, 0.7758115)
- North
-
-
- 110
- -64
- true
- (0.1769911, 0, -0.2300885)
- (0.333334, 1, 0.7758115)
- North
-
-
- 115
- -64
- false
- (0.1769911, 0, -0.2300885)
- (0.333334, 1, 0.7758115)
- North
-
-
-
-
-
-
-
- Blowjob_Receiver6b
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (0.1238939, 1, 0.1828909)
- West
- Suck
-
-
- 30
- -15
- true
- (0.3362834, 1, 0.259587)
- West
-
-
- 70
- -11
- true
- (0.353983, 1, 0.259587)
- West
-
-
- 110
- -11
- true
- (0.3598826, 1, 0.2654868)
- West
- Moan
-
-
- 180
- -8
- true
- (0.3893807, 1, 0.2654868)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 30
- 4
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 80
- 4
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 83
- 4
- true
- (-0.03539836, 0, -0.005899787)
- West
-
-
- 110
- 4
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 113
- 4
- true
- (-0.03539836, 0, -0.005899787)
- West
-
-
- 150
- 1
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
- 180
- 19
- true
- (-0.05899716, 0, -0.01769918)
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.466077, 1, -0.04129779)
- North
-
-
- 30
- 0
- true
- (-0.1651916, 1, 0.1828909)
- North
-
-
- 40
- 0
- true
- (-0.2477875, 1, 0.1474925)
- North
- Slimy
-
-
- 50
- 0
- true
- (-0.159292, 1, 0.1946901)
- North
-
-
- 60
- 0
- true
- (-0.2477875, 1, 0.1415931)
- North
- Slimy
-
-
- 70
- 0
- true
- (-0.1828908, 1, 0.1769911)
- North
-
-
- 80
- 0
- true
- (-0.2772863, 1, 0.117994)
- North
-
-
- 90
- 0
- true
- (-0.1474927, 1, 0.2123895)
- North
- Slimy
-
-
- 100
- 0
- true
- (-0.2536871, 1, 0.1356933)
- North
-
-
- 110
- 0
- true
- (-0.1710915, 1, 0.2005899)
- North
-
-
- 180
- 0
- true
- (-0.2418879, 1, 0.1356933)
- North
-
-
-
-
-
- Cum
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 12
- false
- (-0.1120944, 1, -0.2241889)
- (0.3392327, 1, 0.3569321)
- North
-
-
- 110
- 12
- true
- (-0.1120944, 1, -0.2241889)
- (0.3392327, 1, 0.3569321)
- North
-
-
- 150
- 12
- true
- (-0.1120944, 1, -0.2241889)
- (0.3392327, 1, 0.3569321)
- North
-
-
- 180
- -5
- true
- (-0.1120944, 1, -0.2241889)
- (0.3392327, 1, 0.3569321)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/AnimationPropDef_Cowgirl_Xray.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/AnimationPropDef_Cowgirl_Xray.xml
deleted file mode 100644
index 23b5562..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/AnimationPropDef_Cowgirl_Xray.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
- RenderNodeTag_Cowgirl_Xray
-
-
-
- AnimProp_Cowgirl_Xray
-
- Cowgirl Xray
- Rimworld_Animations.PawnRenderNode_GraphicVariants
- Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants
- RenderNodeTag_Cowgirl_Xray
- True
- Body
-
- AnimationProps/CowgirlXray/XRay2-1
- Head
- 95
- TexPathVariants_Cowgirl_Xray
-
-
-
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage1.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage1.xml
deleted file mode 100644
index 9c2e144..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage1.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
-
- Initiator_Cowgirl_Stage1
- 150
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 0, -0.7)
- South
-
-
- 55
- 180
- true
- (0, 0, -0.7)
- South
- Slimy
-
-
- 110
- 180
- true
- (0, 0, -0.75)
- South
- Moan
-
-
- 150
- 180
- true
- (0, 0, -0.7)
- South
- Slimy
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 190
- true
- (0, 1, 0)
- South
-
-
- 70
- 170
- true
- (0, 1, 0)
- South
-
-
- 150
- 180
- true
- (0, 1, 0)
- South
-
-
-
-
-
-
-
- Receiver_Cowgirl_Stage1
- 150
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 15
- true
- (0.2, 2, 0.5)
- South
-
-
- 30
- 15
- true
- (0.1, 2, 0.5)
- South
-
-
- 110
- 0
- true
- (0, 2, 0.2)
- South
-
-
- 150
- 0
- true
- (0, 2, 0.23)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -15
- true
- South
-
-
- 55
- -15
- true
- (0, 0, -0.05)
- South
-
-
- 110
- 0
- true
- South
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_1.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_1.xml
deleted file mode 100644
index 0e26035..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_1.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
- Initiator_Cowgirl_Stage2_1
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 0, -0.7)
- South
-
-
- 20
- 180
- true
- (0, 0, -0.65)
- South
- Fuck
- Moan
-
-
- 30
- 180
- true
- (0, 0, -0.7)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 1, 0)
- South
-
-
-
-
-
-
-
- Receiver_Cowgirl_Stage2_1
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, 2, 0.23)
- South
-
-
- 10
- 0
- true
- (0, 2, 0.43)
- South
- Moan
-
-
- 30
- 0
- true
- (0, 2, 0.23)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 15
- 0
- true
- (0, 0, -0.04)
- South
-
-
- 30
- 0
- true
- South
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_2.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_2.xml
deleted file mode 100644
index 7ab31ad..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_2.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
- Initiator_Cowgirl_Stage2_2
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 0, -0.7)
- South
-
-
- 20
- 180
- true
- (0, 0, -0.65)
- South
- Fuck
- Moan
-
-
- 30
- 180
- true
- (0, 0, -0.7)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 1, 0)
- South
-
-
-
-
-
-
-
- Receiver_Cowgirl_Stage2_2
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, 2, 0.23)
- South
-
-
- 10
- 7
- true
- (0, 2, 0.43)
- South
- Moan
-
-
- 30
- 0
- true
- (0, 2, 0.23)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 15
- -7
- true
- (0, 0, -0.04)
- South
-
-
- 30
- 0
- true
- South
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_3.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_3.xml
deleted file mode 100644
index e1dc5ba..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage2_3.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
- Initiator_Cowgirl_Stage2_3
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 0, -0.7)
- South
-
-
- 20
- 180
- true
- (0, 0, -0.65)
- South
- Fuck
- Moan
-
-
- 30
- 180
- true
- (0, 0, -0.7)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 1, 0)
- South
-
-
-
-
-
-
-
- Receiver_Cowgirl_Stage2_3
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, 2, 0.23)
- South
-
-
- 10
- 7
- true
- (0, 2, 0.43)
- South
-
-
- 15
- -7
- true
- (0.03, 2, 0.43)
- South
- Moan
-
-
- 30
- 0
- true
- (0, 2, 0.23)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 10
- -7
- true
- (0, 0, -0.07)
- South
-
-
- 15
- 7
- true
- (0, 0, -0.07)
- South
-
-
- 30
- 0
- true
- South
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage3_XRay.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage3_XRay.xml
deleted file mode 100644
index b7be002..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage3_XRay.xml
+++ /dev/null
@@ -1,206 +0,0 @@
-
-
-
- Initiator_Cowgirl_Stage3
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 0, -0.7)
- South
- MoanShort
-
-
- 20
- 180
- true
- (0, 0, -0.6)
- South
- Fuck
-
-
- 25
- 180
- true
- (0, 0, -0.7)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 10
- 0
- true
- (0, 0, 0.03)
- South
-
-
- 25
- 0
- true
- South
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 1, 0)
- South
-
-
-
-
-
-
-
- Receiver_Cowgirl_Stage3
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, 2, 0.23)
- South
-
-
- 7
- 3
- true
- (0, 2, 0.43)
- South
-
-
- 25
- 0
- true
- (0, 2, 0.23)
- South
- Grunt
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 20
- 0
- true
- (0, 0, 0.03)
- South
-
-
- 25
- 0
- true
- South
-
-
-
-
-
- RenderNodeTag_Cowgirl_Xray
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
-
-
- 5
- 0
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
- 1
-
-
- 10
- 0
- true
- (1, 0, 0.3)
- (0.52, 1, 0.52)
- North
- 2
-
-
- 15
- 1
- true
- (1, 0, 0.3)
- (0.52, 1, 0.52)
- North
- 3
-
-
- 20
- 2
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
- 2
-
-
- 25
- 1
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
- 1
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage4.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage4.xml
deleted file mode 100644
index 43c659d..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage4.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-
-
-
- Initiator_Cowgirl_Stage4
- 200
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 0, -0.7)
- South
-
-
- 60
- 180
- true
- (0, 0, -0.7)
- South
-
-
- 70
- 180
- true
- (0, 0, -0.67)
- South
-
-
- 75
- 180
- true
- (0, 0, -0.7)
- South
- Cum
- Scream
-
-
- 125
- 180
- true
- (0, 0, -0.7)
- South
- Cum
-
-
- 135
- 180
- true
- (0, 0, -0.67)
- South
-
-
- 150
- 180
- true
- (0, 0, -0.7)
- South
- Cum
-
-
- 200
- 180
- true
- (0, 0, -0.72)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 75
- 0
- true
- (0, 0, -0.02)
- South
-
-
- 200
- 0
- true
- South
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 1, 0)
- South
-
-
-
-
-
-
-
- Receiver_Cowgirl_Stage4
- 200
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, 2, 0.23)
- South
-
-
- 75
- 0
- true
- (0, 2, 0.26)
- South
- Scream
-
-
- 85
- 0
- true
- (0, 2, 0.23)
- South
-
-
- 135
- 0
- true
- (0, 2, 0.26)
- South
- Scream
-
-
- 200
- 0
- true
- (0, 2, 0.23)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 50
- 0
- true
- (0, 0, 0.02)
- South
-
-
- 100
- 0
- true
- South
-
-
- 150
- 0
- true
- (0, 0, 0.025)
- South
-
-
- 200
- 0
- true
- South
-
-
-
-
-
- RenderNodeTag_Cowgirl_Xray
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 1
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
- 3
-
-
- 40
- 1
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
- 4
-
-
- 105
- 1
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
- 5
-
-
- 150
- 1
- true
- (1, 0, 0.3)
- (0.5, 1, 0.5)
- North
- 5
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage_1_5.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage_1_5.xml
deleted file mode 100644
index 0e9e83b..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/Cowgirl_Stage_1_5.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
- Initiator_Cowgirl_Stage1_5
- 55
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 0, -0.7)
- South
-
-
- 30
- 180
- true
- (0, 0, -0.65)
- South
- Slimy
- Moan
-
-
- 55
- 180
- true
- (0, 0, -0.7)
- South
- Fuck
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 180
- true
- (0, 1, 0)
- South
-
-
-
-
-
-
-
- Receiver_Cowgirl_Stage1_5
- 55
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, 2, 0.23)
- South
-
-
- 25
- 0
- true
- (0, 2, 0.43)
- South
- Moan
-
-
- 55
- 0
- true
- (0, 2, 0.23)
- South
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
- 30
- 0
- true
- (0, 0, -0.04)
- South
-
-
- 55
- 0
- true
- South
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/GroupAnimation_Cowgirl.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/GroupAnimation_Cowgirl.xml
deleted file mode 100644
index c67895b..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/GroupAnimation_Cowgirl.xml
+++ /dev/null
@@ -1,231 +0,0 @@
-
-
-
- GroupAnimation_Cowgirl
- 2
-
-
- 1
-
-
- 1
-
- Initiator_Cowgirl_Stage1
- Receiver_Cowgirl_Stage1
-
-
-
-
-
-
-
- 10
-
-
- 1
-
- Initiator_Cowgirl_Stage1_5
- Receiver_Cowgirl_Stage1_5
-
-
-
-
-
-
-
- 10
-
- GroupAnimation_Cowgirl_Stage2_Branch1
- GroupAnimation_Cowgirl_Stage2_Branch2
- GroupAnimation_Cowgirl_Stage2_Branch3
-
-
-
-
- 20
-
-
- 1
-
- Initiator_Cowgirl_Stage3
- Receiver_Cowgirl_Stage3
-
-
-
-
-
-
-
- 1
-
-
- 1
-
- Initiator_Cowgirl_Stage4
- Receiver_Cowgirl_Stage4
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- Sex_Anal
- Sex_Vaginal
- Sex_Footjob
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
- Sex_Reverse_Anal
- Sex_Reverse_Vaginal
- Sex_Reverse_Footjob
- Rape_Reverse_Anal
- Rape_Reverse_Vaginal
- Rape_Reverse_Footjob
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Offset_Cowgirl_Bottom
- Offset_Cowgirl_Top
-
-
-
-
-
- GroupAnimation_Cowgirl_Stage2_Branch1
- 2
-
-
- 3
-
-
- 1
-
- Initiator_Cowgirl_Stage2_1
- Receiver_Cowgirl_Stage2_1
-
-
-
-
-
-
-
-
- Offset_Cowgirl_Bottom
- Offset_Cowgirl_Top
-
-
-
-
-
- GroupAnimation_Cowgirl_Stage2_Branch2
- 2
-
-
- 3
-
-
- 1
-
- Initiator_Cowgirl_Stage2_2
- Receiver_Cowgirl_Stage2_2
-
-
-
-
-
-
-
-
- Offset_Cowgirl_Bottom
- Offset_Cowgirl_Top
-
-
-
-
-
- GroupAnimation_Cowgirl_Stage2_Branch3
- 2
-
-
- 3
-
-
- 1
-
- Initiator_Cowgirl_Stage2_3
- Receiver_Cowgirl_Stage2_3
-
-
-
-
-
-
-
-
- Offset_Cowgirl_Bottom
- Offset_Cowgirl_Top
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/OffsetDef_Cowgirl.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/OffsetDef_Cowgirl.xml
deleted file mode 100644
index 5a3099b..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/OffsetDef_Cowgirl.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- Offset_Cowgirl_Top
-
-
-
- Human
-
-
- Thin (0, 0, -0.05)
- Female (0, 0, 0)
- Hulk (0, 0, 0.15)
-
-
-
-
-
- Offset_Cowgirl_Bottom
-
-
-
- Human
-
-
- Hulk (0, 0, -0.17)
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Cowgirl/TexPathVariants_Cowgirl.xml b/1.6/Defs/GroupAnimationDefs/Cowgirl/TexPathVariants_Cowgirl.xml
deleted file mode 100644
index 354317e..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cowgirl/TexPathVariants_Cowgirl.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- TexPathVariants_Cowgirl_Xray
-
- AnimationProps/CowgirlXray/XRay2-2
- AnimationProps/CowgirlXray/XRay2-3
- AnimationProps/CowgirlXray/XRay2-4
- AnimationProps/CowgirlXray/XRay2-5
- AnimationProps/CowgirlXray/XRay2-6
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/AnimationPropDef_Saliva.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/AnimationPropDef_Saliva.xml
deleted file mode 100644
index ab62d28..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/AnimationPropDef_Saliva.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
- Saliva
-
-
-
- AnimProp_Saliva
-
- Saliva
- Rimworld_Animations.PawnRenderNode_GraphicVariants
- Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants
- Saliva
- Head
-
- AnimationProps/Saliva/Saliva
- Head
- 95
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/GroupAnimation_Cunnilingus.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/GroupAnimation_Cunnilingus.xml
deleted file mode 100644
index a7e6f5a..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/GroupAnimation_Cunnilingus.xml
+++ /dev/null
@@ -1,309 +0,0 @@
-
-
-
- GroupAnimation_Cunnilingus
- 2
-
-
- 1
-
-
- 1
-
- LesbianInitiator_Stage1
- LesbianReceiver_Stage1
-
-
-
-
-
-
-
- 10
-
- GroupAnimation_Cunnilingus_Stage2_Branch1
- GroupAnimation_Cunnilingus_Stage2_Branch2
- GroupAnimation_Cunnilingus_Stage2_Branch3
-
-
-
-
- 1
-
-
- 1
-
- LesbianInitiator_Stage3
- LesbianReceiver_Stage3
-
-
-
-
-
-
-
- 10
-
- GroupAnimation_Cunnilingus_Stage4_Branch1
- GroupAnimation_Cunnilingus_Stage4_Branch2
- GroupAnimation_Cunnilingus_Stage4_Branch3
-
-
-
-
- 20
-
-
- 1
-
- LesbianInitiator_Stage5
- LesbianReceiver_Stage5
-
-
-
-
-
-
-
- 1
-
-
- 1
-
- LesbianInitiator_Stage6
- LesbianReceiver_Stage6
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- Sex_Cunnilingus
- Rape_Cunnilingus
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
- Sex_Reverse_Cunnilingus
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Offset_Cunnilingus_Initiator
- Offset_Cunnilingus_Receiver
-
-
-
-
-
- GroupAnimation_Cunnilingus_Stage2_Branch1
- 2
-
-
- 3
-
-
- 1
-
- LesbianInitiator_Stage2a
- LesbianReceiver_Stage2a
-
-
-
-
-
-
-
-
- Offset_Cunnilingus_Initiator
- Offset_Cunnilingus_Receiver
-
-
-
-
- GroupAnimation_Cunnilingus_Stage2_Branch2
- 2
-
-
- 3
-
-
- 1
-
- LesbianInitiator_Stage2b
- LesbianReceiver_Stage2b
-
-
-
-
-
-
-
-
- Offset_Cunnilingus_Initiator
- Offset_Cunnilingus_Receiver
-
-
-
-
-
- GroupAnimation_Cunnilingus_Stage2_Branch3
- 2
-
-
- 3
-
-
- 1
-
- LesbianInitiator_Stage2c
- LesbianReceiver_Stage2c
-
-
-
-
-
-
-
-
- Offset_Cunnilingus_Initiator
- Offset_Cunnilingus_Receiver
-
-
-
-
-
- GroupAnimation_Cunnilingus_Stage4_Branch1
- 2
-
-
- 3
-
-
- 1
-
- LesbianInitiator_Stage4a
- LesbianReceiver_Stage4a
-
-
-
-
-
-
-
-
- Offset_Cunnilingus_Initiator
- Offset_Cunnilingus_Receiver
-
-
-
-
-
- GroupAnimation_Cunnilingus_Stage4_Branch2
- 2
-
-
- 3
-
-
- 1
-
- LesbianInitiator_Stage4b
- LesbianReceiver_Stage4b
-
-
-
-
-
-
-
-
- Offset_Cunnilingus_Initiator
- Offset_Cunnilingus_Receiver
-
-
-
-
-
- GroupAnimation_Cunnilingus_Stage4_Branch3
- 2
-
-
- 3
-
-
- 1
-
- LesbianInitiator_Stage4c
- LesbianReceiver_Stage4c
-
-
-
-
-
-
-
-
- Offset_Cunnilingus_Initiator
- Offset_Cunnilingus_Receiver
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/OffsetDef_Cunnilingus.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/OffsetDef_Cunnilingus.xml
deleted file mode 100644
index 2bb7b8b..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/OffsetDef_Cunnilingus.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- Offset_Cunnilingus_Initiator
-
-
-
- Human
-
-
- Thin (0, 0, 0)
-
-
-
-
-
-
- Offset_Cunnilingus_Receiver
-
-
-
- Human
-
-
- Thin (-0.049, 0, 0.057)
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage1.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage1.xml
deleted file mode 100644
index 865f727..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage1.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
- LesbianInitiator_Stage1
- 50
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -5
- true
- (-0.660767, -1, 0.4483777)
- East
-
-
- 50
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- East
-
-
- 50
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage1
- 50
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 100
- true
- (0.6135694, 0, 0.05309737)
- West
-
-
- 50
- 107
- true
- (0.578171, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -25
- true
- West
-
-
- 50
- -40
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2a.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2a.xml
deleted file mode 100644
index 1a12fca..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2a.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
- LesbianInitiator_Stage2a
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 40
- 36
- true
- (-0.1887907, -1, 0.3008848)
- East
-
-
- 50
- 29
- true
- (-0.1887907, -1, 0.3008848)
- East
-
-
- 60
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 40
- -18
- true
- East
-
-
- 50
- 11
- true
- (-0.005899615, 0, -0.05899698)
- East
-
-
- 60
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage2a
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 107
- true
- (0.578171, 0, 0.06489658)
- West
- Slimy
-
-
- 15
- 112
- true
- (0.578171, 0, 0.06489658)
- West
-
-
- 28
- 104
- true
- (0.578171, 0, 0.06489658)
- West
-
-
- 45
- 111
- true
- (0.578171, 0, 0.06489658)
- West
- Moan
-
-
- 60
- 107
- true
- (0.578171, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -40
- true
- West
-
-
- 50
- -26
- true
- West
-
-
- 60
- -40
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2b.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2b.xml
deleted file mode 100644
index 035792f..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2b.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
- LesbianInitiator_Stage2b
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 40
- 36
- true
- (-0.1887907, -1, 0.3008848)
- East
-
-
- 50
- 29
- true
- (-0.1887907, -1, 0.3008848)
- East
-
-
- 60
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 40
- -18
- true
- East
-
-
- 50
- 11
- true
- (-0.005899615, 0, -0.05899698)
- East
-
-
- 60
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage2b
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 107
- true
- (0.578171, 0, 0.06489658)
- West
- Slimy
-
-
- 15
- 112
- true
- (0.578171, 0, 0.06489658)
- West
- Moan
-
-
- 28
- 104
- true
- (0.578171, 0, 0.06489658)
- West
-
-
- 45
- 111
- true
- (0.578171, 0, 0.06489658)
- West
-
-
- 60
- 107
- true
- (0.578171, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -40
- true
- South
-
-
- 20
- -38
- true
- South
-
-
- 60
- -40
- true
- South
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2c.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2c.xml
deleted file mode 100644
index d35dfea..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage2c.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
- LesbianInitiator_Stage2c
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 40
- 36
- true
- (-0.2359883, -1, 0.3185842)
- East
- Moan
-
-
- 60
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 40
- -18
- true
- (-0.03539836, 0, -0.02949858)
- East
-
-
- 50
- 11
- true
- (-0.005899615, 0, -0.05899698)
- East
-
-
- 60
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage2c
- 60
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 107
- true
- (0.578171, 0, 0.06489658)
- West
- Slimy
-
-
- 15
- 117
- true
- (0.5309734, 0, 0.1120945)
- (1, 1, 0.97)
- West
- MoanShort
-
-
- 60
- 107
- true
- (0.578171, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -40
- true
- West
-
-
- 50
- -26
- true
- West
-
-
- 60
- -40
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage3_LoopOnce.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage3_LoopOnce.xml
deleted file mode 100644
index 507db26..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage3_LoopOnce.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
- LesbianInitiator_Stage3
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 41
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 15
- 33
- true
- (-0.2123895, -1, 0.2654868)
- East
- Slimy
-
-
- 30
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage3
- 30
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 107
- true
- (0.578171, 0, 0.06489658)
- West
-
-
- 30
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -40
- true
- West
-
-
- 30
- -12
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.6489678, -0.5, 0.259587)
- North
-
-
-
- 12
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4a.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4a.xml
deleted file mode 100644
index 899ebff..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4a.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-
-
-
- LesbianInitiator_Stage4a
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 15
- 35
- true
- (-0.2359883, -1, 0.2477875)
- East
-
-
- 25
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 10
- -6
- true
- (-0.05309721, 0, -0.04129797)
- East
-
-
- 20
- 5
- true
- (-0.0235988, 0, -0.03539819)
- East
-
-
- 25
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage4a
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
- Slimy
-
-
- 5
- 117
- true
- (0.5073743, 0, 0.07669616)
- West
-
-
- 10
- 119
- true
- (0.5073743, 0, 0.07669616)
- West
- Slimy
- MoanShort
-
-
- 25
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -12
- true
- West
-
-
- 15
- -8
- true
- (0.005899615, 0, 0.02359879)
- West
-
-
- 25
- -12
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
- 10
- 0
- true
- (0.2064899, -0.5, 0.60177)
- North
-
-
- 20
- 0
- true
- (0.2477879, -0.5, 0.5545721)
- North
-
-
- 25
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4b.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4b.xml
deleted file mode 100644
index a1a186b..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4b.xml
+++ /dev/null
@@ -1,173 +0,0 @@
-
-
-
- LesbianInitiator_Stage4b
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 15
- 35
- true
- (-0.2359883, -1, 0.2477875)
- East
-
-
- 25
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 10
- -6
- true
- (-0.05309721, 0, -0.04129797)
- East
-
-
- 20
- 5
- true
- (-0.0235988, 0, -0.03539819)
- East
-
-
- 25
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage4b
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
- Slimy
-
-
- 15
- 125
- true
- (0.5073743, 0, 0.07669616)
- West
- Slimy
- Grunt
-
-
- 25
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -12
- true
- West
-
-
- 15
- -26
- true
- (0.005899615, 0, 0.02359879)
- West
-
-
- 25
- -12
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
- 10
- 0
- true
- (0.2064899, -0.5, 0.60177)
- North
-
-
- 20
- 0
- true
- (0.2477879, -0.5, 0.5545721)
- North
-
-
- 25
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4c.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4c.xml
deleted file mode 100644
index a5362ee..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage4c.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-
-
-
- LesbianInitiator_Stage4c
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 15
- 35
- true
- (-0.2359883, -1, 0.2477875)
- East
-
-
- 25
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 10
- -6
- true
- (-0.05309721, 0, -0.04129797)
- East
-
-
- 20
- 5
- true
- (-0.0235988, 0, -0.03539819)
- East
-
-
- 25
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage4c
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
- Slimy
-
-
- 5
- 117
- true
- (0.5073743, 0, 0.07669616)
- West
-
-
- 10
- 119
- true
- (0.5073743, 0, 0.07669616)
- West
- Slimy
- MoanShort
-
-
- 25
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -12
- true
- South
-
-
- 15
- -8
- true
- (0.005899615, 0, 0.02359879)
- South
-
-
- 25
- -12
- true
- South
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
- 10
- 0
- true
- (0.2064899, -0.5, 0.60177)
- North
-
-
- 20
- 0
- true
- (0.2477879, -0.5, 0.5545721)
- North
-
-
- 25
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage5.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage5.xml
deleted file mode 100644
index 4f739d6..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage5.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
- LesbianInitiator_Stage5
- 20
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 32
- true
- (-0.2418879, -1, 0.259587)
- East
-
-
- 7
- 35
- true
- (-0.2123895, -1, 0.2654868)
- East
-
-
- 14
- 28
- true
- (-0.2418879, -1, 0.2359883)
- East
-
-
- 20
- 32
- true
- (-0.2418879, -1, 0.259587)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 7
- 3
- true
- (-0.06489678, 0, 0.02359915)
- East
-
-
- 14
- 3
- true
- (-0.02949841, 0, -0.02359843)
- East
-
-
- 20
- 3
- true
- East
-
-
-
-
-
-
-
- LesbianReceiver_Stage5
- 20
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 121
- true
- (0.5073743, 0, 0.06489658)
- West
- Slimy
-
-
- 10
- 114
- true
- (0.4896755, 0, 0.04129779)
- West
- Slimy
- Grunt
-
-
- 20
- 121
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -12
- true
- West
-
-
- 10
- -5
- true
- West
-
-
- 20
- -12
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.2713863, -0.5, 0.6135693)
- North
-
-
- 8
- 0
- true
- (0.2477879, -0.5, 0.6548674)
- North
-
-
- 15
- 0
- true
- (0.2241894, -0.5, 0.6312683)
- North
-
-
- 20
- 0
- true
- (0.2772866, -0.5, 0.6135693)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage6.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage6.xml
deleted file mode 100644
index 03722a8..0000000
--- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/Stage6.xml
+++ /dev/null
@@ -1,275 +0,0 @@
-
-
-
- LesbianInitiator_Stage6
- 130
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 32
- true
- (-0.2418879, -1, 0.259587)
- East
-
-
- 10
- 37
- true
- (-0.2418879, -1, 0.259587)
- East
-
-
- 15
- 26
- true
- (-0.2418879, -1, 0.259587)
- East
-
-
- 30
- 35
- true
- (-0.2418879, -1, 0.259587)
- East
-
-
- 35
- 29
- true
- (-0.2359883, -1, 0.2536873)
- East
- Moan
-
-
- 100
- 14
- true
- (-0.4011799, -1, 0.3126844)
- East
-
-
- 130
- 4
- true
- (-0.501475, -1, 0.3362832)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 40
- -8
- true
- East
-
-
- 130
- 0
- true
- East
-
-
-
-
-
- Saliva
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -15
- true
- (0.1356925, -2, -0.1061947)
- (0.3215362, 1, 0.6224177)
- North
-
-
- 130
- 24
- true
- (0.3244829, -2, -0.2359883)
- (0.3215362, 1, 0.6224177)
- North
-
-
-
-
-
-
-
- LesbianReceiver_Stage6
- 130
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 121
- true
- (0.5073743, 0, 0.06489658)
- West
- Cum
- Scream
-
-
- 10
- 115
- true
- (0.5073743, 0, 0.06489658)
- West
- Slimy
-
-
- 15
- 128
- true
- (0.5073743, 0, 0.06489658)
- West
- Cum
-
-
- 30
- 112
- true
- (0.5073743, 0, 0.06489658)
- West
- Slimy
- Scream
-
-
- 35
- 120
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
- 50
- 113
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
- 100
- 105
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
- 130
- 101
- true
- (0.5073743, 0, 0.06489658)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -12
- true
- West
-
-
- 20
- -20
- true
- West
-
-
- 40
- -12
- true
- West
-
-
- 130
- -26
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.2772866, -0.5, 0.6135693)
- North
-
-
- 10
- 0
- true
- (0.2890859, -0.5, 0.5663717)
- North
-
-
- 15
- 0
- true
- (0.2182891, -0.5, 0.6666666)
- North
-
-
- 30
- 0
- true
- (0.2831856, -0.5, 0.5781713)
- North
-
-
- 45
- 0
- true
- (0.2064892, -0.5, 0.6430678)
- North
-
-
- 70
- 0
- false
- (0.3303832, -0.5, 0.2654868)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/GroupAnimation_DP.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/GroupAnimation_DP.xml
deleted file mode 100644
index a5bdd8e..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/GroupAnimation_DP.xml
+++ /dev/null
@@ -1,389 +0,0 @@
-
-
-
- GroupAnimation_DoublePenetration
- 3
-
-
- 1
-
-
- 1
-
- InitiatorPawn_DP_Stage1
- ReceiverPawn_DP_Stage1
- InitiatorPawn2_DP_Stage1
-
-
-
-
-
-
-
- 6
-
- GroupAnimation_DP_Stage2_Branch1
- GroupAnimation_DP_Stage2_Branch2
- GroupAnimation_DP_Stage2_Branch3
- GroupAnimation_DP_Stage2_Branch4
-
-
-
-
- 25
-
-
- 1
-
- InitiatorPawn_DP_Stage3
- ReceiverPawn_DP_Stage3
- InitiatorPawn2_DP_Stage3
-
-
-
-
-
-
-
- 30
-
-
- 1
-
- InitiatorPawn_DP_Stage4
- ReceiverPawn_DP_Stage4
- InitiatorPawn2_DP_Stage4
-
-
-
-
-
-
- 1
-
- GroupAnimation_DP_Stage5_Branch1
- GroupAnimation_DP_Stage5_Branch2
- GroupAnimation_DP_Stage5_Branch3
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- Sex_Reverse_DoublePenetration
- Sex_Reverse_DoublePenetrationM
- Sex_Reverse_Anal
- Sex_Reverse_Vaginal
- Rape_Reverse_DoublePenetration
- Rape_Reverse_DoublePenetrationM
- Rape_Reverse_Anal
- Rape_Reverse_Vaginal
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
- Sex_DoublePenetration
- Sex_DoublePenetrationM
- Sex_Anal
- Sex_Vaginal
- Rape_DoublePenetration
- Rape_DoublePenetrationM
- Rape_Anal
- Rape_Vaginal
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
-
-
- GroupAnimation_DP_Stage2_Branch1
- 3
-
-
- 3
-
-
- 1
-
- InitiatorPawn_DP_Stage2a
- ReceiverPawn_DP_Stage2a
- InitiatorPawn2_DP_Stage2a
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
- GroupAnimation_DP_Stage2_Branch2
- 3
-
-
- 3
-
-
- 1
-
- InitiatorPawn_DP_Stage2b
- ReceiverPawn_DP_Stage2b
- InitiatorPawn2_DP_Stage2b
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
- GroupAnimation_DP_Stage2_Branch3
- 3
-
-
- 3
-
-
- 1
-
- InitiatorPawn_DP_Stage2c
- ReceiverPawn_DP_Stage2c
- InitiatorPawn2_DP_Stage2c
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
- GroupAnimation_DP_Stage2_Branch4
- 3
-
-
- 1
-
-
- 1
-
- InitiatorPawn_DP_Stage2a
- ReceiverPawn_DP_Stage2a
- InitiatorPawn2_DP_Stage2a
-
-
-
-
-
-
- 1
-
-
- 1
-
- InitiatorPawn_DP_Stage2d
- ReceiverPawn_DP_Stage2d
- InitiatorPawn2_DP_Stage2d
-
-
-
-
-
-
-
- 2
-
-
- 1
-
- InitiatorPawn_DP_Stage2b
- ReceiverPawn_DP_Stage2b
- InitiatorPawn2_DP_Stage2b
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
- GroupAnimation_DP_Stage5_Branch1
- 3
-
-
- 1
-
-
- 1
-
- InitiatorPawn_DP_Stage5a
- ReceiverPawn_DP_Stage5a
- InitiatorPawn2_DP_Stage5a
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
- GroupAnimation_DP_Stage5_Branch2
- 3
-
-
- 1
-
-
- 1
-
- InitiatorPawn_DP_Stage5b
- ReceiverPawn_DP_Stage5b
- InitiatorPawn2_DP_Stage5b
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
- GroupAnimation_DP_Stage5_Branch3
- 3
-
-
- 1
-
-
- 1
-
- InitiatorPawn_DP_Stage5c
- ReceiverPawn_DP_Stage5c
- InitiatorPawn2_DP_Stage5c
-
-
-
-
-
-
-
-
- Offset_Placeholder
- Offset_DP_ReceiverPawn
- Offset_Placeholder
-
-
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/OffsetDef_DP.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/OffsetDef_DP.xml
deleted file mode 100644
index 3a15e52..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/OffsetDef_DP.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- Offset_DP_ReceiverPawn
-
-
-
- Human
-
-
- Female (0.1, 0, -0.1)
- Thin (0, 0, -0.15) -19
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage1.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage1.xml
deleted file mode 100644
index 055e2f6..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage1.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage1
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -80
- true
- (-0.6, -1, -0.42)
- East
-
-
- 20
- -82
- true
- (-0.6, -1, -0.42)
- East
-
-
- 40
- -90
- true
- (-0.6, -1, -0.37)
- East
- Fuck
-
-
- 80
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- East
-
-
- 40
- 10
- true
- East
-
-
- 80
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage1
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -40
- true
- (-0.6, 0, 0.15)
- West
- Grunt
-
-
- 40
- -30
- true
- (-0.4, 0, 0.1)
- West
-
-
- 80
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 40
- 0
- true
- South
-
-
- 80
- 0
- true
- South
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage1
- 80
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -10
- true
- (0.25, -1, 0.2)
- West
-
-
- 30
- 5
- true
- (0.25, -1, 0.2)
- West
- Fuck
-
-
- 40
- 25
- true
- (0.2, -1, 0.2)
- West
-
-
- 80
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 40
- -22
- true
- West
-
-
- 80
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2a.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2a.xml
deleted file mode 100644
index ab954dc..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2a.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage2a
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 30
- -70
- true
- (-0.6, -1, -0.37)
- East
- Fuck
- Moan
-
-
- 40
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 30
- 0
- true
- East
-
-
- 40
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage2a
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 30
- -33
- true
- (-0.4, 0, 0.1)
- West
- MoanShort
-
-
- 40
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage2a
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 30
- -15
- true
- (0.3, -1, 0.2)
- West
- Fuck
-
-
- 40
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 30
- 0
- true
- West
-
-
- 40
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2b.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2b.xml
deleted file mode 100644
index 60ee1e8..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2b.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage2b
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 30
- -70
- true
- (-0.6, -1, -0.37)
- East
- Fuck
-
-
- 40
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 30
- 0
- true
- East
-
-
- 40
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage2b
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
- MoanShort
-
-
- 30
- -33
- true
- (-0.4, 0, 0.1)
- West
-
-
- 40
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage2b
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 30
- -15
- true
- (0.3, -1, 0.2)
- West
- Fuck
- Moan
-
-
- 40
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 30
- 0
- true
- West
-
-
- 40
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2c.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2c.xml
deleted file mode 100644
index fa7d8cc..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2c.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage2c
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 15
- -70
- true
- (-0.6, -1, -0.37)
- East
- Fuck
-
-
- 20
- -83
- true
- (-0.6, -1, -0.37)
- East
-
-
- 40
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 15
- 0
- true
- East
-
-
- 40
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage2c
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 20
- -30
- true
- (-0.38, 0, 0.08)
- West
- Grunt
-
-
- 30
- -33
- true
- (-0.4, 0, 0.1)
- West
-
-
- 40
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- South
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage2c
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 30
- -15
- true
- (0.3, -1, 0.2)
- West
- Fuck
-
-
- 40
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 30
- 0
- true
- West
-
-
- 40
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2d.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2d.xml
deleted file mode 100644
index 2cd98f9..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage2d.xml
+++ /dev/null
@@ -1,234 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage2d
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 30
- -70
- true
- (-0.6, -1, -0.37)
- East
- Fuck
-
-
- 40
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 30
- 0
- true
- East
-
-
- 40
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage2d
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 10
- -33
- true
- (-0.48, 0, 0.12)
- West
-
-
- 15
- -39
- true
- (-0.5743952, 0, 0.1317991)
- West
-
-
- 30
- -33
- true
- (-0.4, 0, 0.1)
- West
-
-
- 40
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 15
- 0
- true
- South
- Scream
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage2d
- 40
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
- Fuck
-
-
- 30
- -15
- true
- (0.3, -1, 0.2)
- West
-
-
- 40
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 30
- 0
- true
- West
-
-
- 40
- -22
- true
- West
-
-
-
-
-
- RenderNodeTag_Hand
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0.5, 1, 0)
- North
-
-
- 4
- 0
- true
- (0, 1, -0.1)
- North
-
-
- 12
- 0
- true
- (-0.1, 1, -0.03)
- North
- Slap
-
-
- 15
- 0
- false
- (-0.1, 1, -0.03)
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage3.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage3.xml
deleted file mode 100644
index 33eeda1..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage3.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage3
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 15
- -50
- true
- (-0.64, -1, -0.3)
- East
- Fuck
- Moan
-
-
- 25
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 17
- -10
- true
- East
-
-
- 25
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage3
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 6
- -25
- true
- (-0.5, 0, 0.18)
- West
- Grunt
-
-
- 25
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 20
- 5
- true
- West
-
-
- 25
- 0
- true
- West
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage3
- 25
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 15
- -15
- true
- (0.2, -1, 0.28)
- West
- Fuck
- Moan
-
-
- 25
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 17
- 0
- true
- West
-
-
- 25
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage4.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage4.xml
deleted file mode 100644
index 363b6dc..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage4.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage4
- 17
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 8
- -60
- true
- (-0.64, -1, -0.4)
- East
- Fuck
-
-
- 17
- -87
- true
- (-0.6, -1, -0.37)
- East
- Grunt
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 8
- -10
- true
- East
-
-
- 17
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage4
- 17
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 12
- -25
- true
- (-0.56, 0, 0.22)
- West
- Grunt
-
-
- 17
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 8
- -8
- true
- West
-
-
- 17
- 0
- true
- West
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage4
- 17
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 8
- 0
- true
- (0.23, -1, 0.28)
- West
- Fuck
- MoanShort
-
-
- 17
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 8
- 0
- true
- West
-
-
- 17
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5_Base.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5_Base.xml
deleted file mode 100644
index 9a800d4..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5_Base.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5a.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5a.xml
deleted file mode 100644
index 6e4937c..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5a.xml
+++ /dev/null
@@ -1,293 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage5a
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 17
- -68
- true
- (-0.6, -1, -0.37)
- East
-
-
- 25
- -95
- true
- (-0.6, -1, -0.37)
- East
- Fuck
-
-
- 50
- -90
- true
- (-0.6, -1, -0.37)
- East
- Cum
-
-
- 55
- -95
- true
- (-0.6, -1, -0.37)
- East
-
-
- 100
- -90
- true
- (-0.6, -1, -0.37)
- East
- Cum
- Scream
-
-
- 105
- -95
- true
- (-0.6, -1, -0.37)
- East
-
-
- 180
- -90
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 18
- 20
- true
- East
-
-
- 180
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage5a
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 18
- -40
- true
- (-0.45, 0, 0.12)
- West
- Scream
-
-
- 60
- -35
- true
- (-0.55, 0, 0.12)
- West
-
-
- 80
- -38
- true
- (-0.55, 0, 0.12)
- West
-
-
- 100
- -40
- true
- (-0.55, 0, 0.12)
- West
- Scream
-
-
- 180
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 60
- 10
- true
- West
-
-
- 70
- 30
- true
- West
-
-
- 180
- 10
- true
- West
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage5a
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 18
- -10
- true
- (0.33, -1, 0.2)
- West
-
-
- 23
- 28
- true
- (0.16, -1, 0.2)
- West
- Fuck
-
-
- 70
- 20
- true
- (0.16, -1, 0.2)
- West
- Cum
-
-
- 75
- 28
- true
- (0.16, -1, 0.2)
- West
-
-
- 130
- 20
- true
- (0.16, -1, 0.2)
- West
- Cum
- Grunt
-
-
- 135
- 28
- true
- (0.16, -1, 0.2)
- West
-
-
- 180
- 20
- true
- (0.16, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 17
- -10
- true
- West
-
-
- 180
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5b.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5b.xml
deleted file mode 100644
index 8842f17..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5b.xml
+++ /dev/null
@@ -1,281 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage5b
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 17
- -68
- true
- (-0.6, -1, -0.37)
- East
- Fuck
-
-
- 25
- -95
- true
- (-0.6, -1, -0.37)
- East
-
-
- 50
- -90
- true
- (-0.6, -1, -0.37)
- East
- Cum
-
-
- 55
- -95
- true
- (-0.6, -1, -0.37)
- East
- Moan
-
-
- 100
- -90
- true
- (-0.6, -1, -0.37)
- East
- Cum
-
-
- 105
- -95
- true
- (-0.6, -1, -0.37)
- East
-
-
- 180
- -90
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 18
- 20
- true
- East
-
-
- 180
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage5b
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 18
- -40
- true
- (-0.45, 0, 0.12)
- West
- Scream
-
-
- 60
- -35
- true
- (-0.55, 0, 0.12)
- West
-
-
- 100
- -60
- true
- (-0.6, 0, 0)
- West
- Scream
-
-
- 180
- -60
- true
- (-0.6, 0, -0.02)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 70
- 30
- true
- South
-
-
- 180
- 10
- true
- South
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage5b
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 18
- -10
- true
- (0.33, -1, 0.2)
- West
- Fuck
-
-
- 23
- 28
- true
- (0.16, -1, 0.2)
- West
- Grunt
-
-
- 70
- 20
- true
- (0.16, -1, 0.2)
- West
- Cum
-
-
- 75
- 28
- true
- (0.16, -1, 0.2)
- West
- Grunt
-
-
- 130
- 20
- true
- (0.16, -1, 0.2)
- West
- Cum
-
-
- 135
- 28
- true
- (0.16, -1, 0.2)
- West
-
-
- 180
- 20
- true
- (0.16, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 17
- -10
- true
- West
-
-
- 180
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5c.xml b/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5c.xml
deleted file mode 100644
index a2a57de..0000000
--- a/1.6/Defs/GroupAnimationDefs/DoublePenetration/Stage5c.xml
+++ /dev/null
@@ -1,330 +0,0 @@
-
-
-
- InitiatorPawn_DP_Stage5c
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -87
- true
- (-0.6, -1, -0.37)
- East
-
-
- 17
- -68
- true
- (-0.6, -1, -0.37)
- East
- Fuck
-
-
- 25
- -95
- true
- (-0.6, -1, -0.37)
- East
-
-
- 50
- -90
- true
- (-0.6, -1, -0.37)
- East
- Cum
-
-
- 55
- -95
- true
- (-0.6, -1, -0.37)
- East
- Grunt
-
-
- 100
- -90
- true
- (-0.6, -1, -0.37)
- East
- Cum
-
-
- 105
- -95
- true
- (-0.6, -1, -0.37)
- East
-
-
- 180
- -90
- true
- (-0.6, -1, -0.37)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- East
-
-
- 18
- 20
- true
- East
-
-
- 180
- 10
- true
- East
-
-
-
-
-
-
-
- ReceiverPawn_DP_Stage5c
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- (-0.45, 0, 0.12)
- West
-
-
- 18
- -40
- true
- (-0.45, 0, 0.12)
- West
-
-
- 23
- -30
- true
- (-0.45, 0, 0.12)
- West
- Scream
-
-
- 60
- -35
- true
- (-0.5, 0, 0.12)
- West
- Scream
-
-
- 65
- -30
- true
- (-0.5, 0, 0.12)
- West
-
-
- 100
- -35
- true
- (-0.5, 0, 0.12)
- West
-
-
- 105
- -30
- true
- (-0.5, 0, 0.12)
- West
-
-
- 140
- -35
- true
- (-0.5, 0, 0.12)
- West
- Scream
-
-
- 180
- -25
- true
- (-0.5, 0, 0.18)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- West
-
-
- 30
- 25
- true
- (0, 0, -0.06)
- West
-
-
- 90
- 30
- true
- (0, 0, -0.06)
- West
-
-
- 105
- 50
- true
- (0, 0, -0.06)
- West
-
-
- 160
- 46
- true
- West
-
-
- 180
- 0
- true
- West
-
-
-
-
-
-
-
- InitiatorPawn2_DP_Stage5c
- 180
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- (0.2, -1, 0.2)
- West
-
-
- 18
- -10
- true
- (0.33, -1, 0.2)
- West
- Fuck
-
-
- 23
- 28
- true
- (0.16, -1, 0.2)
- West
-
-
- 70
- 20
- true
- (0.16, -1, 0.2)
- West
- Cum
-
-
- 75
- 28
- true
- (0.16, -1, 0.2)
- West
- Grunt
-
-
- 130
- 20
- true
- (0.16, -1, 0.2)
- West
- Cum
-
-
- 135
- 28
- true
- (0.16, -1, 0.2)
- West
-
-
- 180
- 20
- true
- (0.16, -1, 0.2)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -22
- true
- West
-
-
- 17
- -10
- true
- West
-
-
- 180
- -22
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/GroupAnimation_Missionary.xml b/1.6/Defs/GroupAnimationDefs/Missionary/GroupAnimation_Missionary.xml
deleted file mode 100644
index a9702dd..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/GroupAnimation_Missionary.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-
-
-
- GroupAnimation_Missionary
- 2
-
-
- 1
-
-
- 1
-
- InitiatorPawn_Missionary_Stage1
- ReceiverPawn_Missionary_Stage1
-
-
-
-
-
-
-
- 5
-
- Missionary_Stage2_Branch1
- Missionary_Stage2_Branch2
- Missionary_Stage2_Branch3
-
-
-
-
-
- 1
-
-
- 1
-
- InitiatorPawn_Missionary_Stage3
- ReceiverPawn_Missionary_Stage3
-
-
-
-
-
-
-
- 20
-
-
- 1
-
- InitiatorPawn_Missionary_Stage4
- ReceiverPawn_Missionary_Stage4
-
-
-
-
-
-
-
- 35
-
-
- 1
-
- InitiatorPawn_Missionary_Stage5
- ReceiverPawn_Missionary_Stage5
-
-
-
-
-
-
-
- 1
-
-
- 1
-
- InitiatorPawn_Missionary_Stage6
- ReceiverPawn_Missionary_Stage6
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- Sex_Anal
- Sex_Vaginal
- Sex_Footjob
- Rape_Vaginal
- Rape_Anal
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
- Sex_Reverse_Anal
- Sex_Reverse_Vaginal
- Sex_Reverse_Footjob
- Rape_Reverse_Anal
- Rape_Reverse_Vaginal
- Rape_Reverse_Footjob
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Offset_Missionary_Initiator
- Offset_Missionary_Receiver
-
-
-
-
-
- Missionary_Stage2_Branch1
- 2
-
-
- 3
-
-
- 1
-
- InitiatorPawn_Missionary_Stage2a
- ReceiverPawn_Missionary_Stage2a
-
-
-
-
-
-
-
-
- Offset_Missionary_Initiator
- Offset_Missionary_Receiver
-
-
-
-
-
- Missionary_Stage2_Branch2
- 2
-
-
- 3
-
-
- 1
-
- InitiatorPawn_Missionary_Stage2b
- ReceiverPawn_Missionary_Stage2b
-
-
-
-
-
-
-
-
- Offset_Missionary_Initiator
- Offset_Missionary_Receiver
-
-
-
-
-
- Missionary_Stage2_Branch3
- 2
-
-
- 3
-
-
- 1
-
- InitiatorPawn_Missionary_Stage2c
- ReceiverPawn_Missionary_Stage2c
-
-
-
-
-
-
-
-
- Offset_Missionary_Initiator
- Offset_Missionary_Receiver
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/OffsetDef_Missionary.xml b/1.6/Defs/GroupAnimationDefs/Missionary/OffsetDef_Missionary.xml
deleted file mode 100644
index 0328903..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/OffsetDef_Missionary.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- Offset_Missionary_Receiver
-
-
-
- Human
-
-
- Thin (-0.1, 0, 0.05)
- Female (0, 0, 0)
- Hulk (0.1, 0, 0.1)
-
-
-
-
-
-
- Offset_Missionary_Initiator
-
-
-
- Human
-
-
- Hulk (0, 0, 0.179)
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage1.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage1.xml
deleted file mode 100644
index 3d76c06..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage1.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage1
- 100
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (-0.85, 0, 0.5)
- East
-
-
- 30
- 0
- true
- (-0.79, 0, 0.44)
- East
-
-
- 60
- 20
- true
- (-0.75, 0, 0.38)
- East
- Fuck
- Grunt
-
-
- 66
- -10
- true
- (-0.6, 0, 0.38)
- East
-
-
- 100
- 10
- true
- (-0.75, 0, 0.38)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- East
-
-
- 40
- 13
- true
- East
-
-
- 100
- 3
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- true
- (0, -3, 0)
- East
-
-
- 20
- 0
- true
- (0, -3, 0)
- East
-
-
- 60
- 30
- true
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage1
- 100
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 90
- true
- (0, -1, 0)
- West
-
-
- 60
- 90
- true
- (0.03, -1, 0)
- West
-
-
- 66
- 90
- true
- (0.1, -1, 0)
- West
- Grunt
-
-
- 100
- 90
- true
- (0.03, -1, 0)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -15
- true
- West
-
-
- 60
- -20
- true
- West
-
-
- 66
- 0
- true
- West
-
-
- 100
- -20
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage2.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage2.xml
deleted file mode 100644
index 2d2479e..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage2.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage2a
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- (-0.75, 0, 0.38)
- East
- Fuck
-
-
- 5
- -25
- true
- (-0.6, 0, 0.38)
- East
- Moan
-
-
- 35
- 10
- true
- (-0.75, 0, 0.38)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 5
- 20
- true
- East
-
-
- 35
- 3
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- (0, -3, 0)
- East
-
-
- 5
- 60
- true
- (0, -3, 0)
- East
-
-
- 35
- 30
- true
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage2a
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 90
- true
- (0.03, -1, 0)
- West
-
-
- 3
- 90
- true
- (0.03, -1, 0)
- West
- Moan
-
-
- 10
- 88
- true
- (0.12, -1, 0.03)
- West
-
-
- 35
- 90
- true
- (0.03, -1, 0)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- West
-
-
- 10
- -10
- true
- West
-
-
- 35
- -20
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage2b.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage2b.xml
deleted file mode 100644
index b7817a4..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage2b.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage2b
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- (-0.75, 0, 0.38)
- East
- Fuck
-
-
- 5
- -25
- true
- (-0.6, 0, 0.38)
- East
- Moan
-
-
- 35
- 10
- true
- (-0.75, 0, 0.38)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 5
- 20
- true
- East
-
-
- 35
- 3
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- (0, -3, 0)
- East
-
-
- 5
- 60
- true
- (0, -3, 0)
- East
-
-
- 35
- 30
- true
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage2b
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 90
- true
- (0.03, -1, 0)
- West
-
-
- 3
- 90
- true
- (0.03, -1, 0)
- West
- Moan
-
-
- 10
- 88
- true
- (0.12, -1, 0.03)
- West
-
-
- 35
- 90
- true
- (0.03, -1, 0)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- South
-
-
- 10
- -17
- true
- South
-
-
- 35
- -20
- true
- South
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage2c.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage2c.xml
deleted file mode 100644
index b4179bf..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage2c.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage2c
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- (-0.75, 0, 0.38)
- East
- Fuck
-
-
- 5
- -25
- true
- (-0.6, 0, 0.38)
- East
- Moan
-
-
- 35
- 10
- true
- (-0.75, 0, 0.38)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- East
-
-
- 5
- 20
- true
- East
-
-
- 35
- 3
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- (0, -3, 0)
- East
-
-
- 5
- 60
- true
- (0, -3, 0)
- East
-
-
- 35
- 30
- true
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage2c
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 90
- true
- (0.03, -1, 0)
- West
-
-
- 3
- 90
- true
- (0.03, -1, 0)
- West
-
-
- 10
- 88
- true
- (0.12, -1, 0.03)
- West
- Moan
-
-
- 35
- 90
- true
- (0.03, -1, 0)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- North
-
-
- 10
- -17
- true
- North
-
-
- 35
- -20
- true
- North
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage3_DontLoop.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage3_DontLoop.xml
deleted file mode 100644
index 1bcde62..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage3_DontLoop.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage3
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 10
- true
- (-0.75, 0, 0.38)
- (1, 1, 1)
- East
-
-
- 35
- 15
- true
- (-0.65, 0, 0.42)
- (1, 1, 1)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 3
- true
- (1, 1, 1)
- East
-
-
- 35
- 20
- true
- (1, 1, 1)
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- (1, 1, 1)
- (0, -3, 0)
- East
-
-
- 35
- 30
- true
- (1, 1, 1)
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage3
- 35
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 90
- true
- (0.03, -1, 0)
- (1, 1, 1)
- West
-
-
- 35
- 95
- true
- (0.07, -1, 0)
- (1, 1, 1)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- (1, 1, 1)
- West
-
-
- 35
- -20
- true
- (1, 1, 1)
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage4.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage4.xml
deleted file mode 100644
index b36dddf..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage4.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage4
- 20
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 15
- true
- (-0.65, 0, 0.42)
- East
- Fuck
-
-
- 5
- 0
- true
- (-0.42, 0, 0.42)
- East
- MoanShort
-
-
- 20
- 15
- true
- (-0.65, 0, 0.42)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- East
-
-
- 5
- 30
- true
- East
-
-
- 20
- 20
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 35
- 30
- true
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage4
- 20
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 95
- true
- (0.07, -1, 0)
- West
-
-
- 5
- 100
- true
- (0.2, -1, 0)
- West
- MoanShort
-
-
- 20
- 95
- true
- (0.07, -1, 0)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- West
-
-
- 13
- -26
- true
- West
-
-
- 20
- -20
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage5.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage5.xml
deleted file mode 100644
index ac7357c..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage5.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage5
- 13
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 15
- true
- (-0.65, 0, 0.42)
- East
- Fuck
-
-
- 5
- 0
- true
- (-0.45, 0, 0.42)
- East
- Grunt
-
-
- 13
- 15
- true
- (-0.65, 0, 0.42)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- East
-
-
- 5
- 40
- true
- East
-
-
- 20
- 20
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 35
- 30
- true
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage5
- 13
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 95
- true
- (0.07, -1, 0)
- West
-
-
- 3
- 100
- true
- (0.16, -1, 0)
- West
- Grunt
-
-
- 13
- 95
- true
- (0.07, -1, 0)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- West
-
-
- 3
- -34
- true
- West
-
-
- 13
- -20
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/Missionary/Stage6.xml b/1.6/Defs/GroupAnimationDefs/Missionary/Stage6.xml
deleted file mode 100644
index e56067a..0000000
--- a/1.6/Defs/GroupAnimationDefs/Missionary/Stage6.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-
-
-
- InitiatorPawn_Missionary_Stage6
- 200
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 15
- true
- (-0.65, 0, 0.42)
- East
-
-
- 13
- -20
- true
- (-0.43, 0, 0.42)
- East
- Fuck
- Scream
-
-
- 80
- -15
- true
- (-0.49, 0, 0.42)
- East
- Cum
-
-
- 85
- -20
- true
- (-0.43, 0, 0.42)
- East
-
-
- 150
- -15
- true
- (-0.49, 0, 0.42)
- East
- Cum
-
-
- 155
- -20
- true
- (-0.43, 0, 0.42)
- East
- Scream
-
-
- 200
- -15
- true
- (-0.49, 0, 0.42)
- East
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 20
- true
- East
-
-
- 40
- 25
- true
- East
-
-
- 200
- 30
- true
- East
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 30
- true
- (0, -3, 0)
- East
-
-
- 13
- 60
- true
- (0, -3, 0)
- East
-
-
-
-
-
-
-
- ReceiverPawn_Missionary_Stage6
- 200
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 95
- true
- (0.07, -1, 0)
- West
-
-
- 13
- 100
- true
- (0.23, -1, 0)
- West
- Scream
-
-
- 80
- 100
- true
- (0.2, -1, 0)
- West
- Scream
-
-
- 85
- 100
- true
- (0.23, -1, 0)
- West
-
-
- 150
- 100
- true
- (0.2, -1, 0)
- West
- Scream
-
-
- 155
- 100
- true
- (0.23, -1, 0)
- West
-
-
- 200
- 100
- true
- (0.2, -1, 0)
- West
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -20
- true
- West
-
-
- 100
- -10
- true
- West
-
-
- 200
- -23
- true
- West
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/TestAnimation/ConditionalPathExample b/1.6/Defs/GroupAnimationDefs/TestAnimation/ConditionalPathExample
deleted file mode 100644
index 30402af..0000000
--- a/1.6/Defs/GroupAnimationDefs/TestAnimation/ConditionalPathExample
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation1.xml b/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation1.xml
deleted file mode 100644
index a0be981..0000000
--- a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation1.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
-
- TestAnimation1
- 400
- False
-
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- Fuck
- 30
- 0
- true
-
-
- 100
- 0
- true
-
-
- 200
- 0
- true
-
-
- 300
- 0
- true
-
-
-
-
-
- Body
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- North
- true
-
-
- 50
- 0
- South
- true
-
-
- 100
- 30
- East
- true
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- North
- true
-
-
- 2
- 0
- East
- true
-
-
- 4
- 0
- South
- true
-
-
- 6
- 0
- West
- false
-
-
- 8
- 0
- North
- false
-
-
-
-
-
- RenderNodeTag_Xray_Inside
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 30
- 0
- true
-
-
- 1
- 100
- 0
- false
-
-
- 1
- 200
- 0
- true
-
-
- 1
- 300
- 0
- true
-
-
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation2.xml b/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation2.xml
deleted file mode 100644
index 07f70d3..0000000
--- a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation2.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
- TestAnimation2
- 400
- False
- False
-
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- 0
- South
-
-
- 100
- 45
- South
-
-
- 0
- (-0.73, 0, -0.02)
- 0
- East
-
-
- 200
- 90
- South
-
-
- 300
- 135
- South
-
-
-
-
-
-
-
-
diff --git a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation3.xml b/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation3.xml
deleted file mode 100644
index 11a6623..0000000
--- a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestAnimation3.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
- TestAnimation3
- 400
- False
-
-
-
- Root
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- Fuck
- 30
- 90
- East
- true
-
-
- 100
- 80
- East
- true
-
-
- 200
- 90
- East
- true
-
-
- 300
- 80
- East
- true
-
-
-
-
-
- Head
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- East
- true
-
-
-
-
-
- RenderNodeTag_Knees
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 1
- 0
- 0
- true
-
-
- 1
- 200
- 3
- true
-
-
- 1
- 400
- 0
- true
-
-
-
-
-
- RenderNodeTag_Arms
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 1
- 0
- 0
- true
-
-
-
- 1
- 200
- 3
- true
-
-
-
- 1
- 400
- 0
- true
-
-
-
-
-
-
- RimNude_Penis
-
- Rimworld_Animations.AnimationWorker_KeyframesExtended
-
-
- 0
- -30
- true
- East
-
-
- 400
- -600
- true
- East
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestGroupAnimation1.xml b/1.6/Defs/GroupAnimationDefs/TestAnimation/TestGroupAnimation1.xml
deleted file mode 100644
index a9cd0b5..0000000
--- a/1.6/Defs/GroupAnimationDefs/TestAnimation/TestGroupAnimation1.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
- TestGroupAnimation1
- 2
-
-
- 10
-
-
- 3
-
- TestAnimation2
- TestAnimation2
-
-
-
-
- 1
-
- TestAnimation2
- TestAnimation2
-
-
-
-
-
-
-
-
-
-
-
- GroinToAppropriateHeight
- GroinToAppropriateHeight
-
-
-
-
diff --git a/1.6/Defs/OffsetDefs/OffsetDef_GroinToAppropriateHeight.xml b/1.6/Defs/OffsetDefs/OffsetDef_GroinToAppropriateHeight.xml
deleted file mode 100644
index 60f7a54..0000000
--- a/1.6/Defs/OffsetDefs/OffsetDef_GroinToAppropriateHeight.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
- GroinToAppropriateHeight
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/OffsetDefs/OffsetDef_Placeholder.xml b/1.6/Defs/OffsetDefs/OffsetDef_Placeholder.xml
deleted file mode 100644
index 4e88661..0000000
--- a/1.6/Defs/OffsetDefs/OffsetDef_Placeholder.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
- Offset_Placeholder
-
-
-
-
diff --git a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Arms.xml b/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Arms.xml
deleted file mode 100644
index d582b7b..0000000
--- a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Arms.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- TexPathVariants_Arms
-
- AnimationProps/Doggystyle/Doggy_Arms
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Cat.xml b/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Cat.xml
deleted file mode 100644
index 474aca4..0000000
--- a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Cat.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- TexPathVariants_Cat
-
- AnimationProps/Cat/Cat1
- AnimationProps/Cat/Cat2
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Knees.xml b/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Knees.xml
deleted file mode 100644
index 5f368ee..0000000
--- a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Knees.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- TexPathVariants_Knees
-
- AnimationProps/Doggystyle/Doggy_Legs
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_XrayPenis_Horse.xml b/1.6/Defs/TexPathVariantsDefs/TexPathVariants_XrayPenis_Horse.xml
deleted file mode 100644
index 3b14154..0000000
--- a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_XrayPenis_Horse.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- TexPathVariants_XrayPenis_Horse
-
- AnimationProps/Cat/Cat1
-
- AnimationProps/Cat/Cat2
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_XrayPenis_Human.xml b/1.6/Defs/TexPathVariantsDefs/TexPathVariants_XrayPenis_Human.xml
deleted file mode 100644
index 235ee3e..0000000
--- a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_XrayPenis_Human.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- TexPathVariants_XrayPenis_Human
-
- AnimationProps/Cat/Cat1
-
- AnimationProps/Cat/Cat2
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Xray_Inside.xml b/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Xray_Inside.xml
deleted file mode 100644
index 4c9f90b..0000000
--- a/1.6/Defs/TexPathVariantsDefs/TexPathVariants_Xray_Inside.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- TexPathVariants_Xray_Inside
-
- AnimationProps/Cat/Cat1
-
- AnimationProps/Cat/Cat2
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/VoiceDefs/VoiceDef_Human/SoundDef_HumanFemale.xml b/1.6/Defs/VoiceDefs/VoiceDef_Human/SoundDef_HumanFemale.xml
deleted file mode 100644
index 7c9cb6c..0000000
--- a/1.6/Defs/VoiceDefs/VoiceDef_Human/SoundDef_HumanFemale.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
- Moan_HumanFemale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/FVoice/Moan1
-
-
- Voices/FVoice/Moan2
-
-
- Voices/FVoice/Moan3
-
-
- Voices/FVoice/Moan4
-
-
- 40~50
- 0.99~1.02
- 10~50
- NeverTwice
- false
-
-
-
-
-
- MoanShort_HumanFemale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/FVoice/MoanShort1
-
-
- Voices/FVoice/MoanShort2
-
-
- Voices/FVoice/MoanShort3
-
-
- 40~50
- 0.99~1.02
- 10~50
- NeverTwice
- false
-
-
-
-
-
- Grunt_HumanFemale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/FVoice/Grunt1
-
-
- Voices/FVoice/Grunt2
-
-
- Voices/FVoice/Grunt3
-
-
- Voices/FVoice/Grunt4
-
-
- Voices/FVoice/Grunt5
-
-
- Voices/FVoice/Grunt6
-
-
- 40~50
- 0.99~1.02
- 10~50
- NeverTwice
- false
-
-
-
-
-
- Scream_HumanFemale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/FVoice/Scream1
-
-
- Voices/FVoice/Scream2
-
-
- Voices/FVoice/Scream3
-
-
- Voices/FVoice/Scream4
-
-
-
- 0.99~1.02
- 40~50
- 10~50
- NeverTwice
- false
-
-
-
-
diff --git a/1.6/Defs/VoiceDefs/VoiceDef_Human/SoundDef_HumanMale.xml b/1.6/Defs/VoiceDefs/VoiceDef_Human/SoundDef_HumanMale.xml
deleted file mode 100644
index a9927cd..0000000
--- a/1.6/Defs/VoiceDefs/VoiceDef_Human/SoundDef_HumanMale.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
- Moan_HumanMale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/MVoice/Moan1
-
-
- Voices/MVoice/Moan2
-
-
- Voices/MVoice/Moan3
-
-
- Voices/MVoice/Moan4
-
-
- 0.99~1.02
- 20~25
- 10~50
- NeverTwice
- false
-
-
-
-
-
- MoanShort_HumanMale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/MVoice/MoanShort1
-
-
- Voices/MVoice/MoanShort2
-
-
- Voices/MVoice/MoanShort3
-
-
- 0.99~1.02
- 20~25
- 10~50
- NeverTwice
- false
-
-
-
-
-
- Grunt_HumanMale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/MVoice/Grunt1
-
-
- Voices/MVoice/Grunt2
-
-
- Voices/MVoice/Grunt3
-
-
- Voices/MVoice/Grunt4
-
-
- 0.99~1.02
- 20~25
- 10~50
- NeverTwice
- false
-
-
-
-
-
- Scream_HumanMale
- MapOnly
-
- 5
- 5
-
-
-
-
- Voices/MVoice/Scream1
-
-
- Voices/MVoice/Scream2
-
-
- Voices/MVoice/Scream3
-
-
- 0.99~1.02
- 20~25
- 10~50
- NeverTwice
- false
-
-
-
-
diff --git a/1.6/Defs/VoiceDefs/VoiceDef_Human/VoiceDef_Human.xml b/1.6/Defs/VoiceDefs/VoiceDef_Human/VoiceDef_Human.xml
deleted file mode 100644
index eef8942..0000000
--- a/1.6/Defs/VoiceDefs/VoiceDef_Human/VoiceDef_Human.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
- Voice_HumanFemale
- Female
- 60~80
-
- Moan Moan_HumanFemale
- MoanShort MoanShort_HumanFemale
- Grunt Grunt_HumanFemale
- Scream Scream_HumanFemale
-
-
-
-
- Voice_HumanMale
- Male
- 150~180
-
- Moan Moan_HumanMale
- MoanShort MoanShort_HumanMale
- Grunt Grunt_HumanMale
- Scream Scream_HumanMale
-
-
-
-
diff --git a/1.6/Defs/VoiceDefs/VoiceDef_Orassan.xml b/1.6/Defs/VoiceDefs/VoiceDef_Orassan.xml
deleted file mode 100644
index be5bec0..0000000
--- a/1.6/Defs/VoiceDefs/VoiceDef_Orassan.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Defs/VoiceDefs/VoiceTagDef.xml b/1.6/Defs/VoiceDefs/VoiceTagDef.xml
deleted file mode 100644
index 1bbc6f2..0000000
--- a/1.6/Defs/VoiceDefs/VoiceTagDef.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- Moan
- 0.2
-
-
-
- MoanShort
- 0.1
-
-
-
- Grunt
- 0.1
-
-
-
-
-
-
- Scream
- 1
-
-
-
\ No newline at end of file
diff --git a/1.6/Patches/AnimationPatch_PawnRenderTree_OffsetSubWorker.xml b/1.6/Patches/AnimationPatch_PawnRenderTree_OffsetSubWorker.xml
deleted file mode 100644
index 6aa36a8..0000000
--- a/1.6/Patches/AnimationPatch_PawnRenderTree_OffsetSubWorker.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
- Always
-
-
- /Defs/PawnRenderTreeDef/root/subworkerClasses
- Always
-
- /Defs/PawnRenderTreeDef/root
-
-
-
-
-
-
-
- /Defs/PawnRenderTreeDef/root/subworkerClasses
-
- Rimworld_Animations.PawnRenderSubWorker_ChangeOffset
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Patches/OffsetDefPatchTemplate/AnimationPatch_OffsetDef.xml b/1.6/Patches/OffsetDefPatchTemplate/AnimationPatch_OffsetDef.xml
deleted file mode 100644
index 5d45225..0000000
--- a/1.6/Patches/OffsetDefPatchTemplate/AnimationPatch_OffsetDef.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/1.6/Patches/Patch_GenitaliaRenderNode.xml b/1.6/Patches/Patch_GenitaliaRenderNode.xml
deleted file mode 100644
index 553374a..0000000
--- a/1.6/Patches/Patch_GenitaliaRenderNode.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
diff --git a/1.6/Sounds/Sex/Slap/Slap_1.wav b/1.6/Sounds/Sex/Slap/Slap_1.wav
deleted file mode 100644
index 3387390..0000000
Binary files a/1.6/Sounds/Sex/Slap/Slap_1.wav and /dev/null differ
diff --git a/1.6/Sounds/Sex/Slap/Slap_2.wav b/1.6/Sounds/Sex/Slap/Slap_2.wav
deleted file mode 100644
index 1486217..0000000
Binary files a/1.6/Sounds/Sex/Slap/Slap_2.wav and /dev/null differ
diff --git a/1.6/Sounds/Sex/Slap/Slap_3.wav b/1.6/Sounds/Sex/Slap/Slap_3.wav
deleted file mode 100644
index 8d476db..0000000
Binary files a/1.6/Sounds/Sex/Slap/Slap_3.wav and /dev/null differ
diff --git a/1.6/Sounds/Sex/Slap/Slap_4.wav b/1.6/Sounds/Sex/Slap/Slap_4.wav
deleted file mode 100644
index c958a4c..0000000
Binary files a/1.6/Sounds/Sex/Slap/Slap_4.wav and /dev/null differ
diff --git a/1.6/Sounds/Sex/Slap/Slap_5.wav b/1.6/Sounds/Sex/Slap/Slap_5.wav
deleted file mode 100644
index 033b2c4..0000000
Binary files a/1.6/Sounds/Sex/Slap/Slap_5.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Grunt1.wav b/1.6/Sounds/Voices/FVoice/Grunt1.wav
deleted file mode 100644
index 3ae3ca3..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Grunt1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Grunt2.wav b/1.6/Sounds/Voices/FVoice/Grunt2.wav
deleted file mode 100644
index 496a02d..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Grunt2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Grunt3.wav b/1.6/Sounds/Voices/FVoice/Grunt3.wav
deleted file mode 100644
index 3e905dd..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Grunt3.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Grunt4.wav b/1.6/Sounds/Voices/FVoice/Grunt4.wav
deleted file mode 100644
index 4586e8a..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Grunt4.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Grunt5.wav b/1.6/Sounds/Voices/FVoice/Grunt5.wav
deleted file mode 100644
index 6fad8c2..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Grunt5.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Grunt6.wav b/1.6/Sounds/Voices/FVoice/Grunt6.wav
deleted file mode 100644
index e660f30..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Grunt6.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Moan1.wav b/1.6/Sounds/Voices/FVoice/Moan1.wav
deleted file mode 100644
index 14d19bc..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Moan1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Moan2.wav b/1.6/Sounds/Voices/FVoice/Moan2.wav
deleted file mode 100644
index 7aba4b5..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Moan2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Moan3.wav b/1.6/Sounds/Voices/FVoice/Moan3.wav
deleted file mode 100644
index d3fbf99..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Moan3.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Moan4.wav b/1.6/Sounds/Voices/FVoice/Moan4.wav
deleted file mode 100644
index cfe3606..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Moan4.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/MoanShort1.wav b/1.6/Sounds/Voices/FVoice/MoanShort1.wav
deleted file mode 100644
index 48eea21..0000000
Binary files a/1.6/Sounds/Voices/FVoice/MoanShort1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/MoanShort2.wav b/1.6/Sounds/Voices/FVoice/MoanShort2.wav
deleted file mode 100644
index 4e3b5b8..0000000
Binary files a/1.6/Sounds/Voices/FVoice/MoanShort2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/MoanShort3.wav b/1.6/Sounds/Voices/FVoice/MoanShort3.wav
deleted file mode 100644
index bcd4b49..0000000
Binary files a/1.6/Sounds/Voices/FVoice/MoanShort3.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Scream1.wav b/1.6/Sounds/Voices/FVoice/Scream1.wav
deleted file mode 100644
index 58ddb69..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Scream1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Scream2.wav b/1.6/Sounds/Voices/FVoice/Scream2.wav
deleted file mode 100644
index 75bbd9b..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Scream2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Scream3.wav b/1.6/Sounds/Voices/FVoice/Scream3.wav
deleted file mode 100644
index 251126d..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Scream3.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/FVoice/Scream4.wav b/1.6/Sounds/Voices/FVoice/Scream4.wav
deleted file mode 100644
index bd7ca69..0000000
Binary files a/1.6/Sounds/Voices/FVoice/Scream4.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Grunt1.wav b/1.6/Sounds/Voices/MVoice/Grunt1.wav
deleted file mode 100644
index d73ca08..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Grunt1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Grunt2.wav b/1.6/Sounds/Voices/MVoice/Grunt2.wav
deleted file mode 100644
index 8307871..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Grunt2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Grunt3.wav b/1.6/Sounds/Voices/MVoice/Grunt3.wav
deleted file mode 100644
index 9cf9162..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Grunt3.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Grunt4.wav b/1.6/Sounds/Voices/MVoice/Grunt4.wav
deleted file mode 100644
index c8b7efa..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Grunt4.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Moan1.wav b/1.6/Sounds/Voices/MVoice/Moan1.wav
deleted file mode 100644
index eafc035..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Moan1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Moan2.wav b/1.6/Sounds/Voices/MVoice/Moan2.wav
deleted file mode 100644
index 636b445..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Moan2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Moan3.wav b/1.6/Sounds/Voices/MVoice/Moan3.wav
deleted file mode 100644
index b47f6c3..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Moan3.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Moan4.wav b/1.6/Sounds/Voices/MVoice/Moan4.wav
deleted file mode 100644
index dc92d64..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Moan4.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/MoanShort1.wav b/1.6/Sounds/Voices/MVoice/MoanShort1.wav
deleted file mode 100644
index 9bf94e4..0000000
Binary files a/1.6/Sounds/Voices/MVoice/MoanShort1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/MoanShort2.wav b/1.6/Sounds/Voices/MVoice/MoanShort2.wav
deleted file mode 100644
index 481ca2d..0000000
Binary files a/1.6/Sounds/Voices/MVoice/MoanShort2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/MoanShort3.wav b/1.6/Sounds/Voices/MVoice/MoanShort3.wav
deleted file mode 100644
index 34d5ee1..0000000
Binary files a/1.6/Sounds/Voices/MVoice/MoanShort3.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Scream1.wav b/1.6/Sounds/Voices/MVoice/Scream1.wav
deleted file mode 100644
index 2d987a0..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Scream1.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Scream2.wav b/1.6/Sounds/Voices/MVoice/Scream2.wav
deleted file mode 100644
index b71293b..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Scream2.wav and /dev/null differ
diff --git a/1.6/Sounds/Voices/MVoice/Scream3.wav b/1.6/Sounds/Voices/MVoice/Scream3.wav
deleted file mode 100644
index f7b73c3..0000000
Binary files a/1.6/Sounds/Voices/MVoice/Scream3.wav and /dev/null differ
diff --git a/1.6/Source/Animations/AnimationOffsets/AnimationOffsetDef.cs b/1.6/Source/Animations/AnimationOffsets/AnimationOffsetDef.cs
deleted file mode 100644
index 03cdc8d..0000000
--- a/1.6/Source/Animations/AnimationOffsets/AnimationOffsetDef.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationOffsetDef : Def
- {
-
- public List offsets;
-
- public bool FindOffset(Pawn pawn, out BaseAnimationOffset offset)
- {
- foreach (BaseAnimationOffset animOffset in offsets)
- {
- if (animOffset.appliesToPawn(pawn)) {
-
- offset = animOffset;
- return true;
-
- }
- }
-
- offset = null;
- return false;
- }
- }
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRange.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRange.cs
deleted file mode 100644
index 8427c16..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRange.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationOffset_AgeRange : BaseAnimationOffset
- {
- public List offsets;
-
- public override Vector3? getOffset(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.offset
-
- //if outside of range, and less than the smallest element, use smallest element offset; else use largest element offset
- ?? (pawn.ageTracker.AgeBiologicalYears < offsets.First().ageRange.min ? offsets.First().offset : offsets.Last().offset);
- }
-
- public override int? getRotation(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.rotation
- ?? (pawn.ageTracker.AgeBiologicalYears < offsets.First().ageRange.min ? offsets.First().rotation : offsets.Last().rotation);
- }
-
- public override Vector3? getScale(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.scale
- ?? (pawn.ageTracker.AgeBiologicalYears < offsets.First().ageRange.min ? offsets.First().scale : offsets.Last().scale);
- }
-
- public override bool appliesToPawn(Pawn pawn)
- {
- if (!base.appliesToPawn(pawn)) return false;
- return offsets.Any(x => x.bodyType == pawn.story.bodyType);
-
- }
- }
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRangeGendered.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRangeGendered.cs
deleted file mode 100644
index b5a5532..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRangeGendered.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationOffset_AgeRangeGendered : BaseAnimationOffset
- {
- public List offsetsMale;
- public List offsetsFemale;
-
- public override Vector3? getOffset(Pawn pawn)
- {
- List pawnOffsets = (pawn.gender == Gender.Male ? offsetsMale : offsetsFemale);
- return pawnOffsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.offset
- ?? (pawn.ageTracker.AgeBiologicalYears < pawnOffsets.First().ageRange.min ? pawnOffsets.First().offset : pawnOffsets.Last().offset);
- }
-
- public override int? getRotation(Pawn pawn)
- {
- List pawnOffsets = (pawn.gender == Gender.Male ? offsetsMale : offsetsFemale);
- return pawnOffsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.rotation
- ?? (pawn.ageTracker.AgeBiologicalYears < pawnOffsets.First().ageRange.min ? pawnOffsets.First().rotation : pawnOffsets.Last().rotation);
- }
-
- public override Vector3? getScale(Pawn pawn)
- {
- List pawnOffsets = (pawn.gender == Gender.Male ? offsetsMale : offsetsFemale);
- return pawnOffsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.scale
- ?? (pawn.ageTracker.AgeBiologicalYears < pawnOffsets.First().ageRange.min ? pawnOffsets.First().scale : pawnOffsets.Last().scale);
- }
-
- public override bool appliesToPawn(Pawn pawn)
- {
- if (!base.appliesToPawn(pawn)) return false;
-
- List pawnOffsets = (pawn.gender == Gender.Male ? offsetsMale : offsetsFemale);
- return pawnOffsets.Any(x => x.bodyType == pawn.story.bodyType);
-
- }
- }
-
- public class BodyTypeOffset_AgeRange : BodyTypeOffset
- {
- public FloatRange ageRange;
-
- }
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyType.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyType.cs
deleted file mode 100644
index 06f19ee..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyType.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationOffset_BodyType : BaseAnimationOffset
- {
-
- public List offsets;
-
- public override Vector3? getOffset(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType)?.offset;
- }
-
- public override int? getRotation(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType)?.rotation;
- }
-
- public override Vector3? getScale(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType)?.scale;
- }
-
- public override bool appliesToPawn(Pawn pawn)
- {
-
- if (!base.appliesToPawn(pawn)) return false;
-
- return offsets.Any(x => x.bodyType == pawn.story.bodyType);
-
-
- }
-
-
- }
-
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyTypeGendered.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyTypeGendered.cs
deleted file mode 100644
index c2716dc..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyTypeGendered.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Unity.Collections;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationOffset_BodyTypeGendered : BaseAnimationOffset
- {
-
- public List offsetsMale;
- public List offsetsFemale;
-
- public override Vector3? getOffset(Pawn pawn)
- {
- if (pawn.gender == Gender.Female)
- {
- return offsetsFemale.Find(x => x.bodyType == pawn.story.bodyType)?.offset;
- }
- else
- {
- return offsetsMale.Find(x => x.bodyType == pawn.story.bodyType)?.offset;
- }
-
- }
-
- public override int? getRotation(Pawn pawn)
- {
-
- if (pawn.gender == Gender.Female)
- {
- return offsetsFemale.Find(x => x.bodyType == pawn.story.bodyType)?.rotation;
- }
- else
- {
- return offsetsMale.Find(x => x.bodyType == pawn.story.bodyType)?.rotation;
- }
-
- }
-
- public override Vector3? getScale(Pawn pawn)
- {
-
- if (pawn.gender == Gender.Female)
- {
- return offsetsFemale.Find(x => x.bodyType == pawn.story.bodyType)?.scale;
- }
- else
- {
- return offsetsMale.Find(x => x.bodyType == pawn.story.bodyType)?.scale;
- }
-
- }
-
- public override bool appliesToPawn(Pawn pawn)
- {
-
- if (!base.appliesToPawn(pawn)) return false;
-
- return offsetsFemale.Any(x => x.bodyType == pawn.story.bodyType) || offsetsMale.Any(x => x.bodyType == pawn.story.bodyType);
-
-
- }
- }
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Genes.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Genes.cs
deleted file mode 100644
index 061cf39..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Genes.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationOffset_Genes : BaseAnimationOffset
- {
- public List offsets;
- public override Vector3? getOffset(Pawn pawn)
- {
-
- return offsets.Find(x => x.bodyType == pawn.story.bodyType && pawn.genes.GenesListForReading.ContainsAny(gene => gene.def == x.geneDef))?.offset ?? offsets.Last().offset;
- }
-
- public override int? getRotation(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType && pawn.genes.GenesListForReading.ContainsAny(gene => gene.def == x.geneDef))?.rotation ?? offsets.Last().rotation;
- }
-
- public override Vector3? getScale(Pawn pawn)
- {
- return offsets.Find(x => x.bodyType == pawn.story.bodyType && pawn.genes.GenesListForReading.ContainsAny(gene => gene.def == x.geneDef))?.scale ?? offsets.Last().scale;
- }
-
- public override bool appliesToPawn(Pawn pawn)
- {
- if (!base.appliesToPawn(pawn)) return false;
- return offsets.Any(x => x.bodyType == pawn.story.bodyType && pawn.genes.GenesListForReading.ContainsAny(gene => gene.def == x.geneDef));
-
- }
- }
-
- public class BodyTypeOffset_Genes : BodyTypeOffset
- {
- public GeneDef geneDef;
- }
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Single.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Single.cs
deleted file mode 100644
index a728834..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Single.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationOffset_Single : BaseAnimationOffset
- {
-
- public Vector3 offset;
- public int? rotation;
- public Vector3? scale = Vector3.one;
-
- public override Vector3? getOffset(Pawn pawn)
- {
- return offset;
- }
-
- public override int? getRotation(Pawn pawn)
- {
- return rotation;
- }
-
- public override Vector3? getScale(Pawn pawn)
- {
- return scale;
- }
- }
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/BaseAnimationOffset.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/BaseAnimationOffset.cs
deleted file mode 100644
index e5d2243..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/BaseAnimationOffset.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public abstract class BaseAnimationOffset
- {
- public List races;
-
- public abstract Vector3? getOffset(Pawn pawn);
-
- public abstract int? getRotation(Pawn pawn);
-
- public abstract Vector3? getScale(Pawn pawn);
-
- public virtual bool appliesToPawn(Pawn pawn)
- {
- return races.Contains(pawn.def);
-
- }
-
- }
-}
diff --git a/1.6/Source/Animations/AnimationOffsets/Offsets/BodyTypeOffset.cs b/1.6/Source/Animations/AnimationOffsets/Offsets/BodyTypeOffset.cs
deleted file mode 100644
index b441262..0000000
--- a/1.6/Source/Animations/AnimationOffsets/Offsets/BodyTypeOffset.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-
-namespace Rimworld_Animations
-{
-
- public class BodyTypeOffset
- {
- public BodyTypeDef bodyType;
- public int rotation = 0;
- public Vector3 offset;
- public Vector3 scale = Vector3.one;
- }
-}
diff --git a/1.6/Source/Animations/AnimationProps/AnimationPropDef.cs b/1.6/Source/Animations/AnimationProps/AnimationPropDef.cs
deleted file mode 100644
index 2a1f501..0000000
--- a/1.6/Source/Animations/AnimationProps/AnimationPropDef.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationPropDef : Def
- {
-
- //if this feature is good, maybe expand
- //to having a list of Alternative props maybe?
- public List alternateProps;
- public PawnRenderNodeProperties animPropProperties;
-
- public virtual PawnRenderNodeProperties GetPawnRenderNodeProperties(Pawn pawn)
- {
- if (!alternateProps.NullOrEmpty())
- {
- foreach (AlternateAnimationProp animProp in alternateProps)
- {
- //if there are special props you want to use for a specific race,
- if (animProp.test.PawnTest(pawn))
- {
- //use it
- return animProp.props;
- }
-
- }
- }
-
- //otherwise just stick with defaults
- return animPropProperties;
- }
-
-
- }
-
- public class AlternateAnimationProp
- {
- public BasePawnTest test;
- public PawnRenderNodeProperties props;
-
- }
-}
diff --git a/1.6/Source/Animations/AnimationWorkers/AnimationWorker_KeyframesExtended.cs b/1.6/Source/Animations/AnimationWorkers/AnimationWorker_KeyframesExtended.cs
deleted file mode 100644
index dd8f4a1..0000000
--- a/1.6/Source/Animations/AnimationWorkers/AnimationWorker_KeyframesExtended.cs
+++ /dev/null
@@ -1,229 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationWorker_KeyframesExtended : AnimationWorker_Keyframes
- {
-
- public override bool Enabled(AnimationDef def, PawnRenderNode node, AnimationPart part, PawnDrawParms parms)
- {
- return true;
- }
-
- /*
- public override Vector3 OffsetAtTick(int tick, PawnDrawParms parms)
- {
- //Todo: Use this for bodyoffsets
- //or maybe make a rendersubworker for it instead
- return base.OffsetAtTick(tick, parms);
- }
-
- //don't need for anims
-
- */
-
- public VoiceTagDef voiceAtTick(int tick, AnimationDef def, PawnRenderNode node)
- {
-
- KeyframeAnimationPart keyframeAnimationPart = def.keyframeParts[node.Props.tagDef];
-
- foreach (Verse.Keyframe keyframe in keyframeAnimationPart.keyframes)
- {
- if (tick == keyframe.tick)
- {
- VoiceTagDef voiceTag = (keyframe as ExtendedKeyframe).voice;
-
- //probability checking null fix
- if (voiceTag != null && Rand.Chance(voiceTag.probability))
- {
-
- return voiceTag;
-
- }
-
- return null;
- }
-
- }
-
- return null;
-
- }
-
- public SoundDef soundAtTick(int tick, AnimationDef def, PawnRenderNode node)
- {
- KeyframeAnimationPart keyframeAnimationPart = def.keyframeParts[node.Props.tagDef];
-
-
- //Verse.Keyframe keyframe = this.part.keyframes[0];
- Verse.Keyframe keyframe2 = keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1];
- foreach (Verse.Keyframe keyframe in keyframeAnimationPart.keyframes)
- {
- if (tick == keyframe.tick)
- {
- return (keyframe as ExtendedKeyframe).sound;
- }
-
- }
-
- return null;
- }
-
-
-
- //use extendedkeyframes to determine addon facing
- public Rot4 facingAtTick(int tick, AnimationDef def, PawnRenderNode node)
- {
-
- KeyframeAnimationPart keyframeAnimationPart = def.keyframeParts[node.Props.tagDef];
-
- //if ticks are < first keyframe tick, just be stuck to first keyframe rot
- if (tick <= keyframeAnimationPart.keyframes[0].tick)
- {
-
- return (keyframeAnimationPart.keyframes[0] as ExtendedKeyframe).rotation;
-
- }
-
- //if ticks are > last keyframe tick, just be stuck to last keyframe rot
- if (tick >= keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1].tick)
- {
-
- return (keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1] as ExtendedKeyframe).rotation;
-
- }
- Verse.Keyframe keyframe = keyframeAnimationPart.keyframes[0];
- Verse.Keyframe keyframe2 = keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1];
- int i = 0;
- while (i < keyframeAnimationPart.keyframes.Count)
- {
- if (tick <= keyframeAnimationPart.keyframes[i].tick)
- {
- keyframe2 = keyframeAnimationPart.keyframes[i];
- if (i > 0)
- {
- keyframe = keyframeAnimationPart.keyframes[i - 1];
- break;
- }
- break;
- }
- else
- {
- i++;
- }
- }
-
- return (keyframe as ExtendedKeyframe).rotation;
-
- }
- public bool visibleAtTick(int tick, AnimationDef def, PawnRenderNode node)
- {
- KeyframeAnimationPart keyframeAnimationPart = def.keyframeParts[node.Props.tagDef];
-
- //if ticks are < first keyframe tick, just be stuck to first keyframe rot
- if (tick <= keyframeAnimationPart.keyframes[0].tick)
- {
-
- return (keyframeAnimationPart.keyframes[0] as ExtendedKeyframe).visible;
-
- }
-
- //if ticks are > last keyframe tick, just be stuck to last keyframe rot
- if (tick >= keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1].tick)
- {
-
- return (keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1] as ExtendedKeyframe).visible;
-
- }
-
- Verse.Keyframe keyframe = keyframeAnimationPart.keyframes[0];
- Verse.Keyframe keyframe2 = keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1];
-
- int i = 0;
- while (i < keyframeAnimationPart.keyframes.Count)
- {
- if (tick <= keyframeAnimationPart.keyframes[i].tick)
- {
- keyframe2 = keyframeAnimationPart.keyframes[i];
- if (i > 0)
- {
- keyframe = keyframeAnimationPart.keyframes[i - 1];
- break;
- }
- break;
- }
- else
- {
- i++;
- }
- }
-
- return (keyframe as ExtendedKeyframe).visible;
-
-
- }
-
- public virtual bool shouldRecache(int tick, AnimationDef def, PawnRenderNode node)
- {
- if (facingAtTick(tick, def, node) != facingAtTick(tick - 1, def, node)
- || visibleAtTick(tick, def, node) != visibleAtTick(tick - 1, def, node)
- || TexPathVariantAtTick(tick, def, node) != TexPathVariantAtTick(tick - 1, def, node))
- {
- return true;
- }
-
- return true;
- }
-
- public int? TexPathVariantAtTick(int tick, AnimationDef def, PawnRenderNode node)
- {
-
- KeyframeAnimationPart keyframeAnimationPart = def.keyframeParts[node.Props.tagDef];
-
- //if ticks are < first keyframe tick, just be stuck to first keyframe rot
- if (tick <= keyframeAnimationPart.keyframes[0].tick)
- {
-
- return (keyframeAnimationPart.keyframes[0] as ExtendedKeyframe).variant;
-
- }
-
- //if ticks are > last keyframe tick, just be stuck to last keyframe rot
- if (tick >= keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1].tick)
- {
-
- return (keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1] as ExtendedKeyframe).variant;
-
- }
- Verse.Keyframe keyframe = keyframeAnimationPart.keyframes[0];
- Verse.Keyframe keyframe2 = keyframeAnimationPart.keyframes[keyframeAnimationPart.keyframes.Count - 1];
- int i = 0;
- while (i < keyframeAnimationPart.keyframes.Count)
- {
- if (tick <= keyframeAnimationPart.keyframes[i].tick)
- {
- keyframe2 = keyframeAnimationPart.keyframes[i];
- if (i > 0)
- {
- keyframe = keyframeAnimationPart.keyframes[i - 1];
- break;
- }
- break;
- }
- else
- {
- i++;
- }
- }
-
- return (keyframe as ExtendedKeyframe).variant;
-
- }
- }
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/BaseGroupAnimationContext.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/BaseGroupAnimationContext.cs
deleted file mode 100644
index de5ddc3..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/BaseGroupAnimationContext.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public abstract class BaseGroupAnimationContext
- {
- public int actorShift = 0;
- public int priority = 0;
-
- public List whitelist;
- public List blacklist;
-
- public virtual bool CanAnimationBeUsed(List actors, int numActors)
- {
-
- if (numActors != actors.Count)
- {
- return false;
- }
-
- if (!whitelist.NullOrEmpty())
- {
- for (int i = 0; i < whitelist.Count; i++)
- {
- // check whitelist to make sure pawn can be in this act
- //for each whitelist item, pawntest must hold true for that pawn
- if (!whitelist[i].PawnTest(actors[i]))
- {
- return false;
- }
-
- }
- }
-
- if (!blacklist.NullOrEmpty())
- {
- for (int i = 0; i < blacklist.Count; i++)
- {
- // check blacklist to make sure pawn can be in this act
- // for each blacklist item, pawntest must hold false for that pawn
- if (blacklist[i].PawnTest(actors[i]))
- {
- return false;
- }
-
- }
- }
-
- return true;
- }
- public virtual int AnimationReorder()
- {
- return actorShift;
- }
- public virtual int AnimationPriority()
- {
- return priority;
- }
- public abstract string DebugMessage();
-
- //cool class for designating contexts for animations
- // configure CanAnimationBeUsed to test whether it can be used
- }
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext.cs
deleted file mode 100644
index 74d91da..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext.cs
+++ /dev/null
@@ -1,188 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class GroupAnimationContext
- {
- public int priority = 0;
-
- public List whitelist;
- public List blacklist;
-
- /*
- public virtual bool CanAnimationBeUsed(List actors)
- {
-
- if (!whitelist.NullOrEmpty())
- {
- for (int i = 0; i < whitelist.Count; i++)
- {
- // check whitelist to make sure pawn can be in this act
- //for each whitelist item, pawntest must hold true for that pawn
- if (!whitelist[i].PawnTest(actors[i]))
- {
- return false;
- }
-
- }
- }
-
- if (!blacklist.NullOrEmpty())
- {
- for (int i = 0; i < blacklist.Count; i++)
- {
- // check blacklist to make sure pawn can be in this act
- // for each blacklist item, pawntest must hold false for that pawn
- if (blacklist[i].PawnTest(actors[i]))
- {
- return false;
- }
-
- }
- }
-
- return true;
- }
- */
-
- /*
-
- public List FindWorkingPermutation(List pawns, int index = 0)
- {
- //can't play anim for empty list of pawns
- if (pawns.Count == 0) return null;
-
- //pawns list doesn't match number in whitelist
- if (index == 0 && pawns.Count != whitelist.Count) return null;
-
- //if list only has one pawn and it works for that index, return it
- if (pawns.Count == 1)
- {
- return CanAnimationBeUsedFor(pawns[0], index) ? pawns : null;
- }
-
- for (int i = 0; i < pawns.Count; i++)
- {
- if (CanAnimationBeUsedFor(pawns[i], index))
- {
- //remove the pawn that we know works for that context
- List smallerSubset = pawns.Where((item, idx) => idx != i).ToList();
-
- //try to find a working subset for the next indices
- List newWorkingSubset = FindWorkingPermutation(smallerSubset, index + 1);
-
- if (newWorkingSubset != null)
- {
- newWorkingSubset.Insert(0, pawns[i]);
- return newWorkingSubset;
- }
- }
- }
-
- return null;
- }
-
- */
-
- public List FindAnyWorkingSet(List actors)
- {
- if (actors.Count != whitelist.Count) return null;
-
- int numActors = actors.Count;
-
- Dictionary> validPawnContexts = new Dictionary>();
-
- for (int i = 0; i < numActors; i++)
- {
- validPawnContexts[i] = new List();
-
- for (int j = 0; j < numActors; j++)
- {
- if (CanAnimationBeUsedFor(actors[i], j))
- {
- //give a list of all pawn's valid potential spots
- validPawnContexts[i].Add(j);
- }
-
- }
-
- }
-
- //set all spots as empty (-1)
- int[] indexAssignedToPawn = Enumerable.Repeat(-1, numActors).ToArray();
-
- for (int i = 0; i < numActors; i++)
- {
- bool[] visited = new bool[numActors];
-
- //try to fill in each space
- //try to shove spaces out of the way, get them to look elsewhere
- if (!DfsMatch(i, visited, indexAssignedToPawn, validPawnContexts))
- {
- return null;
- }
- }
-
- List actorOrder = new List();
- foreach (int actorIndex in indexAssignedToPawn)
- {
- actorOrder.Add(actors[actorIndex]);
- }
- return actorOrder;
- }
-
- public bool DfsMatch(int pawnIndex, bool[] visited, int[] indexAssignedToPawn, Dictionary> validPawnContexts)
- {
- foreach (int index in validPawnContexts[pawnIndex])
- {
- //don't infinte loop
- if (visited[index]) continue;
- visited[index] = true;
-
- //fill in space or shove something else out of the way
- if (indexAssignedToPawn[index] == -1 || DfsMatch(indexAssignedToPawn[index], visited, indexAssignedToPawn, validPawnContexts))
- {
- indexAssignedToPawn[index] = pawnIndex;
- return true;
- }
- }
-
- return false;
- }
-
-
-
- public virtual bool CanAnimationBeUsedFor(Pawn actor, int index)
- {
- if (whitelist.NullOrEmpty()) return false;
- if (index < 0 || index >= whitelist.Count)
- {
- return false;
- }
-
- if (!whitelist[index].PawnTest(actor))
- {
- return false;
- }
-
- if (!blacklist.NullOrEmpty() && blacklist[index].PawnTest(actor))
- {
- return false;
- }
-
- return true;
- }
-
- public virtual int AnimationPriority()
- {
- return priority;
- }
- //cool class for designating contexts for animations
- // configure CanAnimationBeUsed to test whether it can be used
- }
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext_RJWSex.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext_RJWSex.cs
deleted file mode 100644
index cefdf6a..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext_RJWSex.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using static rjw.xxx;
-
-namespace Rimworld_Animations
-{
- /*
- public class GroupAnimationContext_RJWSex : BaseGroupAnimationContext
- {
-
- public List interactionDefs;
-
- public override bool CanAnimationBeUsed(List actors, int numActors)
- {
-
- JobDriver_SexBaseInitiator latestSexBaseInitiator = (actors.FindLast(x => x.jobs?.curDriver is JobDriver_SexBaseInitiator).jobs.curDriver as JobDriver_SexBaseInitiator);
-
- if (!interactionDefs.Contains(latestSexBaseInitiator.Sexprops.dictionaryKey))
- {
- return false;
- }
-
- return base.CanAnimationBeUsed(actors, numActors);
- }
-
- public override string DebugMessage()
- {
- return "Checking for RJWSex AnimationContext\n"
- + "InteractionDefs: " + interactionDefs;
- }
- }
-
- */
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationDef.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationDef.cs
deleted file mode 100644
index 30c9f61..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationDef.cs
+++ /dev/null
@@ -1,192 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.Remoting.Contexts;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class GroupAnimationDef : Def
- {
- public int numActors;
- public List animationStages;
- public List contexts;
- public List offsetDefs;
-
- /*
- public bool CanAnimationBeUsed(List actors, out int highestPriority, out int contextNum)
- {
-
- contextNum = 0;
- bool animationFound = false;
- highestPriority = -999999999;
-
- if (actors.Count != numActors) return DebugLogThenReturn(false, actors, highestPriority, contextNum);
-
- if (!contexts.NullOrEmpty())
- {
- int contextIndex = 0;
- foreach (GroupAnimationContext context in contexts)
- {
- if (context.CanAnimationBeUsed(actors))
- {
- animationFound = true;
-
-
- if (context.AnimationPriority() > highestPriority)
- {
- contextNum = contextIndex;
- //get highest priority context for fitting animation
- highestPriority = context.AnimationPriority();
-
- }
-
- }
-
- contextIndex++;
-
- }
- }
- return DebugLogThenReturn(animationFound, actors, highestPriority, contextNum);
- }*/
-
- public bool CanAnimationBeUsed(List actors, out List bestPermutation, out int highestPriority)
- {
- bool workingContextFound = false;
- highestPriority = -99999999;
- int contextNum = -1;
- bestPermutation = null;
-
-
- if (actors.Count != numActors) return false;
-
- if (contexts.NullOrEmpty()) return false;
-
- for (int i = 0; i < contexts.Count; i++)
- {
- List workingPermutation = contexts[i].FindAnyWorkingSet(actors);
-
- if (workingPermutation != null && contexts[i].priority > highestPriority)
- {
- contextNum = i;
- workingContextFound = true;
- bestPermutation = workingPermutation;
- highestPriority = contexts[i].priority;
- }
- }
-
- DebugLog(workingContextFound, actors, bestPermutation, highestPriority, contextNum);
-
- return workingContextFound;
- }
-
-
-
-
-
- private void DebugLog(bool workingContextFound, List actors, List actorsOrdered, int priority, int contextNum)
- {
- if (RJWAnimationSettings.debugMode)
- {
- if (workingContextFound)
- {
- string debugMessage = this.defName;
- debugMessage += " (priority: " + priority + ", context: " + contextNum + ") succeeded with pawn permutation: ";
-
- bool first = true;
- foreach (Pawn pawn in actorsOrdered)
- {
- debugMessage = debugMessage + (first ? "" : ", ") + pawn.Name + " (" + pawn.def.defName + ")";
- first = false;
- }
-
- Log.Message(debugMessage);
- }
- else
- {
- string debugMessage = this.defName + " failed for pawns: ";
- bool first = true;
- foreach (Pawn pawn in actors)
- {
- debugMessage = debugMessage + (first ? "" : ", ") + pawn.Name + " (" + pawn.def.defName + ")";
- first = false;
- }
-
- Log.Message(debugMessage);
- }
-
- }
-
- }
-
- /*
- public int Reorder(List actors)
- {
- int priority = -999999999;
- int reorder = 0;
-
- foreach (GroupAnimationContext context in contexts)
- {
- if (context.CanAnimationBeUsed(actors, numActors))
- {
- if (context.AnimationPriority() > priority)
- {
- //get the reorder for highest priority context for fitting animation
- priority = context.AnimationPriority();
-
- }
-
- }
- }
-
- return reorder;
-
- }*/
-
- public List GetAllAnimationsForActor(int actor, int seed, List actors)
- {
- List animations = new List();
-
- foreach (AnimationStage stage in animationStages)
- {
- //add all new animations to list of animations
- animations.AddRange(stage.GetAnimations(actor, seed, actors));
- }
-
- return animations;
- }
-
- public void GetOffset(int actor, Pawn pawn, out Vector3? position, out int? rotation)
- {
-
- position = null;
- rotation = null;
-
- string bodyTypeDef = (pawn.story?.bodyType != null) ? pawn.story.bodyType.ToString() : "";
-
- if (offsetDefs[actor].FindOffset(pawn, out BaseAnimationOffset animationOffset))
- {
- position = animationOffset.getOffset(pawn);
- rotation = animationOffset.getRotation(pawn);
- }
-
- if (RJWAnimationSettings.offsets == null) RJWAnimationSettings.offsets = new Dictionary();
-
- if (RJWAnimationSettings.offsets.ContainsKey(AnimationUtility.OffsetLookupKey(pawn)))
- {
- if (RJWAnimationSettings.debugMode)
- {
- Log.Message("Using saved offset " + AnimationUtility.OffsetLookupKey(pawn));
- }
- RJWAnimationSettings.offsets[AnimationUtility.OffsetLookupKey(pawn)].GetOffsets(pawn, out Vector3 offset, out int rot);
- position = offset;
- rotation = rot;
- }
- }
-
-
- }
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage.cs
deleted file mode 100644
index 44797ba..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public abstract class AnimationStage
- {
-
- //Return a list containing a tuple; int for how long the animation should play for
- public int loops;
- public abstract List GetAnimations(int actorNumber, int seed, List actors);
-
- }
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_Branch.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_Branch.cs
deleted file mode 100644
index 6817360..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_Branch.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationStage_Branch : AnimationStage
- {
- public List paths;
- public override List GetAnimations(int actorNumber, int seed, List actors)
- {
- List animationDefs = new List();
-
- for (int i = 0; i < loops; i++)
- {
- GroupAnimationDef selectedDef = paths[Rand.RangeSeeded(0, paths.Count, seed + i)];
-
- animationDefs.AddRange(selectedDef.GetAllAnimationsForActor(actorNumber, seed, actors));
-
- }
-
- return animationDefs;
- }
- }
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_BranchConditional.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_BranchConditional.cs
deleted file mode 100644
index 1f6f6e8..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_BranchConditional.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationStage_BranchConditional : AnimationStage
- {
- public List conditionalPaths;
-
- public override List GetAnimations(int actorNumber, int seed, List actors)
- {
- List animationDefs = new List();
-
- GroupAnimationDef selectedPath = null;
-
- //try to find a conditional path, otherwise just use the selected path
- foreach (ConditionalPath conditionalPath in conditionalPaths)
- {
- if (conditionalPath.TestPath(actors))
- {
- selectedPath = conditionalPath.path;
- continue;
- }
- }
-
- if (selectedPath != null)
- {
- for (int i = 0; i < loops; i++)
- {
-
- animationDefs.AddRange(selectedPath.GetAllAnimationsForActor(actorNumber, seed, actors));
-
- }
- }
-
-
-
- return animationDefs;
- }
- }
-
-
- public class ConditionalPath
- {
- public GroupAnimationDef path;
-
- public List tests;
-
- public bool TestPath(List actors)
- {
-
- if (tests.NullOrEmpty()) return true;
-
- for (int i = 0; i < actors.Count; i++)
- {
- if (!tests[i].PawnTest(actors[i]))
- {
- return false;
- }
- }
-
- return true;
-
- }
-
- }
-
-
-
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_LoopRandomSelectChance.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_LoopRandomSelectChance.cs
deleted file mode 100644
index 18f58aa..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_LoopRandomSelectChance.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class AnimationStage_LoopRandomSelectChance : AnimationStage
- {
- public List loopOptions;
-
- public override List GetAnimations(int actorNumber, int seed, List actors)
- {
- int numberOfActors = loopOptions[0].animationDefs.Count;
- List animations = new List();
-
- for (int i = 0; i < loops; i++)
- {
- AnimationLoopOption option = getAnimationLoopOptionByWeight(seed + i);
- animations.Add(option.animationDefs[actorNumber]);
- }
-
- return animations;
- }
-
-
-
- //select random element from loop options by weight; also calculate the longest anim length
- private AnimationLoopOption getAnimationLoopOptionByWeight(int seed)
- {
- int totalWeight = loopOptions.Sum(x => x.probability);
- int randomNumber = Rand.RangeInclusiveSeeded(0, loopOptions.Count - 1, seed);
-
- int cumulativeWeight = 0;
- for (int i = 0; i < loopOptions.Count; i++) {
-
-
- cumulativeWeight += loopOptions[i].probability;
-
- //random number is same for all pawns because they all have the same seed
-
- if (randomNumber <= cumulativeWeight)
- {
- return loopOptions[i];
- }
- }
-
- //default
- return loopOptions.Last();
- }
- }
-
- public class AnimationLoopOption
- {
- public int probability;
- public List animationDefs;
- }
-}
diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_TicksDuration.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_TicksDuration.cs
deleted file mode 100644
index cd63ecf..0000000
--- a/1.6/Source/Animations/GroupAnimations/GroupAnimationStages/AnimationStage_TicksDuration.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- /* don't use? just use looprandomselect once
- public class AnimationStage_TicksDuration : AnimationStage
- {
- public int ticks;
- public List animationDefs;
-
- public override List> GetAnimations(int actor, int seed)
- {
- return new List>() { Tuple.Create(ticks, animationDefs[actor]) };
- }
- }
-
- */
-}
diff --git a/1.6/Source/Animations/Keyframes/ExtendedKeyframe.cs b/1.6/Source/Animations/Keyframes/ExtendedKeyframe.cs
deleted file mode 100644
index 45fced9..0000000
--- a/1.6/Source/Animations/Keyframes/ExtendedKeyframe.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class ExtendedKeyframe : Verse.Keyframe
- {
- public int? variant;
- public Rot4 rotation = Rot4.North;
- public SoundDef sound = null;
- public VoiceTagDef voice = null;
- public bool visible = false;
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/BasePawnTest.cs b/1.6/Source/Animations/PawnTests/BasePawnTest.cs
deleted file mode 100644
index 9ada366..0000000
--- a/1.6/Source/Animations/PawnTests/BasePawnTest.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public abstract class BasePawnTest
- {
- public abstract bool PawnTest(Pawn pawn);
-
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Always.cs b/1.6/Source/Animations/PawnTests/Logic/PawnTest_Always.cs
deleted file mode 100644
index 198f71b..0000000
--- a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Always.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Always : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return true;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Logic/PawnTest_And.cs b/1.6/Source/Animations/PawnTests/Logic/PawnTest_And.cs
deleted file mode 100644
index c5fc2b7..0000000
--- a/1.6/Source/Animations/PawnTests/Logic/PawnTest_And.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- //does the same thing, just here for naming
- public class PawnTest_And : PawnTest_Multi
- {
-
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Multi.cs b/1.6/Source/Animations/PawnTests/Logic/PawnTest_Multi.cs
deleted file mode 100644
index 8c854a2..0000000
--- a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Multi.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Multi : BasePawnTest
- {
- public List tests = new List();
- public override bool PawnTest(Pawn pawn)
- {
- //check all different pawn tests in list for pawn
- foreach (BasePawnTest test in tests)
- {
- if (!test.PawnTest(pawn))
- {
- return false;
- }
- }
-
- return true;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Never.cs b/1.6/Source/Animations/PawnTests/Logic/PawnTest_Never.cs
deleted file mode 100644
index fad9985..0000000
--- a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Never.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Never : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return false;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Not.cs b/1.6/Source/Animations/PawnTests/Logic/PawnTest_Not.cs
deleted file mode 100644
index a3e2690..0000000
--- a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Not.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Not : PawnTest_Multi
- {
- public override bool PawnTest(Pawn pawn)
- {
- return !base.PawnTest(pawn);
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Or.cs b/1.6/Source/Animations/PawnTests/Logic/PawnTest_Or.cs
deleted file mode 100644
index 6731f5a..0000000
--- a/1.6/Source/Animations/PawnTests/Logic/PawnTest_Or.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Or : BasePawnTest
- {
- public List tests;
- public override bool PawnTest(Pawn pawn)
- {
-
- foreach (BasePawnTest test in tests)
- {
-
- if (test.PawnTest(pawn))
- {
- return true;
- }
-
- }
-
- return false;
-
- }
-
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWCanBeFucked.cs b/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWCanBeFucked.cs
deleted file mode 100644
index 42b59b5..0000000
--- a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWCanBeFucked.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_RJWCanBeFucked : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
-
- if (!RJWAnimationSettings.maleAnalCanBeFucked)
- {
- if (pawn.gender == Gender.Male && (!Genital_Helper.has_vagina(pawn) || Genital_Helper.vagina_blocked(pawn)))
- {
- return false;
- }
- }
-
-
- return xxx.can_be_fucked(pawn);
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWCanFuck.cs b/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWCanFuck.cs
deleted file mode 100644
index 7ef9c55..0000000
--- a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWCanFuck.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_RJWCanFuck : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return xxx.can_fuck(pawn);
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWInitiator.cs b/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWInitiator.cs
deleted file mode 100644
index db22978..0000000
--- a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWInitiator.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_RJWInitiator : BasePawnTest
- {
- List interactionDefs = new List();
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.jobs?.curDriver is JobDriver_SexBaseInitiator jobDriver_SexBaseInitiator
- && (interactionDefs.Empty() || interactionDefs.ContainsAny(x => x == jobDriver_SexBaseInitiator.Sexprops.dictionaryKey));
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWRape.cs b/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWRape.cs
deleted file mode 100644
index ae01bd4..0000000
--- a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWRape.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_RJWRape : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return pawn?.jobs?.curDriver is JobDriver_Sex pawnSexJobDriver
- && pawnSexJobDriver.Sexprops.isRape;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWReceiver.cs b/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWReceiver.cs
deleted file mode 100644
index 4196f20..0000000
--- a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWReceiver.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_RJWReceiver : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.jobs?.curDriver is JobDriver_SexBaseReciever;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWSex.cs b/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWSex.cs
deleted file mode 100644
index 249002c..0000000
--- a/1.6/Source/Animations/PawnTests/RJW/PawnTest_RJWSex.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_RJWSex : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.jobs?.curDriver is JobDriver_Sex;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_BodyType.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_BodyType.cs
deleted file mode 100644
index a7ab7d2..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_BodyType.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_BodyType : BasePawnTest
- {
- public BodyTypeDef bodyType = null;
- public List bodyTypes = null;
-
- public override bool PawnTest(Pawn pawn)
- {
-
- if (pawn.story.bodyType == bodyType)
- {
- return true;
- }
-
- else if(bodyTypes != null && bodyTypes.Contains(pawn.story.bodyType))
- {
- return true;
- }
-
- return false;
-
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Dead.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Dead.cs
deleted file mode 100644
index a021ce1..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Dead.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Dead : BasePawnTest
- {
-
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.health.State == PawnHealthState.Dead;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_DeadOrDown.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_DeadOrDown.cs
deleted file mode 100644
index 1787e5f..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_DeadOrDown.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_DeadOrDown : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.health.State != PawnHealthState.Mobile;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Down.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Down.cs
deleted file mode 100644
index 758e594..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Down.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Down : BasePawnTest
- {
-
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.health.State == PawnHealthState.Down;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Hediff.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Hediff.cs
deleted file mode 100644
index 8849373..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Hediff.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Hediff : BasePawnTest
- {
- public HediffDef hediffDef; //hediff you want to check for
- float minSeverity = -1; //optional param; min severity the hediff needs to be
-
-
- public override bool PawnTest(Pawn pawn)
- {
- Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(hediffDef);
-
- if (hediff != null)
- {
- if (minSeverity != -1)
- {
- return hediff.Severity > minSeverity;
- }
-
- return true;
- }
-
- return false;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_HostileToPlayer.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_HostileToPlayer.cs
deleted file mode 100644
index dada773..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_HostileToPlayer.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_HostileToPlayer : BasePawnTest
- {
-
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.HostileTo(Faction.OfPlayer);
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Humanlike.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Humanlike.cs
deleted file mode 100644
index dbbf8fe..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Humanlike.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Humanlike : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.RaceProps.Humanlike;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_JobDef.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_JobDef.cs
deleted file mode 100644
index 92346dc..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_JobDef.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_JobDef : BasePawnTest
- {
- public JobDef jobDef;
-
- public override bool PawnTest(Pawn pawn)
- {
- if (pawn.CurJobDef == jobDef)
- {
- return true;
- }
- return false;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_OfPlayerFaction.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_OfPlayerFaction.cs
deleted file mode 100644
index 2d92411..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_OfPlayerFaction.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_OfPlayerFaction : BasePawnTest
- {
-
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.Faction == Faction.OfPlayer;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_PrisonerOfColony.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_PrisonerOfColony.cs
deleted file mode 100644
index 190c57b..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_PrisonerOfColony.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- class PawnTest_PrisonerOfColony : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.IsPrisonerOfColony;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Race.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Race.cs
deleted file mode 100644
index 2f2f1fe..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Race.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Race : BasePawnTest
- {
-
- public List races = new List();
-
- public override bool PawnTest(Pawn pawn)
- {
-
- foreach (ThingDef race in races)
- {
- if (pawn.def == race)
- {
- return true;
- }
- }
-
- return false;
-
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_SlaveOfColony.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_SlaveOfColony.cs
deleted file mode 100644
index b158779..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_SlaveOfColony.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- class PawnTest_SlaveOfColony : BasePawnTest
- {
- public override bool PawnTest(Pawn pawn)
- {
- return pawn.IsSlaveOfColony;
- }
- }
-}
diff --git a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Trait.cs b/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Trait.cs
deleted file mode 100644
index df642ad..0000000
--- a/1.6/Source/Animations/PawnTests/Rimworld/PawnTest_Trait.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnTest_Trait : BasePawnTest
- {
- public TraitDef traitDef;
- public int? degree;
-
- public override bool PawnTest(Pawn pawn)
- {
-
- if (degree != null)
- {
- return pawn.story.traits.HasTrait(traitDef, (int)degree);
- }
-
- return pawn.story.traits.HasTrait(traitDef);
- }
- }
-}
diff --git a/1.6/Source/Comps/CompExtendedAnimator.cs b/1.6/Source/Comps/CompExtendedAnimator.cs
deleted file mode 100644
index 17ce3a3..0000000
--- a/1.6/Source/Comps/CompExtendedAnimator.cs
+++ /dev/null
@@ -1,468 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using RimWorld;
-using rjw;
-using UnityEngine;
-using Verse;
-using Verse.AI;
-using Verse.Sound;
-
-namespace Rimworld_Animations {
- public class CompExtendedAnimator : ThingComp
- {
-
- // CompExtendedAnimator
- // Helps manage AnimationQueue, AbsolutePosition
- //ticks of current animation
- private int animationTicks, actorIndex;
-
- private int ticksSinceLastVoicePlayed, ticksUntilNextVoice;
-
- private GroupAnimationDef currentGroupAnimation;
-
- private List animationQueue;
- private BaseExtendedAnimatorAnchor anchor;
- private VoiceDef voice;
- private VoiceTagDef lastVoiceTag;
-
-
- private bool isAnimating = false;
-
- public bool IsAnimating
- {
- get
- {
- return isAnimating;
- }
- }
-
- public bool IsAnchored
- {
- get
- {
- return anchor != null;
- }
- }
-
- private Vector3 offset;
-
- public Vector3? Offset
- {
- get
- {
- return offset;
- }
- set
- {
- this.offset = value ?? Vector3.zero;
- }
- }
-
- private int rotation;
-
- public int? Rotation
- {
- get
- {
- return rotation;
- }
- set
- {
- this.rotation = value ?? 0;
- }
- }
-
- public int AnimationLength
- {
- get
- {
- if (!IsAnimating) return 0;
-
- int groupAnimLength = 0;
- foreach(AnimationDef anim in animationQueue)
- {
- groupAnimLength += anim.durationTicks;
- }
-
- return groupAnimLength;
-
- }
- }
-
- public AnimationDef CurrentAnimation {
-
- get
- {
- return IsAnimating ? animationQueue[0] : null;
- }
-
- }
-
- public GroupAnimationDef CurrentGroupAnimation
- {
- get
- {
- return currentGroupAnimation;
- }
- set
- {
- currentGroupAnimation = value;
- }
- }
-
- public int ActorIndex
- {
- get
- {
- return actorIndex;
- }
- }
-
- public override void PostSpawnSetup(bool respawningAfterLoad)
- {
- if (voice == null)
- {
- AssignNewVoice();
- }
-
- }
-
- public Vector3 getAnchor()
- {
- return anchor.getDrawPos();
- }
-
- public override void CompTick()
- {
- if (isAnimating)
- {
- animationTicks++;
-
- //if animationticks is equal to cur. anim duration,
- if (animationTicks >= animationQueue[0].durationTicks)
- {
- //dequeue; returns false if more animations
- if (!PopAnimationQueue())
- {
- //play next if more anims still
- PlayNextAnimation();
- }
- else
- {
- StopAnimating();
- }
- }
-
- CheckAndPlaySounds();
-
- }
-
-
-
- base.CompTick();
- }
-
- //returns false if still more animations
- public bool PopAnimationQueue()
- {
-
- if (!animationQueue.Empty())
- {
- //pop queue
- animationQueue.RemoveAt(0);
- }
-
- return animationQueue.Empty();
- }
-
- public void PlayNextAnimation()
- {
- if (!animationQueue.Empty())
- {
- isAnimating = true;
- animationTicks = 0;
- pawn.Drawer.renderer.SetAnimation(animationQueue[0]);
- }
- }
-
- public void StopAnimating()
- {
- isAnimating = false;
- animationQueue = null;
- anchor = null;
- offset = Vector3.zero;
- pawn.Drawer.renderer.SetAnimation(null);
- CurrentGroupAnimation = null;
- actorIndex = 0;
- pawn.Drawer.renderer.SetAllGraphicsDirty();
- }
-
- public void PlayGroupAnimation(GroupAnimationDef groupAnimationDef, int actorIndex, int randomSeed, List actors)
- {
-
- this.actorIndex = actorIndex;
- this.currentGroupAnimation = groupAnimationDef;
- ticksSinceLastVoicePlayed = GenTicks.TicksGame;
- ticksUntilNextVoice = 0;
-
- groupAnimationDef.GetOffset(actorIndex, this.pawn, out Vector3? offset, out int? rotation);
- this.Offset = offset;
- this.Rotation = rotation;
-
-
- animationQueue = groupAnimationDef.GetAllAnimationsForActor(actorIndex, randomSeed, actors);
-
-
-
- //set all graphics dirty; necessary because sometimes rjw doesn't call during threesomes
- pawn.Drawer.renderer.SetAllGraphicsDirty();
-
- PlayNextAnimation();
- }
-
- public void PlayGroupAnimation(GroupAnimationDef groupAnimationDef, BaseExtendedAnimatorAnchor anchor, int animationIndex, int randomSeed, List actors)
- {
- this.anchor = anchor;
- PlayGroupAnimation(groupAnimationDef, animationIndex, randomSeed, actors);
- }
-
- public override void PostExposeData()
- {
- base.PostExposeData();
- Scribe_Values.Look(ref this.isAnimating, "animations_isAnimating", false);
- Scribe_Values.Look(ref this.animationTicks, "animations_ticks", 0);
- Scribe_Values.Look(ref this.actorIndex, "actor_index", 0);
- Scribe_Collections.Look(ref animationQueue, "animations_queue");
- Scribe_Defs.Look(ref currentGroupAnimation, "animations_groupAnimationDef");
- Scribe_Deep.Look(ref this.anchor, "animations_anchor");
- Scribe_Values.Look(ref this.offset, "animations_offset", Vector3.zero);
- Scribe_Values.Look(ref this.rotation, "animations_rotationOffset", 0);
- Scribe_Defs.Look(ref this.voice, "animations_voice");
-
- }
-
- public override List CompRenderNodes()
- {
- //only if pawn is animating for performance
- if (IsAnimating)
- {
-
- List animRenderNodes = new List();
-
- // for all animationpropdefs,
- foreach (AnimationPropDef animationProp in DefDatabase.AllDefsListForReading)
- {
- //if animation makes use of prop,
- if (AnimationMakesUseOfProp(animationProp, out PawnRenderNodeProperties props))
- {
-
- if (props.texPath.NullOrEmpty())
- {
- props.texPath = "AnimationProps/MissingTexture/MissingTexture";
- }
-
-
- //create new render node
- PawnRenderNode animRenderNode = (PawnRenderNode)Activator.CreateInstance(props.nodeClass, new object[] {
- this.pawn,
- props,
- pawn.Drawer.renderer.renderTree
- });
-
- animRenderNodes.Add(animRenderNode);
- }
-
- }
-
- //return list of rendernodes that should animate
- return animRenderNodes;
-
- }
- else
- {
- return null;
- }
-
- }
-
- public void AssignNewVoice()
- {
- //all voice options
- List voiceOptions =
- DefDatabase.AllDefsListForReading
- .FindAll(voiceDef => voiceDef.VoiceFitsPawn(pawn));
-
- //all voice options, with priority (for traitdef specific voices)
- List voiceOptionsWithPriority =
- voiceOptions.FindAll(voiceDef => voiceDef.takesPriority);
-
- if (!voiceOptionsWithPriority.NullOrEmpty())
- {
- voice = voiceOptionsWithPriority.RandomElementByWeight(x => x.randomChanceFactor);
-
- }
- else if (!voiceOptions.NullOrEmpty())
- {
- voice = voiceOptions.RandomElementByWeight(x => x.randomChanceFactor);
- }
-
- }
-
- public void CheckAndPlaySounds()
- {
-
- PawnRenderNode rootNode = pawn.Drawer?.renderer?.renderTree?.rootNode;
-
- //check if the rootnode has sounds; if so play it
- if (rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended animWorker)
- {
- SoundDef sound = animWorker.soundAtTick(rootNode.tree.AnimationTick, rootNode.tree.currentAnimation, rootNode);
-
- if (sound != null)
- {
- SoundInfo soundInfo = new TargetInfo(pawn.Position, pawn.Map);
-
- //temp; does not consider non-rjw animations
- //todo: replace with value stored in comp or somewhere else?
- soundInfo.volumeFactor = RJWAnimationSettings.soundVolume;
-
- sound.PlayOneShot(soundInfo);
- }
-
- if (RJWAnimationSettings.playVoices)
- {
- SoundInfo voiceInfo = new TargetInfo(pawn.Position, pawn.Map);
- voiceInfo.volumeFactor = RJWAnimationSettings.voicesVolume;
-
- //play voice sounds
- VoiceTagDef voiceTag = animWorker.voiceAtTick(rootNode.tree.AnimationTick, rootNode.tree.currentAnimation, rootNode);
- if (voiceTag != null
- && (lastVoiceTag != voiceTag || ticksSinceLastVoicePlayed + ticksUntilNextVoice < GenTicks.TicksGame)) //play a new voice tag, or wait until time elapsed
- {
- lastVoiceTag = voiceTag;
- ticksSinceLastVoicePlayed = GenTicks.TicksGame;
-
- if (voice != null && voice.sounds.ContainsKey(voiceTag))
- {
- ticksUntilNextVoice = voice.ticksBetweenPlays.RandomInRange;
- voice.sounds[voiceTag].PlayOneShot(voiceInfo);
- }
-
- else if (pawn.RaceProps.Humanlike && RJWAnimationSettings.playHumanlikeVoicesAsDefault)
- {
- //play default voice
- VoiceDef pawnDefaultVoice = (pawn.gender == Gender.Male ? VoiceDefOf.Voice_HumanMale : VoiceDefOf.Voice_HumanFemale);
-
- ticksUntilNextVoice = pawnDefaultVoice.ticksBetweenPlays.RandomInRange;
-
- if (pawnDefaultVoice.sounds.ContainsKey(voiceTag))
- {
- ticksUntilNextVoice = pawnDefaultVoice.ticksBetweenPlays.RandomInRange;
- pawnDefaultVoice.sounds[voiceTag].PlayOneShot(voiceInfo);
- }
-
-
- }
-
- }
- }
-
-
- }
-
- //check rootnodes and children
- if (rootNode?.children != null)
- {
- foreach (PawnRenderNode node in rootNode?.children)
- {
- if (node?.AnimationWorker is AnimationWorker_KeyframesExtended childrenAnimWorker)
- {
-
-
- if (RJWAnimationSettings.playSounds)
- {
- SoundDef sound = childrenAnimWorker.soundAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node);
-
- if (sound != null)
- {
- SoundInfo soundInfo = new TargetInfo(pawn.Position, pawn.Map);
- soundInfo.volumeFactor = RJWAnimationSettings.soundVolume;
- sound.PlayOneShot(soundInfo);
- }
- }
-
- if (RJWAnimationSettings.playVoices)
- {
-
- SoundInfo voiceInfo = new TargetInfo(pawn.Position, pawn.Map);
- voiceInfo.volumeFactor = RJWAnimationSettings.voicesVolume;
-
- //play voice sounds
- VoiceTagDef voiceTag = childrenAnimWorker.voiceAtTick(rootNode.tree.AnimationTick, rootNode.tree.currentAnimation, rootNode);
- if (voiceTag != null
- && (lastVoiceTag != voiceTag || ticksSinceLastVoicePlayed + ticksUntilNextVoice < GenTicks.TicksGame)) //play a new voice tag, or wait until time elapsed
- {
- lastVoiceTag = voiceTag;
- ticksSinceLastVoicePlayed = GenTicks.TicksGame;
-
- if (voice != null && voice.sounds.ContainsKey(voiceTag))
- {
- ticksUntilNextVoice = voice.ticksBetweenPlays.RandomInRange;
- voice.sounds[voiceTag].PlayOneShot(voiceInfo);
- }
- else if (pawn.RaceProps.Humanlike && RJWAnimationSettings.playHumanlikeVoicesAsDefault)
- {
-
- VoiceDef pawnDefaultVoice = (pawn.gender == Gender.Male ? VoiceDefOf.Voice_HumanMale : VoiceDefOf.Voice_HumanFemale);
- if (pawnDefaultVoice.sounds.ContainsKey(voiceTag))
- {
- ticksUntilNextVoice = pawnDefaultVoice.ticksBetweenPlays.RandomInRange;
- pawnDefaultVoice.sounds[voiceTag].PlayOneShot(voiceInfo);
- }
- }
- }
- }
- }
- }
- }
- //do the same for all the child nodes
-
- }
-
-
-
-
- public bool AnimationMakesUseOfProp(AnimationPropDef animationProp, out PawnRenderNodeProperties props)
- {
- props = null;
- // never true if not animating; anim props shouldn't be attached
- if (!IsAnimating) return false;
-
- //for all anims in queue (because it's only recached at start)
- foreach (AnimationDef animation in animationQueue)
- {
- foreach (PawnRenderNodeTagDef propTag in animation.keyframeParts.Keys)
- {
- //get specific props for that pawn
- props = animationProp.GetPawnRenderNodeProperties(this.pawn);
-
- // if that proptag is the same as the one for animationProp,
- if (propTag == props.tagDef)
- {
- //that prop is being used in the animation
- return true;
- }
- }
-
- }
-
-
- return false;
- }
-
- private Pawn pawn => base.parent as Pawn;
-
- }
-
-}
diff --git a/1.6/Source/Comps/CompThingAnimator.cs b/1.6/Source/Comps/CompThingAnimator.cs
deleted file mode 100644
index 64dcc59..0000000
--- a/1.6/Source/Comps/CompThingAnimator.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations {
- public class CompThingAnimator : ThingComp
- {
-
- public override void CompTick()
- {
- //todo: If item is held by pawn, and pawn is doing thingcomp animation,
- //animate thingcomp; see CompPowerPlantWind for how thingcomps are animated
- return;
- }
- }
-
-}
diff --git a/1.6/Source/Comps/ExtendedAnimatorAnchor/BaseExtendedAnimatorAnchor.cs b/1.6/Source/Comps/ExtendedAnimatorAnchor/BaseExtendedAnimatorAnchor.cs
deleted file mode 100644
index 6116a8c..0000000
--- a/1.6/Source/Comps/ExtendedAnimatorAnchor/BaseExtendedAnimatorAnchor.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public abstract class BaseExtendedAnimatorAnchor : IExposable
- {
- public BaseExtendedAnimatorAnchor() { }
-
- public virtual void ExposeData() { }
- public abstract Vector3 getDrawPos();
-
- public string GetUniqueLoadID()
- {
- throw new NotImplementedException();
- }
- }
-}
diff --git a/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Thing.cs b/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Thing.cs
deleted file mode 100644
index 6f86334..0000000
--- a/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Thing.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class ExtendedAnimatorAnchor_Thing : BaseExtendedAnimatorAnchor
- {
- public Thing AnchorThing
- {
- get
- {
- return thing;
- }
- }
- private Thing thing;
-
- public ExtendedAnimatorAnchor_Thing() : base() { }
-
- public ExtendedAnimatorAnchor_Thing(Thing thing) : base()
- {
- this.thing = thing;
- }
-
- public override Vector3 getDrawPos()
- {
- //x and z position, regular altitude for pawns
- return new Vector3(thing.DrawPos.x, AltitudeLayer.Pawn.AltitudeFor(), thing.DrawPos.z);
- }
-
- public override void ExposeData()
- {
- base.ExposeData();
- Scribe_References.Look(ref this.thing, "animations_anchor_thing", false);
- }
- }
-}
diff --git a/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Vector3.cs b/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Vector3.cs
deleted file mode 100644
index 7eb5ed8..0000000
--- a/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Vector3.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class ExtendedAnimatorAnchor_Vector3 : BaseExtendedAnimatorAnchor
- {
-
- public ExtendedAnimatorAnchor_Vector3() : base() { }
-
- private Vector3 position;
- public ExtendedAnimatorAnchor_Vector3(Vector3 position) : base()
- {
- //default to altitude for layer for y
- this.position = new Vector3(position.x, AltitudeLayer.Pawn.AltitudeFor(), position.z);
- }
-
- public override Vector3 getDrawPos()
- {
- return position;
- }
-
- public override void ExposeData()
- {
- base.ExposeData();
- Scribe_Values.Look(ref position, "animations_anchor_position", Vector3.zero);
- }
- }
-}
diff --git a/1.6/Source/Defs/AnimationDefOf.cs b/1.6/Source/Defs/AnimationDefOf.cs
deleted file mode 100644
index 99a766e..0000000
--- a/1.6/Source/Defs/AnimationDefOf.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- [DefOf]
- public static class AnimationDefOf
- {
- static AnimationDefOf()
- {
- DefOfHelper.EnsureInitializedInCtor(typeof(AnimationDefOf));
- }
-
- public static AnimationDef TestAnimation1;
- public static AnimationDef TestAnimation2;
- }
-}
diff --git a/1.6/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs b/1.6/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs
deleted file mode 100644
index 318e9c2..0000000
--- a/1.6/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs
+++ /dev/null
@@ -1,209 +0,0 @@
-using System.Collections.Generic;
-using Verse;
-using RimWorld;
-using UnityEngine;
-using System.Windows;
-
-namespace Rimworld_Animations {
- class MainTabWindow_OffsetConfigure : MainTabWindow
- {
-
- public override Vector2 RequestedTabSize => new Vector2(505, 530);
- public override void DoWindowContents(Rect inRect) {
-
- Rect position = new Rect(inRect.x, inRect.y, inRect.width, inRect.height);
-
-
- Listing_Standard listingStandard = new Listing_Standard();
- listingStandard.Begin(position);
-
- listingStandard.Label("RimAnims_AnimManager".Translate());
-
- listingStandard.GapLine();
-
- if (Find.Selector.SingleSelectedThing is Pawn curPawn
- && curPawn.TryGetComp(out CompExtendedAnimator extendedAnimator)
- && extendedAnimator.IsAnimating)
- {
- //Pawn info about their body, race
- Vector3 offsetPosition = extendedAnimator.Offset != null ? (Vector3)extendedAnimator.Offset : Vector3.zero;
- int offsetRotation = extendedAnimator.Rotation != null ? (int)extendedAnimator.Rotation : 0;
-
- string pawnDef = curPawn.def.defName;
- string bodyTypeDef = (curPawn.story?.bodyType != null) ? curPawn.story.bodyType.ToString() : "None";
- string genderDef = curPawn.gender.ToString();
- string currentAnimation = extendedAnimator.CurrentAnimation != null ? extendedAnimator.CurrentAnimation.defName : "None";
-
- listingStandard.Label(curPawn.Name + ": " + curPawn.def.defName + ", " + bodyTypeDef + ", " + genderDef + ", Animation: " + currentAnimation);
-
- if (curPawn.def.defName == "Human")
- {
- listingStandard.Label("RimAnims_Warning".Translate());
- }
-
- float posX = offsetPosition.x, posY = offsetPosition.y, posZ = offsetPosition.z;
- int rot = offsetRotation;
-
- float.TryParse(listingStandard.TextEntryLabeled("X: ", posX.ToString()), out posX);
- posX = listingStandard.Slider(posX, -2, 2);
-
- float.TryParse(listingStandard.TextEntryLabeled("Y: ", offsetPosition.y.ToString()), out posY);
- posY = listingStandard.Slider(posY, -2, 2);
-
- float.TryParse(listingStandard.TextEntryLabeled("Z: ", posZ.ToString()), out posZ);
- posZ = listingStandard.Slider(posZ, -2, 2);
-
- int.TryParse(listingStandard.TextEntryLabeled("Rotation: ", rot.ToString()), out rot);
- rot = (int)listingStandard.Slider(rot, -180, 180);
-
- if (listingStandard.ButtonText("RimAnims_Reset".Translate()))
- {
- if (!RJWAnimationSettings.offsets.NullOrEmpty()
- && RJWAnimationSettings.offsets.ContainsKey(AnimationUtility.OffsetLookupKey(curPawn)))
- {
- RJWAnimationSettings.offsets[AnimationUtility.OffsetLookupKey(curPawn)].Reset();
- }
- posX = posY = posZ = rot = 0;
-
- }
-
- listingStandard.GapLine();
- Vector3 newOffsetVector = new Vector3(posX, posY, posZ);
-
- string offset = "";
- offset += bodyTypeDef != "None" ? "" + bodyTypeDef + " " : "";
- offset += newOffsetVector != Vector3.zero ? "(" + posX + ", " + posY + ", " + posZ + ") " : "";
- offset += rot != 0 ? "" + rot + " " : "";
- offset += " ";
-
- listingStandard.Label("Appropriate Offset value for " + currentAnimation + ", " + pawnDef + ", " + bodyTypeDef + ", " + genderDef + ": ");
- listingStandard.Label(offset);
-
- if (listingStandard.ButtonText("RimAnims_CopyToClipboard".Translate()))
- {
-
- GUIUtility.systemCopyBuffer = offset;
-
- }
-
- listingStandard.Label("RimAnims_ShareSettings".Translate());
-
- if (extendedAnimator.Offset != newOffsetVector || extendedAnimator.Rotation != rot)
- {
- // update current animation offsets
- extendedAnimator.Offset = newOffsetVector;
- extendedAnimator.Rotation = rot;
-
- //init offsets dictionary if necessary
- if (RJWAnimationSettings.offsets == null) RJWAnimationSettings.offsets = new Dictionary();
-
- //create new file entry if one doesn't exist
- if (!RJWAnimationSettings.offsets.ContainsKey(AnimationUtility.OffsetLookupKey(curPawn)))
- {
- RJWAnimationSettings.offsets[AnimationUtility.OffsetLookupKey(curPawn)] = new PawnScaledOffsets();
- }
-
- // save the offsets to file
- RJWAnimationSettings.offsets[AnimationUtility.OffsetLookupKey(curPawn)].AssignOffsets(curPawn, newOffsetVector, rot);
-
- }
- }
-
- else
- {
- listingStandard.Label("Select a pawn currently in an animation to change their offsets");
- }
-
- listingStandard.End();
-
- }
- }
-}
-
-/**
- if (curPawn.TryGetComp animator) {
-
-
-
- /*
- CompBodyAnimator compBodyAnimator = curPawn.TryGetComp();
- AnimationDef def = compBodyAnimator.CurrentAnimation;
- int ActorIndex = compBodyAnimator.ActorIndex;
- float offsetX = 0, offsetZ = 0, rotation = 0;
-
- string bodyTypeDef = (curPawn.story?.bodyType != null) ? curPawn.story.bodyType.ToString() : "";
-
- if (AnimationSettings.offsets.ContainsKey(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex)) {
- offsetX = AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x;
- offsetZ = AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y;
- } else {
- AnimationSettings.offsets.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, new Vector2(0, 0));
- }
-
- if (AnimationSettings.rotation.ContainsKey(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex)) {
- rotation = AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex];
- }
- else {
- AnimationSettings.rotation.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, 0);
- }
-
- listingStandard.Label("Name: " + curPawn.Name + " Race: " + curPawn.def.defName + " Actor Index: " + curPawn.TryGetComp().ActorIndex + " Body Type (if any): " + bodyTypeDef + " Animation: " + def.label + (curPawn.TryGetComp().Mirror ? " mirrored" : ""));
-
- if(curPawn.def.defName == "Human") {
- listingStandard.Label("Warning--You generally don't want to change human offsets, only alien offsets");
- }
-
- float.TryParse(listingStandard.TextEntryLabeled("X Offset: ", offsetX.ToString()), out offsetX);
- offsetX = listingStandard.Slider(offsetX, -2, 2);
-
- float.TryParse(listingStandard.TextEntryLabeled("Z Offset: ", offsetZ.ToString()), out offsetZ);
- offsetZ = listingStandard.Slider(offsetZ, -2, 2);
-
- float.TryParse(listingStandard.TextEntryLabeled("Rotation: ", rotation.ToString()), out rotation);
- rotation = listingStandard.Slider(rotation, -180, 180);
-
- if(listingStandard.ButtonText("Reset All")) {
- offsetX = 0;
- offsetZ = 0;
- rotation = 0;
- }
-
- listingStandard.GapLine();
-
- if(listingStandard.ButtonText("Shift Actors")) {
-
- if(AnimationSettings.debugMode) {
- Log.Message("Shifting actors in animation...");
- }
-
- for(int i = 0; i < curPawn.TryGetComp().actorsInCurrentAnimation.Count; i++) {
-
- Pawn actor = curPawn.TryGetComp().actorsInCurrentAnimation[i];
-
- actor.TryGetComp()?.shiftActorPositionAndRestartAnimation();
-
- //reset the clock time of every pawn in animation
- if(actor.jobs.curDriver is rjw.JobDriver_Sex) {
- (actor.jobs.curDriver as rjw.JobDriver_Sex).ticks_left = def.animationTimeTicks;
- (actor.jobs.curDriver as rjw.JobDriver_Sex).ticksLeftThisToil = def.animationTimeTicks;
- (actor.jobs.curDriver as rjw.JobDriver_Sex).duration = def.animationTimeTicks;
- }
-
- }
-
- }
-
- if (offsetX != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x || offsetZ != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y) {
- AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = new Vector2(offsetX, offsetZ);
-
- }
-
- if(rotation != AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex]) {
- AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = rotation;
- }
-
- }
-
-}
- */
-
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Masturbate.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Masturbate.cs
deleted file mode 100644
index d7c9e98..0000000
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Masturbate.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using Verse.AI;
-
-namespace Rimworld_Animations
-{
- [HarmonyPatch(typeof(JobDriver_Masturbate), "SetupDurationTicks")]
- public class HarmonyPatch_JobDriver_Masturbate
- {
- public static void Postfix(JobDriver_Masturbate __instance)
- {
- //prevent early stoppage of masturbate jobdriver during animation
-
- /* not needed anymore? Ticks are assigned during animation
-
- __instance.duration = 10000000;
- __instance.ticks_left = __instance.duration;
-
- */
-
- }
- }
-
- [HarmonyPatch(typeof(JobDriver_Masturbate), "MakeNewToils")]
- public class HarmonyPatch_JobDriver_Masturbate2
- {
- public static void Postfix(JobDriver_Masturbate __instance, ref IEnumerable __result)
- {
-
- var toils = __result.ToList();
-
- //sex toil
- toils[1].initAction += delegate ()
- {
- CompExtendedAnimator pawnAnimator = __instance.pawn.TryGetComp();
-
- // if pawn was given an animation to play,
- if (pawnAnimator.IsAnimating)
- {
- //set duration of masturbate toil to anim length
- toils[1].defaultDuration = pawnAnimator.AnimationLength;
- }
-
- };
-
- __result = toils.AsEnumerable();
- }
- }
-}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Sex.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Sex.cs
deleted file mode 100644
index 622b7c1..0000000
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Sex.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
-
- [HarmonyPatch(typeof(JobDriver_Sex), "setup_ticks")]
- public class HarmonyPatch_JobDriver_Sex
- {
- public static void Postfix(JobDriver_Sex __instance)
- {
- if (!RJWAnimationSettings.hearts)
- {
- __instance.ticks_between_hearts = int.MaxValue;
- }
-
- }
- }
-
- [HarmonyPatch(typeof(JobDriver_Sex), "SexTick")]
- public class HarmonyPatch_JobDriver_Sex2
- {
- public static void Postfix(JobDriver_Sex __instance, Pawn pawn, Thing target)
- {
- //if neverending sex and pawn doesn't have an animation,
- if (__instance.neverendingsex
- && !pawn.TryGetComp().IsAnimating)
- {
-
- //start a new animation for all the pawns paired with receiver job driver
- List participants;
- if (target is Pawn receiverPawn)
- {
- participants = (receiverPawn?.jobs?.curDriver as JobDriver_SexBaseReciever)?.parteners;
- if (!participants.NullOrEmpty() && !participants.Contains(receiverPawn))
- {
- participants = participants.Append(receiverPawn).ToList();
- }
- }
- else
- {
- participants = new List { pawn };
- }
-
-
- GroupAnimationDef animation = AnimationUtility.FindGroupAnimation(participants, out List participantsOrdered);
- if (animation != null)
- {
- Thing anchor = (Thing)__instance.Bed ?? pawn;
- AnimationUtility.StartGroupAnimation(participantsOrdered, animation, anchor);
- }
-
-
- }
-
- }
- }
-
-}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs
deleted file mode 100644
index 36a1316..0000000
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs
+++ /dev/null
@@ -1,133 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HarmonyLib;
-using RimWorld;
-using Verse;
-using rjw;
-
-namespace Rimworld_Animations
-{
-
- [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")]
- static class HarmonyPatch_JobDriver_SexBaseInitiator_Start
- {
- public static void Postfix(ref JobDriver_SexBaseInitiator __instance)
- {
-
- Pawn pawn = __instance.pawn;
- Pawn partner = (__instance.Target as Corpse)?.InnerPawn ?? __instance.Target as Pawn;
-
- List participants;
-
- if (__instance is JobDriver_Masturbate)
- {
- participants = new List() { pawn };
- }
- else if (__instance is JobDriver_ViolateCorpse)
- {
- participants = new List() { pawn, partner };
- }
- else
- {
-
- //Partner should be in a sexbasereciever job
- if (!(partner.jobs?.curDriver is JobDriver_SexBaseReciever))
- {
- if (RJWAnimationSettings.debugMode)
- {
- Log.Warning("Warning: partner was not in a sex state when trying to start animation!");
- }
- return;
- }
-
- participants = (partner?.jobs?.curDriver as JobDriver_SexBaseReciever)?.parteners.ToList();
- if (!participants.Contains(partner))
- {
- participants = participants.Append(partner).ToList();
- }
- }
-
- GroupAnimationDef groupAnimation = AnimationUtility.FindGroupAnimation(participants, out List participantsOrdered);
-
- if (groupAnimation != null)
- {
- Thing anchor = (Thing)__instance.Bed ?? partner;
-
- AnimationUtility.StartGroupAnimation(participantsOrdered, groupAnimation, anchor);
- int animTicks = AnimationUtility.GetAnimationLength(pawn);
-
- Log.Message("InteractionDef: " + __instance.Sexprops.dictionaryKey);
- foreach (Pawn participant in participants)
- {
- if (RJWAnimationSettings.debugMode)
- {
- Log.Message("Participant: " + participant.Name);
- Log.Message("JobDriver: " + participant.CurJobDef.defName);
- }
-
- //null ref check for pawns that might have lost their jobs or become null for some reason
- if (participant?.jobs?.curDriver is JobDriver_Sex participantJobDriver)
- {
- participantJobDriver.ticks_left = animTicks;
- participantJobDriver.sex_ticks = animTicks;
- participantJobDriver.orgasmStartTick = animTicks;
- participantJobDriver.duration = animTicks;
- }
- }
- }
- /*
- * not necessary anymore because removed masturbate infinite ticks
- *
- else
- {
-
- //backup check for if masturbation doesn't have anim
- //reset duration and ticks_left to the regular RJW values
- //because of HarmonyPatch_JobDriver_Masturbate setting the values large to prevent early stoppage
- foreach (Pawn participant in participants)
- {
- if (participant?.jobs?.curDriver is JobDriver_Sex participantJobDriver)
- {
- participantJobDriver.duration = (int)(xxx.is_frustrated(participant) ? (2500f * Rand.Range(0.2f, 0.7f)) : (2500f * Rand.Range(0.2f, 0.4f)));
- participantJobDriver.ticks_left = participantJobDriver.duration;
-
- }
-
- }
- }
-
- */
-
- }
-
- }
-
-
- [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
- static class HarmonyPatch_JobDriver_SexBaseInitiator_End
- {
-
- public static void Prefix(ref JobDriver_SexBaseInitiator __instance)
- {
- //stop pawn animating
- AnimationUtility.StopGroupAnimation(__instance.pawn);
-
- //stop partner animating
- if (__instance.Partner is Pawn partner)
- {
- AnimationUtility.StopGroupAnimation(partner);
- }
-
- //stop partner's other partners (threesome pawns) animating
- //added null ref checks for instances when pawns get nulled or lose their jobs
- if (__instance.Partner?.jobs?.curDriver is JobDriver_SexBaseReciever partnerReceiverJob)
- {
- foreach (Pawn pawn in partnerReceiverJob.parteners)
- {
- if (pawn != null) AnimationUtility.StopGroupAnimation(pawn);
- }
- }
- }
- }
-}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_Animate.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_Animate.cs
deleted file mode 100644
index 4de97aa..0000000
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/JobDriver_Sex/HarmonyPatch_Animate.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- [HarmonyPatch(typeof(JobDriver_Sex), "Animate")]
- public class HarmonyPatch_Animate
- {
- public static bool Prefix(ref JobDriver_Sex __instance, ref Pawn pawn, ref Thing target)
- {
- //remove all bumping stuff in animations; keep draw nude code
- __instance.RotatePawns(pawn, __instance.Partner);
- if (target != null)
- {
- Pawn pawn2 = target as Pawn;
-
- if (pawn2 != null && !__instance.Sexprops.isRapist)
- {
- // if not (pawn has root node and rootnode is animating)
- if (!(pawn2?.Drawer?.renderer?.renderTree?.rootNode is PawnRenderNode rootNode
- && (rootNode.AnimationWorker is AnimationWorker_KeyframesExtended || rootNode.children.Any(x => x.AnimationWorker is AnimationWorker_KeyframesExtended))))
- {
- //play bumpin anim
- pawn.Drawer.Notify_MeleeAttackOn(target);
- }
-
- }
-
- if (!__instance.isEndytophile)
- {
- SexUtility.DrawNude(pawn, false);
- if (pawn2 != null)
- {
- SexUtility.DrawNude(pawn2, false);
- return false;
- }
- }
- }
- else if (!__instance.isEndytophile)
- {
- SexUtility.DrawNude(pawn, false);
- }
-
- return false;
- }
- }
-}
diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs
deleted file mode 100644
index 703bdcc..0000000
--- a/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse.AI;
-
-namespace Rimworld_Animations
-{
- [HarmonyPatch(typeof(JobDriver_SexBaseRecieverRaped), "MakeNewToils")]
- public class HarmonyPatch_JobDriver_SexBaseReceiverRaped
- {
- /*
- * Doesn't work; ienumerables are read-only, can't modify toil
- * would need to harmonypatch; stopped partner animating in sexbaseinitiator instead
- *
- public static void Postfix(JobDriver_SexBaseRecieverRaped __instance, ref IEnumerable __result)
- {
- //added for sudden end of jobdriver
- __result.Last().AddFinishAction(delegate {
- AnimationUtility.StopGroupAnimation(__instance.pawn);
- });
- }
-
- */
- }
-}
diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Dialog_DebugRenderTree.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Dialog_DebugRenderTree.cs
deleted file mode 100644
index eadccea..0000000
--- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Dialog_DebugRenderTree.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- [HarmonyPatch(typeof(Dialog_DebugRenderTree), "RightRect")]
- public static class HarmonyPatch_Dialog_DebugRenderTree
- {
-
- static MethodInfo replaceFloatRangeMethod = SymbolExtensions.GetMethodInfo(() => HarmonyPatch_Dialog_DebugRenderTree.ReplaceFloatValueRange());
-
- public static IEnumerable Transpiler(IEnumerable instructions)
- {
- var codes = new List(instructions);
-
- for (int i = 0; i < codes.Count; i++)
- {
- //increase granularity of x and z sliders to be 0.01 instead
- if (codes[i].opcode == OpCodes.Ldc_R4 && (float)codes[i].operand == 0.05f)
- {
- codes[i].operand = 0.001f;
- codes[i - 8].opcode = OpCodes.Call;
- codes[i - 8].operand = replaceFloatRangeMethod;
-
- }
-
- }
-
- return codes.AsEnumerable();
-
- }
-
- public static FloatRange ReplaceFloatValueRange()
- {
- return new FloatRange(-RJWAnimationSettings.floatRangeInRenderTreeMenu, RJWAnimationSettings.floatRangeInRenderTreeMenu);
- }
-
- }
-}
diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNode.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNode.cs
deleted file mode 100644
index cbdc70a..0000000
--- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNode.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- // Head Rotation Code - Textures
- // it's fine to just edit each AppendRequests individually
- // because they all the parms are passed down to each child node recursively
- [HarmonyPatch(typeof(PawnRenderNode), "AppendRequests")]
- public static class HarmonyPatch_PawnRenderNode
- {
- //if rendernodetag is head, update PawnDrawParms so that head, and all children, are rotated for anim
- public static bool Prefix(ref PawnRenderNode __instance, ref PawnDrawParms parms)
- {
- if (__instance.AnimationWorker is AnimationWorker_KeyframesExtended extendedAnimWorker)
- {
-
- if (parms.Portrait) return true;
-
- // ADJUST FACING get rotated textures
- // compare the previous tick to the current tick; if the current tick rotation is different, recache
- parms.facing = extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick, __instance.tree.currentAnimation, __instance);
-
-
- //INVIS IF ANIM CALLS FOR IT
- //replace maybe?
-
- //cheaper call now comparing prev tick to cur tick
-
- //not necessary because of new rendernodeworker hiding props now
- //nvm, keep it because you can hide head and body too, if need be
- return extendedAnimWorker.visibleAtTick(__instance.tree.AnimationTick, __instance.tree.currentAnimation, __instance);
-
- }
-
- return true;
-
- }
- }
- /*
- * no longer needed; taken care of by graphic variants
- *
- // For changing texture path of thing to variant
- [HarmonyPatch(typeof(PawnRenderNode), "TexPathFor")]
- public static class HarmonyPatch_PawnRenderNode2
- {
- public static void Postfix(ref PawnRenderNode __instance, ref string __result)
- {
- if (__instance.AnimationWorker is AnimationWorker_KeyframesExtended animWorker)
- {
- __result += animWorker.TexPathVariantAtTick(__instance.tree.AnimationTick);
- }
- }
- }
-
- */
-}
diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNodeWorker.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNodeWorker.cs
deleted file mode 100644
index 67981ed..0000000
--- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNodeWorker.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
-
- [HarmonyPatch(typeof(PawnRenderNodeWorker), "CanDrawNow")]
- public class HarmonyPatch_PawnRenderTreeWorker
- {
- public static bool Prefix(PawnRenderNode node, ref bool __result)
- {
- //switching to this system so that head or body can be hidden separate from other nodes
- //(hide head but not addons, etc)
- //in case someone wanted to do that
-
- if (node.AnimationWorker is AnimationWorker_KeyframesExtended animWorker)
- {
- if (!animWorker.visibleAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node))
- {
- __result = false;
- return false;
- }
-
- //visible when animating
- return true;
- }
-
- return true;
- }
-
- }
-
-}
-
diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs
deleted file mode 100644
index c62bcc4..0000000
--- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs
+++ /dev/null
@@ -1,155 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
-
- [HarmonyPatch(typeof(PawnRenderTree), "TryGetMatrix")]
- public class HarmonyPatch_PawnRenderTree
- {
- public static bool Prefix(PawnRenderTree __instance, Dictionary ___nodesByTag, Dictionary> ___nodeAncestors, PawnRenderNode node, ref PawnDrawParms parms, ref Matrix4x4 matrix, ref bool __result)
- {
- /*
- * Facing offsets fix
- */
- //find lowest parent that is animating, or nothing if not animating
-
- //don't do anything if portrait
- if (parms.Portrait) return true;
-
- PawnRenderNode animatingNode = node;
- while (animatingNode != null
- && !(animatingNode.AnimationWorker is AnimationWorker_KeyframesExtended))
- {
- animatingNode = animatingNode.parent;
- }
-
- //if animating parent node found,
- if (animatingNode?.AnimationWorker is AnimationWorker_KeyframesExtended animatingNodeAnimationWorker)
- {
- //change parm to facing to animate correctly
- parms.facing = animatingNodeAnimationWorker.facingAtTick(__instance.AnimationTick, animatingNode.tree.currentAnimation, animatingNode);
- }
-
- /*
- * Set Render Node to absolute transform
- */
- if (node.Props is PawnRenderNodeProperties_GraphicVariants graphicVariantProp)
- {
-
- //absolute transform -- floating
- if (graphicVariantProp.absoluteTransform)
- {
-
- matrix = parms.matrix;
-
- //absolute transform -- just use the node's transform, not its ancestors
- node.GetTransform(parms, out Vector3 offset, out Vector3 pivot, out Quaternion quaternion, out Vector3 scale);
-
- if (offset != Vector3.zero) matrix *= Matrix4x4.Translate(offset);
- if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(pivot);
- if (quaternion != Quaternion.identity) matrix *= Matrix4x4.Rotate(quaternion);
- if (scale != Vector3.one) matrix *= Matrix4x4.Scale(scale);
- if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(scale).inverse;
-
- float num = node.Worker.AltitudeFor(node, parms);
- if (num != 0f)
- {
- matrix *= Matrix4x4.Translate(Vector3.up * num);
- }
-
- __result = true;
- return false;
-
- }
-
- //for graphic variant props to scale independently
- else if (graphicVariantProp.scaleIndependently)
- {
- matrix = parms.matrix;
-
- if (!___nodeAncestors.TryGetValue(node, out var value))
- {
- __instance.SetDirty();
- AccessTools.Method(typeof(PawnRenderTree), "TrySetupGraphIfNeeded").Invoke(__instance, new object[] { });
-
- if (!___nodeAncestors.TryGetValue(node, out value))
- {
- __result = false;
- return false;
- }
- }
- for (int i = 0; i < value.Count; i++)
- {
- value[i].GetTransform(parms, out var offset, out var pivot, out var rotation, out var scale);
- bool canRotate = !node.Props.rotateIndependently || value[i] == node;
- bool canScale = !graphicVariantProp.scaleIndependently || value[i] == node;
-
- if (offset != Vector3.zero) matrix *= Matrix4x4.Translate(offset);
- if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(pivot);
- if (canRotate && rotation != Quaternion.identity) matrix *= Matrix4x4.Rotate(rotation);
- if (canScale && scale != Vector3.one) matrix *= Matrix4x4.Scale(scale);
- if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(scale).inverse;
-
- }
- float num = node.Worker.AltitudeFor(node, parms);
- if (num != 0f)
- {
- matrix *= Matrix4x4.Translate(Vector3.up * num);
- }
- __result = true;
- return false;
- }
-
- }
-
- return true;
-
- }
-
- }
-
-
-
- //recaching
- //done here because changing parms causes recaching anyway, so might as well do it here
- [HarmonyPatch(typeof(PawnRenderTree), "AdjustParms")]
- public class HarmonyPatch_PawnRenderTree2
- {
- public static void Prefix(PawnRenderTree __instance, ref PawnDrawParms parms)
- {
-
- int animationTick = __instance.AnimationTick;
-
- if (__instance.rootNode.AnimationWorker is AnimationWorker_KeyframesExtended rootAnimWorkerExtended)
- {
- //recache during facing turn
- if (rootAnimWorkerExtended.shouldRecache(animationTick, __instance.currentAnimation, __instance.rootNode))
- {
- __instance.rootNode.requestRecache = true;
- return;
- }
- }
-
- foreach (PawnRenderNode node in __instance.rootNode.children)
- {
- if (node.AnimationWorker is AnimationWorker_KeyframesExtended animWorkerExtended)
- {
- //recache during flicker on/off
- if (animWorkerExtended.shouldRecache(animationTick, node.tree.currentAnimation, node))
- {
- node.requestRecache = true;
- return;
- }
- }
- }
- }
- }
-}
diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs
deleted file mode 100644
index 99964d5..0000000
--- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using HarmonyLib;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
-
- [HarmonyPatch(typeof(PawnRenderer), "BodyAngle")]
- public class HarmonyPatch_PawnRenderer
- {
- public static bool Prefix(ref Pawn ___pawn, ref float __result)
- {
- //set body angle to zero, for when downed
- if (___pawn?.Drawer?.renderer?.renderTree?.rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended)
- {
- __result = 0;
- return false;
-
- }
-
- return true;
-
- }
- }
-
- [HarmonyPatch(typeof(PawnRenderer), "GetBodyPos")]
- public class HarmonyPatch_PawnRenderer2
- {
- //patch so that pawns appear at the same altitude layer, at layer Pawn
- public static void Postfix(PawnRenderer __instance, ref Vector3 __result)
- {
-
- if (__instance.renderTree?.rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended
- || (__instance.renderTree?.rootNode?.children is PawnRenderNode[] childNodes && childNodes.Any(x => x.AnimationWorker is AnimationWorker_KeyframesExtended)))
- {
- __result.y = AltitudeLayer.Pawn.AltitudeFor();
- }
-
- }
- }
-
-}
diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs
deleted file mode 100644
index da0f303..0000000
--- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using HarmonyLib;
-using rjw;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations {
-
- [HarmonyPatch(typeof(Pawn_DrawTracker), "DrawPos", MethodType.Getter)]
- public static class HarmonyPatch_Pawn_DrawTracker {
-
- //switch to postfix to get pawn original height first
- public static void Postfix(ref Pawn ___pawn, ref Vector3 __result) {
-
- //align pos on top of partner, position, etc., based on animatoranchor
- if (___pawn.TryGetComp() is CompExtendedAnimator animator)
- {
- if (animator.IsAnchored)
- {
- Vector3 anchor = animator.getAnchor();
- __result.x = anchor.x;
- __result.z = anchor.z;
- }
-
- }
-
- }
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeProperties_GraphicBodyTypeVariants.cs b/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeProperties_GraphicBodyTypeVariants.cs
deleted file mode 100644
index c797e04..0000000
--- a/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeProperties_GraphicBodyTypeVariants.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeProperties_BodyTypeVariants : PawnRenderNodeProperties_GraphicVariants
- {
-
- public PawnRenderNodeProperties_BodyTypeVariants()
- {
- nodeClass = typeof(PawnRenderNode_BodyTypeVariants);
- workerClass = typeof(PawnRenderNodeWorker_BodyTypeVariants);
- }
-
- public List bodyTypeVariantsDef;
-
- }
-
- public class TexPathVariants_BodyType
- {
-
- public BodyTypeDef bodyType;
- public TexPathVariantsDef texPathVariantsDef;
-
- }
-
-
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeWorker_GraphicBodyTypeVariants.cs b/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeWorker_GraphicBodyTypeVariants.cs
deleted file mode 100644
index ad745b8..0000000
--- a/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeWorker_GraphicBodyTypeVariants.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeWorker_BodyTypeVariants : PawnRenderNodeWorker_GraphicVariants
- {
- //same functionality as graphicvariants worker
- //just here for readability
-
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNode_GraphicBodyTypeVariants.cs b/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNode_GraphicBodyTypeVariants.cs
deleted file mode 100644
index f64c46b..0000000
--- a/1.6/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNode_GraphicBodyTypeVariants.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNode_BodyTypeVariants : PawnRenderNode_GraphicVariants
- {
-
- private BodyTypeDef bodyType;
- protected new PawnRenderNodeProperties_BodyTypeVariants props;
-
- public PawnRenderNode_BodyTypeVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree)
- {
-
- this.props = (PawnRenderNodeProperties_BodyTypeVariants)props;
-
- }
-
- protected Dictionary GraphicBodyTypeVariantsFor(Pawn pawn)
- {
-
- if (props.bodyTypeVariantsDef == null)
- {
- Log.Error("[Anims] Error: Tried to use BodyTypeVariants node, but bodyTypeVariants weren't given");
- return null;
- }
-
- //for each different hediff-based texpathvariants,
- foreach (TexPathVariants_BodyType texPathVariant_BodyType in props.bodyTypeVariantsDef)
- {
- if (pawn.story?.bodyType == texPathVariant_BodyType.bodyType)
- {
- //return that specific variant
- bodyType = texPathVariant_BodyType.bodyType;
- return GenerateVariants(pawn, texPathVariant_BodyType.texPathVariantsDef);
-
- }
-
- }
-
- return null;
-
- }
-
- protected override void EnsureMaterialVariantsInitialized(Graphic g)
- {
- if (variants == null
- || this.tree.pawn.story?.bodyType != bodyType)
- variants = GraphicBodyTypeVariantsFor(this.tree.pawn);
-
- //call this in case variants wasn't set, and there is no graphic bodytype variants appropriate; it'll set variants based on default
- base.EnsureMaterialVariantsInitialized(g);
- }
-
-
- }
-
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNodeProperties_GraphicHediffSeverityVariants.cs b/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNodeProperties_GraphicHediffSeverityVariants.cs
deleted file mode 100644
index e465ee3..0000000
--- a/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNodeProperties_GraphicHediffSeverityVariants.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeProperties_GraphicHediffSeverityVariants : PawnRenderNodeProperties_GraphicVariants
- {
-
- public PawnRenderNodeProperties_GraphicHediffSeverityVariants()
- {
- nodeClass = typeof(PawnRenderNode_GraphicHediffSeverityVariants);
- workerClass = typeof(PawnRenderNodeWorker_GraphicHediffSeverityVariants);
- }
-
-
- public BodyPartDef bodyPart = null;
- public List hediffSeverityVariants;
-
- }
-
- public class HediffWithSeverity
- {
- public HediffDef hediff;
- public List severityVariants;
- }
-
- public class TexPathVariants_Severity
- {
- public int severity;
- public TexPathVariantsDef texPathVariantsDef;
-
-
- }
-
-
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNodeWorker_GraphicHediffSeverityVariants.cs b/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNodeWorker_GraphicHediffSeverityVariants.cs
deleted file mode 100644
index bac5d31..0000000
--- a/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNodeWorker_GraphicHediffSeverityVariants.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeWorker_GraphicHediffSeverityVariants : PawnRenderNodeWorker_GraphicVariants
- {
-
-
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNode_GraphicHediffSeverityVariants.cs b/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNode_GraphicHediffSeverityVariants.cs
deleted file mode 100644
index a7e7b0a..0000000
--- a/1.6/Source/PawnRenderNode/GraphicHediffSeverityVariants/PawnRenderNode_GraphicHediffSeverityVariants.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNode_GraphicHediffSeverityVariants : PawnRenderNode_GraphicVariants
- {
-
- protected HediffDef hediffWithSeverity;
- protected float curSeverity;
-
- protected new PawnRenderNodeProperties_GraphicHediffSeverityVariants props;
- private HediffDef curHediff;
-
- public PawnRenderNode_GraphicHediffSeverityVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree)
- {
-
- this.props = (PawnRenderNodeProperties_GraphicHediffSeverityVariants)props;
-
- }
-
- protected Dictionary GraphicHediffSeverityVariantsFor(Pawn pawn)
- {
-
-
- if (props.hediffSeverityVariants == null)
- {
- Log.Error("[Anims] Error: Tried to use GraphicBodyPartHediffSeverityVariants node, but hediffSeverityVariants weren't given");
- }
-
-
- Hediff idealHediff = null;
- HediffWithSeverity idealHediffSeverity = null;
-
- if (props.bodyPart == null)
- {
- //search the entire body for the hediff because no bodypart was set
- for (int i = 0; i < props.hediffSeverityVariants.Count; i++)
- {
- idealHediff = pawn.health.hediffSet.hediffs.Find((Hediff hediffWithSeverity) =>
- hediffWithSeverity.def == props.hediffSeverityVariants[i].hediff);
-
- if (idealHediff != null)
- {
- //get the ideal hediff severity variants, to iterate through and find the right one for the severity
- idealHediffSeverity = props.hediffSeverityVariants[i];
- break;
-
- }
-
- }
- }
-
- else
- {
- //search for a hediff with a specific body part
-
- for (int i = 0; i < props.hediffSeverityVariants.Count; i++)
- {
- //right hediff with the right hediff and right body part
-
- idealHediff = pawn.health.hediffSet.hediffs.Find((Hediff hediffWithSeverity) =>
- hediffWithSeverity.def == props.hediffSeverityVariants[i].hediff
- && hediffWithSeverity.Part.def == props.bodyPart);
-
- if (idealHediff != null) {
-
- //get the ideal hediff severity variants, to iterate through and find the right one for the severity
- idealHediffSeverity = props.hediffSeverityVariants[i];
- break;
- }
- }
- }
-
- if (idealHediff != null)
- {
- //set severity so that recache when this is different
- curSeverity = idealHediff.Severity;
-
- //look for the right severity-based texpathvariants
- TexPathVariants_Severity texPathVariants_Severity = idealHediffSeverity.severityVariants.Find((TexPathVariants_Severity texPathVariants) =>
- texPathVariants.severity < idealHediff.Severity);
-
- //if null, assume value is really too small
- if (texPathVariants_Severity == null)
- {
- //return largest value
- return GenerateVariants(pawn, idealHediffSeverity.severityVariants.First().texPathVariantsDef);
- }
-
- //return right severity variants
- return GenerateVariants(pawn, texPathVariants_Severity.texPathVariantsDef);
-
- }
-
- //there is no graphic hediff variants appropriate
- curHediff = null;
- return null;
-
- }
-
- protected override void EnsureMaterialVariantsInitialized(Graphic g)
- {
- //if pawn no longer has the hediff,
- if (variants == null ||
- !(this.tree.pawn.health?.hediffSet?.hediffs is List hediffs
- && hediffs.Any((Hediff hediff) => hediff.def == curHediff && hediff.Severity == curSeverity)))
- {
- //do graphicvariantsfor
- variants = GraphicHediffSeverityVariantsFor(this.tree.pawn);
- }
-
- //call this in case variants wasn't set, and there is no graphic hediff variants appropriate; it'll set variants based on default
- base.EnsureMaterialVariantsInitialized(g);
- }
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNodeProperties_GraphicHediffVariants.cs b/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNodeProperties_GraphicHediffVariants.cs
deleted file mode 100644
index 1717e37..0000000
--- a/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNodeProperties_GraphicHediffVariants.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeProperties_GraphicHediffVariants : PawnRenderNodeProperties_GraphicVariants
- {
-
- public PawnRenderNodeProperties_GraphicHediffVariants()
- {
- nodeClass = typeof(PawnRenderNode_GraphicHediffVariants);
- workerClass = typeof(PawnRenderNodeWorker_GraphicHediffVariants);
- }
-
- public List hediffVariants;
-
- }
-
- public class TexPathVariants_Hediff
- {
-
- public List hediffs;
- public TexPathVariantsDef texPathVariantsDef;
-
- }
-
-
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNodeWorker_GraphicHediffVariants.cs b/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNodeWorker_GraphicHediffVariants.cs
deleted file mode 100644
index 24a10dc..0000000
--- a/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNodeWorker_GraphicHediffVariants.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeWorker_GraphicHediffVariants : PawnRenderNodeWorker_GraphicVariants
- {
- //same functionality as graphicvariants worker
- //just here for readability
-
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNode_GraphicHediffVariants.cs b/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNode_GraphicHediffVariants.cs
deleted file mode 100644
index 3949044..0000000
--- a/1.6/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNode_GraphicHediffVariants.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNode_GraphicHediffVariants : PawnRenderNode_GraphicVariants
- {
-
- protected new PawnRenderNodeProperties_GraphicHediffVariants props;
- private HediffDef curHediff;
-
- public PawnRenderNode_GraphicHediffVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree)
- {
-
- this.props = (PawnRenderNodeProperties_GraphicHediffVariants)props;
-
- }
-
- protected Dictionary GraphicHediffVariantsFor(Pawn pawn)
- {
-
- if (props.hediffVariants == null)
- {
- Log.Error("[Anims] Error: Tried to use GraphicHediffVariants node, but hediffVariants weren't given");
- return null;
- }
-
- //for each different hediff-based texpathvariants,
- foreach (TexPathVariants_Hediff texPathVariant_Hediff in props.hediffVariants)
- {
- //for all the hediffs corresponding to that texpathvariant,
- foreach (HediffDef hediffDef in texPathVariant_Hediff.hediffs)
- {
- //if the pawn has that hediff,
- if (pawn?.health?.hediffSet?.hediffs is List pawnHediffs && pawnHediffs.Any((Hediff hediff) => hediff.def == hediffDef))
- {
- //return that specific variant
- curHediff = hediffDef;
- return GenerateVariants(pawn, texPathVariant_Hediff.texPathVariantsDef);
-
- }
- }
- }
-
- //there is no graphic hediff variants appropriate
- curHediff = null;
- return null;
-
- }
-
- protected override void EnsureMaterialVariantsInitialized(Graphic g)
- {
- //if pawn no longer has the hediff,
- if (variants == null ||
- !(this.tree.pawn.health?.hediffSet?.hediffs is List hediffs
- && hediffs.Any((Hediff hediff) => hediff.def == curHediff)))
- {
- //do graphicvariantsfor
- variants = GraphicHediffVariantsFor(this.tree.pawn);
- }
- //call this in case variants wasn't set, and there is no graphic hediff variants appropriate; it'll set variants based on default
- base.EnsureMaterialVariantsInitialized(g);
- }
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeProperties_GraphicVariants.cs b/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeProperties_GraphicVariants.cs
deleted file mode 100644
index 98fafeb..0000000
--- a/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeProperties_GraphicVariants.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using RimWorld;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeProperties_GraphicVariants : PawnRenderNodeProperties
- {
-
- public PawnRenderNodeProperties_GraphicVariants()
- {
- this.pawnType = RenderNodePawnType.Any;
- nodeClass = typeof(PawnRenderNode_GraphicVariants);
- workerClass = typeof(PawnRenderNodeWorker_GraphicVariants);
- overlayLayer = PawnOverlayDrawer.OverlayLayer.Head;
- baseLayer = 95;
- }
-
- public AnimationOffsetDef propOffsetDef = null;
- public TexPathVariantsDef texPathVariantsDef = null;
- public bool absoluteTransform = false;
-
- public bool scaleIndependently = false;
-
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs b/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs
deleted file mode 100644
index fae9f47..0000000
--- a/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNodeWorker_GraphicVariants : PawnRenderNodeWorker
- {
-
- public override bool CanDrawNow(PawnRenderNode node, PawnDrawParms parms)
- {
- if (!base.CanDrawNow(node, parms)) return false;
-
- if (parms.Portrait) return false;
-
- //don't draw if not visible at tick
- if (node.AnimationWorker is AnimationWorker_KeyframesExtended extendedAnimator)
- {
- return extendedAnimator.visibleAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node);
- }
-
- //don't draw at all if not animating
- return false;
- }
- protected override Material GetMaterial(PawnRenderNode node, PawnDrawParms parms)
- {
-
- //if node is animating, and is a graphic variant type of node
- //and node is one with graphic variants
- //and texpathvariant is set
- if ((node.AnimationWorker is AnimationWorker_KeyframesExtended extendedAnimWorker)
- && (node is PawnRenderNode_GraphicVariants nodeWithGraphicVariants)
- && extendedAnimWorker.TexPathVariantAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node) != null)
- {
- Material materialVariant = GetMaterialVariant(nodeWithGraphicVariants, parms, (int)extendedAnimWorker.TexPathVariantAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node));
-
- if (materialVariant != null) {
- return materialVariant;
- }
-
- }
-
- //otherwise return original texture
- return base.GetMaterial(node, parms);
- }
-
- public virtual Material GetMaterialVariant(PawnRenderNode_GraphicVariants node, PawnDrawParms parms, int variant)
- {
- Material material = node.getGraphicVariant(variant)?.NodeGetMat(parms);
-
- if (material == null) return null;
-
- if (!parms.Portrait && parms.flags.FlagSet(PawnRenderFlags.Invisible))
- {
- material = InvisibilityMatPool.GetInvisibleMat(material);
- }
-
- return material;
-
- }
-
- public override Vector3 OffsetFor(PawnRenderNode node, PawnDrawParms parms, out Vector3 pivot)
- {
- Vector3 regularOffsets = base.OffsetFor(node, parms, out pivot);
-
- if ((node.Props as PawnRenderNodeProperties_GraphicVariants)?.propOffsetDef?.offsets is List offsets)
- {
- foreach (BaseAnimationOffset offset in offsets)
- {
-
- if (offset.appliesToPawn(node.tree.pawn))
- {
-
- //modify offset of prop for animationOffset position
- regularOffsets += offset.getOffset(node.tree.pawn) ?? Vector3.zero;
- return regularOffsets;
-
- }
- }
- }
-
- //unmodified; no offsets found
- return regularOffsets;
- }
-
- public override Vector3 ScaleFor(PawnRenderNode node, PawnDrawParms parms)
- {
- Vector3 regularScale = base.ScaleFor(node, parms);
-
- if ((node.Props as PawnRenderNodeProperties_GraphicVariants)?.propOffsetDef?.offsets is List offsets)
- {
- foreach (BaseAnimationOffset offset in offsets)
- {
-
- if (offset.appliesToPawn(node.tree.pawn))
- {
-
- //modify scale of prop for animationOffset position
- regularScale = regularScale.MultipliedBy(offset.getScale(node.tree.pawn) ?? Vector3.one);
- return regularScale;
-
- }
- }
- }
-
- return regularScale;
- }
-
- public override Quaternion RotationFor(PawnRenderNode node, PawnDrawParms parms)
- {
- Quaternion rotation = base.RotationFor(node, parms);
-
- if ((node.Props as PawnRenderNodeProperties_GraphicVariants)?.propOffsetDef?.offsets is List offsets)
- {
- foreach (BaseAnimationOffset offset in offsets)
- {
- if (offset.appliesToPawn(node.tree.pawn))
- {
- //modify offset of prop for animationOffset rotation
- rotation *= Quaternion.AngleAxis(offset.getRotation(node.tree.pawn) ?? 0, Vector3.up);
- return rotation;
-
- }
- }
- }
-
- //unmodified; no rotation offsets found
- return rotation;
-
- }
- }
-}
diff --git a/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNode_GraphicVariants.cs b/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNode_GraphicVariants.cs
deleted file mode 100644
index 2fd5241..0000000
--- a/1.6/Source/PawnRenderNode/GraphicVariants/PawnRenderNode_GraphicVariants.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace Rimworld_Animations
-{
- public class PawnRenderNode_GraphicVariants : PawnRenderNode
- {
-
- protected new PawnRenderNodeProperties_GraphicVariants props;
- protected Graphic missingTextureGraphic;
- protected Dictionary variants;
-
- public Graphic getGraphicVariant(int variant)
- {
- if (variants == null || !variants.ContainsKey(variant))
- {
- return missingTextureGraphic;
- }
-
- return variants[variant];
- }
-
- public PawnRenderNode_GraphicVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree) {
-
- this.props = (PawnRenderNodeProperties_GraphicVariants)props;
-
- }
-
- protected virtual Dictionary GraphicVariantsFor(Pawn pawn)
- {
-
- if (props.texPathVariantsDef == null)
- {
- return null;
- }
-
- return GenerateVariants(pawn, props.texPathVariantsDef);
-
- }
-
- protected override void EnsureMaterialVariantsInitialized(Graphic g)
- {
-
- if (variants == null)
- {
- variants = GraphicVariantsFor(this.tree.pawn);
- }
- if (missingTextureGraphic == null)
- {
- missingTextureGraphic = GenerateMissingTextureGraphic();
- }
-
-
- base.EnsureMaterialVariantsInitialized(g);
- }
-
-
- //used by all, including base classes, to create texPathVariants for pawn
- protected Dictionary GenerateVariants(Pawn pawn, TexPathVariantsDef texPathVariants)
- {
-
- Dictionary variantGraphics = new Dictionary