New ovary power calculation for all vaginas. While at it, remove old deviation factor since it's obsolete, too.

This commit is contained in:
lutepickle 2022-07-07 16:17:12 -07:00
parent eade57bd9e
commit b2e26f2f1b
7 changed files with 72 additions and 64 deletions

View file

@ -16,7 +16,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>6</bleedingIntervalDays> <bleedingIntervalDays>6</bleedingIntervalDays>
@ -24,7 +23,6 @@
<eggLifespanDays>1</eggLifespanDays> <eggLifespanDays>1</eggLifespanDays>
<wombTex>Womb/Womb</wombTex> <wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/Vagina</vagTex> <vagTex>Genitals/Vagina</vagTex>
<ovaryPower>420</ovaryPower>
<concealedEstrus>true</concealedEstrus> <concealedEstrus>true</concealedEstrus>
</li> </li>
</comps> </comps>
@ -39,8 +37,7 @@
<li Class="RJW_Menstruation.CompProperties_Menstruation"> <li Class="RJW_Menstruation.CompProperties_Menstruation">
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -89,7 +86,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>2.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>2.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>

View file

@ -18,7 +18,6 @@
<maxCumCapacity>8</maxCumCapacity> <maxCumCapacity>8</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>166</lutealIntervalDays> <lutealIntervalDays>166</lutealIntervalDays>
<bleedingIntervalDays>8</bleedingIntervalDays> <bleedingIntervalDays>8</bleedingIntervalDays>
@ -40,7 +39,6 @@
<maxCumCapacity>6</maxCumCapacity> <maxCumCapacity>6</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>9</follicularIntervalDays> <follicularIntervalDays>9</follicularIntervalDays>
<lutealIntervalDays>10</lutealIntervalDays> <lutealIntervalDays>10</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -63,7 +61,6 @@
<maxCumCapacity>25</maxCumCapacity> <maxCumCapacity>25</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>7</follicularIntervalDays> <follicularIntervalDays>7</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -87,7 +84,6 @@
<maxCumCapacity>50</maxCumCapacity> <maxCumCapacity>50</maxCumCapacity>
<baseImplantationChanceFactor>0.5</baseImplantationChanceFactor> <baseImplantationChanceFactor>0.5</baseImplantationChanceFactor>
<basefertilizationChanceFactor>0.2</basefertilizationChanceFactor> <basefertilizationChanceFactor>0.2</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>270</follicularIntervalDays> <follicularIntervalDays>270</follicularIntervalDays>
<lutealIntervalDays>30</lutealIntervalDays> <lutealIntervalDays>30</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -109,7 +105,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>5</follicularIntervalDays> <follicularIntervalDays>5</follicularIntervalDays>
<lutealIntervalDays>16</lutealIntervalDays> <lutealIntervalDays>16</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -131,7 +126,6 @@
<maxCumCapacity>5</maxCumCapacity> <maxCumCapacity>5</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>6</follicularIntervalDays> <follicularIntervalDays>6</follicularIntervalDays>
<lutealIntervalDays>9</lutealIntervalDays> <lutealIntervalDays>9</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -153,7 +147,6 @@
<maxCumCapacity>5</maxCumCapacity> <maxCumCapacity>5</maxCumCapacity>
<baseImplantationChanceFactor>2.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>2.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>12</follicularIntervalDays> <follicularIntervalDays>12</follicularIntervalDays>
<lutealIntervalDays>9</lutealIntervalDays> <lutealIntervalDays>9</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -175,7 +168,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>2.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>2.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>

View file

@ -18,7 +18,6 @@
<maxCumCapacity>18</maxCumCapacity> <maxCumCapacity>18</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>10</follicularIntervalDays> <follicularIntervalDays>10</follicularIntervalDays>
<lutealIntervalDays>10</lutealIntervalDays> <lutealIntervalDays>10</lutealIntervalDays>
<bleedingIntervalDays>4</bleedingIntervalDays> <bleedingIntervalDays>4</bleedingIntervalDays>
@ -40,7 +39,6 @@
<maxCumCapacity>8</maxCumCapacity> <maxCumCapacity>8</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>8</follicularIntervalDays> <follicularIntervalDays>8</follicularIntervalDays>
<lutealIntervalDays>12</lutealIntervalDays> <lutealIntervalDays>12</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -62,7 +60,6 @@
<maxCumCapacity>15</maxCumCapacity> <maxCumCapacity>15</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>10</follicularIntervalDays> <follicularIntervalDays>10</follicularIntervalDays>
<lutealIntervalDays>12</lutealIntervalDays> <lutealIntervalDays>12</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -84,7 +81,6 @@
<maxCumCapacity>8</maxCumCapacity> <maxCumCapacity>8</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>6</follicularIntervalDays> <follicularIntervalDays>6</follicularIntervalDays>
<lutealIntervalDays>12</lutealIntervalDays> <lutealIntervalDays>12</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -106,7 +102,6 @@
<maxCumCapacity>12</maxCumCapacity> <maxCumCapacity>12</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>20</lutealIntervalDays> <lutealIntervalDays>20</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -128,7 +123,6 @@
<maxCumCapacity>2</maxCumCapacity> <maxCumCapacity>2</maxCumCapacity>
<baseImplantationChanceFactor>0.1</baseImplantationChanceFactor> <baseImplantationChanceFactor>0.1</baseImplantationChanceFactor>
<basefertilizationChanceFactor>0.1</basefertilizationChanceFactor> <basefertilizationChanceFactor>0.1</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -150,7 +144,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>0.1</baseImplantationChanceFactor> <baseImplantationChanceFactor>0.1</baseImplantationChanceFactor>
<basefertilizationChanceFactor>0.1</basefertilizationChanceFactor> <basefertilizationChanceFactor>0.1</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>

View file

@ -16,7 +16,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>1800</follicularIntervalDays> <follicularIntervalDays>1800</follicularIntervalDays>
<lutealIntervalDays>1800</lutealIntervalDays> <lutealIntervalDays>1800</lutealIntervalDays>
<bleedingIntervalDays>6</bleedingIntervalDays> <bleedingIntervalDays>6</bleedingIntervalDays>
@ -24,7 +23,6 @@
<eggLifespanDays>1</eggLifespanDays> <eggLifespanDays>1</eggLifespanDays>
<wombTex>Womb/Womb</wombTex> <wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/Vagina</vagTex> <vagTex>Genitals/Vagina</vagTex>
<ovaryPower>620</ovaryPower>
<concealedEstrus>true</concealedEstrus> <concealedEstrus>true</concealedEstrus>
</li> </li>
</comps> </comps>
@ -50,7 +48,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor> <baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor> <basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>7</follicularIntervalDays> <follicularIntervalDays>7</follicularIntervalDays>
<lutealIntervalDays>10</lutealIntervalDays> <lutealIntervalDays>10</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -58,7 +55,6 @@
<eggLifespanDays>1</eggLifespanDays> <eggLifespanDays>1</eggLifespanDays>
<wombTex>Womb/Womb</wombTex> <wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/Vagina</vagTex> <vagTex>Genitals/Vagina</vagTex>
<ovaryPower>620</ovaryPower>
<concealedEstrus>true</concealedEstrus> <concealedEstrus>true</concealedEstrus>
</li> </li>
</comps> </comps>
@ -86,7 +82,6 @@
<maxCumCapacity>10</maxCumCapacity> <maxCumCapacity>10</maxCumCapacity>
<baseImplantationChanceFactor>0.2</baseImplantationChanceFactor> <baseImplantationChanceFactor>0.2</baseImplantationChanceFactor>
<basefertilizationChanceFactor>0.2</basefertilizationChanceFactor> <basefertilizationChanceFactor>0.2</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<follicularIntervalDays>14</follicularIntervalDays> <follicularIntervalDays>14</follicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays> <lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays> <bleedingIntervalDays>0</bleedingIntervalDays>
@ -94,7 +89,6 @@
<eggLifespanDays>1</eggLifespanDays> <eggLifespanDays>1</eggLifespanDays>
<wombTex>Womb/Womb</wombTex> <wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/Vagina</vagTex> <vagTex>Genitals/Vagina</vagTex>
<ovaryPower>420</ovaryPower>
<concealedEstrus>true</concealedEstrus> <concealedEstrus>true</concealedEstrus>
</li> </li>
</comps> </comps>

View file

@ -62,7 +62,7 @@ namespace RJW_Menstruation
[DebugAction("RJW Menstruation", "Recalculate pawn's ovary power", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)] [DebugAction("RJW Menstruation", "Recalculate pawn's ovary power", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
private static void RecalculateOvaryPower(Pawn p) private static void RecalculateOvaryPower(Pawn p)
{ {
p.GetMenstruationComp().ovarypower = p.GetMenstruationComp().GetOvaryPowerByAge(p); p.GetMenstruationComp().ovarypower = p.GetMenstruationComp().GetOvaryPowerByAge();
Messages.Message($"{p}'s ovarypower recalculated ({p.GetMenstruationComp().ovarypower})", MessageTypeDefOf.NeutralEvent, false); Messages.Message($"{p}'s ovarypower recalculated ({p.GetMenstruationComp().ovarypower})", MessageTypeDefOf.NeutralEvent, false);
} }
} }

View file

@ -36,6 +36,29 @@ namespace RJW_Menstruation
} }
} }
// The maximum theoretical rate of ovulation is inducing the moment it goes follicular and no pregnancies
// There will be far more eggs than will ever actually be produced, but it fits the induced ovulator philosophy
protected override float RaceCyclesPerYear()
{
int breedingSeasons = 0;
if (Props.breedingSeason == SeasonalBreed.Always) breedingSeasons = 4;
else
{
if ((Props.breedingSeason & SeasonalBreed.Spring) != 0) breedingSeasons++;
if ((Props.breedingSeason & SeasonalBreed.Summer) != 0) breedingSeasons++;
if ((Props.breedingSeason & SeasonalBreed.Fall) != 0) breedingSeasons++;
if ((Props.breedingSeason & SeasonalBreed.Winter) != 0) breedingSeasons++;
}
float breedingRatio = breedingSeasons / 4.0f;
return breedingRatio * GenDate.DaysPerYear / ((float)Props.lutealIntervalDays / Configurations.CycleAccelerationDefault);
}
// There's really no good way to estimate the number of times it's been induced, so this is all we can do
protected override int PawnEggsUsed(int pawnCyclesElapsed, float avglittersize)
{
return 0;
}
protected override void FollicularAction(bool climacteric) protected override void FollicularAction(bool climacteric)
{ {
if (climacteric && !Configurations.EnableMenopause) if (climacteric && !Configurations.EnableMenopause)

View file

@ -27,7 +27,6 @@ namespace RJW_Menstruation
public float maxCumCapacity; // ml public float maxCumCapacity; // ml
public float baseImplantationChanceFactor; public float baseImplantationChanceFactor;
public float basefertilizationChanceFactor; public float basefertilizationChanceFactor;
public float deviationFactor;
public int follicularIntervalDays = 14; //before ovulation including beginning of bleeding public int follicularIntervalDays = 14; //before ovulation including beginning of bleeding
public int lutealIntervalDays = 14; //after ovulation until bleeding public int lutealIntervalDays = 14; //after ovulation until bleeding
public int bleedingIntervalDays = 6; //must be less than folicularIntervalDays public int bleedingIntervalDays = 6; //must be less than folicularIntervalDays
@ -36,7 +35,6 @@ namespace RJW_Menstruation
public string wombTex = "Womb/Womb"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday public string wombTex = "Womb/Womb"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
public string vagTex = "Genitals/Vagina"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday public string vagTex = "Genitals/Vagina"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
public bool infertile = false; public bool infertile = false;
public int ovaryPower = 600000000; // default: almost unlimited ovulation
public bool concealedEstrus = false; public bool concealedEstrus = false;
public SeasonalBreed breedingSeason = SeasonalBreed.Always; public SeasonalBreed breedingSeason = SeasonalBreed.Always;
public int estrusDaysBeforeOvulation = 3; public int estrusDaysBeforeOvulation = 3;
@ -946,35 +944,52 @@ namespace RJW_Menstruation
loaded = true; loaded = true;
} }
public int GetOvaryPowerByAge(Pawn pawn) protected virtual float RaceCyclesPerYear()
{ {
int power; int breedingSeasons = 0;
if (Props.breedingSeason == SeasonalBreed.Always) breedingSeasons = 4;
else
{
if ((Props.breedingSeason & SeasonalBreed.Spring) != 0) breedingSeasons++;
if ((Props.breedingSeason & SeasonalBreed.Summer) != 0) breedingSeasons++;
if ((Props.breedingSeason & SeasonalBreed.Fall) != 0) breedingSeasons++;
if ((Props.breedingSeason & SeasonalBreed.Winter) != 0) breedingSeasons++;
}
float breedingRatio = breedingSeasons / 4.0f;
return breedingRatio * GenDate.DaysPerYear / ((float)(Props.follicularIntervalDays + Props.lutealIntervalDays) / Configurations.CycleAccelerationDefault);
}
protected virtual int PawnEggsUsed(int pawnCyclesElapsed, float avglittersize)
{
return (int)(pawnCyclesElapsed * avglittersize);
}
public int GetOvaryPowerByAge()
{
Pawn pawn = parent.pawn;
float avglittersize; float avglittersize;
try try
{ {
if (pawn.def.race.litterSizeCurve.Points.Count < 3) avglittersize = 1; // Account for busted littersizecurves avglittersize = Mathf.Min(Rand.ByCurveAverage(pawn.def.race.litterSizeCurve), 1.0f);
else avglittersize = Rand.ByCurveAverage(pawn.def.race.litterSizeCurve);
} }
catch (NullReferenceException) catch (NullReferenceException)
{ {
avglittersize = 1; avglittersize = 1.0f;
} }
//Old one. Sex minimum age based. float fertStartAge = pawn.RaceProps.lifeStageAges?.Find(stage => stage.def.reproductive)?.minAge ?? 0.0f;
//ovarypower = (int)(((Props.ovaryPower * Utility.RandGaussianLike(0.70f, 1.30f) * parent.pawn.def.race.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy) float fertEndAge = pawn.RaceProps.lifeExpectancy * (pawn.IsAnimal() ? RJWPregnancySettings.fertility_endage_female_animal : RJWPregnancySettings.fertility_endage_female_humanlike);
// - (Math.Max(0, ageYear - RJWSettings.sex_minimum_age * parent.pawn.def.race.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy)) if (fertEndAge < fertStartAge) fertEndAge = fertStartAge;
// * (60 / (Props.folicularIntervalDays + Props.lutealIntervalDays) * Configurations.CycleAcceleration)) * avglittersize);
//New one. float raceCyclesPerYear = RaceCyclesPerYear();
float fertendage, lifenormalized; int lifetimeCycles = (int)(raceCyclesPerYear * (fertEndAge - fertStartAge));
if (pawn.IsAnimal()) fertendage = RJWPregnancySettings.fertility_endage_female_animal * 100f; int lifetimeEggs = (int)(lifetimeCycles * avglittersize * Utility.RandGaussianLike(0.70f, 1.30f, 5));
else fertendage = RJWPregnancySettings.fertility_endage_female_humanlike * 80f;
lifenormalized = pawn.def.race.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy;
fertendage *= lifenormalized;
power = (int)((fertendage - pawn.ageTracker.AgeBiologicalYearsFloat) * (60f / (Props.follicularIntervalDays + Props.lutealIntervalDays) * Configurations.CycleAcceleration) * avglittersize);
power = (int)Mathf.Max(0, Mathf.Min(Props.ovaryPower * Utility.RandGaussianLike(0.70f, 1.30f, 5) * lifenormalized, power));
return power; float pawnCyclesPerYear = raceCyclesPerYear / cycleSpeed;
int pawnCyclesElapsed = (int)Mathf.Max((pawn.ageTracker.AgeBiologicalYearsFloat - fertStartAge) * pawnCyclesPerYear, 0.0f);
int pawnEggsUsed = PawnEggsUsed(pawnCyclesElapsed, avglittersize);
return Math.Max(lifetimeEggs - pawnEggsUsed, 0);
} }
protected void InitOvary() protected void InitOvary()
@ -985,10 +1000,7 @@ namespace RJW_Menstruation
} }
else if (ovarypower < -50000) else if (ovarypower < -50000)
{ {
if (Props.ovaryPower > 10000000) ovarypower = Props.ovaryPower; ovarypower = GetOvaryPowerByAge();
else
{
ovarypower = GetOvaryPowerByAge(parent.pawn);
if (ovarypower < 1) if (ovarypower < 1)
{ {
Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Menopause, parent.pawn); Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Menopause, parent.pawn);
@ -1002,8 +1014,6 @@ namespace RJW_Menstruation
hediff.Severity = 0.008f * (OvaryPowerThreshold - ovarypower); hediff.Severity = 0.008f * (OvaryPowerThreshold - ovarypower);
parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn)); parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
} }
}
} }
} }