diff --git a/Defs/AnimationDefs/AnimationDefs.rar b/Defs/AnimationDefs/AnimationDefs.rar new file mode 100644 index 0000000..e7bf2a1 Binary files /dev/null and b/Defs/AnimationDefs/AnimationDefs.rar differ diff --git a/Defs/AnimationDefs/Animations_Beast.xml b/Defs/AnimationDefs/Animations_Beast.xml index 73365cc..8cda024 100644 --- a/Defs/AnimationDefs/Animations_Beast.xml +++ b/Defs/AnimationDefs/Animations_Beast.xml @@ -20,7 +20,9 @@
  • Wolf_Timber
  • Wolf_Arctic
  • Whitefox
  • - +
  • Warg
  • +
  • Husky
  • +
  • LabradorRetriever
  • AEXP_WelshTerrier
  • AEXP_Rottweiler
  • @@ -34,6 +36,10 @@
  • AEXP_CatMaineCoon
  • AEXP_CatSphynx
  • + +
  • QuadrupedAnimalWithHooves
  • +
  • QuadrupedAnimalWithPawsAndTail
  • +
    true true @@ -1140,5 +1146,1023 @@ + + Horse_Cowgirl + + true + +
  • Anal
  • +
  • Vaginal
  • +
    + +
  • + +
  • 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/Defs/AnimationDefs/Animations_Lesbian.xml b/Defs/AnimationDefs/Animations_Lesbian.xml index 975903f..e8da71b 100644 --- a/Defs/AnimationDefs/Animations_Lesbian.xml +++ b/Defs/AnimationDefs/Animations_Lesbian.xml @@ -671,5 +671,1093 @@ + + Cunnilingus + + true + +
  • Oral
  • +
  • Fingering
  • +
    + +
  • + +
  • 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/Defs/AnimationDefs/Animations_Vanilla2.xml b/Defs/AnimationDefs/Animations_Vanilla2.xml new file mode 100644 index 0000000..fcab1a9 --- /dev/null +++ b/Defs/AnimationDefs/Animations_Vanilla2.xml @@ -0,0 +1,377 @@ + + + + + + + \ No newline at end of file diff --git a/Defs/AnimationDefs/TemplateAnimation.xml b/Defs/AnimationDefs/TemplateAnimation.xml new file mode 100644 index 0000000..0305903 --- /dev/null +++ b/Defs/AnimationDefs/TemplateAnimation.xml @@ -0,0 +1,54 @@ + + + + diff --git a/Defs/SoundDefs/Sounds_Sex.xml b/Defs/SoundDefs/Sounds_Sex.xml index 574e2a1..7d3500c 100644 --- a/Defs/SoundDefs/Sounds_Sex.xml +++ b/Defs/SoundDefs/Sounds_Sex.xml @@ -188,8 +188,8 @@ - 15 - 25 + 45 + 75 1.4 @@ -197,7 +197,7 @@ 0 - 25 + 100 NeverTwice false diff --git a/Rimworld-Animations.csproj b/Rimworld-Animations.csproj index f6cf1ee..3ef1546 100644 --- a/Rimworld-Animations.csproj +++ b/Rimworld-Animations.csproj @@ -110,6 +110,7 @@ + diff --git a/Source/Actors/Actor.cs b/Source/Actors/Actor.cs index 450c3d9..55e4f79 100644 --- a/Source/Actors/Actor.cs +++ b/Source/Actors/Actor.cs @@ -17,6 +17,7 @@ namespace Rimworld_Animations { 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); diff --git a/Source/AnimationUtility.cs b/Source/AnimationUtility.cs index ef3bc6b..3022b65 100644 --- a/Source/AnimationUtility.cs +++ b/Source/AnimationUtility.cs @@ -14,28 +14,36 @@ namespace Rimworld_Animations { 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) { + public static AnimationDef tryFindAnimation(ref List participants, rjw.xxx.rjwSextype sexType = 0, rjw.SexProps sexProps = null) { //aggressors last participants = participants.OrderBy(p => p.jobs.curDriver is rjw.JobDriver_SexBaseInitiator).ToList(); - //fucked first, fucking second + participants = participants.OrderBy(p => p == sexProps.Giver).ToList(); + + participants = participants.OrderByDescending(p => rjw.GenderHelper.GetSex(p) == rjw.GenderHelper.Sex.futa).ToList(); + + //pawns that can fuck last participants = participants.OrderBy(p => rjw.xxx.can_fuck(p)).ToList(); - if(rjw.RJWPreferenceSettings.Malesex == rjw.RJWPreferenceSettings.AllowedSex.Nohomo) { - participants = participants.OrderBy(x => rjw.xxx.is_male(x)).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((x.actors[i].blacklistedRaces != null) && x.actors[i].blacklistedRaces.Contains(localParticipants[i].def.defName)) { + 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].blacklistedRaces != null) && x.actors[i].blacklistedRaces.Contains(localParticipants[i].def.defName)) { if (rjw.RJWSettings.DevMode) { Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is blacklisted"); } @@ -51,7 +59,8 @@ namespace Rimworld_Animations { return false; } - } else { + } + else if (!x.actors[i].bodyDefTypes.Contains(localParticipants[i].RaceProps.body)) { if (!x.actors[i].defNames.Contains(localParticipants[i].def.defName)) { @@ -66,22 +75,103 @@ namespace Rimworld_Animations { return false; } } + //genitals checking + if(x.actors[i].requiredGenitals != null) { + if (x.actors[i].requiredGenitals.Contains("Vagina")) { - if(x.actors[i].requiredGenitals != null && x.actors[i].requiredGenitals.Contains("Vagina")) { + if (!rjw.Genital_Helper.has_vagina(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have vagina"); + return false; + } - if (!rjw.Genital_Helper.has_vagina(localParticipants[i])) { - Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have vagina"); - return false; - } + } + if (x.actors[i].requiredGenitals.Contains("Penis")) { + + if (!(rjw.Genital_Helper.has_multipenis(localParticipants[i]) || rjw.Genital_Helper.has_penis_infertile(localParticipants[i]) || rjw.Genital_Helper.has_penis_fertile(localParticipants[i]))) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have penis"); + return false; + } + + } + + if (x.actors[i].requiredGenitals.Contains("Mouth")) { + + if (!rjw.Genital_Helper.has_mouth(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have mouth"); + return false; + } + + } + + if (x.actors[i].requiredGenitals.Contains("Anus")) { + + if (!rjw.Genital_Helper.has_anus(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have anus"); + return false; + } + + } + + if(x.actors[i].requiredGenitals.Contains("Breasts")) { + if (!rjw.Genital_Helper.can_do_breastjob(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have breasts"); + return false; + } + } + + if (x.actors[i].requiredGenitals.Contains("NoVagina")) { + + if (rjw.Genital_Helper.has_vagina(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has vagina"); + return false; + } + + } + + if (x.actors[i].requiredGenitals.Contains("NoPenis")) { + + if ((rjw.Genital_Helper.has_multipenis(localParticipants[i]) || rjw.Genital_Helper.has_penis_infertile(localParticipants[i]) || rjw.Genital_Helper.has_penis_fertile(localParticipants[i]))) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has penis"); + return false; + } + + } + + if (x.actors[i].requiredGenitals.Contains("NoMouth")) { + + if (rjw.Genital_Helper.has_mouth(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has mouth"); + return false; + } + + } + + if (x.actors[i].requiredGenitals.Contains("NoAnus")) { + + if (rjw.Genital_Helper.has_anus(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has anus"); + return false; + } + + } + + if (x.actors[i].requiredGenitals.Contains("NoBreasts")) { + if (rjw.Genital_Helper.can_do_breastjob(localParticipants[i])) { + Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has breasts"); + return false; + } + } } + + //TESTING ANIMATIONS ONLY REMEMBER TO COMMENT OUT BEFORE PUSH /* - if (x.defName != "Doggystyle") + if (x.defName != "Cunnilingus") return false; */ - + if (x.actors[i].isFucking && !rjw.xxx.can_fuck(localParticipants[i])) { Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't fuck"); @@ -102,7 +192,15 @@ namespace Rimworld_Animations { //if the animation not for initiators, but an initiator is playing it - if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) { + if(sexProps != null) { + + if(x.actors[i].initiator && localParticipants[i] == sexProps.Reciever) { + initiatorsAlignWithSexType = false; + } + + } + + else if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) { initiatorsAlignWithSexType = false; } } @@ -114,7 +212,15 @@ namespace Rimworld_Animations { //if the animation not for initiators, but an initiator is playing it - if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) { + if (sexProps != null) { + + if (x.actors[i].initiator && localParticipants[i] == sexProps.Giver) { + initiatorsAlignWithSexType = false; + } + + } + + else if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) { initiatorsAlignWithSexType = false; } } diff --git a/Source/Comps/CompBodyAnimator.cs b/Source/Comps/CompBodyAnimator.cs index fb84d77..33bd110 100644 --- a/Source/Comps/CompBodyAnimator.cs +++ b/Source/Comps/CompBodyAnimator.cs @@ -38,13 +38,15 @@ namespace Rimworld_Animations { 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, deltaPos, headBob; - public float bodyAngle, headAngle, genitalAngle; - public Rot4 headFacing, bodyFacing; + 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 bool controlGenitalAngle = false; @@ -102,8 +104,6 @@ namespace Rimworld_Animations { } public void StartAnimation(AnimationDef anim, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false) { - isAnimating = true; - AlienRaceOffset raceOffset = anim?.actors[actor]?.raceOffsets?.Find(x => x.defName == pawn.def.defName); if (raceOffset != null) { @@ -151,9 +151,12 @@ namespace Rimworld_Animations { controlGenitalAngle = anim.actors[actor].controlGenitalAngle; + isAnimating = true; //tick once for initialization tickAnim(); + + } public override void CompTick() { @@ -259,6 +262,10 @@ namespace Rimworld_Animations { 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)); if (AnimationSettings.offsets != null && AnimationSettings.offsets.ContainsKey(CurrentAnimation.defName + pawn.def.defName + ActorIndex)) { @@ -307,6 +314,8 @@ namespace Rimworld_Animations { } headBob = new Vector3(0, 0, clip.HeadBob.Evaluate(clipPercent)); + lastDrawFrame = RealTime.frameCount; + } public Vector3 getPawnHeadPosition() { diff --git a/Source/Patches/HarmonyPatch_AlienRace.cs b/Source/Patches/HarmonyPatch_AlienRace.cs index 8399413..d5f2d37 100644 --- a/Source/Patches/HarmonyPatch_AlienRace.cs +++ b/Source/Patches/HarmonyPatch_AlienRace.cs @@ -79,9 +79,9 @@ namespace Rimworld_Animations { Vector2 bodyOffset = (portrait ? offset?.portraitBodyTypes ?? offset?.bodyTypes : offset?.bodyTypes)?.FirstOrDefault(predicate: to => to.bodyType == pawn.story.bodyType) - ?.offset ?? Vector2.zero; - Vector2 crownOffset = (portrait ? offset?.portraitCrownTypes ?? offset?.crownTypes : offset?.crownTypes)?.FirstOrDefault(predicate: to => to.crownType == alienComp.crownType) - ?.offset ?? Vector2.zero; + ?.offset ?? Vector2.zero; + Vector2 crownOffset = (portrait ? offset?.portraitCrownTypes ?? offset?.crownTypes : offset?.crownTypes)?.FirstOrDefault(predicate: to => to.crownType == alienComp.crownType) + ?.offset ?? Vector2.zero; //Defaults for tails //south 0.42f, -0.3f, -0.22f @@ -130,7 +130,7 @@ namespace Rimworld_Animations { else { Quaternion addonRotation = quat; - if (AnimationSettings.controlGenitalRotation && pawnAnimator.controlGenitalAngle && ba.hediffGraphics[0] != null && (ba.hediffGraphics[0].path.Contains("Penis") || ba.hediffGraphics[0].path.Contains("penis"))) { + if (AnimationSettings.controlGenitalRotation && pawnAnimator.controlGenitalAngle && ba.hediffGraphics[0]?.path != null && (ba.hediffGraphics[0].path.Contains("Penis") || ba.hediffGraphics[0].path.Contains("penis"))) { addonRotation = Quaternion.AngleAxis(angle: pawnAnimator.genitalAngle, axis: Vector3.up); } diff --git a/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs index b297ff8..916855b 100644 --- a/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs +++ b/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs @@ -23,8 +23,7 @@ namespace Rimworld_Animations { } if(__instance is JobDriver_JoinInBed) { - Log.Warning("Tried to start wrong JobDriver with Rimworld-Animations installed. If you see this warning soon after installing this mod, it's fine and animated sex will start soon. If you see this a long time after installing, that's a problem."); - return; + Log.Warning("Playing regular RJW joininbed jobdriver, if it animates properly ignore this warning"); } Pawn pawn = __instance.pawn; @@ -55,15 +54,15 @@ namespace Rimworld_Animations { bool quickie = (__instance is JobDriver_SexQuick) && AnimationSettings.fastAnimForQuickie; if (bed != null) { - RerollAnimations(Target, __instance.duration, bed as Thing, __instance.sexType, quickie); + RerollAnimations(Target, __instance.duration, bed as Thing, __instance.sexType, quickie, sexProps: __instance.Sexprops); } else { - RerollAnimations(Target, __instance.duration, sexType: __instance.sexType, fastAnimForQuickie: quickie); + RerollAnimations(Target, __instance.duration, sexType: __instance.sexType, fastAnimForQuickie: quickie, sexProps: __instance.Sexprops); } } } - public static void RerollAnimations(Pawn pawn, int duration, Thing bed = null, xxx.rjwSextype sexType = xxx.rjwSextype.None, bool fastAnimForQuickie = false) { + public static void RerollAnimations(Pawn pawn, int duration, Thing bed = null, xxx.rjwSextype sexType = xxx.rjwSextype.None, bool fastAnimForQuickie = false, rjw.SexProps sexProps = null) { if(pawn == null || !(pawn.jobs?.curDriver is JobDriver_SexBaseReciever)) { Log.Message("Error: Tried to reroll animations when pawn isn't sexing"); @@ -76,7 +75,7 @@ namespace Rimworld_Animations { pawnsToAnimate = pawnsToAnimate.Append(pawn).ToList(); } - AnimationDef anim = AnimationUtility.tryFindAnimation(ref pawnsToAnimate, sexType); + AnimationDef anim = AnimationUtility.tryFindAnimation(ref pawnsToAnimate, sexType, sexProps); if (anim != null) { diff --git a/Source/Patches/rjwPatches/HarmonyPatch_SexTick.cs b/Source/Patches/rjwPatches/HarmonyPatch_SexTick.cs index 5fd7486..c645d18 100644 --- a/Source/Patches/rjwPatches/HarmonyPatch_SexTick.cs +++ b/Source/Patches/rjwPatches/HarmonyPatch_SexTick.cs @@ -25,9 +25,11 @@ namespace Rimworld_Animations { if (pawn.IsHashIntervalTick(__instance.ticks_between_thrusts)) { - __instance.Animate(pawn, (Thing)pawn2); + __instance.ChangePsyfocus(pawn, pawn2); - if (!AnimationSettings.soundOverride || !pawn.TryGetComp().isAnimating) { + __instance.Animate(pawn, pawn2); + + if (!AnimationSettings.soundOverride || pawn.TryGetComp() == null || !pawn.TryGetComp().isAnimating) { __instance.PlaySexSound(); }