Compare commits

...

4 commits

Author SHA1 Message Date
ADHD_Coder
ff62682729 Merge branch 'forceTwinDrug' into 'dev'
Add drug forcing enzygotic twin creation

See merge request lutepickle/rjw_menstruation!9
2024-07-27 16:14:32 +00:00
lutepickle
ad7919a25b Also add the father/mother check to the childbirth ritual 2024-07-26 22:26:52 -07:00
lutepickle
d4f8312cee HediffWithParents.PreRemoved doesn't like it if mother equals father, so add some checks for that 2024-07-26 22:02:23 -07:00
ADHD_Coder
b5705ccbd9 Add Doublex, identical twin creating drug 2024-06-09 09:24:07 -07:00
8 changed files with 89 additions and 3 deletions

Binary file not shown.

View file

@ -91,6 +91,48 @@
</comps> </comps>
</ThingDef> </ThingDef>
<ThingDef ParentName="MakeableDrugPillBase">
<defName>Doublex</defName>
<label>doublex</label>
<description>Glittertech drug that causes fertilized eggs to produce enzygotic twins.</description>
<graphicData>
<texPath>Things/Item/SIA</texPath>
<graphicClass>Graphic_StackCount</graphicClass>
</graphicData>
<rotatable>false</rotatable>
<statBases>
<WorkToMake>800</WorkToMake>
<MarketValue>250</MarketValue>
<Mass>0.01</Mass>
</statBases>
<techLevel>Ultra</techLevel>
<ingestible>
<drugCategory>Medical</drugCategory>
<outcomeDoers>
<li Class="IngestionOutcomeDoer_GiveHediff">
<hediffDef>Hediff_Doublex</hediffDef>
<severity>1.0</severity>
</li>
</outcomeDoers>
</ingestible>
<recipeMaker>
<researchPrerequisite>DrugProduction</researchPrerequisite>
<recipeUsers>
<li>DrugLab</li>
</recipeUsers>
</recipeMaker>
<costList>
<MedicineUltratech>3</MedicineUltratech>
<Neutroamine>2</Neutroamine>
</costList>
<comps>
<li Class="CompProperties_Drug">
<addictiveness>0</addictiveness>
<listOrder>1000</listOrder>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="MakeableDrugPillBase"> <ThingDef ParentName="MakeableDrugPillBase">
<defName>PainReliever</defName> <defName>PainReliever</defName>
<label>Pain reliever</label> <label>Pain reliever</label>

View file

@ -164,6 +164,32 @@
</comps> </comps>
</HediffDef> </HediffDef>
<HediffDef Name="Hediff_Doublex">
<hediffClass>HediffWithComps</hediffClass>
<defName>Hediff_Doublex</defName>
<label>Doublex</label>
<labelNoun>doublex</labelNoun>
<description>Ultratech drug that causes fertilized eggs to split resulting in identical twins.</description>
<defaultLabelColor>(0.75,0.75,1.0)</defaultLabelColor>
<isBad>false</isBad>
<tendable>false</tendable>
<makesSickThought>false</makesSickThought>
<makesAlert>false</makesAlert>
<maxSeverity>5</maxSeverity>
<initialSeverity>1.0</initialSeverity>
<stages>
<li>
<becomeVisible>true</becomeVisible>
</li>
</stages>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-0.5</severityPerDay>
</li>
</comps>
</HediffDef>
<HediffDef Name="Hediff_PainReliever"> <HediffDef Name="Hediff_PainReliever">
<hediffClass>HediffWithComps</hediffClass> <hediffClass>HediffWithComps</hediffClass>

View file

@ -1429,7 +1429,9 @@ namespace RJW_Menstruation
pregnancy = HediffMaker.MakeHediff(HediffDefOf.PregnantHuman, Pawn); pregnancy = HediffMaker.MakeHediff(HediffDefOf.PregnantHuman, Pawn);
if (Configurations.EnableBiotechTwins) if (Configurations.EnableBiotechTwins)
pregnancy.TryGetComp<HediffComp_PregeneratedBabies>().AddNewBaby(Pawn, egg.fertilizer); pregnancy.TryGetComp<HediffComp_PregeneratedBabies>().AddNewBaby(Pawn, egg.fertilizer);
((Hediff_Pregnant)pregnancy).SetParents(Pawn, egg.fertilizer, PregnancyUtility.GetInheritedGeneSet(egg.fertilizer, Pawn)); Pawn father = egg.fertilizer;
if (Pawn == father) father = null;
((Hediff_Pregnant)pregnancy).SetParents(Pawn, father, PregnancyUtility.GetInheritedGeneSet(father, Pawn));
Pawn.health.AddHediff(pregnancy); Pawn.health.AddHediff(pregnancy);
pregnant = true; pregnant = true;
deadeggs.Add(egg); deadeggs.Add(egg);

View file

@ -234,6 +234,7 @@ namespace RJW_Menstruation
{ {
Pawn baby = comp.PeekBaby(); Pawn baby = comp.PeekBaby();
Pawn thisFather = baby.GetFather() ?? father; Pawn thisFather = baby.GetFather() ?? father;
if (thisFather == geneticMother || thisFather == mother) thisFather = null;
baby.relations.ClearAllRelations(); // To keep ApplyBirthOutcome from erroring when it tries to set up relations baby.relations.ClearAllRelations(); // To keep ApplyBirthOutcome from erroring when it tries to set up relations
PregnancyUtility.ApplyBirthOutcome_NewTemp(thisOutcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments, preventLetter); PregnancyUtility.ApplyBirthOutcome_NewTemp(thisOutcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments, preventLetter);
@ -293,6 +294,7 @@ namespace RJW_Menstruation
{ {
Pawn baby = comp.PeekBaby(); Pawn baby = comp.PeekBaby();
Pawn thisFather = baby.GetFather() ?? father; Pawn thisFather = baby.GetFather() ?? father;
if (thisFather == geneticMother || thisFather == mother) thisFather = null;
baby.relations.ClearAllRelations(); baby.relations.ClearAllRelations();
PregnancyUtility.ApplyBirthOutcome(outcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments); PregnancyUtility.ApplyBirthOutcome(outcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments);

View file

@ -320,7 +320,20 @@ namespace RJW_Menstruation
Pawn firstbaby = null; Pawn firstbaby = null;
int traitSeed = Rand.Int; int traitSeed = Rand.Int;
List<Trait> parentTraits = GetInheritableTraits(mother, father); List<Trait> parentTraits = GetInheritableTraits(mother, father);
while (Rand.Chance(Configurations.EnzygoticTwinsChance) && division < Configurations.MaxEnzygoticTwins) division++;
//TODO: turn this into a proper function that can handle genes, fertility boosts, genital type effects etc.
float eTwinChance = Configurations.EnzygoticTwinsChance;
//Log.Message($"RJW_Menstration :: Configurations.EnzygoticTwinsChance = {Configurations.EnzygoticTwinsChance}");
if (mother.health.hediffSet.HasHediff(VariousDefOf.Hediff_Doublex))
{
division++;
eTwinChance = eTwinChance + (1 - eTwinChance) / 4;
}
//Log.Message($"RJW_Menstration :: TwinChance = {eTwinChance}");
while (Rand.Chance(eTwinChance) && division < Configurations.MaxEnzygoticTwins) division++;
//Log.Message($"RJW_Menstration :: division = {division}");
for (int i = 0; i < division; i++) for (int i = 0; i < division; i++)
{ {
Pawn baby = GenerateBaby(request, mother, father, parentTraits, traitSeed); Pawn baby = GenerateBaby(request, mother, father, parentTraits, traitSeed);

View file

@ -22,6 +22,7 @@ namespace RJW_Menstruation
public static readonly HediffDef Hediff_Estrus_Concealed = DefDatabase<HediffDef>.GetNamed("Hediff_Estrus_Concealed"); public static readonly HediffDef Hediff_Estrus_Concealed = DefDatabase<HediffDef>.GetNamed("Hediff_Estrus_Concealed");
public static readonly HediffDef Hediff_AffectedByPheromones = DefDatabase<HediffDef>.GetNamed("Hediff_AffectedByPheromones"); public static readonly HediffDef Hediff_AffectedByPheromones = DefDatabase<HediffDef>.GetNamed("Hediff_AffectedByPheromones");
public static readonly HediffDef Hediff_ASA = DefDatabase<HediffDef>.GetNamed("Hediff_ASA"); public static readonly HediffDef Hediff_ASA = DefDatabase<HediffDef>.GetNamed("Hediff_ASA");
public static readonly HediffDef Hediff_Doublex = DefDatabase<HediffDef>.GetNamed("Hediff_Doublex");
public static readonly StatDef MaxAbsorbable = DefDatabase<StatDef>.GetNamed("MaxAbsorbable"); public static readonly StatDef MaxAbsorbable = DefDatabase<StatDef>.GetNamed("MaxAbsorbable");
public static readonly NeedDef SexNeed = DefDatabase<NeedDef>.GetNamed("Sex"); public static readonly NeedDef SexNeed = DefDatabase<NeedDef>.GetNamed("Sex");
public static readonly JobDef VaginaWashing = DefDatabase<JobDef>.GetNamed("VaginaWashing"); public static readonly JobDef VaginaWashing = DefDatabase<JobDef>.GetNamed("VaginaWashing");

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest> <Manifest>
<identifier>RJW Menstruation</identifier> <identifier>RJW Menstruation</identifier>
<version>1.5.0.1</version> <version>1.5.0.2</version>
<dependencies> <dependencies>
</dependencies> </dependencies>
<incompatibleWith /> <incompatibleWith />