mirror of
https://github.com/vegapnk/RJW-Genes.git
synced 2024-08-15 00:23:31 +00:00
Added Elasticity Gene and Zoophile Trait Gene
This commit is contained in:
parent
f17da08394
commit
84c0ab012e
15 changed files with 227 additions and 19 deletions
Binary file not shown.
|
@ -4,30 +4,55 @@
|
|||
<!-- Note: It is very important that rjw_genes_gender has a higher priority than the other genes
|
||||
That way they run in the correct order.
|
||||
If the Gender Change happens after e.g. genitalia change, it will produce errors.
|
||||
|
||||
General Order:
|
||||
1. Gender
|
||||
2. Genitalia Types
|
||||
3. Extra Genitalia
|
||||
4. Genitalia Sizes
|
||||
5. Others
|
||||
-->
|
||||
|
||||
<GeneCategoryDef>
|
||||
<defName>rjw_genes_gender</defName>
|
||||
<label>Gender</label>
|
||||
<displayPriorityInXenotype>20</displayPriorityInXenotype>
|
||||
<displayPriorityInXenotype>21</displayPriorityInXenotype>
|
||||
</GeneCategoryDef>
|
||||
|
||||
<GeneCategoryDef>
|
||||
<defName>rjw_genes_genitalia</defName>
|
||||
<label>Genitalia</label>
|
||||
<displayPriorityInXenotype>16</displayPriorityInXenotype>
|
||||
<defName>rjw_genes_genitalia_type</defName>
|
||||
<label>Genitalia Types</label>
|
||||
<displayPriorityInXenotype>19</displayPriorityInXenotype>
|
||||
</GeneCategoryDef>
|
||||
|
||||
<GeneCategoryDef>
|
||||
<defName>rjw_genes_genitalia_extras</defName>
|
||||
<label>Genitalia Amounts</label>
|
||||
<displayPriorityInXenotype>17</displayPriorityInXenotype>
|
||||
</GeneCategoryDef>
|
||||
|
||||
<GeneCategoryDef>
|
||||
<defName>rjw_genes_genitalia_size</defName>
|
||||
<label>Genitalia Size / Attributes</label>
|
||||
<displayPriorityInXenotype>15</displayPriorityInXenotype>
|
||||
</GeneCategoryDef>
|
||||
|
||||
<GeneCategoryDef>
|
||||
<defName>rjw_genes_breeding</defName>
|
||||
<label>Breeding</label>
|
||||
<displayPriorityInXenotype>15</displayPriorityInXenotype>
|
||||
<displayPriorityInXenotype>13</displayPriorityInXenotype>
|
||||
</GeneCategoryDef>
|
||||
|
||||
<GeneCategoryDef>
|
||||
<defName>rjw_genes_cum</defName>
|
||||
<label>Cum</label>
|
||||
<displayPriorityInXenotype>14</displayPriorityInXenotype>
|
||||
<displayPriorityInXenotype>12</displayPriorityInXenotype>
|
||||
</GeneCategoryDef>
|
||||
|
||||
<GeneCategoryDef>
|
||||
<defName>rjw_damage</defName>
|
||||
<label>Genital Related Damage</label>
|
||||
<displayPriorityInXenotype>11</displayPriorityInXenotype>
|
||||
</GeneCategoryDef>
|
||||
|
||||
</Defs>
|
|
@ -26,7 +26,21 @@
|
|||
<description>Pawns with this gene are able to fertilize eggs with any fertile penis.</description>
|
||||
<iconPath>World/WorldObjects/Expanding/Mechanoids</iconPath>
|
||||
<displayOrderInCategory>53</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_breeding</displayCategory>
|
||||
<displayCategory>rjw_genes_breeding</displayCategory>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<defName>rjw_genes_zoophile</defName>
|
||||
<label>Zoophile</label>
|
||||
<displayCategory>rjw_genes_breeding</displayCategory>
|
||||
<description>Xenotypes with this Gene are Zoophile.</description>
|
||||
<iconPath>Genes/Icons/Placeholder</iconPath>
|
||||
<displayOrderInCategory>54</displayOrderInCategory>
|
||||
<forcedTraits>
|
||||
<li>
|
||||
<def>Zoophile</def>
|
||||
</li>
|
||||
</forcedTraits>
|
||||
</GeneDef>
|
||||
|
||||
</Defs>
|
14
Common/Defs/Genes/GeneDefs_Damage.xml
Normal file
14
Common/Defs/Genes/GeneDefs_Damage.xml
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<GeneDef MayRequire="LustLicentia.RJWLabs">
|
||||
<defName>rjw_genes_elasticity</defName>
|
||||
<label>Elasticity</label>
|
||||
<displayCategory>rjw_damage</displayCategory>
|
||||
<description>This Xenotype cannot get stretched by huge penetrators.</description>
|
||||
<iconPath>Genes/Icons/Placeholder</iconPath>
|
||||
<geneClass>RJW_Genes.Gene_Elasticity</geneClass>
|
||||
<displayOrderInCategory>1</displayOrderInCategory>
|
||||
</GeneDef>
|
||||
|
||||
</Defs>
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<GeneDef Name="GeneExtraGenitaliaBase" Abstract="True">
|
||||
<displayCategory>rjw_genes_genitalia</displayCategory>
|
||||
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
|
||||
</GeneDef>
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<GeneDef Name="GeneGenitaliaSizeBase" Abstract="True">
|
||||
<displayCategory>rjw_genes_genitalia</displayCategory>
|
||||
<displayCategory>rjw_genes_genitalia_size</displayCategory>
|
||||
<!--These Genes need to be loaded quite last, otherwise e.g. genitalia types will re-roll and overrule genitalia size-->
|
||||
</GeneDef>
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<Defs>
|
||||
|
||||
<GeneDef Name="GeneGenitalTypeBase" Abstract="True">
|
||||
<displayCategory>rjw_genes_genitalia</displayCategory>
|
||||
<displayCategory>rjw_genes_genitalia_type</displayCategory>
|
||||
<exclusionTags>
|
||||
<li>GenitalType</li>
|
||||
</exclusionTags>
|
|
@ -26,3 +26,34 @@ Reason: If you go with Full-No-Genitals (No Penis, No Anus, No Breasts, No Vagin
|
|||
however then the RJW base-logic runs the sexualizer.
|
||||
|
||||
**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.
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace RJW_Genes
|
|||
{
|
||||
if (!__result)
|
||||
{
|
||||
__result = GeneUtility.isInsectBreeder(pawn);
|
||||
__result = GeneUtility.IsInsectBreeder(pawn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
38
Source/Genes/Cum/Patch_Cumflation.cs
Normal file
38
Source/Genes/Cum/Patch_Cumflation.cs
Normal file
|
@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Changes LicentiaLabs (if Present) to not cumflate pawns that are cumflation immune.
|
||||
/// This code is exercised / loaded in the HarmonyInit.
|
||||
/// </summary>
|
||||
///
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
35
Source/Genes/Damage/Gene_Elasticity.cs
Normal file
35
Source/Genes/Damage/Gene_Elasticity.cs
Normal file
|
@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 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".
|
||||
/// </summary>
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,6 +29,10 @@
|
|||
<HintPath>..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="LicentiaLabs">
|
||||
<HintPath>..\..\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="RJW">
|
||||
<HintPath>..\..\rjw\1.4\Assemblies\RJW.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
|
@ -60,6 +64,8 @@
|
|||
<Compile Include="Genes\Cum\Gene_VeryMuchCum.cs" />
|
||||
<Compile Include="Genes\Cum\Gene_MuchCum.cs" />
|
||||
<Compile Include="Genes\Cum\Gene_NoCum.cs" />
|
||||
<Compile Include="Genes\Damage\Gene_Elasticity.cs" />
|
||||
<Compile Include="Genes\Cum\Patch_Cumflation.cs" />
|
||||
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraBreasts.cs" />
|
||||
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" />
|
||||
<Compile Include="Genes\ExtraGenitalia\Gene_Futa.cs" />
|
||||
|
|
Loading…
Reference in a new issue