From 84c0ab012ed2c5777136d815c4ca7d74e40f56d7 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Sat, 26 Nov 2022 21:32:32 +0100 Subject: [PATCH] Added Elasticity Gene and Zoophile Trait Gene --- Common/Assemblies/Rjw-Genes.dll | Bin 30208 -> 30720 bytes Common/Defs/Genes/GeneCategories.xml | 37 ++++++++++++++--- Common/Defs/Genes/GeneDefs_Breeding.xml | 16 +++++++- Common/Defs/Genes/GeneDefs_Damage.xml | 14 +++++++ ...ogenes.xml => GeneDefs_ExtraGenitalia.xml} | 2 +- Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml | 2 +- ...ogenes.xml => GeneDefs_GenitaliaTypes.xml} | 2 +- KNOWN_BUGS.md | 33 ++++++++++++++- Source/GeneDefOf.cs | 15 +++++-- Source/Genes/Breeding/PatchPawnExtensions.cs | 2 +- Source/Genes/Cum/Patch_Cumflation.cs | 38 ++++++++++++++++++ Source/Genes/Damage/Gene_Elasticity.cs | 35 ++++++++++++++++ Source/Genes/GeneUtility.cs | 23 ++++++++++- Source/HarmonyInit.cs | 21 +++++++++- Source/Rjw-Genes.csproj | 6 +++ 15 files changed, 227 insertions(+), 19 deletions(-) create mode 100644 Common/Defs/Genes/GeneDefs_Damage.xml rename Common/Defs/Genes/{GeneDefs_ExtraGenitaliaEndogenes.xml => GeneDefs_ExtraGenitalia.xml} (98%) rename Common/Defs/Genes/{GeneDefs_GenitaliaTypeEndogenes.xml => GeneDefs_GenitaliaTypes.xml} (97%) create mode 100644 Source/Genes/Cum/Patch_Cumflation.cs create mode 100644 Source/Genes/Damage/Gene_Elasticity.cs diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index 7502255c50bb30b7737499bc30fb84a799cfe10e..cb0815e7d6545b262da3dbc43381776b231ec24f 100644 GIT binary patch literal 30720 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 literal 30208 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 rjw_genes_gender - 20 + 21 - rjw_genes_genitalia - - 16 + rjw_genes_genitalia_type + + 19 + + + + rjw_genes_genitalia_extras + + 17 + + + + rjw_genes_genitalia_size + + 15 rjw_genes_breeding - 15 + 13 rjw_genes_cum - 14 + 12 + + + + rjw_damage + + 11 \ No newline at end of file diff --git a/Common/Defs/Genes/GeneDefs_Breeding.xml b/Common/Defs/Genes/GeneDefs_Breeding.xml index 14b1be7..793492f 100644 --- a/Common/Defs/Genes/GeneDefs_Breeding.xml +++ b/Common/Defs/Genes/GeneDefs_Breeding.xml @@ -26,7 +26,21 @@ Pawns with this gene are able to fertilize eggs with any fertile penis. World/WorldObjects/Expanding/Mechanoids 53 - rjw_genes_breeding + rjw_genes_breeding + + rjw_genes_zoophile + + rjw_genes_breeding + Xenotypes with this Gene are Zoophile. + Genes/Icons/Placeholder + 54 + +
  • + Zoophile +
  • +
    +
    + \ No newline at end of file diff --git a/Common/Defs/Genes/GeneDefs_Damage.xml b/Common/Defs/Genes/GeneDefs_Damage.xml new file mode 100644 index 0000000..c44e937 --- /dev/null +++ b/Common/Defs/Genes/GeneDefs_Damage.xml @@ -0,0 +1,14 @@ + + + + + rjw_genes_elasticity + + rjw_damage + This Xenotype cannot get stretched by huge penetrators. + Genes/Icons/Placeholder + RJW_Genes.Gene_Elasticity + 1 + + + \ No newline at end of file diff --git a/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml b/Common/Defs/Genes/GeneDefs_ExtraGenitalia.xml similarity index 98% rename from Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml rename to Common/Defs/Genes/GeneDefs_ExtraGenitalia.xml index 703d8db..3459de5 100644 --- a/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml +++ b/Common/Defs/Genes/GeneDefs_ExtraGenitalia.xml @@ -1,7 +1,7 @@ - rjw_genes_genitalia + rjw_genes_genitalia_extras diff --git a/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml b/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml index 41dac59..72d2c53 100644 --- a/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml +++ b/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml @@ -1,7 +1,7 @@ - rjw_genes_genitalia + rjw_genes_genitalia_size diff --git a/Common/Defs/Genes/GeneDefs_GenitaliaTypeEndogenes.xml b/Common/Defs/Genes/GeneDefs_GenitaliaTypes.xml similarity index 97% rename from Common/Defs/Genes/GeneDefs_GenitaliaTypeEndogenes.xml rename to Common/Defs/Genes/GeneDefs_GenitaliaTypes.xml index 39f7f64..b646058 100644 --- a/Common/Defs/Genes/GeneDefs_GenitaliaTypeEndogenes.xml +++ b/Common/Defs/Genes/GeneDefs_GenitaliaTypes.xml @@ -2,7 +2,7 @@ - rjw_genes_genitalia + rjw_genes_genitalia_type
  • GenitalType
  • diff --git a/KNOWN_BUGS.md b/KNOWN_BUGS.md index c190e10..d1153c0 100644 --- a/KNOWN_BUGS.md +++ b/KNOWN_BUGS.md @@ -25,4 +25,35 @@ Error: I added all "no-XXX" genes but my pawn has genitalia on map! Reason: If you go with Full-No-Genitals (No Penis, No Anus, No Breasts, No Vagina) then the pawn spawns without any Genitalia on the map, however then the RJW base-logic runs the sexualizer. -**Workaround**: Have atleast 1 genitalia enabled with Genes, I recommend the anus. \ No newline at end of file +**Workaround**: Have atleast 1 genitalia enabled with Genes, I recommend the anus. + +## Log Pops up for Xenotypes with Female/Male Only Gene + +Error: + +When using a Xenotype with the Female only gene, upon refresh it can open the log with the following (red) statement: + +``` +[RJW] ChangeSex error (PAWNNAME) faction (FACTION). Probably tried to change sex at world gen for royalty implant, skipping +UnityEngine.StackTraceUtility:ExtractStackTrace () +Verse.Log:Error (string) +rjw.ModLog:Error (string) +rjw.GenderHelper:ChangeSex (Verse.Pawn,rjw.GenderHelper/Sex,rjw.GenderHelper/Sex) +rjw.GenderHelper:ChangeSex (Verse.Pawn,System.Action) +RJW_Genes.Gene_FemaleOnly:AdjustPawnToFemale () +RJW_Genes.Gene_FemaleOnly:PostMake () +RimWorld.GeneMaker:MakeGene (Verse.GeneDef,Verse.Pawn) +[... some more ...] +``` + +Reason: + +RJW covers some corner cases when the pawn is changed before creation. + +Current Solution: + +Ignore this. The pawns seem to have the right sex and genitalia, I cannot "catch" the exception as it is only a Log Error. I would need to do harmony patching and ... that seems to be too much. + +Aimed Solution: + +Patch ChangeSex to skip for pawns with the two genes producing this. \ No newline at end of file diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index 2c0b42e..959ff01 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -6,8 +6,10 @@ namespace RJW_Genes [DefOf] public static class GeneDefOf { - public static readonly GeneCategoryDef rjw_genes_genitalia; + public static readonly GeneCategoryDef rjw_genes_genitalia_type; + public static readonly GeneCategoryDef rjw_genes_genitalia_size; public static readonly GeneCategoryDef rjw_genes_gender; + public static readonly GeneCategoryDef rjw_genes_breeding; // Base Genitalia Types public static readonly GeneDef rjw_genes_human_genitalia; @@ -53,14 +55,19 @@ namespace RJW_Genes public static readonly GeneDef rjw_genes_insectincubator; public static readonly GeneDef rjw_genes_insectbreeder; - //Cum + // Cum public static readonly GeneDef rjw_genes_no_cum; public static readonly GeneDef rjw_genes_much_cum; public static readonly GeneDef rjw_genes_very_much_cum; [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_likes_cumflation; - //[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_cumflation_immunity; //Does currently not work like this + [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_cumflation_immunity; //Does currently not work like this - //Reproduction + // Reproduction public static readonly GeneDef rjw_genes_hypersexual; + public static readonly GeneDef rjw_genes_rapist; + public static readonly GeneDef rjw_genes_zoophile; + + // Damage & Side Effects + [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_elasticity; } } diff --git a/Source/Genes/Breeding/PatchPawnExtensions.cs b/Source/Genes/Breeding/PatchPawnExtensions.cs index f3df7a8..be2e2dc 100644 --- a/Source/Genes/Breeding/PatchPawnExtensions.cs +++ b/Source/Genes/Breeding/PatchPawnExtensions.cs @@ -17,7 +17,7 @@ namespace RJW_Genes { if (!__result) { - __result = GeneUtility.isInsectBreeder(pawn); + __result = GeneUtility.IsInsectBreeder(pawn); } } } diff --git a/Source/Genes/Cum/Patch_Cumflation.cs b/Source/Genes/Cum/Patch_Cumflation.cs new file mode 100644 index 0000000..e8c3496 --- /dev/null +++ b/Source/Genes/Cum/Patch_Cumflation.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using rjw; +using RimWorld; +using Verse; +using LicentiaLabs; + +namespace RJW_Genes +{ + /// + /// Changes LicentiaLabs (if Present) to not cumflate pawns that are cumflation immune. + /// This code is exercised / loaded in the HarmonyInit. + /// + /// + class Patch_Cumflation + { + // This patch does not need the normal Harmony Targetting, + // as it needs to be added only on demand (See HarmonyInit.cs) + public static bool Prefix(SexProps props) + { + // Harmony Logic skips the original Method after Prefix when "false" is returned + // See https://harmony.pardeike.net/articles/execution.html + + // We skip the whole Cumflation Logic when the Partner is Cumflation Immune + if (props != null && props.partner != null && GeneUtility.IsCumflationImmune(props.partner)) + { + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/Source/Genes/Damage/Gene_Elasticity.cs b/Source/Genes/Damage/Gene_Elasticity.cs new file mode 100644 index 0000000..b9d3033 --- /dev/null +++ b/Source/Genes/Damage/Gene_Elasticity.cs @@ -0,0 +1,35 @@ +using LicentiaLabs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace RJW_Genes +{ + /// + /// This Gene adds Licentia-Labs Elasticised Hediff to a Pawn. + /// Important: I had a HarmonyPatch first, similar to skipping cumflation, but the Stretching Logic is called quite a lot and for both pawns actually. + /// Hence, I think choosing the Elasticiced Hediff was good as then everything is covered by "Licentia-Logic". + /// + public class Gene_Elasticity : Gene + { + + public override void PostAdd() + { + base.PostAdd(); + this.pawn.health.AddHediff(Licentia.HediffDefs.Elasticised); + } + + public override void PostRemove() + { + Hediff candidate = pawn.health.hediffSet.GetFirstHediffOfDef(Licentia.HediffDefs.Elasticised); + if (candidate != null) + { + pawn.health.RemoveHediff(candidate); + } + base.PostRemove(); + } + } +} diff --git a/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs index 5144aad..44b6e64 100644 --- a/Source/Genes/GeneUtility.cs +++ b/Source/Genes/GeneUtility.cs @@ -1,4 +1,5 @@ -using Verse; +using System; +using Verse; namespace RJW_Genes { @@ -22,7 +23,7 @@ namespace RJW_Genes return pawn.genes.HasGene(GeneDefOf.rjw_genes_insectincubator); } - public static bool isInsectBreeder(Pawn pawn) + public static bool IsInsectBreeder(Pawn pawn) { if (pawn.genes == null) { @@ -40,5 +41,23 @@ namespace RJW_Genes } return MaxEggSize; } + + internal static bool IsElastic(Pawn pawn) + { + if (pawn.genes == null) + { + return false; + } + return pawn.genes.HasGene(GeneDefOf.rjw_genes_elasticity); + } + + public static bool IsCumflationImmune(Pawn pawn) + { + if (pawn.genes == null) + { + return false; + } + return pawn.genes.HasGene(GeneDefOf.rjw_genes_cumflation_immunity); + } } } \ No newline at end of file diff --git a/Source/HarmonyInit.cs b/Source/HarmonyInit.cs index c2f288e..1d44812 100644 --- a/Source/HarmonyInit.cs +++ b/Source/HarmonyInit.cs @@ -1,6 +1,6 @@ using Verse; using HarmonyLib; - +using System; namespace RJW_Genes { @@ -11,6 +11,25 @@ namespace RJW_Genes { Harmony harmony = new Harmony("rjw_genes"); harmony.PatchAll(); + + // Patch Licentia, if Licentia exists + // Logic & Explanation taken from https://rimworldwiki.com/wiki/Modding_Tutorials/Compatibility_with_DLLs + // Adjusted to use ModsConfig (which makes it work, the example above does not run out of the box) + try + { + ((Action)(() => + { + if (ModsConfig.IsActive("LustLicentia.RJWLabs")) + { + // Gene: Cumflation Immunity + harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)), + prefix: new HarmonyMethod(typeof(Patch_Cumflation), nameof(Patch_Cumflation.Prefix))); + } + }))(); + } + catch (TypeLoadException ex) { + // To be expected for people without Licentia Labs + } } } } \ No newline at end of file diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index befe2c2..0582a73 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -29,6 +29,10 @@ ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll False + + ..\..\licentia-labs\Assemblies\LicentiaLabs.dll + False + ..\..\rjw\1.4\Assemblies\RJW.dll False @@ -60,6 +64,8 @@ + +