code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using UnityEngine;
using RimWorld;

namespace Rimworld_Animations {

    public class AnimationSettings : ModSettings {

        public static bool orgasmQuiver, rapeShiver, soundOverride = true, hearts = true, controlGenitalRotation = false, applySemenOnAnimationOrgasm = false, fastAnimForQuickie = false,
            PlayAnimForNonsexualActs = true;
        public static bool offsetTab = false, debugMode = false;
        public static float shiverIntensity = 2f;

        public static Dictionary<string, Vector2> offsets = new Dictionary<string, Vector2>();
        public static Dictionary<string, float> rotation = new Dictionary<string, float>();

        public override void ExposeData() {

            base.ExposeData();

            Scribe_Values.Look(ref debugMode, "RJWAnimations-AnimsDebugMode", false);
            Scribe_Values.Look(ref offsetTab, "RJWAnimations-EnableOffsetTab", false);
            Scribe_Values.Look(ref controlGenitalRotation, "RJWAnimations-controlGenitalRotation", false);
            Scribe_Values.Look(ref orgasmQuiver, "RJWAnimations-orgasmQuiver");
            Scribe_Values.Look(ref fastAnimForQuickie, "RJWAnimations-fastAnimForQuickie");
            Scribe_Values.Look(ref rapeShiver, "RJWAnimations-rapeShiver");
            Scribe_Values.Look(ref hearts, "RJWAnimation-sheartsOnLovin");
            Scribe_Values.Look(ref PlayAnimForNonsexualActs, "RJWAnims-PlayAnimForNonsexualActs");
            Scribe_Values.Look(ref applySemenOnAnimationOrgasm, "RJWAnimations-applySemenOnOrgasm", false);
            Scribe_Values.Look(ref soundOverride, "RJWAnimations-rjwAnimSoundOverride", true);
            Scribe_Values.Look(ref shiverIntensity, "RJWAnimations-shiverIntensity", 2f);
            //todo: save offsetsByDefName

            Scribe_Collections.Look(ref offsets, "RJWAnimations-animationOffsets");
            Scribe_Collections.Look(ref rotation, "RJWAnimations-rotationOffsets");

            //needs to be rewritten
            //probably somewhere in options?

        }

    }

    public class RJW_Animations : Mod {

        public RJW_Animations(ModContentPack content) : base(content) {
            GetSettings<AnimationSettings>();

        }

        public override void DoSettingsWindowContents(Rect inRect) {

            Listing_Standard listingStandard = new Listing_Standard();
            listingStandard.Begin(inRect);

            listingStandard.CheckboxLabeled("Enable Sound Override", ref AnimationSettings.soundOverride);
            listingStandard.CheckboxLabeled("Control Genital Rotation", ref AnimationSettings.controlGenitalRotation);
            listingStandard.CheckboxLabeled("Play Fast Animation for Quickie", ref AnimationSettings.fastAnimForQuickie);
            listingStandard.CheckboxLabeled("Apply Semen on Animation Orgasm", ref AnimationSettings.applySemenOnAnimationOrgasm);

            if(AnimationSettings.applySemenOnAnimationOrgasm) {
                listingStandard.Label("Recommended--turn down \"Cum on body percent\" in RJW settings to about 33%");
            }

            listingStandard.CheckboxLabeled("Enable Orgasm Quiver", ref AnimationSettings.orgasmQuiver);
            listingStandard.CheckboxLabeled("Enable Rape Shiver", ref AnimationSettings.rapeShiver);
            listingStandard.CheckboxLabeled("Enable hearts during lovin'", ref AnimationSettings.hearts);
            listingStandard.CheckboxLabeled("Play animation for nonsexual acts (handholding, makeout)", ref AnimationSettings.PlayAnimForNonsexualActs);
            listingStandard.CheckboxLabeled("Enable Animation Manager Tab", ref AnimationSettings.offsetTab);

            listingStandard.Label("Shiver/Quiver Intensity (default 2): " + AnimationSettings.shiverIntensity);
            AnimationSettings.shiverIntensity = listingStandard.Slider(AnimationSettings.shiverIntensity, 0.0f, 12f);

            listingStandard.CheckboxLabeled("Debug Mode", ref AnimationSettings.debugMode);

            listingStandard.End();
            base.DoSettingsWindowContents(inRect);
        }

        public override void WriteSettings() {
            base.WriteSettings();
            OffsetMainButtonDefOf.OffsetManager.buttonVisible = AnimationSettings.offsetTab;

        }

        public override string SettingsCategory() {
            return "RJW Animation Settings";
        }
    }
}


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);

            if(interaction.HasInteractionTag(InteractionTag.Reverse))
            {
                Pawn buffer = participants[1];
                participants[1] = participants[0];
                participants[0] = buffer;
            }

            participants =
                participants.OrderBy(p => p.jobs.curDriver is rjw.JobDriver_SexBaseInitiator)
                .OrderBy(p => rjw.xxx.can_fuck(p))
                .ToList();

            List<Pawn> localParticipants = new List<Pawn>(participants);

            IEnumerable<AnimationDef> options = DefDatabase<AnimationDef>.AllDefs.Where((AnimationDef x) => {

                if (x.actors.Count != localParticipants.Count) {
                    return false;
                }
                for (int i = 0; i < x.actors.Count; i++) {

                    if (rjw.RJWPreferenceSettings.Malesex == rjw.RJWPreferenceSettings.AllowedSex.Nohomo) {
                        if (rjw.xxx.is_male(localParticipants[i]) && x.actors[i].isFucked) {
                            return false;
                        }
                }
				if (x.actors[i].requiredGender != null && !x.actors[i].requiredGender.Contains(localParticipants[i].gender.ToStringSafe<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 (rjw.RJWSettings.DevMode) {
                                string animInfo = x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is not ";
                                foreach(String defname in x.actors[i].defNames) {
                                    animInfo += defname + ", ";
                                }
                                if (AnimationSettings.debugMode)
                                    Log.Message(animInfo);
                            }

                            return false;
                        }
                    }
                    //genitals checking

                    if(!GenitalCheckForPawn(x.actors[i].requiredGenitals, localParticipants[i], out string failReason)) {
                        Debug.Log("Didn't select " + x.defName + ", " + localParticipants[i].Name + " " + failReason);
                        return false;
                    }

                    //TESTING ANIMATIONS ONLY REMEMBER TO COMMENT OUT BEFORE PUSH
                    /*
                    if (x.defName != "Cunnilingus")
                        return false;
                    */

                    if (x.actors[i].isFucking && !rjw.xxx.can_fuck(localParticipants[i])) {
                        if (AnimationSettings.debugMode)
                            Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't fuck");
                        return false;
                    }

                    if (x.actors[i].isFucked && !rjw.xxx.can_be_fucked(localParticipants[i])) {
                        if (AnimationSettings.debugMode)
                            Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't be fucked");
                        return false;
                    }
                }
                return true;
            });
            List<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;
            }

            CompBodyAnimator pawnAnimator = pawn.TryGetComp<CompBodyAnimator>();

            if (pawnAnimator == null || !pawnAnimator.isAnimating) {
                GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, drawNow);
            } else {
                Vector3 pawnHeadPosition = pawnAnimator.getPawnHeadPosition();
                pawnHeadPosition.y = loc.y;
                GenDraw.DrawMeshNowOrLater(MeshPool.humanlikeHeadSet.MeshAt(pawnAnimator.headFacing), pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, true);
            }
        }

        public static void AdjustHead(ref Quaternion quat, ref Rot4 bodyFacing, ref Vector3 pos, ref float angle, Pawn pawn, PawnRenderFlags flags)
        {
            if (flags.FlagSet(PawnRenderFlags.Portrait)) return;

            CompBodyAnimator anim = pawn.TryGetComp<CompBodyAnimator>();
            if (anim.isAnimating)
            {
                bodyFacing = anim.headFacing;
                angle = anim.headAngle;
                quat = Quaternion.AngleAxis(anim.headAngle, Vector3.up);
                pos = anim.getPawnHeadOffset();

            }
        }

        public static void RenderPawnHeadMeshInAnimation(Mesh mesh, Vector3 loc, Quaternion quaternion, Material material, bool portrait, Pawn pawn, float bodySizeFactor = 1) {

            if (pawn == null) {
                GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait);
                return;
            }

            CompBodyAnimator pawnAnimator = pawn.TryGetComp<CompBodyAnimator>();

            if (pawnAnimator == null || !pawnAnimator.isAnimating || portrait) {
                GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait);
            }
            else {
                Vector3 pawnHeadPosition = pawnAnimator.getPawnHeadPosition();
                pawnHeadPosition.x *= bodySizeFactor;
                pawnHeadPosition.x *= bodySizeFactor;
                pawnHeadPosition.y = loc.y;
                GenDraw.DrawMeshNowOrLater(mesh, pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, portrait);
            }
        }

        public static bool GenitalCheckForPawn(List<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;
        }
    }
}

repo_name: csblaze/rimworld

license: unknown


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

    }

}


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

<ModMetaData>
	<name>Rimworld-Animations</name>
	<author>C0ffee</author>
  <url>https://gitgud.io/c0ffeeeeeeee/rimworld-animations</url>
	<supportedVersions>

1.1

1.2

1.3

1.4

	</supportedVersions>
	<packageId>c0ffee.rimworld.animations</packageId>
	<modDependencies>

			<packageId>brrainz.harmony</packageId>
			<displayName>Harmony</displayName>
			<steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
			<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>

			<packageId>UnlimitedHugs.HugsLib</packageId>
			<displayName>HugsLib</displayName>
			<downloadUrl>https://github.com/UnlimitedHugs/RimworldHugsLib/releases/latest</downloadUrl>
			<steamWorkshopUrl>steam://url/CommunityFilePage/818773962</steamWorkshopUrl>

			<packageId>rim.job.world</packageId>
			<displayName>RimJobWorld</displayName>
			<downloadUrl>https://www.loverslab.com/topic/110270-mod-rimjobworld/</downloadUrl>

			<packageId>erdelf.HumanoidAlienRaces</packageId>
			<displayName>Humanoid Alien Races 2.0</displayName>
			<steamWorkshopUrl>https://steamcommunity.com/sharedfiles/filedetails/?id=839005762</steamWorkshopUrl>

	</modDependencies>
	<loadAfter>

UnlimitedHugs.HugsLib

brrainz.harmony

erdelf.humanoidalienraces

nals.facialanimation

com.yayo.yayoAni

	</loadAfter>
	<loadBefore>
	</loadBefore>
	<incompatibleWith>
	</incompatibleWith>
	<description>
    Rimworld Animations! Hurray!

    Questions or bugs?
    Chat with me on the forums: https://www.loverslab.com/topic/140386-rjw-animations/
    Or on the rjw discord: https://discord.gg/CXwHhv8

  </description>
</ModMetaData>


code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
  <identifier>Rimworld-Animations</identifier>
  <version>1.3.0</version>
</Manifest>


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

  <OffsetManager.label>gerenciador de posições</OffsetManager.label>
  <OffsetManager.description>Controla as posições sexuais dos colonos.</OffsetManager.description>

</LanguageData>


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

  <Dog_Doggystyle.label>estilo cachorrinho</Dog_Doggystyle.label>
  <Horse_Cowgirl.label>vaqueira</Horse_Cowgirl.label>

</LanguageData>


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

  <Tribadism.label>tribadismo</Tribadism.label>
  <Cunnilingus.label>cunilíngua</Cunnilingus.label>

</LanguageData>


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

  <Double_Penetration.label>dupla penetração</Double_Penetration.label>

</LanguageData>


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

  <Doggystyle.label>estilo cachorrinho</Doggystyle.label>
  <Blowjob.label>boquete</Blowjob.label>
  <ReverseStandAndCarry.label>69</ReverseStandAndCarry.label>
  <Cowgirl.label>vaqueira</Cowgirl.label>

</LanguageData>


code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<loadFolders>
	<v1.1>

/

1.1

	</v1.1>
	<v1.2>

/

1.2

Patch_HatsDisplaySelection/1.2

	</v1.2>
	<v1.3>

/

1.3

Patch_HatsDisplaySelection/1.2

Patch_SexToysMasturbation

Patch_SexToysMasturbation/1.3

	</v1.3>
	<v1.4>

/

1.4

Patch_HatsDisplaySelection/1.2

Patch_SexToysMasturbation

Patch_SexToysMasturbation/1.4

	</v1.4>

</loadFolders>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
	<Patch_SexToysMasturbation.SexToyAnimationDef>
		<defName>Masturbation_DildoVaginal</defName>
		dildo masturbation
		<requiredBodyPart>vagina</requiredBodyPart>
		<sounds>true</sounds>
		<sexTypes>

Masturbation

		</sexTypes>
		<actors>

				<defNames>

Human

				</defNames>
				<isFucked>true</isFucked>

		</actors>

		<animationStages>

				<stageName>Masturbating</stageName>
				<isLooping>true</isLooping>
				<playTimeTicks>917</playTimeTicks>
				<stageIndex>0</stageIndex>
				<animationClips>

						<layer>LayingPawn</layer>
						<keyframes>

								<tickDuration>40</tickDuration>
								<bodyAngle>73.01611</bodyAngle>
								<headAngle>40.0739746</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.054543376</bodyOffsetZ>
								<bodyOffsetX>0.112624526</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<soundEffect>Slimy</soundEffect>
								<tickDuration>30</tickDuration>
								<bodyAngle>76.4867554</bodyAngle>
								<headAngle>45.3887634</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.0506898165</bodyOffsetZ>
								<bodyOffsetX>0.08564949</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<tickDuration>30</tickDuration>
								<bodyAngle>78.22131</bodyAngle>
								<headAngle>48.0072327</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.039129138</bodyOffsetZ>
								<bodyOffsetX>0.07794231</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<tickDuration>30</tickDuration>
								<bodyAngle>76.4867554</bodyAngle>
								<headAngle>45.3887634</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.0506898165</bodyOffsetZ>
								<bodyOffsetX>0.08564949</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<tickDuration>1</tickDuration>
								<bodyAngle>73.01611</bodyAngle>
								<headAngle>40.0739746</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.054543376</bodyOffsetZ>
								<bodyOffsetX>0.112624526</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

						</keyframes>

						<keyframes>

								<tickDuration>40</tickDuration>
								<positionX>-0.359264076</positionX>
								<positionZ>-0.00901746</positionZ>
								<rotation>114.011215</rotation>

								<tickDuration>30</tickDuration>
								<positionX>-0.2783391</positionX>
								<positionZ>-0.0514066666</positionZ>
								<rotation>81.16443</rotation>

								<tickDuration>30</tickDuration>
								<positionX>-0.1704393</positionX>
								<positionZ>-0.0668209046</positionZ>
								<rotation>72.8611145</rotation>

								<tickDuration>30</tickDuration>
								<positionX>-0.2783391</positionX>
								<positionZ>-0.0514066666</positionZ>
								<rotation>81.16443</rotation>

								<tickDuration>1</tickDuration>
								<positionX>-0.359264076</positionX>
								<positionZ>-0.00901746</positionZ>
								<rotation>114.011215</rotation>

						</keyframes>

				</animationClips>

				<stageName>GettingIntoPosition</stageName>
				<isLooping>false</isLooping>
				<stageIndex>0</stageIndex>
				<animationClips>

						<layer>LayingPawn</layer>
						<keyframes>

								<tickDuration>50</tickDuration>
								<bodyAngle>73.01611</bodyAngle>
								<headAngle>40.0739746</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.054543376</bodyOffsetZ>
								<bodyOffsetX>0.112624526</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<soundEffect>Slimy</soundEffect>
								<tickDuration>1</tickDuration>
								<bodyAngle>81.65927</bodyAngle>
								<headAngle>58.8843079</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03912908</bodyOffsetZ>
								<bodyOffsetX>0.08950315</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

						</keyframes>

						<keyframes>

								<tickDuration>50</tickDuration>
								<positionX>-0.359264076</positionX>
								<positionZ>-0.00901746</positionZ>
								<rotation>114.011215</rotation>

								<tickDuration>1</tickDuration>
								<positionX>-0.2899</positionX>
								<positionZ>-0.0282852575</positionZ>
								<rotation>98.13748</rotation>

						</keyframes>

				</animationClips>

				<stageName>FastMasturbation</stageName>
				<isLooping>true</isLooping>
				<stageIndex>0</stageIndex>
				<playTimeTicks>1610</playTimeTicks>
				<animationClips>

						<layer>LayingPawn</layer>
						<keyframes>

								<tickDuration>20</tickDuration>
								<bodyAngle>81.65927</bodyAngle>
								<headAngle>58.8843079</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03912908</bodyOffsetZ>
								<bodyOffsetX>0.08950315</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<soundEffect>Slimy</soundEffect>
								<tickDuration>25</tickDuration>
								<bodyAngle>85.17255</bodyAngle>
								<headAngle>58.0615845</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03527552</bodyOffsetZ>
								<bodyOffsetX>0.0471138731</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<tickDuration>1</tickDuration>
								<bodyAngle>81.65927</bodyAngle>
								<headAngle>58.8843079</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03912908</bodyOffsetZ>
								<bodyOffsetX>0.08950315</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

						</keyframes>

						<keyframes>

								<tickDuration>25</tickDuration>
								<positionX>-0.2899</positionX>
								<positionZ>-0.0282852575</positionZ>
								<rotation>98.13748</rotation>

								<tickDuration>20</tickDuration>
								<positionX>-0.178146541</positionX>
								<positionZ>-0.01672452</positionZ>
								<rotation>96.95889</rotation>

								<tickDuration>1</tickDuration>
								<positionX>-0.2899</positionX>
								<positionZ>-0.0282852575</positionZ>
								<rotation>98.13748</rotation>

						</keyframes>

				</animationClips>

				<stageName>VeryFastMasturbation</stageName>
				<isLooping>true</isLooping>
				<stageIndex>0</stageIndex>
				<playTimeTicks>225</playTimeTicks>
				<animationClips>

						<layer>LayingPawn</layer>
						<keyframes>

								<tickDuration>6</tickDuration>
								<bodyAngle>81.65927</bodyAngle>
								<headAngle>58.8843079</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03912908</bodyOffsetZ>
								<bodyOffsetX>0.08950315</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<soundEffect>Slimy</soundEffect>
								<tickDuration>8</tickDuration>
								<bodyAngle>85.17255</bodyAngle>
								<headAngle>58.0615845</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03527552</bodyOffsetZ>
								<bodyOffsetX>0.0471138731</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<tickDuration>1</tickDuration>
								<bodyAngle>81.65927</bodyAngle>
								<headAngle>58.8843079</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03912908</bodyOffsetZ>
								<bodyOffsetX>0.08950315</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

						</keyframes>

						<keyframes>

								<tickDuration>6</tickDuration>
								<positionX>-0.2899</positionX>
								<positionZ>-0.0282852575</positionZ>
								<rotation>98.13748</rotation>

								<tickDuration>8</tickDuration>
								<positionX>-0.178146541</positionX>
								<positionZ>-0.01672452</positionZ>
								<rotation>96.95889</rotation>

								<tickDuration>1</tickDuration>
								<positionX>-0.2899</positionX>
								<positionZ>-0.0282852575</positionZ>
								<rotation>98.13748</rotation>

						</keyframes>

				</animationClips>

				<stageName>Orgasm</stageName>
				<isLooping>false</isLooping>
				<stageIndex>0</stageIndex>
				<animationClips>

						<layer>LayingPawn</layer>
						<keyframes>

								<soundEffect>Slimy</soundEffect>
								<tickDuration>6</tickDuration>
								<bodyAngle>81.65927</bodyAngle>
								<headAngle>58.8843079</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03912908</bodyOffsetZ>
								<bodyOffsetX>0.08950315</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<quiver>True</quiver>
								<soundEffect>Cum</soundEffect>
								<tickDuration>80</tickDuration>
								<bodyAngle>85.17255</bodyAngle>
								<headAngle>58.0615845</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03527552</bodyOffsetZ>
								<bodyOffsetX>0.0471138731</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<quiver>True</quiver>
								<soundEffect>Cum</soundEffect>
								<tickDuration>90</tickDuration>
								<bodyAngle>92.15109</bodyAngle>
								<headAngle>96.34238</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.0237147212</bodyOffsetZ>
								<bodyOffsetX>0.0432603136</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<quiver>True</quiver>
								<soundEffect>Cum</soundEffect>
								<tickDuration>70</tickDuration>
								<bodyAngle>92.15109</bodyAngle>
								<headAngle>96.34238</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.0237147212</bodyOffsetZ>
								<bodyOffsetX>0.0432603136</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<tickDuration>70</tickDuration>
								<bodyAngle>92.15109</bodyAngle>
								<headAngle>96.34238</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.0237147212</bodyOffsetZ>
								<bodyOffsetX>0.0432603136</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

								<tickDuration>1</tickDuration>
								<bodyAngle>81.65927</bodyAngle>
								<headAngle>58.8843079</headAngle>
								<genitalAngle>0</genitalAngle>
								<bodyOffsetZ>0.03912908</bodyOffsetZ>
								<bodyOffsetX>0.08950315</bodyOffsetX>
								<headBob>0</headBob>
								<bodyFacing>3</bodyFacing>
								<headFacing>3</headFacing>

						</keyframes>

						<keyframes>

								<tickDuration>6</tickDuration>
								<positionX>-0.2899</positionX>
								<positionZ>-0.0282852575</positionZ>
								<rotation>98.13748</rotation>

								<tickDuration>80</tickDuration>
								<positionX>-0.178146541</positionX>
								<positionZ>-0.01672452</positionZ>
								<rotation>96.95889</rotation>

								<tickDuration>90</tickDuration>
								<positionX>-0.178146541</positionX>
								<positionZ>-0.01672452</positionZ>
								<rotation>96.95889</rotation>

								<tickDuration>70</tickDuration>
								<positionX>-0.178146541</positionX>
								<positionZ>-0.01672452</positionZ>
								<rotation>96.95889</rotation>

								<tickDuration>70</tickDuration>
								<positionX>-0.178146541</positionX>
								<positionZ>-0.01672452</positionZ>
								<rotation>96.95889</rotation>

								<tickDuration>1</tickDuration>
								<positionX>-0.2899</positionX>
								<positionZ>-0.0282852575</positionZ>
								<rotation>98.13748</rotation>

						</keyframes>

				</animationClips>

		</animationStages>
	</Patch_SexToysMasturbation.SexToyAnimationDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{87763712-0536-4D5F-9EAA-520F15D4F84E}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Patch_SexToysMasturbation</RootNamespace>
    <AssemblyName>Patch_SexToysMasturbation</AssemblyName>
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>false</DebugSymbols>
    <DebugType>none</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>1.4\Assemblies\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="0Harmony">
      <HintPath>..\..\..\..\..\workshop\content\294100\1127530465\1.3\Assemblies\0Harmony.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Assembly-CSharp">
      <HintPath>..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Rimworld-Animations, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\1.3\Assemblies\Rimworld-Animations.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="RJW">
      <HintPath>..\..\rjw\1.4\Assemblies\RJW.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="RJW-ToysAndMasturbation">
      <HintPath>..\..\rjw-toys-and-masturbation\Assemblies\RJW-ToysAndMasturbation.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
    <Reference Include="UnityEngine">
      <HintPath>..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="UnityEngine.CoreModule">
      <HintPath>..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Source\Defs\SexToyAnimationDef.cs" />
    <Compile Include="Source\Harmony\Harmony_PatchAll.cs" />
    <Compile Include="Source\Patches\HarmonyPatch_JobDriver_SexBaseInitiator.cs" />
    <Compile Include="Source\Utilities\AnimSexToyUtility.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="1.3\Assemblies\" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="1.3\Defs\AnimationDefs\Animations_Dildo.xml" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>


code:
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Patch_SexToysMasturbation")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Patch_SexToysMasturbation")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("87763712-0536-4d5f-9eaa-520f15d4f84e")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


code:
using Rimworld_Animations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Patch_SexToysMasturbation
{
    public class SexToyAnimationDef : AnimationDef
    {

        public String requiredBodyPart = null;

    }
}


code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using HarmonyLib;
using System.Reflection;

namespace Patch_SexToysMasturbation
{

    [StaticConstructorOnStartup]
    public static class Harmony_PatchAll {

        static Harmony_PatchAll() {

            Harmony val = new Harmony("animtoyspatch");
            val.PatchAll(Assembly.GetExecutingAssembly());

        }
    }
}


code:
using HarmonyLib;
using Rimworld_Animations;
using rjw;
using RJW_ToysAndMasturbation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;

namespace Patch_SexToysMasturbation
{
    [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")]
    public class HarmonyPatch_JobDriver_SexBaseInitiator
    {

        public static void Postfix(ref JobDriver_SexBaseInitiator __instance)
        {

            if(__instance is JobDriver_MasturbateWithToy masturbateJobDriver)
            {

                Log.Message("Rerolling animations...");
                Pawn pawn = masturbateJobDriver.pawn;
                Thing sexToy = masturbateJobDriver.dildo;

                RerollAnimationsForSexToy(pawn, sexToy, masturbateJobDriver.Bed);
            }

        }

        public static void RerollAnimationsForSexToy(Pawn pawn, Thing thing, Thing bed)
        {
            CompSexToy sextoy = thing.TryGetComp<CompSexToy>();

            SexToyAnimationDef anim = AnimSexToyUtility.tryFindAnimation(sextoy, pawn);

            if (anim != null)
            {
                Log.Message("Playing anim " + anim.defName);

                if(bed != null)
                {
                    pawn.TryGetComp<CompBodyAnimator>().setAnchor(bed);
                    thing.TryGetComp<CompThingAnimator>().setAnchor(bed);
                }
                else
                {
                    pawn.TryGetComp<CompBodyAnimator>().setAnchor(pawn.Position);
                    thing.TryGetComp<CompThingAnimator>().setAnchor(pawn.Position);
                }

                bool mirror = GenTicks.TicksGame % 2 == 0;

                pawn.TryGetComp<CompBodyAnimator>().StartAnimation(anim, new List<Pawn> { pawn }, 0, mirror);
                thing.TryGetComp<CompThingAnimator>().StartAnimation(anim, pawn, mirror);

                (pawn.jobs.curDriver as JobDriver_Sex).ticks_left = anim.animationTimeTicks;
                (pawn.jobs.curDriver as JobDriver_Sex).sex_ticks = anim.animationTimeTicks;
                (pawn.jobs.curDriver as JobDriver_Sex).duration = anim.animationTimeTicks;
            }
            else
            {
                Log.Message("No animation found");
            }

        }

    }

}


code:
using rjw;
using RJW_ToysAndMasturbation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;

namespace Patch_SexToysMasturbation
{
    public class AnimSexToyUtility
    {

        public static SexToyAnimationDef tryFindAnimation(CompSexToy sexToy, Pawn pawn)
        {

            IEnumerable<SexToyAnimationDef> options = DefDatabase<SexToyAnimationDef>.AllDefs.Where((SexToyAnimationDef x) =>
            {

                if(!sexToy.Props.requiredBodyParts.Contains(x.requiredBodyPart))
                {
                    return false;
                }

                if(x.requiredBodyPart == "vagina" && !Genital_Helper.has_vagina(pawn))
                {
                    return false;
                }

                return true;

            });

            if(options != null && options.Any())
            {
                return options.RandomElement();
            }
            else
            {
                return null;
            }

        }

    }
}


code:
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Rimworld-Animations")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Rimworld-Animations")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("71b05d71-67b2-4014-82cd-18c20ac0882f")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


code:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{71B05D71-67B2-4014-82CD-18C20AC0882F}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Rimworld_Animations</RootNamespace>
    <AssemblyName>Rimworld-Animations</AssemblyName>
    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>false</DebugSymbols>
    <DebugType>none</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>1.4\Assemblies\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>none</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="0Harmony">
      <HintPath>..\..\..\..\workshop\content\294100\839005762\1.4\Assemblies\0Harmony.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Assembly-CSharp">
      <HintPath>..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="RJW">
      <HintPath>..\rjw\1.4\Assemblies\RJW.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="RJW-ToysAndMasturbation">
      <HintPath>..\rjw-toys-and-masturbation\Assemblies\RJW-ToysAndMasturbation.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
    <Reference Include="UnityEngine">
      <HintPath>..\..\RimWorldWin64_Data\Managed\UnityEngine.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="UnityEngine.CoreModule">
      <HintPath>..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="1.4\Source\Actors\Actor.cs" />
    <Compile Include="1.4\Source\Actors\AlienRaceOffset.cs" />
    <Compile Include="1.4\Source\Actors\BodyTypeOffset.cs" />
    <Compile Include="1.4\Source\Animations\AnimationStage.cs" />
    <Compile Include="1.4\Source\Animations\Clips\BaseAnimationClip.cs" />
    <Compile Include="1.4\Source\Animations\Clips\PawnAnimationClip.cs" />
    <Compile Include="1.4\Source\Animations\Clips\ThingAnimationClip.cs" />
    <Compile Include="1.4\Source\Animations\Keyframes\Keyframe.cs" />
    <Compile Include="1.4\Source\Animations\Keyframes\PawnKeyframe.cs" />
    <Compile Include="1.4\Source\Animations\Keyframes\ThingKeyframe.cs" />
    <Compile Include="1.4\Source\Comps\CompBodyAnimator.cs" />
    <Compile Include="1.4\Source\Comps\CompProperties_BodyAnimator.cs" />
    <Compile Include="1.4\Source\Comps\CompProperties_ThingAnimator.cs" />
    <Compile Include="1.4\Source\Comps\CompThingAnimator.cs" />
    <Compile Include="1.4\Source\Defs\AnimationDef.cs" />
    <Compile Include="1.4\Source\Extensions\PawnWoundDrawerExtension.cs" />
    <Compile Include="1.4\Source\MainTabWindows\MainTabWindow_OffsetConfigure.cs" />
    <Compile Include="1.4\Source\MainTabWindows\OffsetMainButtonDefOf.cs" />
    <Compile Include="1.4\Source\MainTabWindows\WorldComponent_UpdateMainTab.cs" />
    <Compile Include="1.4\Source\Patches\Harmony_PatchAll.cs" />
    <Compile Include="1.4\Source\Patches\OtherModPatches\HarmonyPatch_AlienRace.cs" />
    <Compile Include="1.4\Source\Patches\OtherModPatches\HarmonyPatch_CSL.cs" />
    <Compile Include="1.4\Source\Patches\OtherModPatches\HarmonyPatch_DontShaveYourHead.cs" />
    <Compile Include="1.4\Source\Patches\OtherModPatches\HarmonyPatch_FacialAnimation.cs" />
    <Compile Include="1.4\Source\Patches\OtherModPatches\HarmonyPatch_HatsDisplaySelection.cs" />
    <Compile Include="1.4\Source\Patches\OtherModPatches\HarmonyPatch_ShowHairWithHats.cs" />
    <Compile Include="1.4\Source\Patches\RimworldPatches\HarmonyPatch_HeadHair.cs" />
    <Compile Include="1.4\Source\Patches\RimworldPatches\HarmonyPatch_PawnRenderer.cs" />
    <Compile Include="1.4\Source\Patches\RimworldPatches\HarmonyPatch_PawnRotation.cs" />
    <Compile Include="1.4\Source\Patches\RimworldPatches\HarmonyPatch_Pawn_DrawTracker.cs" />
    <Compile Include="1.4\Source\Patches\RimworldPatches\HarmonyPatch_SetPawnAnimatable.cs" />
    <Compile Include="1.4\Source\Patches\RimworldPatches\HarmonyPatch_Thing.cs" />
    <Compile Include="1.4\Source\Patches\RJWPatches\HarmonyPatch_PlaySexSounds.cs" />
    <Compile Include="1.4\Source\Patches\RJWPatches\HarmonyPatch_SexTick.cs" />
    <Compile Include="1.4\Source\Patches\RJWPatches\HarmonyPatch_WorkGiverSex.cs" />
    <Compile Include="1.4\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_JoinInBed.cs" />
    <Compile Include="1.4\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseInitiator.cs" />
    <Compile Include="1.4\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs" />
    <Compile Include="1.4\Source\Settings\AnimationSettings.cs" />
    <Compile Include="1.4\Source\Utilities\AnimationUtility.cs" />
    <Compile Include="1.4\Source\Utilities\PatchOperationAddOrReplace.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="1.1\Assemblies\Rimworld-Animations.dll" />
    <Content Include="1.4\Assemblies\Rimworld-Animations.dll" />
    <Content Include="1.4\Defs\AnimationDefs\Animations_Beast.xml" />
    <Content Include="1.4\Defs\AnimationDefs\Animations_Lesbian.xml" />
    <Content Include="1.4\Defs\AnimationDefs\Animations_Masturbate.xml" />
    <Content Include="1.4\Defs\AnimationDefs\Animations_Multi.xml" />
    <Content Include="1.4\Defs\AnimationDefs\Animations_SexToys.xml" />
    <Content Include="1.4\Defs\AnimationDefs\Animations_vanilla.xml" />
    <Content Include="1.4\Defs\AnimationDefs\Animations_Vanilla2.xml" />
    <Content Include="1.4\Defs\AnimationDefs\TemplateAnimation.xml" />
    <Content Include="1.4\Defs\MainTabDefs\MainButtonDef.xml" />
    <Content Include="1.4\Defs\SoundDefs\Sounds_Sex.xml" />
    <Content Include="1.4\Patches\AnimationPatchHSK.xml" />
    <Content Include="1.4\Patches\AnimationPatch_CompBodyAnimator.xml" />
    <Content Include="1.4\Patches\CompatibilityPatch_FacialAnimation.xml" />
    <Content Include="1.4\Patches\CompatibilityPatch_HCSK.xml" />
    <Content Include="1.4\Patches\CompPatches\AutoCleaner.xml" />
    <Content Include="1.4\Patches\CompPatches\CombatExtended.xml" />
    <Content Include="1.4\Patches\CompPatches\ZombieLand.xml" />
    <Content Include="1.4\Patches\RacePatches\Epona race Renaissance.xml" />
    <Content Include="1.4\Patches\RacePatches\Nyaron.xml" />
    <Content Include="1.4\Sounds\Sex\Clap_1.wav" />
    <Content Include="1.4\Sounds\Sex\Clap_2.wav" />
    <Content Include="1.4\Sounds\Sex\Clap_3.wav" />
    <Content Include="1.4\Sounds\Sex\Clap_4.wav" />
    <Content Include="1.4\Sounds\Sex\Clap_5.wav" />
    <Content Include="1.4\Sounds\Sex\Clap_6.wav" />
    <Content Include="1.4\Sounds\Sex\Clap_7.wav" />
    <Content Include="1.4\Sounds\Sex\Clap_8.wav" />
    <Content Include="1.4\Sounds\Sex\cum.wav" />
    <Content Include="1.4\Sounds\Sex\kucyu04.wav" />
    <Content Include="1.4\Sounds\Sex\Slime\Slimy1.wav" />
    <Content Include="1.4\Sounds\Sex\Slime\Slimy2.wav" />
    <Content Include="1.4\Sounds\Sex\Slime\Slimy3.wav" />
    <Content Include="1.4\Sounds\Sex\Slime\Slimy4.wav" />
    <Content Include="1.4\Sounds\Sex\Slime\Slimy5.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_1.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_10.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\suck_2.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_3.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_4.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_5.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_6.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_7.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_8.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Suck_9.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Swallow_1.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Swallow_2.wav" />
    <Content Include="1.4\Sounds\Sex\Suck\Swallow_3.wav" />
    <Content Include="1.4\Textures\UI\MainTab.png" />
    <Content Include="About\About.xml" />
    <Content Include="About\Manifest.xml" />
    <Content Include="Languages\PortugueseBrazilian\DefInjected\MainButtonDef\MainButtonDef.xml" />
    <Content Include="Languages\PortugueseBrazilian\DefInjected\Rimworld_Animations.AnimationDef\Animations_Beast.xml" />
    <Content Include="Languages\PortugueseBrazilian\DefInjected\Rimworld_Animations.AnimationDef\Animations_Lesbian.xml" />
    <Content Include="Languages\PortugueseBrazilian\DefInjected\Rimworld_Animations.AnimationDef\Animations_Multi.xml" />
    <Content Include="Languages\PortugueseBrazilian\DefInjected\Rimworld_Animations.AnimationDef\Animations_vanilla.xml" />
    <Content Include="LoadFolders.xml" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="1.2\" />
  </ItemGroup>
  <ItemGroup>
    <None Include="1.4\Defs\AnimationDefs\AnimationDefs.rar" />
    <None Include="1.4\Patch_HatsDisplaySelection\Patch_HatsDisplaySelection.csproj" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>


code:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29905.134
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rimworld-Animations", "Rimworld-Animations.csproj", "{71B05D71-67B2-4014-82CD-18C20AC0882F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Patch_HatsDisplaySelection", "Patch_HatsDisplaySelection\Patch_HatsDisplaySelection.csproj", "{BA766964-1716-422D-A09E-29426F8EB9D5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Patch_SexToysMasturbation", "Patch_SexToysMasturbation\Patch_SexToysMasturbation.csproj", "{87763712-0536-4D5F-9EAA-520F15D4F84E}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{71B05D71-67B2-4014-82CD-18C20AC0882F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{71B05D71-67B2-4014-82CD-18C20AC0882F}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{71B05D71-67B2-4014-82CD-18C20AC0882F}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{71B05D71-67B2-4014-82CD-18C20AC0882F}.Release|Any CPU.Build.0 = Release|Any CPU
		{BA766964-1716-422D-A09E-29426F8EB9D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{BA766964-1716-422D-A09E-29426F8EB9D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{BA766964-1716-422D-A09E-29426F8EB9D5}.Release|Any CPU.Build.0 = Release|Any CPU
		{87763712-0536-4D5F-9EAA-520F15D4F84E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{87763712-0536-4D5F-9EAA-520F15D4F84E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{87763712-0536-4D5F-9EAA-520F15D4F84E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{87763712-0536-4D5F-9EAA-520F15D4F84E}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {7E01292A-D76F-4CA3-AA64-085B84ECD905}
	EndGlobalSection
EndGlobal


code:
target/
Content/Base/Defs/Generated

repo_name: AsmodeusRex/rjw

path: .gitignore

license: mit


code:
stages:
  - build
  - upload
  - release

variables:
  PACKAGE_NAME: "${CI_PROJECT_ID}-${CI_COMMIT_TAG}"
  PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/release/${CI_COMMIT_TAG}"

build:
  image: "rust:latest"
  stage: build
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - (cd generator; cargo run --locked)
    - echo ${CI_COMMIT_TAG} > VERSION
    - apt-get update && apt-get install -y zip
    - zip -q9r build About Content LoadFolders.xml ReadMe.md changelog.txt VERSION
  artifacts:
    paths:
      - build.zip

upload:
  stage: upload
  image: curlimages/curl:latest
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - |
      curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build.zip "${PACKAGE_REGISTRY_URL}/rjw-race-support.zip"

release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - |
      release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG \
        --assets-link "{\"name\":\"Download Build\",\"url\":\"${PACKAGE_REGISTRY_URL}/rjw-race-support.zip\",\"filepath\":\"/rjw-race-support.zip\"}" \
        --description "Changelog goes here"


code:
{
	"cSpell.enabled": true,
	"cSpell.words": [
		"AACP",
		"Acanthamoeba",
		"aedeagi",
		"Aedeagus",
		"Aerofleet",
		"AEXP",
		"akame",
		"Anthromorphs",
		"Antinium",
		"aome",
		"Apini",
		"Archotech",
		"Argonian",
		"ASMR",
		"Astoriel",
		"Avianmorph",
		"baculum",
		"Boomalope",
		"Bovinemorph",
		"Bumbledrone",
		"Byakhee",
		"Callistan",
		"Callistans",
		"Caninemorph",
		"Cervinemorph",
		"chanceanuses",
		"chancefemale",
		"chancemale",
		"Deathclaw",
		"Donk",
		"Dragomorph",
		"Drow",
		"DRSKT",
		"Eavy",
		"Ecto",
		"eggsize",
		"Elona",
		"Equium",
		"erdelf",
		"Felinemorph",
		"Fert",
		"Fleshbeast",
		"Fogman",
		"Futa",
		"Gallatross",
		"Gigantea",
		"Girthy",
		"Gnollmorph",
		"hana",
		"Hediff",
		"hediffs",
		"hemi",
		"Hisa",
		"Hitech",
		"Hiver",
		"humanlike",
		"Ikquan",
		"Imouto",
		"Insectoid",
		"Kemomimihouse",
		"Kenshi",
		"Kijin",
		"Kikimore",
		"Kilhn",
		"Klickmala",
		"kohime",
		"Kurin",
		"kuro",
		"Lapelli",
		"Lliscean",
		"Lupaios",
		"Meganeura",
		"Megascarab",
		"Megaspider",
		"Metallovore",
		"Miko",
		"Milkable",
		"Mincho",
		"Momu",
		"Moyo",
		"Muffalo",
		"mult",
		"Mustelids",
		"Necro",
		"Neko",
		"Nightling",
		"Nukos",
		"Nyaron",
		"Ooka",
		"Orassan",
		"Orassans",
		"Ovipore",
		"ovipores",
		"oviposition",
		"Pawnbold",
		"Poleepkwa",
		"Protogen",
		"Rabbie",
		"racegroup",
		"racegroups",
		"racepart",
		"raceparts",
		"Rakkle",
		"Ratkin",
		"Revia",
		"selffertilized",
		"Shoggoth",
		"Shoujo",
		"Silkie",
		"siro",
		"Skaven",
		"Skrix",
		"Spelopede",
		"spermatophores",
		"Spiderant",
		"tagify",
		"tendable",
		"Thermadon",
		"thingdef",
		"thingdefs",
		"Thrumbo",
		"Thrumkin",
		"Vulpes",
		"Vulpinemorph",
		"Warg",
		"Warhammer",
		"Xenohumans",
		"Xenomorph",
		"xmls",
		"Yanzihko",
		"Yokai",
		"Yuki",
		"Zabrak"
	],
	"cSpell.maxNumberOfProblems": 1000,
	"cSpell.enableFiletypes": [
		"xml"
	],
	"editor.insertSpaces": false,
	"editor.renderWhitespace": "boundary",
	"files.trimTrailingWhitespace": true,
}


code:
<?xml version="1.0" encoding="utf-8"?>
<ModMetaData>
	<name>RJW Race Support</name>
	<author>AsmodeusRex</author>
	<url></url>
	<supportedVersions>

1.3

1.4

	</supportedVersions>
	<packageId>ASMR.RJW.RaceSupport</packageId>
	<modDependencies>

			<packageId>rim.job.world</packageId>
			<displayName>RJW</displayName>
			<steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
			<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>

	</modDependencies>
	<loadAfter>

erdelf.HumanoidAlienRaces

rim.job.world

	</loadAfter>
	<incompatibleWith>

Mlie.MilkableColonists

	</incompatibleWith>
	<description>
		Provides RJW compatibility for a wide array of mods that add races and animals.
</description>
</ModMetaData>


code:
# VERY WIP

# Issues
https://gitgud.io/AsmodeusRex/rjw-race-support/-/issues
## Create a new issue
The most efficient (and probably fastest) way to get support added for a race you want is to open an issue. Clearly state what mod you want support for, make sure it isn't in the list of supported mods, and put a link to the steam workshop page if it has one.

You should also open an issue if there is a problem with existing race support or the mod in general.
## Solve an issue
Help is of course always appreciated. Make sure you follow the guidelines in the rest of this file.

# Add support for a new mod
There are two methods to add support for a new mod. If the mod isn't doing anything super wild, the first method is preferred. Only use the second method if you can't use the first method.

No matter what method you use, you will need to know the `defName` of the races you are adding support for. This can be found in the XML files of the mod that adds those races. The path to the files you are looking for will be something like: `ModDirectory/1.4/Defs/ThingDefs_Races/animals.xml`.

## Setting up
### Fork the repository
Create a GitGud/Sapphire account. Hit the fork button.
### Installing tools
Install [Visual Studio Code](https://code.visualstudio.com/). This is to make use of the spelling dictionary and other VSCode specific configuration.

Install the VSCode extensions "Code Spell Checker" and "rust-analyzer".

Install [Rust](https://www.rust-lang.org/learn/get-started). Don't worry about learning rust, all you'll be doing in it is data definition from pre-defined templates.

## Method 1: Rust
This method involves adding new entries to the list of parts and races in the Rust source files (`.rs`).
### Racegroups
A racegroup is a group of... races that all share the same characteristics. For example, both a Cassowary and an Ostrich are in the avian animal group.
At the bottom of the file `generator/src/racegroup.rs` (around line 100 or so) you will find the lists of racegroups. Find the racegroup that has the right parts and skin type for each race you want to support. Simply add the `defName` of each race to the appropriate racegroup. Make sure to properly put the `defName` in alphabetical order. The scheme is as follows:
* Vanilla animals (e.g. `Cobra`)
* Mod animals with a mod prefix (e.g. `AA_BloodShrimp`)
* Mod animals without a mod prefix (e.g. `Rakk`)

Remember that each category is in alphabetical order.

There! You're already done. That's all that you need to do for most patches. The generator will do all the rest for you. Go ahead and skip to the PRs section.

If you couldn't find an appropriate racegroup for your race, look again. If you really can't find one, the process is much more complicated.

#### **Adding a new racegroup**
*Actual instructions coming soon*

Copy and paste the right racegroup def/function call into the right place alphabetically. Use `RaceGroup::standard` for humans and `RaceGroup::standard_animal` for animals. Edit the fields.
#### **Tags**
These are the available tags/skin types for a race group.
* Chitin
* Demon
* Feathers
* Fur
* Plant
* Robot
* Scales
* Skin
* Slime

### Parts
Adding to the Rust source files is the only way to create new parts. Technically you can make the xmls by hand, but you have to remember to add a single very rote and repetitive entry to at least 3 different files, and it quickly becomes unmaintainable. If you can't figure out how to use the generator to make what you want, don't hesitate to open an issue.

First, figure out if the part you are adding is for a human or animal, or if it is breasts for either. Make sure you put your part in the correct list, or it won't work.

Next, open generator/src/parts.rs. Find the correct list (starting around line 200), copy and edit the template, making sure to put it in alphabetical order by species name (animal parts are further grouped into mammal and non-mammal).

**Template**

	Part::standard("a", PartType::Penis, "species",
		"Part Description",
		vec!["Tag", "AnotherTag"]
	).unwrap(),

#### **Properties**

Penis:
* Girthy/Thin
* Long/Small
* Artificial
* Flared
* Humanlike (automatically added to the human group, generally don't use)
* Internal (retractable)
* Knotted
* Multiple (has multiple members, such as a tentacle or hemi-penis)
* Prehensile
* Rigid (has a baculum)
* Sheathed
* Solid (is made of a solid inorganic material, such as stone or metal. Not to be confused with rigid)
* Tapered

Hole:
* Loose/Tight
* Deep

Either:
* Barbed
* Glowing
* Resizable (grows or shrinks to fit)
* Ridged (not to be confused with rigid)
* STDImmune (immune to STDs)

# PRs
After you make changes, you need to make a PR. This should get you started: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models.


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
	<rjw.HediffDef_InsectEgg Name="RJW_ImplantLargeEgg" Abstract="True">
		<defName>RJW_InsectLargeEgg</defName>
		Egg
		<hediffClass>rjw.Hediff_InsectEgg</hediffClass>
		<description>Enormous parasitic egg(s) that enter the host's body and feeds off their nutrients until ready to hatch.
Just be glad they don't hatch by bursting out of your chest.</description>
		<defaultLabelColor>(0.8, 0.8, 0.35)</defaultLabelColor>
		<initialSeverity>0.01</initialSeverity>
		<isBad>false</isBad>
		<tendable>false</tendable>
		<eggsize>1</eggsize>
		<selffertilized>false</selffertilized>
		<stages>

				<minSeverity>0.01</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.05</offset>

				</capMods>

				<minSeverity>0.05</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.10</offset>

				</capMods>

				<minSeverity>0.10</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.15</offset>

				</capMods>

				<minSeverity>0.15</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.20</offset>

				</capMods>

				<minSeverity>0.20</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.25</offset>

				</capMods>

				<minSeverity>0.25</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.35</offset>

				</capMods>

				<minSeverity>0.30</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.40</offset>

				</capMods>

				<minSeverity>0.40</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.55</offset>

				</capMods>

				<minSeverity>0.50</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.70</offset>

				</capMods>

				<minSeverity>0.75</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-0.95</offset>

				</capMods>

				<minSeverity>0.9</minSeverity>
				<capMods>

						<capacity>Moving</capacity>
						<offset>-1.15</offset>

				</capMods>

		</stages>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantLargeEgg">
		<defName>RJW_InsectHulkEgg</defName>
		<parentDefs>

VAECaves_InsectoidHulk

		</parentDefs>
		<childrenDefs>

Megascarab

Megascarab

Megascarab

Megascarab

Megascarab

Spelopede

Spelopede

Spelopede

Spelopede

Megaspider

		</childrenDefs>
		<selffertilized>true</selffertilized>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantLargeEgg">
		<defName>RJW_KikimoreEgg</defName>
		<parentDefs>

WMH_KikimoreQueen

		</parentDefs>
		<childrenDefs>

WMAux_KikimoreWarrior

WMAux_KikimoreWorker

		</childrenDefs>
		<selffertilized>true</selffertilized>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_AntiniumEgg</defName>
		<parentDefs>

Ant_AntiniumRace

		</parentDefs>
		<childrenDefs>

Ant_AntiniumRace

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_BeetlePersonEgg</defName>
		<parentDefs>

Alien_Beetle

		</parentDefs>
		<childrenDefs>

Alien_Beetle

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_BlackHiveEgg</defName>
		<parentDefs>

AA_BlackScarab

AA_BlackSpelopede

AA_BlackSpider

AA_MammothWorm

AA_MegaLouse

AA_Ravager

		</parentDefs>
		<childrenDefs>

AA_BlackScarab

AA_BlackSpelopede

AA_BlackSpider

AA_MammothWorm

AA_MegaLouse

AA_Ravager

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_ByakheeEgg</defName>
		<parentDefs>

Cults_ByakheeRace

		</parentDefs>
		<childrenDefs>

Cults_ByakheeRace

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_KlickmalaEgg</defName>
		<parentDefs>

KlickmalaRace

		</parentDefs>
		<childrenDefs>

KlickmalaRace

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_LuciferEgg</defName>
		<parentDefs>

AA_LuciferBug

		</parentDefs>
		<childrenDefs>

AA_LuciferBug

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_MantisEgg</defName>
		<parentDefs>

Alien_Mantis

		</parentDefs>
		<childrenDefs>

Alien_Mantis

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_MeganeuraEgg</defName>
		<parentDefs>

Meganeura

		</parentDefs>
		<childrenDefs>

Meganeura

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_MegascorpionEgg</defName>
		<parentDefs>

ACPMegascorpion

		</parentDefs>
		<childrenDefs>

ACPMegascorpion

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_MetallovoreEgg</defName>
		<parentDefs>

AA_Metallovore

		</parentDefs>
		<childrenDefs>

AA_Metallovore

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_PoleepkwaEgg</defName>
		<parentDefs>

Poleepkwa

		</parentDefs>
		<childrenDefs>

Poleepkwa

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_SkrixEgg</defName>
		<parentDefs>

Skrix_Royal

		</parentDefs>
		<childrenDefs>

Skrix

Skrix_Noble

Skrix_Soldier

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
		<selffertilized>true</selffertilized>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_SpiderantEgg</defName>
		<parentDefs>

Spiderant

		</parentDefs>
		<childrenDefs>

Spiderant

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>

	<rjw.HediffDef_InsectEgg ParentName="RJW_ImplantEgg">
		<defName>RJW_ThermadonEgg</defName>
		<parentDefs>

AA_Thermadon

		</parentDefs>
		<childrenDefs>

AA_Thermadon

		</childrenDefs>
		<UnFertEggDef>RJW_EggInsectUnfertilized</UnFertEggDef>
		<FertEggDef>RJW_EggInsectFertilized</FertEggDef>
	</rjw.HediffDef_InsectEgg>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
	<rjw.HediffDef_PartBase ParentName="NaturalPrivatePartBreast" Name="MammalBreastBase" Abstract="True">

		<DefaultBodyPartList>

Flank

		</DefaultBodyPartList>
		<DefaultBodyPart>Flank</DefaultBodyPart>
	</rjw.HediffDef_PartBase>
</Defs>


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

<Defs>
	<rjw.RacePartDef>
		<defName>Flat_Breasts</defName>
		<hediffName>Breasts</hediffName>
		<fluidType>Milk</fluidType>
		<fluidModifier>1.0</fluidModifier>
		<severityCurve>
			<points>

(1.0, 0.01)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Horny_Penis</defName>
		<hediffName>Penis</hediffName>
		<fluidType>Cum</fluidType>
		<fluidModifier>1.5</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.25)

(0.45, 0.7)

(0.75, 0.9)

(1.0, 1.01)

			</points>
		</severityCurve>
	</rjw.RacePartDef>
	<rjw.RacePartDef>
		<defName>Horny_Vagina</defName>
		<hediffName>Vagina</hediffName>
		<fluidType>Cum</fluidType>
		<fluidModifier>1.5</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.25)

(0.35, 0.7)

(0.75, 0.9)

(1.0, 1.01)

			</points>
		</severityCurve>
	</rjw.RacePartDef>
	<rjw.RacePartDef>
		<defName>Horny_Breasts</defName>
		<hediffName>Breasts</hediffName>
		<fluidType>Milk</fluidType>
		<fluidModifier>2.0</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.25)

(0.3, 0.7)

(0.6, 0.9)

(0.8, 1.01)

(0.99, 1.5)

(1.0, 1.6)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Large_Breasts</defName>
		<hediffName>Breasts</hediffName>
		<fluidType>Milk</fluidType>
		<fluidModifier>1.0</fluidModifier>
		<severityCurve>
			<points>

(0.00001, 0.01)

(0.001, 0.02)

(0.02, 0.20)

(0.12, 0.40)

(0.63, 0.60)

(0.80, 0.80)

(0.90, 1.00)

(0.93, 1.20)

(0.97, 1.40)

(1.0, 1.61)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Petite_Penis</defName>
		<hediffName>Penis</hediffName>
		<fluidType>Cum</fluidType>
		<fluidModifier>1.0</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.01)

(0.20, 0.20)

(0.75, 0.40)

(0.99, 0.60)

(0.995, 0.80)

(1.0, 1.02)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Petite_Vagina</defName>
		<hediffName>Vagina</hediffName>
		<fluidType>Cum</fluidType>
		<fluidModifier>1.0</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.01)

(0.30, 0.20)

(0.75, 0.40)

(0.99, 0.60)

(0.995, 0.80)

(1.0, 1.02)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Petite_Anus</defName>
		<hediffName>Anus</hediffName>
		<severityCurve>
			<points>

(0.01, 0.01)

(0.30, 0.20)

(0.75, 0.40)

(0.99, 0.60)

(0.995, 0.80)

(1.0, 1.02)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Petite_Breasts</defName>
		<hediffName>Breasts</hediffName>
		<fluidType>Milk</fluidType>
		<fluidModifier>1.0</fluidModifier>
		<severityCurve>
			<points>

(0.10, 0.01)

(0.30, 0.02)

(0.65, 0.20)

(0.85, 0.40)

(0.99, 0.60)

(0.995, 0.80)

(0.997, 1.00)

(0.998, 1.20)

(0.999, 1.40)

(1.0, 1.61)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Petite_Canine_Vagina</defName>
		<hediffName>DogVagina</hediffName>
		<fluidType>Cum</fluidType>
		<fluidModifier>1.0</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.01)

(0.25, 0.20)

(0.75, 0.40)

(0.99, 0.60)

(0.995, 0.80)

(1.0, 1.02)

			</points>
		</severityCurve>
	</rjw.RacePartDef>

	<rjw.RacePartDef>
		<defName>Petite_FoxGirl_Vagina</defName>
		<hediffName>Vagina</hediffName>
		<fluidType>Cum</fluidType>
		<fluidModifier>1.1</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.01)

(0.20, 0.20)

(0.75, 0.40)

(0.99, 0.60)

(1.0, 0.80)

			</points>
		</severityCurve>
	</rjw.RacePartDef>
	<rjw.RacePartDef>
		<defName>Petite_FoxGirl_Anus</defName>
		<hediffName>Anus</hediffName>
		<severityCurve>
			<points>

(0.01, 0.01)

(0.20, 0.20)

(0.75, 0.40)

(0.99, 0.60)

(1.0, 0.80)

			</points>
		</severityCurve>
	</rjw.RacePartDef>
	<rjw.RacePartDef>
		<defName>Petite_FoxGirl_Breasts</defName>
		<hediffName>Breasts</hediffName>
		<fluidType>Milk</fluidType>
		<fluidModifier>1.1</fluidModifier>
		<severityCurve>
			<points>

(0.01, 0.01)

(0.19, 0.02)

(0.66, 0.20)

(0.9, 0.40)

(0.96, 0.60)

(0.97, 0.80)

(0.98, 1.00)

(0.99, 1.20)

			</points>
		</severityCurve>
	</rjw.RacePartDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8"?>
<Defs>
	<rjw.RaceGroupDef>
		<defName>NoPartsGroup</defName>
		<raceNames>

AA_Aerofleet

AA_ColossalAerofleet

AA_Eyeling

AA_FungalHusk

AA_InfectedAerofleet

AA_MatureFleshbeast

AA_MycoidColossus

AA_RedSpore

AA_Slurrypede

AA_TetraSlug

AA_WaywardMobileAssembler

AA_Wildpawn

AA_Wildpod

Cults_FormlessSpawnRace

GR_AberrantFleshbeast

GR_Fleshling

GR_FleshMonstrosity

GR_FleshGrowth

GR_FleshFlies

SPBoats_Caravel

SPBoats_FishingBoat

SPBoats_Galleon

SPBoats_PaddleSteamer

SPBoats_RowBoat

WMH_Bearofleet

WMH_Djinn

WMH_Hym

Yokai_HinoKo

Yokai_Hodama

Yokai_Nurikabe

Yokai_Tukumo

Yokai_TukumoAnimal

Alien_Zoltan

		</raceNames>
		<anuses />
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals />
		<tags />
		<hasSingleGender>true</hasSingleGender>
		<hasSexNeed>false</hasSexNeed>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>DemonRace</defName>
		<raceNames>

Alien_BlueOni

Alien_GreenOni

Alien_RedOni

Alien_Zhthyhl

Alien_Slaaneshi

Alien_SlaaPrince

Alien_Daemonette

kohime

MM_Kappa

O21_Alien_Tiefling

O21_FR_Tiefling

Sandy_Devil

WMH_Ekimmara

WMH_Fleder

Yokai_Akaname

Yokai_HanYou

Yokai_Issun

Yokai_Kappa

Yokai_Nurarihyon

Yokai_OKappa

Yokai_TuskSprit

		</raceNames>
		<anuses>

DemonAnus

		</anuses>
		<femaleBreasts>

Breasts

		</femaleBreasts>
		<femaleGenitals>

DemonVagina

		</femaleGenitals>
		<maleBreasts>

Breasts

		</maleBreasts>
		<maleGenitals>

DemonPenis

DemonTentaclePenis

		</maleGenitals>
		<chancemaleGenitals>

0.80

0.20

		</chancemaleGenitals>
		<tags>

Demon

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>GolemRace</defName>
		<raceNames>

Alien_Crystalloid

Crystal_Prism

Crystal_NeutralPrism

Crystal_PrismMini

Crystal_Preserver

Crystal_Guardian

Crystal_Specter

Crystal_GuardianP

Crystal_Colossus

Alien_Rockman

Alien_Crystal

WMH_Golem

		</raceNames>
		<anuses />
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals>

GolemPenis

		</maleGenitals>
		<tags></tags>
		<raceSexDrive>0.8</raceSexDrive>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
		<hasSingleGender>true</hasSingleGender>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>SingleGenderOrcRace</defName>
		<raceNames>

OG_Alien_Grot

OG_Alien_Ork

OG_Cyborg_Ork

		</raceNames>
		<anuses>

OrcAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts>

OrcBreasts

		</maleBreasts>
		<maleGenitals>

OrcPenis

		</maleGenitals>
		<tags>

Skin

		</tags>
		<raceSexDrive>1.3</raceSexDrive>
		<hasSingleGender>true</hasSingleGender>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>SingleGenderUndeadRace</defName>
		<raceNames>

WMH_Wraith

		</raceNames>
		<anuses>

NecroAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts>

NecroBreasts

		</maleBreasts>
		<maleGenitals>

NecroPenis

		</maleGenitals>
		<tags>

Demon

		</tags>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
		<hasSingleGender>true</hasSingleGender>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>SquidRace</defName>
		<raceNames>

O21_Alien_Illithid

O21_FR_Illithid

		</raceNames>
		<anuses>

Anus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts>

FeaturelessChest

		</maleBreasts>
		<maleGenitals>

TentaclePenis

		</maleGenitals>
		<tags>

Skin

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<raceSexDrive>0.8</raceSexDrive>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>ZombieRace</defName>
		<raceNames>

DRSKT_Race_Zombie

ReanimatedCorpse

WoW_Forsaken

WMH_Fogler

WMH_Ghoul

WMH_Nekker

		</raceNames>
		<anuses>

NecroAnus

		</anuses>
		<femaleBreasts>

NecroBreasts

		</femaleBreasts>
		<femaleGenitals>

NecroVagina

		</femaleGenitals>
		<maleBreasts>

NecroBreasts

		</maleBreasts>
		<maleGenitals>

NecroPenis

		</maleGenitals>
		<tags>

Demon

		</tags>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>SimpleRobotPerson</defName>
		<raceNames>

ChjDroid

ChjBattleDroid

Kenshi_Skeleton

Mech_HyperionLoader

O21_Alien_Warforged

O21_FR_Warforged

Battle_Droid

B-1_Droid_Specialist

B-1_Commander_Droid

eAndroid

Super_Battle_Droid

Droidekas

BX_Droid_Commando

IG-100_Magnaguard

T-Series_Tactical_Droid

Super_Tactical_Droid

		</raceNames>
		<anuses />
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals>

HydraulicPenis

		</maleGenitals>
		<tags>

Robot

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<hasSexNeed>false</hasSexNeed>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>AdvancedRobotPerson</defName>
		<raceNames>

GR_Mechamime

FemaleEscortBot

MaleEscortBot

DomestiBot

ChjAndroid

Alien_Engi

		</raceNames>
		<anuses>

BionicAnus

		</anuses>
		<femaleBreasts>

BionicBreasts

		</femaleBreasts>
		<femaleGenitals>

BionicVagina

		</femaleGenitals>
		<maleBreasts>

BionicBreasts

		</maleBreasts>
		<maleGenitals>

BionicPenis

		</maleGenitals>
		<tags>

Robot

		</tags>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>ArchotechRobotPerson</defName>
		<raceNames>

Archorace

GR_ArchotechCentipede

		</raceNames>
		<anuses>

ArchotechAnus

Anus

		</anuses>
		<chanceanuses>

0.25

0.75

		</chanceanuses>
		<femaleBreasts>

ArchotechBreasts

Breasts

		</femaleBreasts>
		<chancefemaleBreasts>

0.25

0.75

		</chancefemaleBreasts>
		<femaleGenitals>

ArchotechVagina

Vagina

		</femaleGenitals>
		<chancefemaleGenitals>

0.25

0.75

		</chancefemaleGenitals>
		<maleBreasts>

ArchotechBreasts

Breasts

		</maleBreasts>
		<chancemaleBreasts>

0.25

0.75

		</chancemaleBreasts>
		<maleGenitals>

ArchotechPenis

Penis

		</maleGenitals>
		<chancemaleGenitals>

0.25

0.75

		</chancemaleGenitals>
		<tags>

Robot

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>ArchotechRobotAnimal</defName>
		<raceNames>

GR_ArchotechCentipede

		</raceNames>
		<anuses>

ArchotechAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals>

ArchotechVagina

		</femaleGenitals>
		<maleBreasts />
		<maleGenitals>

ArchotechPenis

		</maleGenitals>
		<tags>

Robot

		</tags>
		<hasSexNeed>false</hasSexNeed>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>

		<defName>ArthropodAnimalsQueen</defName>
		<raceNames>

AA_BumbledroneQueen

Skrix_Royal

		</raceNames>
		<anuses>

InsectAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals>

OviporeVagina

		</femaleGenitals>
		<maleBreasts />
		<maleGenitals />
		<tags>

Chitin

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<hasPregnancy>true</hasPregnancy>
		<oviPregnancy>true</oviPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>

		<defName>ArthropodAnimalsPrince</defName>
		<raceNames>

AA_BumbledroneHierophant

Kenshi_Hiver_Prince

Kenshi_Fogman_Prince

Kenshi_Hiver_Prince_Southern

		</raceNames>
		<anuses>

InsectAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals>

AedeagusPenis

		</maleGenitals>
		<tags>

Chitin

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>

		<defName>ArthropodAnimalsSterile</defName>
		<raceNames>

AA_Bumbledrone

ACPHaulerAnt

ACPAcidAnt

ACPMegascorpion

Apini

Azuri

Moobee

Kenshi_Hiver_Soldier

Kenshi_Hiver_Worker

Kenshi_Fogman_Soldier

Kenshi_Fogman_Worker

Kenshi_Hiver_Soldier_Southern

Kenshi_Hiver_Worker_Southern

Skrix

Skrix_Noble

Skrix_Soldier

WMAux_KikimoreWarrior

WMAux_KikimoreWorker

		</raceNames>
		<anuses>

InsectAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals />
		<tags>

Chitin

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<hasSexNeed>false</hasSexNeed>
		<hasFertility>false</hasFertility>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>ArthropodOvipositorAnimalSingleGender</defName>
		<raceNames>

BroodLord

Bulwark

Harvester

Prowler

Terrorworm

Visceral

		</raceNames>
		<anuses>

InsectAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals>

OvipositorM

		</maleGenitals>
		<tags>

Chitin

		</tags>
		<oviPregnancy>true</oviPregnancy>
		<ImplantEggs>true</ImplantEggs>
		<raceSexDrive>0.5</raceSexDrive>
		<hasSingleGender>true</hasSingleGender>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>CactoidGroup</defName>
		<raceNames>

AA_Cactipine

AA_Needlepost

AA_Needleroll

Alien_Cactoid

		</raceNames>
		<anuses>

CactoidAnus

		</anuses>
		<femaleBreasts>

CactoidBreasts

		</femaleBreasts>
		<femaleGenitals>

CactoidVagina

		</femaleGenitals>
		<maleBreasts>

CactoidBreasts

		</maleBreasts>
		<maleGenitals>

CactoidPenis

		</maleGenitals>
		<tags>

Plant

		</tags>
		<hasPregnancy>false</hasPregnancy>
		<raceSexDrive>0.5</raceSexDrive>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>EldritchThingGroup</defName>
		<raceNames>

Alien_ElderThing_Race_Standard

ROM_Chthonian

ROM_ChthonianLarva

ROM_Cthulhid

ROM_DarkYoung

ROM_DeepOne

ROM_DeepOneGreat

ROM_MiGo

ROM_Shoggoth

ROM_ShoggothTiny

ROM_ShoggothColossal

ROM_StarVampire

		</raceNames>
		<pawnKindNames>

Alien_ElderThing_Race_Standard

ElderThing_KindBaseInit

ElderThing_KindBase

ElderThing_Colonist

		</pawnKindNames>
		<anuses>

DemonAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals>

DemonVagina

		</femaleGenitals>
		<maleGenitals>

DemonTentaclePenis

		</maleGenitals>
		<maleBreasts />
		<tags>

Demon

		</tags>
		<hasSingleGender>true</hasSingleGender>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>SlimeSingleGenderAnimals</defName>
		<raceNames>

AA_AcanthamoebaGiganteaSmall

AA_AcanthamoebaGiganteaLarge

AA_AcanthamoebaGiganteaHuge

AA_GreenGoo

AA_OcularJelly

AA_RedGoo

AA_TeratogenicOriginator

Mincho_MinchoLatteIsHorse

Mincho_Minchonyang

Mincho_Minmoong

		</raceNames>
		<anuses />
		<femaleBreasts />
		<femaleGenitals />
		<maleGenitals>

SlimeTentacles

		</maleGenitals>
		<maleBreasts />
		<tags>

Slime

		</tags>
		<hasSingleGender>true</hasSingleGender>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>VineAnimals</defName>
		<raceNames>

AA_AnimaColossus

AA_Mantrap

AA_OvergrownColossus

WMH_Leshy

		</raceNames>
		<anuses />
		<femaleBreasts />
		<femaleGenitals>

VinePenis

		</femaleGenitals>
		<maleBreasts />
		<maleGenitals>

VinePenis

		</maleGenitals>
		<tags>

Plant

		</tags>
		<hasPregnancy>false</hasPregnancy>
		<hasSexNeed>false</hasSexNeed>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>AA_ChitinDemonGroup</defName>
		<raceNames>

AA_UnblinkingEye

		</raceNames>
		<anuses />
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals>

DemonTentaclePenis

		</maleGenitals>
		<tags>

Chitin

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<hasPregnancy>false</hasPregnancy>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>AA_FlamingoGroup</defName>
		<raceNames>

AA_FlamingoPhoenix

		</raceNames>
		<anuses>

CloacalAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts />
		<maleGenitals>

CloacalPenis

		</maleGenitals>
		<tags>

Feathers

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<hasPregnancy>false</hasPregnancy>
		<raceSexDrive>0.3</raceSexDrive>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>AA_FissionMiceGroup</defName>
		<raceNames>

AA_FissionMouse

AA_FissionMouseSecond

AA_FissionMouseThird

		</raceNames>
		<anuses>

MammalAnus

		</anuses>
		<femaleBreasts />
		<femaleGenitals />
		<maleBreasts>

MammalBreasts

		</maleBreasts>
		<maleGenitals>

RodentPenis

		</maleGenitals>
		<tags>

Fur

		</tags>
		<hasSingleGender>true</hasSingleGender>
		<hasPregnancy>false</hasPregnancy>
		<raceSexDrive>0.3</raceSexDrive>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>BL_Animals_Canine</defName>
		<raceNames>

Skag

SkagArctic

SkagSpitter

		</raceNames>
		<anuses />
		<femaleBreasts />
		<femaleGenitals>

DogVagina

		</femaleGenitals>
		<maleBreasts />
		<maleGenitals>

DogPenis

		</maleGenitals>
		<tags>

Scale

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>Callistans_Evolved_Wolf_People</defName>
		<raceNames>

Alien_Callistan

		</raceNames>
		<anuses>

Anus

HydraulicAnus

BionicAnus

ArchotechAnus

		</anuses>
		<chanceanuses>

0.75

0.05

0.15

0.02

		</chanceanuses>
		<femaleBreasts>

Breasts

HydraulicBreasts

BionicBreasts

ArchotechBreasts

		</femaleBreasts>
		<chancefemaleBreasts>

0.75

0.05

0.15

0.02

		</chancefemaleBreasts>
		<femaleGenitals>

DogVagina

HydraulicVagina

BionicVagina

ArchotechVagina

		</femaleGenitals>
		<chancefemaleGenitals>

0.75

0.05

0.15

0.02

		</chancefemaleGenitals>
		<maleBreasts>

Breasts

HydraulicBreasts

BionicBreasts

ArchotechBreasts

		</maleBreasts>
		<chancemaleBreasts>

0.75

0.05

0.15

0.02

		</chancemaleBreasts>
		<maleGenitals>

DogPenis

		</maleGenitals>
		<tags>

Fur

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>Oni</defName>
		<raceNames>

AOni

Alien_AncestralAOni

		</raceNames>
		<anuses>

DemonAnus

		</anuses>
		<femaleBreasts>

Breasts

		</femaleBreasts>
		<femaleGenitals>

DemonVagina

		</femaleGenitals>
		<maleBreasts>

Breasts

		</maleBreasts>
		<maleGenitals>

DemonPenis

		</maleGenitals>
		<tags>

Demon

Feathers

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>Oni_Animal</defName>
		<raceNames>

Ornimegalonyx

		</raceNames>
		<anuses>

CloacalAnus

		</anuses>
		<femaleBreasts>

FeaturelessChest

		</femaleBreasts>
		<femaleGenitals>

CloacalVagina

		</femaleGenitals>
		<maleBreasts>

FeaturelessChest

		</maleBreasts>
		<maleGenitals>

CloacalPenis

		</maleGenitals>
		<tags>

Feathers

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>Protogen</defName>
		<raceNames>

Alien_Protogen

Alien_ProtogenNME

		</raceNames>
		<anuses>

Anus

DogAnus

BionicAnus

		</anuses>
		<femaleBreasts>

Breasts

BionicBreasts

		</femaleBreasts>
		<femaleGenitals>

DogVagina

Vagina

BionicVagina

		</femaleGenitals>
		<maleBreasts>

FeaturelessChest

		</maleBreasts>
		<maleGenitals>

DogPenis

Penis

BionicPenis

		</maleGenitals>
		<tags>

Robot

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>Rakkle_Rattlesnake</defName>
		<raceNames>

Rakkle

		</raceNames>
		<anuses>

Anus

		</anuses>
		<femaleBreasts>

Horny_Breasts

		</femaleBreasts>
		<femaleGenitals>

Vagina

		</femaleGenitals>
		<maleBreasts>

Breasts

		</maleBreasts>
		<maleGenitals>

Penis

		</maleGenitals>
		<tags>

Scales

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>ROM_COC_Goat</defName>
		<raceNames>

Cults_BlackGoat

		</raceNames>
		<anuses />
		<femaleBreasts>

UdderBreasts

		</femaleBreasts>
		<femaleGenitals>

DemonVagina

		</femaleGenitals>
		<maleBreasts />
		<maleGenitals>

DemonPenis

		</maleGenitals>
		<tags>

Demon

Fur

		</tags>
	</rjw.RaceGroupDef>

	<rjw.RaceGroupDef>
		<defName>SoS_HologramRJW_Support</defName>
		<raceNames>

SoSHologramRace

		</raceNames>
		<anuses>

GhostAnus

		</anuses>
		<femaleBreasts>

GhostBreasts

		</femaleBreasts>
		<femaleGenitals>

GhostVagina

		</femaleGenitals>
		<maleBreasts>

GhostBreasts

		</maleBreasts>
		<maleGenitals>

GhostPenis

		</maleGenitals>
		<tags>

Robot

		</tags>
	</rjw.RaceGroupDef>
	<hasSexNeed>false</hasSexNeed>
	<hasFertility>false</hasFertility>
	<hasPregnancy>false</hasPregnancy>

	<rjw.RaceGroupDef>
		<defName>Sleneshi_Animals</defName>
		<raceNames>

Fiend

Steed

SteedCovBase

FiendCovBase

		</raceNames>
		<anuses>

Anus

DemonAnus

		</anuses>
		<femaleBreasts>

UdderBreasts

		</femaleBreasts>
		<femaleGenitals>

HorseVagina

DemonVagina

		</femaleGenitals>
		<maleBreasts />
		<maleGenitals>

HorsePenis

DemonPenis

		</maleGenitals>
		<chancemaleGenitals></chancemaleGenitals>
		<tags>

Demon

		</tags>
	</rjw.RaceGroupDef>
</Defs>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
	<Operation Class="PatchOperationFindMod">
		<mods>

Humanoid Alien Races

		</mods>
		<match Class="PatchOperationSequence">
			<success>Always</success>
			<operations>

					<xpath>Defs/AlienRace.ThingDef_AlienRace/alienRace/raceRestriction/whiteApparelList</xpath>
					<value>

AnalPlugExpandable

MAnalPlugSmall

MAnalPlugMedium

MAnalPlugLarge

SAnalPlugSmall

SAnalPlugMedium

SAnalPlugLarge

WAnalPlugSmall

WAnalPlugMedium

WAnalPlugLarge

					</value>

			</operations>
		</match>
	</Operation>
</Patch>


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

	<Operation Class="PatchOperationFindMod">
		<mods>

[SYR] Harpy

		</mods>
		<match Class="PatchOperationSequence">
			<operations>

					<xpath>Defs/AlienRace.ThingDef_AlienRace[defName = "Harpy"]/alienRace/generalSettings/forcedRaceTraitEntries</xpath>
					<value>

							<defName>Rapist</defName>
							<chance>85</chance>

					</value>

			</operations>
		</match>
	</Operation>
</Patch>


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

	<Operation Class="PatchOperationFindMod">
		<mods>

kemomimihouse

		</mods>
		<match Class="PatchOperationFindMod">
			<mods>

GenderBalancer

			</mods>
			<match Class="PatchOperationSequence">
				<operations>

						<xpath>Defs/ThingDef[defName="hana" or defName="kon" or defName="siro" or defName="yuki" or defName="kohime" or defName="kuro" or defName="aome" or defName="akame" or defName="miko"]/race/hasGenders</xpath>

						<xpath>Defs/ThingDef[defName="hana" or defName="kon" or defName="siro" or defName="yuki" or defName="kohime" or defName="kuro" or defName="aome" or defName="akame" or defName="miko"]/comps</xpath>
						<value>

								<maleGenderWeight>0</maleGenderWeight>
								<femaleGenderWeight>1</femaleGenderWeight>
								<noGenderWeight>0</noGenderWeight>

						</value>

				</operations>
			</match>
		</match>
	</Operation>

	<Operation Class="PatchOperationFindMod">
		<mods>

kemomimihouse

		</mods>
		<match Class="PatchOperationSequence">
			<operations>

					<xpath>Defs/ThingDef[defName="hana" or defName="kon" or defName="siro" or defName="miko" or defName="akame" or defName="aome" or defName="kuro" or defName="kohime"]/race/gestationPeriodDays</xpath>
					<value>
						<gestationPeriodDays>40</gestationPeriodDays>
					</value>

					<xpath>Defs/ThingDef[defName="yuki"]/race/gestationPeriodDays</xpath>
					<value>
						<gestationPeriodDays>70</gestationPeriodDays>
					</value>

			</operations>
		</match>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
	<Operation Class="PatchOperationFindMod">
		<mods>

H.P. Lovecraft Storyteller - Remastered

		</mods>
		<match Class="PatchOperationSequence">
			<operations>

					<xpath>Defs/ThingDef[defName = "HPLovecraft_MistCreature"]/race/hasGenders</xpath>

			</operations>
		</match>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
	<Operation Class="PatchOperationFindMod">
		<mods>

Rim of Madness - Vampires

		</mods>
		<match Class="PatchOperationSequence">
			<operations>

					<xpath>/Defs/ThinkTreeDef[defName="ROMV_TemporaryPawnAI_Constant"]/thinkRoot[@Class="ThinkNode_Priority"]/subNodes</xpath>
					<value>

					</value>

			</operations>
		</match>
	</Operation>
</Patch>