diff --git a/1.1/Assemblies/Rimworld-Animations.dll b/1.1/Assemblies/Rimworld-Animations.dll index 122c545..9aa60b5 100644 Binary files a/1.1/Assemblies/Rimworld-Animations.dll and b/1.1/Assemblies/Rimworld-Animations.dll differ diff --git a/Defs/AnimationDefs/Animations_Beast.xml b/Defs/AnimationDefs/Animations_Beast.xml index e8dc8ad..322f0b6 100644 --- a/Defs/AnimationDefs/Animations_Beast.xml +++ b/Defs/AnimationDefs/Animations_Beast.xml @@ -21,6 +21,7 @@
  • Wolf_Arctic
  • true + true diff --git a/Defs/AnimationDefs/Animations_Lesbian.xml b/Defs/AnimationDefs/Animations_Lesbian.xml index 5b891ed..4ca9c9c 100644 --- a/Defs/AnimationDefs/Animations_Lesbian.xml +++ b/Defs/AnimationDefs/Animations_Lesbian.xml @@ -13,6 +13,7 @@
  • Human
  • true + true
  • Vagina
  • diff --git a/Defs/AnimationDefs/Animations_Multi.xml b/Defs/AnimationDefs/Animations_Multi.xml index d483d10..325e36c 100644 --- a/Defs/AnimationDefs/Animations_Multi.xml +++ b/Defs/AnimationDefs/Animations_Multi.xml @@ -19,12 +19,14 @@
  • Human
  • true + true
  • Human
  • true + true diff --git a/Defs/AnimationDefs/Animations_vanilla.xml b/Defs/AnimationDefs/Animations_vanilla.xml index 24f8253..6375282 100644 --- a/Defs/AnimationDefs/Animations_vanilla.xml +++ b/Defs/AnimationDefs/Animations_vanilla.xml @@ -22,6 +22,7 @@
  • Human
  • true + true @@ -463,12 +464,14 @@
  • Human
  • + true
  • Human
  • true + true @@ -852,7 +855,7 @@ ReverseStandAndCarry - + true
  • Anal
  • @@ -870,6 +873,7 @@
  • Human
  • + true true @@ -1950,6 +1954,574 @@
    + + Cowgirl + + true + +
  • Anal
  • +
  • Vaginal
  • +
    + +
  • + + +
  • Human
  • + + true + true + +
  • + +
  • Human
  • + + true + +
    + + +
  • + Slow_Fuck + true + 1340 + 0 + +
  • + + +
  • + 16 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 17 + 3.5 + 0 + -0.03 + 0.624 + 2 + 2 + -0.02 +
  • +
  • + 16 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 17 + -3.5 + 0 + 0.03 + 0.624 + 2 + 2 + -0.02 +
  • +
  • + 1 + Fuck + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + +
  • + 16 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 17 + 3.5 + 0 + -0.03 + 0.624 + 2 + 2 + -0.02 +
  • +
  • + 16 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 17 + -3.5 + 0 + 0.03 + 0.624 + 2 + 2 + -0.02 +
  • +
  • + 1 + Fuck + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + + +
  • + 33 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 33 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 1 + Fuck + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + +
  • + 33 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 33 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 1 + Fuck + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + + +
  • + LayingPawn + +
  • + 33 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • +
  • + 33 + 180 + 180 + 0 + -0.213 + 2 + 2 + 0.045 +
  • +
  • + 1 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • + + + + +
  • + Fast_Fuck + true + 780 + 0 + +
  • + +
  • + 13 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 13 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 1 + Fuck + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + + +
  • + LayingPawn + +
  • + 13 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • +
  • + 13 + 180 + 180 + 0 + -0.213 + 2 + 2 + 0.045 +
  • +
  • + 1 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • + + + + +
  • + Cum + true + 594 + 0 + +
  • + +
  • + 10 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 10 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 1 + Fuck + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + +
  • + 10 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 10 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 1 + Fuck + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + +
  • + 10 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 10 + 0 + 0 + 0 + 0.694 + 2 + 2 + -0.03 +
  • +
  • + 45 + Cum + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • +
  • + 40 + 0 + 0 + 0 + 0.534 + 2 + 2 + 0 +
  • +
  • + 1 + 0 + 0 + 0 + 0.554 + 2 + 2 + 0 +
  • + + +
  • + LayingPawn + +
  • + 10 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • +
  • + 10 + 180 + 180 + 0 + -0.213 + 2 + 2 + 0.045 +
  • +
  • + 1 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • + +
  • + 10 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • +
  • + 10 + 180 + 180 + 0 + -0.213 + 2 + 2 + 0.045 +
  • +
  • + 1 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • + +
  • + 10 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • +
  • + 10 + 180 + 180 + 0 + -0.213 + 2 + 2 + 0.045 +
  • +
  • + 45 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • +
  • + 40 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • +
  • + 1 + 180 + 180 + 0 + -0.263 + 2 + 2 + 0 +
  • + + + + +
    + +
    + diff --git a/Source/Actors/Actor.cs b/Source/Actors/Actor.cs index 953342f..5ab1736 100644 --- a/Source/Actors/Actor.cs +++ b/Source/Actors/Actor.cs @@ -10,7 +10,7 @@ namespace Rimworld_Animations { public List defNames; public List requiredGenitals; public List raceOffsets; - public bool activeRole = false; + public bool initiator = false; public string gender; public bool isFucking = false; public bool isFucked = false; diff --git a/Source/AnimationUtility.cs b/Source/AnimationUtility.cs index 1332e11..488fd8b 100644 --- a/Source/AnimationUtility.cs +++ b/Source/AnimationUtility.cs @@ -46,10 +46,11 @@ namespace Rimworld_Animations { if (!x.actors[i].defNames.Contains(localParticipants[i].def.defName)) { if (rjw.RJWSettings.DevMode) { - Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is not "); + 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) { - Log.Message(defname + ", "); + animInfo += defname + ", "; } + Log.Message(animInfo); } return false; @@ -67,9 +68,10 @@ namespace Rimworld_Animations { //TESTING ANIMATIONS ONLY REMEMBER TO COMMENT OUT BEFORE PUSH /* - if (x.defName != "ReverseStandAndCarry") + if (x.defName != "Cowgirl") return false; - */ + */ + if (x.actors[i].isFucking && !rjw.xxx.can_fuck(localParticipants[i])) { Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't fuck"); @@ -83,19 +85,51 @@ namespace Rimworld_Animations { } return true; }); - List optionsWithSexType = options.ToList().FindAll(x => x.sexTypes.Contains(sexType)); + List optionsWithSexTypeAndInitiator = optionsWithSexType.FindAll(x => { + bool initiatorsAlignWithSexType = true; + for (int i = 0; i < x.actors.Count; i++) { + + //if the animation not for initiators, but an initiator is playing it + + if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) { + initiatorsAlignWithSexType = false; + } + } + return initiatorsAlignWithSexType; + }); + List optionsWithInitiator = options.ToList().FindAll(x => { + bool initiatorsAlignWithSexType = true; + for (int i = 0; i < x.actors.Count; i++) { + + //if the animation not for initiators, but an initiator is playing it + + if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) { + initiatorsAlignWithSexType = false; + } + } + return initiatorsAlignWithSexType; + }); + + + if (optionsWithSexTypeAndInitiator.Any()) { + Log.Message("Selecting animation for rjwSexType " + sexType.ToStringSafe() + " and initiators..."); + return optionsWithSexType.RandomElement(); + } if (optionsWithSexType.Any()) { Log.Message("Selecting animation for rjwSexType " + sexType.ToStringSafe() + "..."); return optionsWithSexType.RandomElement(); } + if(optionsWithInitiator.Any()) { + Log.Message("Selecting animation for initiators..."); + } + if (options != null && options.Any()) { Log.Message("Randomly selecting animation..."); return options.RandomElement(); } - else return null; } diff --git a/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs index 15611d9..5f19afb 100644 --- a/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs +++ b/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs @@ -41,6 +41,8 @@ namespace Rimworld_Animations { } else if (__instance is JobDriver_Masturbate_Bed) bed = (__instance as JobDriver_Masturbate_Bed).Bed; + else if (__instance is JobDriver_RapeComfortPawn || __instance is JobDriver_Breeding) + bed = (__instance?.Partner?.jobs?.curDriver as JobDriver_Sex)?.pBed; if ((__instance.Target as Pawn)?.jobs?.curDriver is JobDriver_SexBaseReciever) {