mirror of
https://github.com/vegapnk/RJW-Genes.git
synced 2024-08-15 00:23:31 +00:00
Added two genes for steal and swap genes on sex
This commit is contained in:
parent
b15f0c4d56
commit
b12e9afbc0
8 changed files with 192 additions and 3 deletions
|
@ -68,7 +68,7 @@ but they are meant mostly to have infectors immune against their own diseases.
|
|||
|
||||
**Additions:**
|
||||
|
||||
- Passive Gene: *Genetic Disease Immunity* - cannot get infected by any genetic diseases, and won't be affected by some other genes (see relevant genes)
|
||||
- Passive Gene: Genetic Disease Immunity. cannot get infected by any genetic diseases, and won't be affected by some other genes (see relevant genes)
|
||||
- Disease Gene: Vulnerability. Pawn is likelier to be raped
|
||||
- Disease Gene: Infectious Hypersexuality
|
||||
- Disease Gene: Infectious Homosexuality & Bisexuality
|
||||
|
@ -78,6 +78,8 @@ but they are meant mostly to have infectors immune against their own diseases.
|
|||
- Disease Gene: Size Blinded. Pawns have a higher chance for hooking up with pawns with a big cock, lower chance for small cocks.
|
||||
- Infector Gene: Genetic Stretcher. Pawns can infect other pawns with *Size Blinded*
|
||||
- Gene: Hardwired Progenity. Pawns with this get a malus on having no-children, and bonus on having a lot.
|
||||
- Gene: Sexual Genetic Swap. Pawns have a chance to switch a random gene with their sexpartner.
|
||||
- (Archite) Gene: Sexual Genetic Thief. Pawns have a chance to steal a gene from their sexpartner. Genetic Disease Immunity shields against this.
|
||||
- Pawns will have negative thoughts about pawns with more genetic diseases than themselves.
|
||||
|
||||
**Fixes:**
|
||||
|
|
|
@ -140,7 +140,7 @@
|
|||
|
||||
<GeneDef ParentName="SpecialBase">
|
||||
<defName>rjw_genes_sex_tamer</defName>
|
||||
<label>Sexual Tamer</label>
|
||||
<label>sexual tamer</label>
|
||||
<labelShortAdj>sextamer</labelShortAdj>
|
||||
<description>Bestiality has a chance to tame animals or advance their training.</description>
|
||||
<iconPath>Genes/Icons/RJW_Genes_SexualTamer</iconPath>
|
||||
|
@ -149,4 +149,35 @@
|
|||
<biostatMet>-1</biostatMet>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef ParentName="SpecialBase">
|
||||
<defName>rjw_genes_sexual_genetic_swap</defName>
|
||||
<label>sexual genetic swap</label>
|
||||
<description>Carriers with this gene may switch a gene with their sex-partner. Switched Genes are always endogenes.</description>
|
||||
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath>
|
||||
<displayOrderInCategory>20</displayOrderInCategory>
|
||||
<biostatCpx>3</biostatCpx>
|
||||
<biostatMet>0</biostatMet>
|
||||
<modExtensions>
|
||||
<li Class="RJW_Genes.ChanceExtension">
|
||||
<chance>0.1</chance>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef ParentName="SpecialBase">
|
||||
<defName>rjw_genes_sexual_genetic_thief</defName>
|
||||
<label>sexual gene thief</label>
|
||||
<description>Carriers with this gene may steal a gene from their sex-partner. Stolen genes are always xenogenes.</description>
|
||||
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath>
|
||||
<displayOrderInCategory>21</displayOrderInCategory>
|
||||
<biostatCpx>5</biostatCpx>
|
||||
<biostatMet>-2</biostatMet>
|
||||
<biostatArc>1</biostatArc>
|
||||
<modExtensions>
|
||||
<li Class="RJW_Genes.ChanceExtension">
|
||||
<chance>0.2</chance>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
</Defs>
|
15
Source/Common/Defs/ChanceExtension.cs
Normal file
15
Source/Common/Defs/ChanceExtension.cs
Normal file
|
@ -0,0 +1,15 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
public class ChanceExtension : DefModExtension
|
||||
{
|
||||
public float chance;
|
||||
}
|
||||
|
||||
}
|
|
@ -105,6 +105,8 @@ namespace RJW_Genes
|
|||
public static readonly GeneDef rjw_genes_hormonal_saliva;
|
||||
public static readonly GeneDef rjw_genes_cocoonweaver;
|
||||
public static readonly GeneDef rjw_genes_sex_tamer;
|
||||
public static readonly GeneDef rjw_genes_sexual_genetic_swap;
|
||||
public static readonly GeneDef rjw_genes_sexual_genetic_thief;
|
||||
|
||||
// Cosmetic
|
||||
public static readonly GeneDef rjw_genes_succubus_tail;
|
||||
|
|
69
Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs
Normal file
69
Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs
Normal file
|
@ -0,0 +1,69 @@
|
|||
using HarmonyLib;
|
||||
using rjw;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
|
||||
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
||||
public class Patch_GeneticSexSwap
|
||||
{
|
||||
public static void Postfix(SexProps props)
|
||||
{
|
||||
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Pawn pawn = props.pawn;
|
||||
Pawn partner = props.partner;
|
||||
|
||||
if (pawn.genes == null || partner.genes == null) return;
|
||||
|
||||
// If both have the swap gene, nothing happens
|
||||
if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_swap)
|
||||
&& GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_swap))
|
||||
return;
|
||||
// If neither has the swap gene, nothing happens
|
||||
if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_swap)
|
||||
&& !GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_swap))
|
||||
return;
|
||||
|
||||
ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_swap.GetModExtension<ChanceExtension>();
|
||||
if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance)
|
||||
SwapOneRandomGene(pawn, partner);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes a random gene from one pawn and adds it too the other as xenogene.
|
||||
/// The "gene swap" gene cannot be swapped!
|
||||
/// </summary>
|
||||
private static void SwapOneRandomGene(Pawn a, Pawn b, bool AddAsXenogene = true)
|
||||
{
|
||||
|
||||
var geneFromA = a.genes.GenesListForReading
|
||||
.Where(gene => a.genes.HasActiveGene(gene.def))
|
||||
.Where(gene => gene.def != GeneDefOf.rjw_genes_sexual_genetic_swap)
|
||||
.RandomElement();
|
||||
var geneFromB = b.genes.GenesListForReading
|
||||
.Where(gene => b.genes.HasActiveGene(gene.def))
|
||||
.Where(gene => gene.def != GeneDefOf.rjw_genes_sexual_genetic_swap)
|
||||
.RandomElement();
|
||||
|
||||
if (geneFromA == null || geneFromB == null) return;
|
||||
|
||||
ModLog.Debug($"Sexual Genetic Swap: Swapping {geneFromA.def} from {a} with {geneFromB.def} from {b}");
|
||||
|
||||
a.genes.AddGene(geneFromB.def, AddAsXenogene);
|
||||
b.genes.AddGene(geneFromA.def, AddAsXenogene);
|
||||
a.genes.RemoveGene(geneFromA);
|
||||
b.genes.RemoveGene(geneFromB);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
68
Source/Genes/Special/Patches/Patch_GeneticSexThief.cs
Normal file
68
Source/Genes/Special/Patches/Patch_GeneticSexThief.cs
Normal file
|
@ -0,0 +1,68 @@
|
|||
using HarmonyLib;
|
||||
using rjw;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
|
||||
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
||||
public class Patch_GeneticSexThief
|
||||
{
|
||||
public static void Postfix(SexProps props)
|
||||
{
|
||||
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Pawn pawn = props.pawn;
|
||||
Pawn partner = props.partner;
|
||||
|
||||
if (pawn.genes == null || partner.genes == null) return;
|
||||
|
||||
// If both have the swap gene, nothing happens
|
||||
if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_thief)
|
||||
&& GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_thief))
|
||||
return;
|
||||
|
||||
if (GeneUtility.HasGeneNullCheck(pawn,GeneDefOf.rjw_genes_sexual_genetic_thief) &&
|
||||
!GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_genetic_disease_immunity))
|
||||
{
|
||||
ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_thief.GetModExtension<ChanceExtension>();
|
||||
if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance)
|
||||
StealRandomGene(pawn, partner);
|
||||
}
|
||||
|
||||
if (GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_thief) &&
|
||||
!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_genetic_disease_immunity))
|
||||
{
|
||||
ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_thief.GetModExtension<ChanceExtension>();
|
||||
if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance)
|
||||
StealRandomGene(partner, pawn);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes a random gene from one pawn and adds it too the other as xenogene.
|
||||
/// </summary>
|
||||
private static void StealRandomGene(Pawn stealer, Pawn victim, bool AddAsXenogene = true)
|
||||
{
|
||||
var stolenGene = victim.genes.GenesListForReading
|
||||
.Where(gene => victim.genes.HasActiveGene(gene.def))
|
||||
.RandomElement();
|
||||
|
||||
if (stolenGene == null) return;
|
||||
|
||||
ModLog.Debug($"Sexual Gene Thief: {stealer} steals {stolenGene.def} from {victim}");
|
||||
|
||||
stealer.genes.AddGene(stolenGene.def, AddAsXenogene);
|
||||
victim.genes.RemoveGene(stolenGene);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -12,7 +12,6 @@ namespace RJW_Genes
|
|||
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
||||
public class Patch_HormonalSaliva
|
||||
{
|
||||
// TODO: Reduce to 0.02 after debug.
|
||||
const float SIZE_INCREMENT_FALLBACK = 0.02f;
|
||||
const float MAX_BODY_SIZE_FALLBACK = 2.5f;
|
||||
const float CUM_MULTIPLIER_FALLBACK = 1.05f;
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
<Compile Include="Animal_Inheritance\Settings\RJW_BGSSettings.cs" />
|
||||
<Compile Include="Animal_Inheritance\Settings\RJW_BGSSettingsController.cs" />
|
||||
<Compile Include="Animal_Inheritance\Defs\BestialityGeneInheritanceDef.cs" />
|
||||
<Compile Include="Common\Defs\ChanceExtension.cs" />
|
||||
<Compile Include="Common\Defs\DistanceExtension.cs" />
|
||||
<Compile Include="Common\Defs\ModExtensionHelper.cs" />
|
||||
<Compile Include="Common\Defs\TickBasedChanceExtension.cs" />
|
||||
|
@ -188,6 +189,8 @@
|
|||
<Compile Include="Genes\Special\Defs\AgeTransferExtension.cs" />
|
||||
<Compile Include="Genes\Special\Defs\HormonalSalivaExtension.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_AgeDrain.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_GeneticSexSwap.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_GeneticSexThief.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_HormonalSaliva.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_OrgasmMytosis.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_SexualTamer.cs" />
|
||||
|
|
Loading…
Reference in a new issue