mirror of
https://github.com/vegapnk/RJW-Genes.git
synced 2024-08-15 00:23:31 +00:00
Compare commits
3 commits
59412ae330
...
f1e2826f35
Author | SHA1 | Date | |
---|---|---|---|
|
f1e2826f35 | ||
|
2a7a1be7e1 | ||
|
d00834049b |
10 changed files with 164 additions and 33 deletions
|
@ -8,6 +8,7 @@
|
||||||
- Addition to InsectIncubator: Now fertilizes eggs once placed inside a host, and breeds out eggs twice as fast.
|
- Addition to InsectIncubator: Now fertilizes eggs once placed inside a host, and breeds out eggs twice as fast.
|
||||||
- Many new icons
|
- Many new icons
|
||||||
- Custom background icons when Vanilla-Expanded-Framework is loaded
|
- Custom background icons when Vanilla-Expanded-Framework is loaded
|
||||||
|
- Sexual Age Drainer & Youth Fountain now change age as configured in XML
|
||||||
|
|
||||||
**Internal:**
|
**Internal:**
|
||||||
|
|
||||||
|
@ -20,6 +21,7 @@
|
||||||
- Cockeater now leaves a bite wound!
|
- Cockeater now leaves a bite wound!
|
||||||
- Pythokin-Patch checks for Licentialabs (#30)
|
- Pythokin-Patch checks for Licentialabs (#30)
|
||||||
- Removed Sex-Change thoughts for pawns born or spawned with a gender-altering gene (Issue #32, PR #33 by @callavico)
|
- Removed Sex-Change thoughts for pawns born or spawned with a gender-altering gene (Issue #32, PR #33 by @callavico)
|
||||||
|
- More consistent behavior for genitalia resizing over multiple game-starts (Issue #34)
|
||||||
|
|
||||||
**Queen & Caste Logic**
|
**Queen & Caste Logic**
|
||||||
|
|
||||||
|
|
|
@ -12,17 +12,17 @@
|
||||||
</modExtensions>
|
</modExtensions>
|
||||||
</GeneDef>
|
</GeneDef>
|
||||||
|
|
||||||
<GeneDef ParentName="SpecialBaseBase">
|
<GeneDef ParentName="SpecialBase">
|
||||||
<defName>rjw_genes_orgasm_rush</defName>
|
<defName>rjw_genes_orgasm_rush</defName>
|
||||||
<label>Orgasm Rush</label>
|
<label>Orgasm Rush</label>
|
||||||
<description>On Orgasm, carriers of this gene get a boost in activity. (rest-need is partially filled)</description>
|
<description>On orgasm, carriers of this gene get a boost in activity. (rest-need is partially filled)</description>
|
||||||
<biostatCpx>1</biostatCpx>
|
<biostatCpx>1</biostatCpx>
|
||||||
<biostatMet>-2</biostatMet>
|
<biostatMet>-2</biostatMet>
|
||||||
<iconPath>UI/Memes/FleshPurity</iconPath>
|
<iconPath>UI/Memes/FleshPurity</iconPath>
|
||||||
<displayOrderInCategory>1</displayOrderInCategory>
|
<displayOrderInCategory>1</displayOrderInCategory>
|
||||||
</GeneDef>
|
</GeneDef>
|
||||||
|
|
||||||
<GeneDef ParentName="SpecialBaseBase">
|
<GeneDef ParentName="SpecialBase">
|
||||||
<defName>rjw_genes_youth_fountain</defName>
|
<defName>rjw_genes_youth_fountain</defName>
|
||||||
<label>Youth Fountain</label>
|
<label>Youth Fountain</label>
|
||||||
<description>Having sex with a carrier of this gene makes the partner slightly younger. (Partner stays adult)</description>
|
<description>Having sex with a carrier of this gene makes the partner slightly younger. (Partner stays adult)</description>
|
||||||
|
@ -30,9 +30,16 @@
|
||||||
<biostatMet>-2</biostatMet>
|
<biostatMet>-2</biostatMet>
|
||||||
<iconPath>UI/Ideoligions/FireLeaves</iconPath>
|
<iconPath>UI/Ideoligions/FireLeaves</iconPath>
|
||||||
<displayOrderInCategory>2</displayOrderInCategory>
|
<displayOrderInCategory>2</displayOrderInCategory>
|
||||||
|
<modExtensions>
|
||||||
|
<li Class="RJW_Genes.AgeTransferExtension">
|
||||||
|
<!-- 60k = 1 day -->
|
||||||
|
<ageTickChange>60000</ageTickChange>
|
||||||
|
<minAgeInYears>18</minAgeInYears>
|
||||||
|
</li>
|
||||||
|
</modExtensions>
|
||||||
</GeneDef>
|
</GeneDef>
|
||||||
|
|
||||||
<GeneDef ParentName="SpecialBaseBase">
|
<GeneDef ParentName="SpecialBase">
|
||||||
<defName>rjw_genes_sex_age_drain</defName>
|
<defName>rjw_genes_sex_age_drain</defName>
|
||||||
<label>Sexual Age Drain</label>
|
<label>Sexual Age Drain</label>
|
||||||
<description>Having sex transfers some of the partners life-time to themselves. (Pawn stays adult)</description>
|
<description>Having sex transfers some of the partners life-time to themselves. (Pawn stays adult)</description>
|
||||||
|
@ -40,12 +47,19 @@
|
||||||
<biostatMet>-1</biostatMet>
|
<biostatMet>-1</biostatMet>
|
||||||
<iconPath>UI/Icons/ColonistBar/Idle</iconPath>
|
<iconPath>UI/Icons/ColonistBar/Idle</iconPath>
|
||||||
<displayOrderInCategory>3</displayOrderInCategory>
|
<displayOrderInCategory>3</displayOrderInCategory>
|
||||||
|
<modExtensions>
|
||||||
|
<li Class="RJW_Genes.AgeTransferExtension">
|
||||||
|
<!-- 120k = 2 days -->
|
||||||
|
<ageTickChange>120000</ageTickChange>
|
||||||
|
<minAgeInYears>18</minAgeInYears>
|
||||||
|
</li>
|
||||||
|
</modExtensions>
|
||||||
</GeneDef>
|
</GeneDef>
|
||||||
|
|
||||||
<GeneDef ParentName="SpecialBaseBase">
|
<GeneDef ParentName="SpecialBase">
|
||||||
<defName>rjw_genes_aphrodisiac_pheromones</defName>
|
<defName>rjw_genes_aphrodisiac_pheromones</defName>
|
||||||
<label>Aphrodisiac Pheromones</label>
|
<label>Aphrodisiac Pheromones</label>
|
||||||
<geneClass>RJW_Genes.Gene_Aphrodisiac_Pheromones</geneClass>
|
<geneClass>RJW_Genes.Gene_Aphrodisiac_Pheromones</geneClass>
|
||||||
<description>Pheremones of this pawn induce an incressed sexdrive to others nearby.</description>
|
<description>Pheremones of this pawn induce an incressed sexdrive to others nearby.</description>
|
||||||
<iconPath>Genes/Icons/Pheromones</iconPath>
|
<iconPath>Genes/Icons/Pheromones</iconPath>
|
||||||
<displayOrderInCategory>4</displayOrderInCategory>
|
<displayOrderInCategory>4</displayOrderInCategory>
|
||||||
|
|
|
@ -2,6 +2,20 @@
|
||||||
|
|
||||||
Collection of Known Bugs and reasons for their origin.
|
Collection of Known Bugs and reasons for their origin.
|
||||||
|
|
||||||
|
## My Youth Fountain / Age Drainer Pawns do not alter Ages!!!
|
||||||
|
|
||||||
|
Issue: You had a pawn with Youth Fountain have Sex with another Pawn, and the other pawn did not get younger.
|
||||||
|
|
||||||
|
Please Check:
|
||||||
|
|
||||||
|
- Are both pawns in OK Age?
|
||||||
|
- Did they maybe change age but you didn't notice? Default settings only change by days.
|
||||||
|
- Did they finish sex? If they are interrupted, nothing happens
|
||||||
|
|
||||||
|
Otherwise:
|
||||||
|
|
||||||
|
Enable the Debug-Settings and provide me with a log.
|
||||||
|
|
||||||
## I changed Parts of a pawn and my genes do not apply!
|
## I changed Parts of a pawn and my genes do not apply!
|
||||||
|
|
||||||
Issue: You had a pawn with "huge genitalia" and add a horse-cock with licentia or surgery. This new genitalia is not huge.
|
Issue: You had a pawn with "huge genitalia" and add a horse-cock with licentia or surgery. This new genitalia is not huge.
|
||||||
|
|
|
@ -1,16 +1,34 @@
|
||||||
namespace RJW_Genes
|
using Verse;
|
||||||
|
|
||||||
|
namespace RJW_Genes
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Parent Gene for Genitalia Resizing. All Resizing genes should inherit for this class.
|
/// Parent Gene for Genitalia Resizing. All Resizing genes should inherit for this class.
|
||||||
|
/// There is a companion-patch `Patch_ResizingOnAdulthood`.
|
||||||
///
|
///
|
||||||
/// This helps with some functions (e.g. "hasGenitaliaResizingGenes(pawn)") but also to fire genitalia resizing later in life for Pawns.
|
/// This helps with some functions (e.g. "hasGenitaliaResizingGenes(pawn)") but also to fire genitalia resizing later in life for Pawns.
|
||||||
/// (No Children with huge ding dongs, and I don't want kids with tight anuses I am not that degenerate)
|
/// (No Children with huge ding dongs, and I don't want kids with tight anuses I am not that degenerate)
|
||||||
|
///
|
||||||
|
///
|
||||||
|
/// There was an Issue (#34) that re-sized the genitalia over multiple birthdays.
|
||||||
|
/// Before the addition of `ExposeData`, it lost track whether the resizing was already run,
|
||||||
|
/// leading to a change with every birthday over multiple game starts.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class Gene_GenitaliaResizingGene : RJW_Gene
|
public abstract class Gene_GenitaliaResizingGene : RJW_Gene
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The age (in years) at which the Pawns Genes will take effect, resizing their genitalia.
|
||||||
|
/// </summary>
|
||||||
public const int RESIZING_AGE = 20;
|
public const int RESIZING_AGE = 20;
|
||||||
public bool WasApplied { get; set; }
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether or not the gene was already applied.
|
||||||
|
/// If not, it is checked on every birthday and will be applied accordingly.
|
||||||
|
/// </summary>
|
||||||
|
private bool resizingWasApplied = false;
|
||||||
|
public bool ResizingWasApplied { get => resizingWasApplied; set => resizingWasApplied = value; }
|
||||||
|
|
||||||
|
|
||||||
public override void PostMake()
|
public override void PostMake()
|
||||||
{
|
{
|
||||||
|
@ -18,7 +36,7 @@
|
||||||
if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE)
|
if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE)
|
||||||
{
|
{
|
||||||
Resize();
|
Resize();
|
||||||
WasApplied = true;
|
ResizingWasApplied = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,19 +46,25 @@
|
||||||
if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE)
|
if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE)
|
||||||
{
|
{
|
||||||
Resize();
|
Resize();
|
||||||
WasApplied = true;
|
ResizingWasApplied = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void ExposeData()
|
||||||
|
{
|
||||||
|
base.ExposeData();
|
||||||
|
Scribe_Values.Look(ref resizingWasApplied, "wasApplied");
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used to resize the pawns genitalia.
|
/// Used to resize the pawns genitalia.
|
||||||
/// All Logic should be put here:
|
/// All Logic should be put here:
|
||||||
/// 1. Filters for Gender
|
/// 1. Filters for Gender
|
||||||
/// 2. Filters for Genitalia Existance
|
/// 2. Filters for Genitalia Existence
|
||||||
/// 3. Selection of right Genitalia
|
/// 3. Selection of right Genitalia
|
||||||
/// 4. Adjustment of Size
|
/// 4. Adjustment of Size
|
||||||
///
|
///
|
||||||
/// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and also for futas,
|
/// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and or futas,
|
||||||
/// while the breast-gene is female only.
|
/// while the breast-gene is female only.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract void Resize();
|
public abstract void Resize();
|
||||||
|
|
|
@ -7,6 +7,8 @@ namespace RJW_Genes
|
||||||
/// This Patch adds behavior to all resizing genes:
|
/// This Patch adds behavior to all resizing genes:
|
||||||
/// At Age RESIZING_MIN_AGE the Pawns Resizing Genes will trigger again, if not already triggered somewhere else.
|
/// At Age RESIZING_MIN_AGE the Pawns Resizing Genes will trigger again, if not already triggered somewhere else.
|
||||||
/// This is meant to allow kids to grow up without resized genitals, and resize later (Fixing #11).
|
/// This is meant to allow kids to grow up without resized genitals, and resize later (Fixing #11).
|
||||||
|
///
|
||||||
|
/// See `Gene_GenitaliaResizingGene` for a short summary of Issue #34.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HarmonyPatch(typeof(Pawn_AgeTracker), "BirthdayBiological")]
|
[HarmonyPatch(typeof(Pawn_AgeTracker), "BirthdayBiological")]
|
||||||
public class Patch_ResizingOnAdulthood
|
public class Patch_ResizingOnAdulthood
|
||||||
|
@ -18,10 +20,10 @@ namespace RJW_Genes
|
||||||
{
|
{
|
||||||
foreach(Gene_GenitaliaResizingGene gene in GeneUtility.GetGenitaliaResizingGenes(___pawn))
|
foreach(Gene_GenitaliaResizingGene gene in GeneUtility.GetGenitaliaResizingGenes(___pawn))
|
||||||
{
|
{
|
||||||
if (!gene.WasApplied)
|
if (!gene.ResizingWasApplied)
|
||||||
{
|
{
|
||||||
gene.Resize();
|
gene.Resize();
|
||||||
gene.WasApplied = true;
|
gene.ResizingWasApplied = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
17
Source/Genes/Special/AgeTransferExtension.cs
Normal file
17
Source/Genes/Special/AgeTransferExtension.cs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace RJW_Genes
|
||||||
|
{
|
||||||
|
public class AgeTransferExtension : DefModExtension
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Amount by which the Biological Age Ticks will be changed.
|
||||||
|
/// </summary>
|
||||||
|
public int ageTickChange;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Minimum Age for youthing to take place - pawns cannot end up underaged.
|
||||||
|
/// </summary>
|
||||||
|
public int minAgeInYears;
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,8 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
namespace RJW_Genes.Genes.Special
|
namespace RJW_Genes.Genes.Special
|
||||||
{
|
{
|
||||||
|
@ -18,9 +20,9 @@ namespace RJW_Genes.Genes.Special
|
||||||
* I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
|
* I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const long AGE_TRANSFERED = 120000; // 120k == 2 days
|
const long AGE_TRANSFERED_FALLBACK = 120000; // 120k == 2 days
|
||||||
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
||||||
const long MINIMUM_AGE = 18 * 60 * 60000 + 1;
|
const long MINIMUM_AGE_FALLBACK = 18 * 60 * 60000 + 1;
|
||||||
|
|
||||||
public static void Postfix(SexProps props)
|
public static void Postfix(SexProps props)
|
||||||
{
|
{
|
||||||
|
@ -28,18 +30,50 @@ namespace RJW_Genes.Genes.Special
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GeneUtility.IsAgeDrainer(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks > MINIMUM_AGE)
|
|
||||||
|
Pawn pawn = props.pawn;
|
||||||
|
Pawn partner = props.partner;
|
||||||
|
|
||||||
|
if (GeneUtility.IsAgeDrainer(pawn) && !GeneUtility.IsAgeDrainer(partner))
|
||||||
{
|
{
|
||||||
var pawnAge = props.pawn.ageTracker.AgeBiologicalTicks;
|
TransferAge(pawn, partner);
|
||||||
//ModLog.Error($"Firing Age Drain \nMinimum Age is \t{MINIMUM_AGE} \nPawn Age is \t{pawnAge} \nTransferred \t{AGE_TRANSFERED}\nResulting in \t{pawnAge - AGE_TRANSFERED}");
|
|
||||||
|
|
||||||
// Make Partner older
|
|
||||||
props.partner.ageTracker.AgeBiologicalTicks += AGE_TRANSFERED;
|
|
||||||
// Make Pawn younger if he is older than minimum age
|
|
||||||
if (pawnAge - AGE_TRANSFERED > MINIMUM_AGE)
|
|
||||||
props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED));
|
|
||||||
}
|
}
|
||||||
|
else if (GeneUtility.IsAgeDrainer(partner) && !GeneUtility.IsAgeDrainer(pawn))
|
||||||
|
{
|
||||||
|
TransferAge(partner,pawn);
|
||||||
|
}
|
||||||
|
else if (GeneUtility.IsAgeDrainer(partner) && GeneUtility.IsAgeDrainer(pawn) && RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||||
|
{
|
||||||
|
ModLog.Message($"[Sexual Age Drainer] both {pawn} and {partner} are sexual-age-drainers - nothing happens.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Transfers age from the giver to the receiver.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="receiver">The pawn that will receive biological-Age-Ticks, and becomes younger if they are not already young. </param>
|
||||||
|
/// <param name="giver">The pawn that will be giving biological-Age-Ticks. This pawn is always aged, even if the other pawn is too young.</param>
|
||||||
|
private static void TransferAge(Pawn receiver, Pawn giver)
|
||||||
|
{
|
||||||
|
AgeTransferExtension transferExt = GeneDefOf.rjw_genes_sex_age_drain.GetModExtension<AgeTransferExtension>();
|
||||||
|
long age_transfered = transferExt?.ageTickChange ?? AGE_TRANSFERED_FALLBACK;
|
||||||
|
long minimum_age = transferExt?.minAgeInYears * 60 * 60000 + 1 ?? MINIMUM_AGE_FALLBACK;
|
||||||
|
|
||||||
|
var pawnAge = receiver.ageTracker.AgeBiologicalTicks;
|
||||||
|
|
||||||
|
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||||
|
ModLog.Message($"[Sexual Age Drainer] {receiver} is aging {giver} by {age_transfered} ({Math.Round(age_transfered / 60000.0, 2)} days)");
|
||||||
|
|
||||||
|
// Giver ALWAYS ages
|
||||||
|
giver.ageTracker.AgeBiologicalTicks += age_transfered;
|
||||||
|
|
||||||
|
// Make Receiver younger if they are older than minimum age
|
||||||
|
if (pawnAge - age_transfered > minimum_age)
|
||||||
|
receiver.ageTracker.AgeBiologicalTicks = Math.Max(minimum_age, (pawnAge - age_transfered));
|
||||||
|
else {
|
||||||
|
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||||
|
ModLog.Message($"[Sexual Age Drainer] {receiver} was too young ({receiver.ageTracker.AgeBiologicalYears}), and remains unchanged.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
namespace RJW_Genes.Genes.Special
|
namespace RJW_Genes.Genes.Special
|
||||||
{
|
{
|
||||||
|
@ -18,9 +19,9 @@ namespace RJW_Genes.Genes.Special
|
||||||
* I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
|
* I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const long AGE_REDUCTION = 60000; // 60k == 1 day
|
const long AGE_REDUCTION_FALLBACK = 60000; // 60k == 1 day
|
||||||
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
||||||
const long MINIMUM_AGE = 18 * 60 * 60000 + 1;
|
const long MINIMUM_AGE_FALLBACK = 18 * 60 * 60000 + 1;
|
||||||
|
|
||||||
public static void Postfix(SexProps props)
|
public static void Postfix(SexProps props)
|
||||||
{
|
{
|
||||||
|
@ -28,16 +29,36 @@ namespace RJW_Genes.Genes.Special
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GeneUtility.IsYouthFountain(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks >= MINIMUM_AGE)
|
|
||||||
{
|
|
||||||
var partnerAge = props.partner.ageTracker.AgeBiologicalTicks;
|
|
||||||
|
|
||||||
if(partnerAge - AGE_REDUCTION > MINIMUM_AGE)
|
if (GeneUtility.IsYouthFountain(props.pawn))
|
||||||
props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION);
|
{
|
||||||
|
ChangeAgeForPawn(props.partner, props.pawn);
|
||||||
|
}
|
||||||
|
if (GeneUtility.IsYouthFountain(props.partner))
|
||||||
|
{
|
||||||
|
ChangeAgeForPawn(props.pawn,props.partner);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ChangeAgeForPawn(Pawn ToYouth, Pawn YouthingPawn)
|
||||||
|
{
|
||||||
|
AgeTransferExtension transferExt = GeneDefOf.rjw_genes_youth_fountain.GetModExtension<AgeTransferExtension>();
|
||||||
|
long age_reduction = transferExt?.ageTickChange ?? AGE_REDUCTION_FALLBACK;
|
||||||
|
long minimum_age = transferExt?.minAgeInYears * 60 * 60000 + 1 ?? MINIMUM_AGE_FALLBACK;
|
||||||
|
|
||||||
|
var partnerAge = ToYouth.ageTracker.AgeBiologicalTicks;
|
||||||
|
|
||||||
|
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||||
|
ModLog.Message($"Firing Youth Fountain - {YouthingPawn} is youthing {ToYouth} by {age_reduction} ({Math.Round(age_reduction / 60000.0, 2)} days)");
|
||||||
|
|
||||||
|
if (partnerAge - age_reduction > minimum_age) {
|
||||||
|
ToYouth.ageTracker.AgeBiologicalTicks = Math.Max(minimum_age, partnerAge - age_reduction);
|
||||||
|
}
|
||||||
|
else if (RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||||
|
ModLog.Message($"[Youth Fountain] {ToYouth} was too young ({ToYouth.ageTracker.AgeBiologicalYears}), and remains unchanged.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,7 @@
|
||||||
<Compile Include="Genes\Life_Force\JobGivers\JobGiver_GetLifeForce.cs" />
|
<Compile Include="Genes\Life_Force\JobGivers\JobGiver_GetLifeForce.cs" />
|
||||||
<Compile Include="Genes\Life_Force\ThinkNodes\ThinkNode_NewFlirtTarget.cs" />
|
<Compile Include="Genes\Life_Force\ThinkNodes\ThinkNode_NewFlirtTarget.cs" />
|
||||||
<Compile Include="Genes\Patch_AddNotifyOnGeneration.cs" />
|
<Compile Include="Genes\Patch_AddNotifyOnGeneration.cs" />
|
||||||
|
<Compile Include="Genes\Special\AgeTransferExtension.cs" />
|
||||||
<Compile Include="Genes\Special\Patch_AgeDrain.cs" />
|
<Compile Include="Genes\Special\Patch_AgeDrain.cs" />
|
||||||
<Compile Include="Interactions\SuccubusTailjob\CompAbility_SexInteractionRequirements.cs" />
|
<Compile Include="Interactions\SuccubusTailjob\CompAbility_SexInteractionRequirements.cs" />
|
||||||
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_PussyHeal.cs" />
|
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_PussyHeal.cs" />
|
||||||
|
|
2
TODOS.md
2
TODOS.md
|
@ -8,6 +8,8 @@ Any help is very appreciated, even if it is just pointing me to existing similar
|
||||||
|
|
||||||
**Incubi** - Add a forced striptease Ability
|
**Incubi** - Add a forced striptease Ability
|
||||||
|
|
||||||
|
**Age Transfer Genes** - Add (configurable) option to satisfy Bodymodders and their AgeReversalDemand
|
||||||
|
|
||||||
## Planned Genes
|
## Planned Genes
|
||||||
|
|
||||||
**Adjustable Cock-Size** like e.g. artificial genitalia have
|
**Adjustable Cock-Size** like e.g. artificial genitalia have
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue