code:
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<Pawn> 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<Pawn> localParticipants = new List<Pawn>(participants);

            IEnumerable<AnimationDef> options = DefDatabase<AnimationDef>.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<Gender>()))
				    {
					    if (AnimationSettings.debugMode)
					    {
						    Log.Message(string.Concat(new string[]
						    {
							    x.defName.ToStringSafe<string>(),
							    " not selected -- ",
							    localParticipants[i].def.defName.ToStringSafe<string>(),
							    " ",
							    localParticipants[i].Name.ToStringSafe<Name>(),
							    " 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<AnimationDef> 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<AnimationDef> 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<CompBodyAnimator>();
                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<CompBodyAnimator>();
                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<CompBodyAnimator>();
                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<string> 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<CompBodyAnimator>() != null && pawn.TryGetComp<CompBodyAnimator>().isAnimating)
            {
                return pawn.TryGetComp<CompBodyAnimator>().headFacing;
            }

            return regularPos;
        }
    }
}


code:
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;
        }

    }

}

repo_name: Perseusi/rimworld

license: unknown


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<PawnRenderNodeTagDef>
		<defName>RenderNodeTag_Banana</defName>
	</PawnRenderNodeTagDef>

	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimationProp_Banana</defName>
		<animPropProperties>
			<debugLabel>Banana</debugLabel>
			<tagDef>RenderNodeTag_Banana</tagDef>
			<parentTagDef>Body</parentTagDef>
			<texPath>AnimationProps/Banana/Banana</texPath>
			<overlayLayer>Head</overlayLayer>
			<baseLayer>95</baseLayer>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<PawnRenderNodeTagDef>
		<defName>RenderNodeTag_Hand</defName>
	</PawnRenderNodeTagDef>

	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimationProp_Hand</defName>
		<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_GraphicVariants">
			<debugLabel>Hand</debugLabel>
			<nodeClass>Rimworld_Animations.PawnRenderNode_GraphicVariants</nodeClass>
			<workerClass>Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants</workerClass>
			<tagDef>RenderNodeTag_Hand</tagDef>
			<absoluteTransform>True</absoluteTransform>
			<parentTagDef>Root</parentTagDef>
			<texPath>AnimationProps/Hand/Hand</texPath>
			<!-- for height -->
			<overlayLayer>Head</overlayLayer>
			<useSkinShader>True</useSkinShader>
			<linkedBodyPartsGroup>LeftHand</linkedBodyPartsGroup>
			<colorType>Skin</colorType>
			<baseLayer>95</baseLayer>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<PawnRenderNodeTagDef>
		<defName>RenderNodeTag_Knees</defName>
	</PawnRenderNodeTagDef>

	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimationProp_Knees</defName>
		<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_BodyTypeVariants">
			<debugLabel>Knees</debugLabel>
			<nodeClass>Rimworld_Animations.PawnRenderNode_BodyTypeVariants</nodeClass>
			<workerClass>Rimworld_Animations.PawnRenderNodeWorker_BodyTypeVariants</workerClass>
			<tagDef>RenderNodeTag_Knees</tagDef>
			<absoluteTransform>False</absoluteTransform>
			<parentTagDef>Root</parentTagDef>

			<overlayLayer>Head</overlayLayer>
			<useSkinShader>True</useSkinShader>
			<colorType>Skin</colorType>
			<baseLayer>95</baseLayer>
			<bodyTypeVariantsDef>

					<bodyType>Female</bodyType>
					<texPathVariantsDef>TexPathVariants_Knees</texPathVariantsDef>

			</bodyTypeVariantsDef>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>

	<PawnRenderNodeTagDef>
		<defName>RenderNodeTag_Arms</defName>
	</PawnRenderNodeTagDef>

	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimationProp_Arms</defName>
		<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_BodyTypeVariants">
			<debugLabel>Arms</debugLabel>
			<nodeClass>Rimworld_Animations.PawnRenderNode_BodyTypeVariants</nodeClass>
			<workerClass>Rimworld_Animations.PawnRenderNodeWorker_BodyTypeVariants</workerClass>
			<tagDef>RenderNodeTag_Knees</tagDef>
			<absoluteTransform>False</absoluteTransform>
			<parentTagDef>Root</parentTagDef>
			<useSkinShader>True</useSkinShader>
			<colorType>Skin</colorType>

			<overlayLayer>Body</overlayLayer>
			<baseLayer>-1</baseLayer>
			<bodyTypeVariantsDef>

					<bodyType>Female</bodyType>
					<texPathVariantsDef>TexPathVariants_Arms</texPathVariantsDef>

			</bodyTypeVariantsDef>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>

	<PawnRenderNodeTagDef>
		<defName>RenderNodeTag_Xray_Inside</defName>
	</PawnRenderNodeTagDef>

	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimationProp_Xray_Inside</defName>
		<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_GraphicVariants">
			<debugLabel>Xray Inside</debugLabel>
			<nodeClass>Rimworld_Animations.PawnRenderNode_GraphicVariants</nodeClass>
			<workerClass>Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants</workerClass>
			<tagDef>RenderNodeTag_Xray_Inside</tagDef>
			<absoluteTransform>True</absoluteTransform>
			<parentTagDef>Body</parentTagDef>
			<!-- for height -->
			<overlayLayer>Head</overlayLayer>
			<baseLayer>95</baseLayer>
			<texPathVariantsDef>TexPathVariants_Xray_Inside</texPathVariantsDef>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>

</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<PawnRenderNodeTagDef>
		<defName>RenderNodeTag_Xray_Penis</defName>
	</PawnRenderNodeTagDef>
	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimationProp_Penis</defName>
		<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_GraphicHediffVariants">
			<debugLabel>Xray Penis</debugLabel>
			<nodeClass>Rimworld_Animations.PawnRenderNode_GraphicHediffVariants</nodeClass>
			<workerClass>Rimworld_Animations.PawnRenderNodeWorker_GraphicHediffVariants</workerClass>
			<tagDef>RenderNodeTag_Xray_Penis</tagDef>
			<parentTagDef>Body</parentTagDef>
			<texPath>AnimationProps/Banana/Banana</texPath>

			<overlayLayer>Head</overlayLayer>
			<baseLayer>95</baseLayer>
			<absoluteTransform>True</absoluteTransform>

			<texPathVariantsDef>TexPathVariants_XrayPenis_Human</texPathVariantsDef>

			<hediffVariants>

					<hediffs>

HorsePenis

RaccoonPenis

					</hediffs>
					<texPathVariantsDef>TexPathVariants_XrayPenis_Horse</texPathVariantsDef>

			</hediffVariants>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<Rimworld_Animations.GroupAnimationDef>
		<defName>GroupAnimation_DogBeast</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human1

DogBeast_Dog1

						</animationDefs>

				</loopOptions>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human2

DogBeast_Dog2

						</animationDefs>

				</loopOptions>

				<loops>60</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human3_1

DogBeast_Dog3_1

						</animationDefs>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human3_2

DogBeast_Dog3_2

						</animationDefs>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human3_3

DogBeast_Dog3_3

						</animationDefs>

				</loopOptions>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human4

DogBeast_Dog4

						</animationDefs>

				</loopOptions>

				<loops>30</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human5_1

DogBeast_Dog5_1

						</animationDefs>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human5_2

DogBeast_Dog5_2

						</animationDefs>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human5_3

DogBeast_Dog5_3

						</animationDefs>

				</loopOptions>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

DogBeast_Human6

DogBeast_Dog6

						</animationDefs>

				</loopOptions>

		</animationStages>

		<contexts>

				<priority>1</priority>
				<actorShift>1</actorShift>
				<whitelist>

						<tests>

								<races>

Wolf_Timber

Wolf_Arctic

Warg

Husky

LabradorRetriever

								</races>

						</tests>

				</whitelist>
				<interactionDefs>

Bestiality_Vaginal

Bestiality_Anal

Bestiality_Double_Penetration_M

				</interactionDefs>

				<priority>1</priority>
				<whitelist>

						<tests>

								<races>

Wolf_Timber

Wolf_Arctic

Warg

Husky

LabradorRetriever

								</races>

						</tests>

				</whitelist>
				<interactionDefs>

Bestiality_Reverse_Vaginal

Bestiality_Reverse_Anal

Bestiality_Reverse_Double_Penetration_M

				</interactionDefs>

		</contexts>

		<offsetDefs>

Offset_Placeholder

Offset_Placeholder

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human1</defName>
    <durationTicks>85</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>4</angle>
              <visible>true</visible>
              <offset>(-0.3716815, 0, 0.2713863)</offset>
              <rotation>East</rotation>

              <tick>15</tick>
              <angle>8</angle>
              <visible>true</visible>
              <offset>(-0.3539823, 0, 0.2654868)</offset>
              <rotation>East</rotation>

              <tick>25</tick>
              <angle>-14</angle>
              <visible>true</visible>
              <offset>(-0.4011799, 0, 0.2241887)</offset>
              <rotation>East</rotation>

              <tick>35</tick>
              <angle>-7</angle>
              <visible>true</visible>
              <offset>(-0.3834807, 0, 0.2359883)</offset>
              <rotation>East</rotation>

              <tick>55</tick>
              <angle>-9</angle>
              <visible>true</visible>
              <offset>(-0.4011799, 0, 0.2359883)</offset>
              <rotation>East</rotation>

              <tick>85</tick>
              <angle>-7</angle>
              <visible>true</visible>
              <offset>(-0.3893807, 0, 0.2359883)</offset>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>East</rotation>

              <tick>25</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>South</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.1946907, 1, 0.4483777)</offset>
              <rotation>North</rotation>

              <tick>5</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.235988, 1, 0.4365782)</offset>
              <rotation>North</rotation>

              <tick>10</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.1238946, 1, 0.377581)</offset>
              <rotation>North</rotation>

              <tick>13</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.1710922, 1, 0.3952804)</offset>
              <rotation>North</rotation>

              <tick>17</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.05899817, 1, 0.4660767)</offset>
              <rotation>North</rotation>

              <tick>25</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(-0.1828904, 1, 0.4896755)</offset>
              <rotation>North</rotation>

              <tick>35</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(-0.1356928, 1, 0.4778759)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog1</defName>
    <durationTicks>85</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.6666666, 1, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>15</tick>
              <angle>-5</angle>
              <visible>true</visible>
              <offset>(0.5722714, 1, 0.06489658)</offset>
              <scale>(1, 1, 0.9351034)</scale>
              <rotation>West</rotation>

              <tick>25</tick>
              <angle>35</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <scale>(0.9999999, 1, 1.053097)</scale>
              <rotation>West</rotation>

              <tick>35</tick>
              <angle>31</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>45</tick>
              <angle>35</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>55</tick>
              <angle>31</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>65</tick>
              <angle>35</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>75</tick>
              <angle>31</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>85</tick>
              <angle>35</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0, -2, 0)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human2</defName>
    <durationTicks>105</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-7</angle>
              <visible>true</visible>
              <offset>(-0.3893807, 0, 0.2359883)</offset>
              <rotation>East</rotation>

              <tick>19</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(-0.5073746, 0, 0.2300885)</offset>
              <rotation>South</rotation>

              <tick>25</tick>
              <angle>-13</angle>
              <visible>true</visible>
              <offset>(-0.5899706, 0, 0.2005899)</offset>
              <rotation>West</rotation>

              <tick>45</tick>
              <angle>-65</angle>
              <visible>true</visible>
              <offset>(-0.737463, 0, 0.02359879)</offset>
              <scale>(0.9764012, 1, 1)</scale>
              <rotation>West</rotation>

              <tick>55</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.6843658, 0, 0.08849573)</offset>
              <rotation>West</rotation>

              <tick>75</tick>
              <angle>-56</angle>
              <visible>true</visible>
              <offset>(-0.702065, 0, 0.07079637)</offset>
              <rotation>West</rotation>

              <tick>85</tick>
              <angle>-56</angle>
              <visible>true</visible>
              <offset>(-0.702065, 0, 0.07079637)</offset>
              <rotation>West</rotation>

              <tick>90</tick>
              <angle>-46</angle>
              <visible>true</visible>
              <offset>(-0.743363, 0, 0.1474925)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

              <tick>95</tick>
              <angle>-48</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1415931)</offset>
              <rotation>West</rotation>

              <tick>100</tick>
              <angle>-45</angle>
              <visible>true</visible>
              <offset>(-0.737463, 0, 0.1533923)</offset>
              <rotation>West</rotation>

              <tick>105</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>South</rotation>

              <tick>20</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>South</rotation>

              <tick>90</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(-0.1356928, 1, 0.4778759)</offset>
              <rotation>North</rotation>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog2</defName>
    <durationTicks>105</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>35</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>10</tick>
              <angle>39</angle>
              <visible>true</visible>
              <offset>(0.1651919, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>20</tick>
              <angle>35</angle>
              <visible>true</visible>
              <offset>(0.1356932, 1, 0.2477875)</offset>
              <rotation>West</rotation>

              <tick>30</tick>
              <angle>29</angle>
              <visible>true</visible>
              <offset>(-0.01769918, 1, 0.259587)</offset>
              <rotation>West</rotation>

              <tick>40</tick>
              <angle>24</angle>
              <visible>true</visible>
              <offset>(-0.07079639, 1, 0.2300885)</offset>
              <scale>(1, 1, 0.9528024)</scale>
              <rotation>West</rotation>

              <tick>50</tick>
              <angle>33</angle>
              <visible>true</visible>
              <offset>(-0.117994, 1, 0.3008848)</offset>
              <rotation>West</rotation>

              <tick>55</tick>
              <angle>28</angle>
              <visible>true</visible>
              <offset>(-0.06489678, 1, 0.2713863)</offset>
              <rotation>West</rotation>

              <tick>60</tick>
              <angle>33</angle>
              <visible>true</visible>
              <offset>(-0.1238939, 1, 0.2772861)</offset>
              <rotation>West</rotation>

              <tick>65</tick>
              <angle>28</angle>
              <visible>true</visible>
              <offset>(-0.06489678, 1, 0.259587)</offset>
              <rotation>West</rotation>

              <tick>70</tick>
              <angle>36</angle>
              <visible>true</visible>
              <offset>(-0.1769911, 1, 0.3008848)</offset>
              <rotation>West</rotation>

              <tick>75</tick>
              <angle>33</angle>
              <visible>true</visible>
              <offset>(-0.1651916, 1, 0.3008848)</offset>
              <rotation>West</rotation>

              <tick>80</tick>
              <angle>33</angle>
              <visible>true</visible>
              <offset>(-0.1415928, 1, 0.2890856)</offset>
              <rotation>West</rotation>

              <tick>83</tick>
              <angle>31</angle>
              <visible>true</visible>
              <offset>(-0.1356932, 1, 0.2772861)</offset>
              <rotation>West</rotation>

              <tick>90</tick>
              <angle>37</angle>
              <visible>true</visible>
              <offset>(-0.2595871, 1, 0.342183)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>95</tick>
              <angle>31</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3303834)</offset>
              <rotation>West</rotation>

              <tick>100</tick>
              <angle>37</angle>
              <visible>true</visible>
              <offset>(-0.2654867, 1, 0.342183)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>105</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0, -2, 0)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human3_1</defName>
    <durationTicks>24</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>
              <voice>Moan</voice>

              <tick>4</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>8</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>12</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>16</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>20</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>24</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>8</tick>
              <angle>5</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>16</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog3_1</defName>
    <durationTicks>24</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>4</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>8</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>12</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>16</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>20</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>24</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0, -2, 0)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human3_2</defName>
    <durationTicks>32</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>4</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>8</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>12</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>
              <voice>MoanShort</voice>

              <tick>16</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>20</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>24</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>28</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>32</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>16</tick>
              <angle>-10</angle>
              <visible>true</visible>
              <offset>(-0.01769918, 0, -0.01769918)</offset>
              <rotation>West</rotation>

              <tick>32</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog3_2</defName>
    <durationTicks>32</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>4</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>8</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>12</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>16</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>20</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>24</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>28</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>32</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0, -2, 0)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human3_3</defName>
    <durationTicks>16</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>
              <voice>Moan</voice>

              <tick>4</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>8</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>12</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.7315634, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>16</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>10</angle>
              <visible>true</visible>
              <rotation>South</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog3_3</defName>
    <durationTicks>16</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>4</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>8</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

              <tick>12</tick>
              <angle>38</angle>
              <visible>true</visible>
              <offset>(-0.2713863, 1, 0.3185842)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>16</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0, -2, 0)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human4</defName>
    <durationTicks>100</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-52</angle>
              <visible>true</visible>
              <offset>(-0.7197642, 0, 0.1120945)</offset>
              <rotation>West</rotation>
              <voice>Scream</voice>

              <tick>4</tick>
              <angle>-45</angle>
              <visible>true</visible>
              <offset>(-0.6902654, 0, 0.1474925)</offset>
              <rotation>West</rotation>

              <tick>30</tick>
              <angle>-50</angle>
              <visible>true</visible>
              <offset>(-0.6784662, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>60</tick>
              <angle>-55</angle>
              <visible>true</visible>
              <offset>(-0.6784662, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>70</tick>
              <angle>-55</angle>
              <visible>true</visible>
              <offset>(-0.6784662, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>80</tick>
              <angle>-51</angle>
              <visible>true</visible>
              <offset>(-0.6666666, 0, 0.1474925)</offset>
              <rotation>West</rotation>

              <tick>100</tick>
              <angle>-54</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1120945)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>8</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>30</tick>
              <angle>25</angle>
              <visible>true</visible>
              <rotation>South</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog4</defName>
    <durationTicks>100</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.2123895, 1, 0.3126844)</offset>
              <rotation>West</rotation>
              <sound>Fuck</sound>

              <tick>4</tick>
              <angle>36</angle>
              <visible>true</visible>
              <offset>(-0.3067847, 1, 0.342183)</offset>
              <rotation>West</rotation>

              <tick>30</tick>
              <angle>35</angle>
              <visible>true</visible>
              <offset>(-0.2772863, 1, 0.3067846)</offset>
              <rotation>West</rotation>

              <tick>45</tick>
              <angle>3</angle>
              <visible>true</visible>
              <offset>(-0.2064896, 1, 0.2005899)</offset>
              <rotation>South</rotation>

              <tick>60</tick>
              <angle>19</angle>
              <visible>true</visible>
              <offset>(0.2123888, 1, 0.1297935)</offset>
              <rotation>East</rotation>

              <tick>70</tick>
              <angle>12</angle>
              <visible>true</visible>
              <offset>(0.1769905, 1, 0.1946901)</offset>
              <rotation>East</rotation>

              <tick>80</tick>
              <angle>17</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1474925)</offset>
              <rotation>East</rotation>

              <tick>100</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0, -1, 0)</offset>
              <rotation>West</rotation>

              <tick>30</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0, -1, 0)</offset>
              <rotation>West</rotation>

              <tick>35</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(-0.1002951, -2, 0)</offset>
              <rotation>West</rotation>

              <tick>45</tick>
              <angle>34</angle>
              <visible>true</visible>
              <offset>(-0.01769918, -2, 0.1592921)</offset>
              <rotation>West</rotation>

              <tick>60</tick>
              <angle>5</angle>
              <visible>true</visible>
              <offset>(-0.5722714, -2, -0.0294984)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human5_1</defName>
    <durationTicks>80</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-54</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>20</tick>
              <angle>-60</angle>
              <visible>true</visible>
              <offset>(-0.6843658, 0, 0.08849573)</offset>
              <rotation>West</rotation>

              <tick>40</tick>
              <angle>-58</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.09439516)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

              <tick>80</tick>
              <angle>-54</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1120945)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>10</tick>
              <angle>20</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>50</tick>
              <angle>25</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>80</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog5_1</defName>
    <durationTicks>80</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>
              <sound>Cum</sound>

              <tick>10</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>20</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>30</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>40</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>50</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>60</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>70</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>80</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>60</tick>
              <angle>5</angle>
              <visible>true</visible>
              <offset>(-0.5722714, -2, -0.0294984)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human5_2</defName>
    <durationTicks>80</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-54</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>40</tick>
              <angle>-58</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.09439516)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

              <tick>80</tick>
              <angle>-54</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1120945)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>50</tick>
              <angle>25</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>80</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog5_2</defName>
    <durationTicks>80</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>
              <sound>Cum</sound>

              <tick>10</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>20</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>30</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>40</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>50</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>60</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>70</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>80</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>60</tick>
              <angle>5</angle>
              <visible>true</visible>
			  <offset>(-0.5722714, -2, -0.0294984)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human5_3</defName>
    <durationTicks>80</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-54</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1120945)</offset>
              <rotation>West</rotation>

              <tick>40</tick>
              <angle>-58</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.09439516)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

              <tick>80</tick>
              <angle>-54</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1120945)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>South</rotation>

              <tick>50</tick>
              <angle>25</angle>
              <visible>true</visible>
              <rotation>South</rotation>

              <tick>80</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>South</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog5_3</defName>
    <durationTicks>80</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>10</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>20</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>30</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>40</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>
              <sound>Cum</sound>

              <tick>50</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>60</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>70</tick>
              <angle>15</angle>
              <visible>true</visible>
              <offset>(0.2005889, 1, 0.1710913)</offset>
              <rotation>East</rotation>

              <tick>80</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>60</tick>
              <angle>5</angle>
              <visible>true</visible>
			  <offset>(-0.5722714, -2, -0.0294984)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>DogBeast_Human6</defName>
    <durationTicks>200</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-48</angle>
              <visible>true</visible>
              <offset>(-0.6725662, 0, 0.1356933)</offset>
              <rotation>West</rotation>
              <voice>Grunt</voice>

              <tick>120</tick>
              <angle>-62</angle>
              <visible>true</visible>
              <offset>(-0.6666666, 0, 0.1238937)</offset>
              <rotation>West</rotation>

              <tick>160</tick>
              <angle>-65</angle>
              <visible>true</visible>
              <offset>(-0.660767, 0, 0.117994)</offset>
              <rotation>West</rotation>
              <voice>Scream</voice>

              <tick>170</tick>
              <angle>-43</angle>
              <visible>true</visible>
              <offset>(-0.6312686, 0, 0.2536873)</offset>
              <rotation>West</rotation>

              <tick>180</tick>
              <angle>-46</angle>
              <visible>true</visible>
              <offset>(-0.6430678, 0, 0.2359883)</offset>
              <rotation>West</rotation>

              <tick>200</tick>
              <angle>-42</angle>
              <visible>true</visible>
              <offset>(-0.619469, 0, 0.2536873)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>30</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>120</tick>
              <angle>55</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>165</tick>
              <angle>54</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>180</tick>
              <angle>25</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>200</tick>
              <angle>22</angle>
              <visible>true</visible>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>20</tick>
              <angle>0</angle>
              <visible>false</visible>
              <offset>(-0.5309731, -2, -0.06489676)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>DogBeast_Dog6</defName>
    <durationTicks>200</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>13</angle>
              <visible>true</visible>
              <offset>(0.1946893, 1, 0.1828909)</offset>
              <rotation>East</rotation>

              <tick>60</tick>
              <angle>20</angle>
              <visible>true</visible>
              <offset>(0.2595864, 1, 0.2123895)</offset>
              <rotation>East</rotation>

              <tick>140</tick>
              <angle>23</angle>
              <visible>true</visible>
              <offset>(0.3008844, 1, 0.2241887)</offset>
              <rotation>East</rotation>

              <tick>160</tick>
              <angle>26</angle>
              <visible>true</visible>
              <offset>(0.3775801, 1, 0.2241887)</offset>
              <rotation>East</rotation>
              <sound>Fuck</sound>

              <tick>180</tick>
              <angle>11</angle>
              <visible>true</visible>
              <offset>(0.5958685, 1, 0.1474925)</offset>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>North</rotation>

          </keyframes>
        </value>

        <key>AnimalPenis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>60</tick>
              <angle>5</angle>
              <visible>true</visible>
              <offset>(-0.5722714, -2, -0.0294984)</offset>
              <rotation>West</rotation>

              <tick>160</tick>
              <angle>5</angle>
              <visible>true</visible>
              <offset>(-0.5722714, -2, -0.0294984)</offset>
              <rotation>West</rotation>
              <sound>Slimy</sound>

              <tick>165</tick>
              <angle>-39</angle>
              <visible>true</visible>
              <offset>(-0.5722714, -2, -0.0294984)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Saliva</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-55</angle>
              <visible>true</visible>
              <offset>(-0.4837759, -2, -0.2949852)</offset>
              <scale>(0.2153394, 1, 0.6342184)</scale>
              <rotation>North</rotation>

              <tick>160</tick>
              <angle>-55</angle>
              <visible>false</visible>
              <offset>(-0.4601771, -2, -0.3067846)</offset>
              <scale>(0.2153394, 1, 0.6342184)</scale>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>

	<PawnRenderNodeTagDef>
		<defName>Cum</defName>
	</PawnRenderNodeTagDef>

	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimProp_Cum</defName>
		<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_GraphicVariants">
			<debugLabel>Cum</debugLabel>
			<nodeClass>Rimworld_Animations.PawnRenderNode_GraphicVariants</nodeClass>
			<workerClass>Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants</workerClass>
			<tagDef>Cum</tagDef>
			<parentTagDef>Head</parentTagDef>
			<!-- for height -->
			<texPath>AnimationProps/Cum/Cum</texPath>
			<overlayLayer>Head</overlayLayer>
			<baseLayer>95</baseLayer>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>

	<PawnRenderNodeTagDef>
		<defName>Cumshot</defName>
	</PawnRenderNodeTagDef>

	<Rimworld_Animations.AnimationPropDef>
		<defName>AnimProp_Cumshot</defName>
		<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_GraphicVariants">
			<debugLabel>Cumshot</debugLabel>
			<nodeClass>Rimworld_Animations.PawnRenderNode_GraphicVariants</nodeClass>
			<workerClass>Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants</workerClass>
			<tagDef>Cumshot</tagDef>
			<parentTagDef>Root</parentTagDef>
			<!-- for height -->
			<texPath>AnimationProps/Saliva/Saliva</texPath>
			<overlayLayer>Head</overlayLayer>
			<baseLayer>95</baseLayer>
		</animPropProperties>
	</Rimworld_Animations.AnimationPropDef>

</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<Rimworld_Animations.GroupAnimationDef>
		<defName>GroupAnimation_Blowjob</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator1

Blowjob_Receiver1

						</animationDefs>

				</loopOptions>

				<loops>10</loops>
				<paths>

Blowjob_Stage2_Branch1

Blowjob_Stage2_Branch2

Blowjob_Stage2_Branch3

				</paths>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator3

Blowjob_Receiver3

						</animationDefs>

				</loopOptions>

				<loops>20</loops>
				<paths>

Blowjob_Stage4_Branch1

Blowjob_Stage4_Branch2

				</paths>

				<loops>20</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator5

Blowjob_Receiver5

						</animationDefs>

				</loopOptions>

				<loops>1</loops>
				<paths>

Blowjob_Stage6_Branch1

Blowjob_Stage6_Branch2

				</paths>

		</animationStages>

		<contexts>

				<priority>1</priority>
				<interactionDefs>

Sex_Fellatio

Sex_Beakjob

Sex_Handjob

				</interactionDefs>

				<priority>1</priority>
				<actorShift>1</actorShift>
				<interactionDefs>

Sex_Reverse_Fellatio

Sex_Reverse_Beakjob

Sex_Reverse_Handjob

				</interactionDefs>

				<priority>0</priority>
				<interactionDefs>

Sex_Breastjob

Sex_Footjob

Sex_Handjob

Sex_MutualMasturbation

Rape_Breastjob

Rape_Fellatio

Rape_Footjob

Rape_Handjob

Rape_Oral

				</interactionDefs>

				<priority>0</priority>
				<actorShift>1</actorShift>
				<interactionDefs>

Sex_Reverse_Breastjob

Sex_Reverse_Footjob

Sex_Reverse_Handjob

Rape_Reverse_Breastjob

Rape_Reverse_Fellatio

Rape_Reverse_Footjob

Rape_Reverse_Handjob

				</interactionDefs>

		</contexts>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage2_Branch1</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>2</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator2a

Blowjob_Receiver2a

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage2_Branch2</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>2</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator2b

Blowjob_Receiver2b

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage2_Branch3</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>2</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator2c

Blowjob_Receiver2c

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage4_Branch1</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator4a

Blowjob_Receiver4a

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage4_Branch2</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator4b

Blowjob_Receiver4b

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage4_Branch3</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator4a

Blowjob_Receiver4a

						</animationDefs>

				</loopOptions>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator4c

Blowjob_Receiver4c

						</animationDefs>

				</loopOptions>

				<loops>2</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator4a

Blowjob_Receiver4a

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage6_Branch1</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator6a

Blowjob_Receiver6a

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

	<Rimworld_Animations.GroupAnimationDef>
		<defName>Blowjob_Stage6_Branch2</defName>
		<numActors>2</numActors>
		<animationStages>

				<loops>1</loops>
				<loopOptions>

						<probability>1</probability>
						<animationDefs>

Blowjob_Initiator6b

Blowjob_Receiver6b

						</animationDefs>

				</loopOptions>

		</animationStages>

		<offsetDefs>

Offset_Blowjob_Initiator

Offset_Blowjob_Receiver

		</offsetDefs>

	</Rimworld_Animations.GroupAnimationDef>

</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<Rimworld_Animations.AnimationOffsetDef>
		<defName>Offset_Blowjob_Receiver</defName>
		<offsets>

				<races>

Human

				</races>
				<offsets>
				</offsets>

		</offsets>
	</Rimworld_Animations.AnimationOffsetDef>

	<Rimworld_Animations.AnimationOffsetDef>
		<defName>Offset_Blowjob_Initiator</defName>
		<offsets>

				<races>

Human

				</races>
				<offsets>

<bodyType>Hulk</bodyType><offset>(0, 0, 0.223)</offset>

				</offsets>

		</offsets>
	</Rimworld_Animations.AnimationOffsetDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
  <AnimationDef>
    <defName>Blowjob_Initiator1</defName>
    <durationTicks>60</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>-7</angle>
              <visible>true</visible>
              <offset>(-0.5309734, 0, 0.4778759)</offset>
              <rotation>East</rotation>

              <tick>20</tick>
              <angle>-17</angle>
              <visible>true</visible>
              <offset>(-0.5309734, 0, 0.4778759)</offset>
              <rotation>East</rotation>

              <tick>60</tick>
              <angle>-19</angle>
              <visible>true</visible>
              <offset>(-0.5309734, 0, 0.4778759)</offset>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>20</angle>
              <visible>true</visible>
              <rotation>East</rotation>

              <tick>60</tick>
              <angle>31</angle>
              <visible>true</visible>
              <rotation>East</rotation>

          </keyframes>
        </value>

        <key>RimNude_Penis</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>2</angle>
              <visible>true</visible>
              <rotation>East</rotation>

              <tick>5</tick>
              <angle>6</angle>
              <visible>true</visible>
              <rotation>East</rotation>

              <tick>10</tick>
              <angle>2</angle>
              <visible>true</visible>
              <rotation>East</rotation>

              <tick>15</tick>
              <angle>6</angle>
              <visible>true</visible>
              <rotation>East</rotation>

              <tick>20</tick>
              <angle>0</angle>
              <visible>true</visible>
              <rotation>East</rotation>

              <tick>40</tick>
              <angle>14</angle>
              <visible>true</visible>
              <rotation>East</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
  <AnimationDef>
    <defName>Blowjob_Receiver1</defName>
    <durationTicks>60</durationTicks>
    <animationParts>

        <key>Root</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.3421831, 0, 0.3303834)</offset>
              <rotation>West</rotation>

              <tick>30</tick>
              <angle>-13</angle>
              <visible>true</visible>
              <offset>(0.2536875, 0, 0.2713863)</offset>
              <rotation>West</rotation>

              <tick>60</tick>
              <angle>-23</angle>
              <visible>true</visible>
              <offset>(0.1828908, 0, 0.2123895)</offset>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>Head</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>9</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>30</tick>
              <angle>29</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>45</tick>
              <angle>7</angle>
              <visible>true</visible>
              <rotation>West</rotation>

              <tick>60</tick>
              <angle>9</angle>
              <visible>true</visible>
              <rotation>West</rotation>

          </keyframes>
        </value>

        <key>RenderNodeTag_Hand</key>
        <value>
          <workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
          <keyframes>

              <tick>0</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(0.0471976, 1, 0.1533923)</offset>
              <rotation>North</rotation>

              <tick>20</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(-0.2890855, 1, 0.1002949)</offset>
              <rotation>North</rotation>

              <tick>40</tick>
              <angle>0</angle>
              <visible>true</visible>
              <offset>(-0.2595871, 1, 0.08849573)</offset>
              <rotation>North</rotation>

          </keyframes>
        </value>

    </animationParts>
  </AnimationDef>
</Defs>