diff --git a/1.5/Assemblies/Rimworld-Animations.dll b/1.5/Assemblies/Rimworld-Animations.dll index 292a905..3c23703 100644 Binary files a/1.5/Assemblies/Rimworld-Animations.dll and b/1.5/Assemblies/Rimworld-Animations.dll differ diff --git a/1.5/Defs/AnimationDefs/TestAnimation3.xml b/1.5/Defs/AnimationDefs/TestAnimation3.xml new file mode 100644 index 0000000..b4db1f0 --- /dev/null +++ b/1.5/Defs/AnimationDefs/TestAnimation3.xml @@ -0,0 +1,112 @@ + + + + TestAnimation3 + 400 + False + + +
  • + Root + + Rimworld_Animations.AnimationWorker_KeyframesExtended + +
  • + Fuck + 30 + 90 + East + true +
  • +
  • + 100 + 80 + East + true +
  • +
  • + 200 + 90 + East + true +
  • +
  • + 300 + 80 + East + true +
  • + + + +
  • + Head + + Rimworld_Animations.AnimationWorker_KeyframesExtended + +
  • + 0 + -30 + East + true +
  • + + + +
  • + RenderNodeTag_Knees + + Rimworld_Animations.AnimationWorker_KeyframesExtended + +
  • + 1 + 0 + 0 + true +
  • +
  • + 1 + 200 + 3 + true +
  • +
  • + 1 + 400 + 0 + true +
  • + + + +
  • + RenderNodeTag_Arms + + Rimworld_Animations.AnimationWorker_KeyframesExtended + +
  • + 1 + 0 + 0 + true +
  • + +
  • + 1 + 200 + 3 + true +
  • + +
  • + 1 + 400 + 0 + true +
  • + + + +
    +
    +
    \ No newline at end of file diff --git a/1.5/Defs/AnimationPropDefs/AnimationPropDef_Knees.xml b/1.5/Defs/AnimationPropDefs/AnimationPropDef_Knees.xml new file mode 100644 index 0000000..4e60a75 --- /dev/null +++ b/1.5/Defs/AnimationPropDefs/AnimationPropDef_Knees.xml @@ -0,0 +1,56 @@ + + + + RenderNodeTag_Knees + + + + AnimationProp_Knees + + Knees + Rimworld_Animations.PawnRenderNode_BodyTypeVariants + Rimworld_Animations.PawnRenderNodeWorker_BodyTypeVariants + RenderNodeTag_Knees + False + Root + + Head + True + Skin + 95 + +
  • + Female + TexPathVariants_Knees +
  • +
    +
    +
    + + + RenderNodeTag_Arms + + + + AnimationProp_Arms + + Arms + Rimworld_Animations.PawnRenderNode_BodyTypeVariants + Rimworld_Animations.PawnRenderNodeWorker_BodyTypeVariants + RenderNodeTag_Knees + False + Root + True + Skin + + Body + -1 + +
  • + Female + TexPathVariants_Arms +
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml b/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml index 6be826f..ea2061e 100644 --- a/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml +++ b/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml @@ -10,16 +10,16 @@
  • 3 -
  • TestAnimation1
  • -
  • TestAnimation2
  • +
  • TestAnimation3
  • +
  • TestAnimation3
  • 1 -
  • TestAnimation1
  • -
  • TestAnimation2
  • +
  • TestAnimation3
  • +
  • TestAnimation3
  • @@ -49,7 +49,6 @@
  • Sex_Reverse_Anal
  • Sex_Reverse_Vaginal
  • - diff --git a/1.5/Defs/TexPathVariantsDefs/TexPathVariants_Arms.xml b/1.5/Defs/TexPathVariantsDefs/TexPathVariants_Arms.xml new file mode 100644 index 0000000..d582b7b --- /dev/null +++ b/1.5/Defs/TexPathVariantsDefs/TexPathVariants_Arms.xml @@ -0,0 +1,10 @@ + + + + TexPathVariants_Arms + +
  • AnimationProps/Doggystyle/Doggy_Arms
  • +
    +
    + +
    \ No newline at end of file diff --git a/1.5/Defs/TexPathVariantsDefs/TexPathVariants_Knees.xml b/1.5/Defs/TexPathVariantsDefs/TexPathVariants_Knees.xml new file mode 100644 index 0000000..5f368ee --- /dev/null +++ b/1.5/Defs/TexPathVariantsDefs/TexPathVariants_Knees.xml @@ -0,0 +1,10 @@ + + + + TexPathVariants_Knees + +
  • AnimationProps/Doggystyle/Doggy_Legs
  • +
    +
    + +
    \ No newline at end of file diff --git a/1.5/Source/Comps/CompExtendedAnimator.cs b/1.5/Source/Comps/CompExtendedAnimator.cs index a7c6973..46951c6 100644 --- a/1.5/Source/Comps/CompExtendedAnimator.cs +++ b/1.5/Source/Comps/CompExtendedAnimator.cs @@ -196,10 +196,6 @@ namespace Rimworld_Animations { { PawnRenderNodeProperties props = animationProp.animPropProperties; - if (props.texPath.NullOrEmpty()) - { - props.texPath = "AnimationProps/Banana/Banana"; - } //create new render node PawnRenderNode animRenderNode = (PawnRenderNode)Activator.CreateInstance(props.nodeClass, new object[] { diff --git a/1.5/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/1.5/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs index e464028..3ba2def 100644 --- a/1.5/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs +++ b/1.5/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs @@ -82,8 +82,23 @@ namespace Rimworld_Animations { public static void Prefix(ref JobDriver_SexBaseInitiator __instance) { - + //stop pawn animating AnimationUtility.StopGroupAnimation(__instance.pawn); + + //stop partner animating + if (__instance.Partner is Pawn partner) + { + AnimationUtility.StopGroupAnimation(partner); + } + + //stop partner's other partners (threesome pawns) animating + if (__instance.Partner.jobs.curDriver is JobDriver_SexBaseReciever partnerReceiverJob) + { + foreach(Pawn pawn in partnerReceiverJob.parteners) + { + if (pawn != null) AnimationUtility.StopGroupAnimation(pawn); + } + } } } } diff --git a/1.5/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs b/1.5/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs index e0b115d..703bdcc 100644 --- a/1.5/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs +++ b/1.5/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs @@ -12,6 +12,10 @@ namespace Rimworld_Animations [HarmonyPatch(typeof(JobDriver_SexBaseRecieverRaped), "MakeNewToils")] public class HarmonyPatch_JobDriver_SexBaseReceiverRaped { + /* + * Doesn't work; ienumerables are read-only, can't modify toil + * would need to harmonypatch; stopped partner animating in sexbaseinitiator instead + * public static void Postfix(JobDriver_SexBaseRecieverRaped __instance, ref IEnumerable __result) { //added for sudden end of jobdriver @@ -19,5 +23,7 @@ namespace Rimworld_Animations AnimationUtility.StopGroupAnimation(__instance.pawn); }); } + + */ } } diff --git a/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeProperties_GraphicBodyTypeVariants.cs b/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeProperties_GraphicBodyTypeVariants.cs new file mode 100644 index 0000000..bc21421 --- /dev/null +++ b/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeProperties_GraphicBodyTypeVariants.cs @@ -0,0 +1,27 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace Rimworld_Animations +{ + public class PawnRenderNodeProperties_BodyTypeVariants : PawnRenderNodeProperties_GraphicVariants + { + + public List bodyTypeVariantsDef; + + } + + public class TexPathVariants_BodyType + { + + public BodyTypeDef bodyType; + public TexPathVariantsDef texPathVariantsDef; + + } + + +} diff --git a/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeWorker_GraphicBodyTypeVariants.cs b/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeWorker_GraphicBodyTypeVariants.cs new file mode 100644 index 0000000..ad745b8 --- /dev/null +++ b/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNodeWorker_GraphicBodyTypeVariants.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Rimworld_Animations +{ + public class PawnRenderNodeWorker_BodyTypeVariants : PawnRenderNodeWorker_GraphicVariants + { + //same functionality as graphicvariants worker + //just here for readability + + } +} diff --git a/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNode_GraphicBodyTypeVariants.cs b/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNode_GraphicBodyTypeVariants.cs new file mode 100644 index 0000000..6164782 --- /dev/null +++ b/1.5/Source/PawnRenderNode/GraphicBodyTypeVariants/PawnRenderNode_GraphicBodyTypeVariants.cs @@ -0,0 +1,58 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace Rimworld_Animations +{ + public class PawnRenderNode_BodyTypeVariants : PawnRenderNode_GraphicVariants + { + + protected new PawnRenderNodeProperties_BodyTypeVariants props; + + public PawnRenderNode_BodyTypeVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree) + { + + this.props = (PawnRenderNodeProperties_BodyTypeVariants)props; + + } + + protected override Dictionary GraphicVariantsFor(Pawn pawn) + { + + if (props.bodyTypeVariantsDef == null) + { + Log.ErrorOnce("[Anims] Error: Tried to use BodyTypeVariants node, but bodyTypeVariants weren't given", 211341349); + return null; + } + + //for each different hediff-based texpathvariants, + foreach (TexPathVariants_BodyType texPathVariant_BodyType in props.bodyTypeVariantsDef) + { + if (pawn.story.bodyType == texPathVariant_BodyType.bodyType) + { + //return that specific variant + return GenerateVariants(pawn, texPathVariant_BodyType.texPathVariantsDef); + + } + + } + + //otherwise just use default + return base.GraphicVariantsFor(pawn); + + } + + protected override void EnsureMaterialsInitialized() + { + variants = GraphicVariantsFor(this.tree.pawn); + base.EnsureMaterialsInitialized(); + } + + + } + +} diff --git a/1.5/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNode_GraphicHediffVariants.cs b/1.5/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNode_GraphicHediffVariants.cs index 8d78dca..e73b1cc 100644 --- a/1.5/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNode_GraphicHediffVariants.cs +++ b/1.5/Source/PawnRenderNode/GraphicHediffVariants/PawnRenderNode_GraphicHediffVariants.cs @@ -23,6 +23,12 @@ namespace Rimworld_Animations protected override Dictionary GraphicVariantsFor(Pawn pawn) { + if (props.hediffVariants == null) + { + Log.ErrorOnce("[Anims] Error: Tried to use GraphicHediffVariants node, but hediffVariants weren't given", 231321349); + return null; + } + //for each different hediff-based texpathvariants, foreach (TexPathVariants_Hediff texPathVariant_Hediff in props.hediffVariants) { diff --git a/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs b/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs index da96fe5..9c3cf91 100644 --- a/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs +++ b/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs @@ -40,6 +40,7 @@ namespace Rimworld_Animations && extendedAnimWorker.TexPathVariantAtTick(node.tree.AnimationTick) != null) { Material materialVariant = GetMaterialVariant(nodeWithGraphicVariants, parms, (int)extendedAnimWorker.TexPathVariantAtTick(node.tree.AnimationTick)); + if (materialVariant != null) { return materialVariant; } @@ -52,11 +53,11 @@ namespace Rimworld_Animations public virtual Material GetMaterialVariant(PawnRenderNode_GraphicVariants node, PawnDrawParms parms, int variant) { - Material material = node.getGraphicVariant(variant).NodeGetMat(parms); + Material material = node.getGraphicVariant(variant)?.NodeGetMat(parms); if (material == null) return null; - if (material != null && !parms.Portrait && parms.flags.FlagSet(PawnRenderFlags.Invisible)) + if (!parms.Portrait && parms.flags.FlagSet(PawnRenderFlags.Invisible)) { material = InvisibilityMatPool.GetInvisibleMat(material); } diff --git a/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNode_GraphicVariants.cs b/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNode_GraphicVariants.cs index 24a74d6..da09317 100644 --- a/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNode_GraphicVariants.cs +++ b/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNode_GraphicVariants.cs @@ -16,9 +16,8 @@ namespace Rimworld_Animations public Graphic getGraphicVariant(int variant) { - if (!variants.ContainsKey(variant)) + if (variants == null || !variants.ContainsKey(variant)) { - Log.ErrorOnce("[Anims] Error: tried to get key from variants that doesn't exist; key = " + variant, 2043428111); return null; } @@ -45,17 +44,21 @@ namespace Rimworld_Animations protected virtual Dictionary GraphicVariantsFor(Pawn pawn) { + if (props.texPathVariantsDef == null) + { + return null; + } + return GenerateVariants(pawn, props.texPathVariantsDef); } + //used by all, including base classes, to create texPathVariants for pawn protected Dictionary GenerateVariants(Pawn pawn, TexPathVariantsDef texPathVariants) { Dictionary variantGraphics = new Dictionary(); - if (texPathVariants == null) return variantGraphics; - //for each graphic variant for (int i = 0; i < texPathVariants.variants.Count; i++) { diff --git a/1.5/Textures/AnimationProps/Doggystyle/Doggy_Arms_north.png b/1.5/Textures/AnimationProps/Doggystyle/Doggy_Arms_north.png new file mode 100644 index 0000000..ecf9622 Binary files /dev/null and b/1.5/Textures/AnimationProps/Doggystyle/Doggy_Arms_north.png differ diff --git a/1.5/Textures/AnimationProps/Doggystyle/Doggy_Legs_north.png b/1.5/Textures/AnimationProps/Doggystyle/Doggy_Legs_north.png new file mode 100644 index 0000000..1da02fc Binary files /dev/null and b/1.5/Textures/AnimationProps/Doggystyle/Doggy_Legs_north.png differ diff --git a/Languages/ChineseSimplified/Keyed/RJWAnimations-LanguageData.xml b/Languages/ChineseSimplified/Keyed/RJWAnimations-LanguageData.xml new file mode 100644 index 0000000..01c1efe --- /dev/null +++ b/Languages/ChineseSimplified/Keyed/RJWAnimations-LanguageData.xml @@ -0,0 +1,22 @@ + + + + + RJW Animation Settings + 启用声音覆盖 + 控制生殖器旋转 + 启用高潮颤抖 + 启用强奸颤动 + 性爱时启用心形 + 播放非性行为的动画 (牵手、亲热) + 启用动画管理器选项卡 + 颤抖/颤动强度 (默认为 2): + 调试模式 + + + Animation Manager + 警告--一般情况下,你不想更改人类偏移值,只想更改外星種族偏移值或动物偏移值 + 将偏移值复制到剪贴板 + 将偏移值粘贴到 OffsetDef 中,或在 Discord 中共享 + + \ No newline at end of file diff --git a/Languages/ChineseTraditional/Keyed/RJWAnimations-LanguageData.xml b/Languages/ChineseTraditional/Keyed/RJWAnimations-LanguageData.xml new file mode 100644 index 0000000..413ee6e --- /dev/null +++ b/Languages/ChineseTraditional/Keyed/RJWAnimations-LanguageData.xml @@ -0,0 +1,22 @@ + + + + + RJW Animation Settings + 啟用聲音覆蓋 + 控制生殖器旋轉 + 啟用高潮顫抖 + 啟用強姦顫動 + 性愛時啟用心形 + 播放非性行為的動畫 (牽手、親熱) + 啟用動畫管理器選項卡 + 顫抖/顫動強度 (預設為 2): + 除錯模式 + + + Animation Manager + 警告--一般情況下,你不想更改人類偏移值,只想更改外星種族偏移值或動物偏移值 + 將偏移值複製到剪貼板 + 將偏移值黏貼到 OffsetDef 中,或在 Discord 中共享 + + \ No newline at end of file diff --git a/Rimworld-Animations.csproj b/Rimworld-Animations.csproj index a57ed97..70e188e 100644 --- a/Rimworld-Animations.csproj +++ b/Rimworld-Animations.csproj @@ -118,6 +118,9 @@ + + + @@ -136,6 +139,8 @@ + + @@ -144,6 +149,8 @@ + + @@ -188,6 +195,8 @@ + +