Added an Unbreakable Gene

This commit is contained in:
Vegapnk 2023-01-06 16:23:13 +01:00
parent 75891ca0b3
commit 8e63e69385
6 changed files with 136 additions and 7 deletions

View file

@ -11,4 +11,18 @@
<displayOrderInCategory>1</displayOrderInCategory>
</GeneDef>
<GeneDef >
<defName>rjw_genes_unbreakable</defName>
<label>Unbreakable</label>
<displayCategory>rjw_genes_damage</displayCategory>
<description>This Gene makes the Carrier unable to get mood or social penalties from being raped and they cannot be broken for a long period of time.</description>
<iconPath>UI/Icons/Rituals/TrialDefend</iconPath>
<displayOrderInCategory>2</displayOrderInCategory>
<!-- Note: This Gene is mostly handled by patching XMLs -->
<geneClass>RJW_Genes.Gene_Unbreakable</geneClass>
<hediffGiversCannotGive>
<li>FeelingBroken</li>
</hediffGiversCannotGive>
</GeneDef>
</Defs>

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="FeelingBroken"]</xpath>
<value>
<nullifyingGenes>
<li>rjw_genes_unbreakable</li>
</nullifyingGenes>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotRaped"]</xpath>
<value>
<nullifyingGenes>
<li>rjw_genes_unbreakable</li>
</nullifyingGenes>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotAnalRaped"]</xpath>
<value>
<nullifyingGenes>
<li>rjw_genes_unbreakable</li>
</nullifyingGenes>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotAnalRapedByFemale"]</xpath>
<value>
<nullifyingGenes>
<li>rjw_genes_unbreakable</li>
</nullifyingGenes>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotRapedUnconscious"]</xpath>
<value>
<nullifyingGenes>
<li>rjw_genes_unbreakable</li>
</nullifyingGenes>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="HateMyRapist"]</xpath>
<value>
<nullifyingGenes>
<li>rjw_genes_unbreakable</li>
</nullifyingGenes>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="AllowedMeToGetRaped"]</xpath>
<value>
<nullifyingGenes>
<li>rjw_genes_unbreakable</li>
</nullifyingGenes>
</value>
</Operation>
</Patch>

View file

@ -67,6 +67,7 @@ namespace RJW_Genes
// Damage & Side Effects
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_elasticity;
public static readonly GeneDef rjw_genes_unbreakable;
// Special
public static readonly GeneDef rjw_genes_orgasm_rush;

View file

@ -10,8 +10,6 @@ namespace RJW_Genes
/// </summary>
public class Gene_Elasticity : Gene
{
private int ticksToReset = RESET_INTERVAL;
private const int RESET_INTERVAL = 60000; // 60k should be 1 day
public override void PostAdd()
@ -26,10 +24,7 @@ namespace RJW_Genes
public override void Tick()
{
base.Tick();
--this.ticksToReset;
if (this.ticksToReset > 0)
return;
this.ticksToReset = RESET_INTERVAL;
if (pawn.IsHashIntervalTick(RESET_INTERVAL))
ResetSeverity();
}

View file

@ -0,0 +1,41 @@
using LicentiaLabs;
using rjw;
using Verse;
namespace RJW_Genes
{
/// <summary>
/// This Gene regularly removes the broken hediff of a pawn.
/// Blocking / Removing thoughts are done in an XML Patch.
/// </summary>
public class Gene_Unbreakable : Gene
{
/// DevNote: I first tried to Harmony-Postfix the AfterSexUtility and never add it - but that failed?
private const int RESET_INTERVAL = 30000; // 30k should be 0.5 day
public override void PostAdd()
{
base.PostAdd();
RemoveBrokenHediff();
}
public override void Tick()
{
base.Tick();
if (pawn.IsHashIntervalTick(RESET_INTERVAL))
RemoveBrokenHediff();
}
private void RemoveBrokenHediff()
{
// Clean-Up of existing feeling brokens
var maybeBrokenHediff = pawn.health.hediffSet.GetFirstHediffOfDef(xxx.feelingBroken);
if (maybeBrokenHediff != null)
{
pawn.health.RemoveHediff(maybeBrokenHediff);
}
}
}
}

View file

@ -67,5 +67,15 @@ namespace RJW_Genes
}
return pawn.genes.HasGene(GeneDefOf.rjw_genes_generous_donor);
}
public static bool IsUnbreakable(Pawn pawn)
{
if (pawn.genes == null)
{
return false;
}
return pawn.genes.HasGene(GeneDefOf.rjw_genes_unbreakable);
}
}
}