What's new

List of games with Pregnancy/Impregnation v2


Same here, mostly because in the JP I get a blue screen in every H scene
View attachment 50961
Already tried everything I could think, but with no success.
Its not really a blue screen, the camera goes straight up mostly outside of the map boundaries, i discovered a fix by just installing bepinex (BepInEx-BepInExPack_IL2CPP-6.0.698) and running the game with it, dont really know how or why but it fixed it, probably bepinex try/catch some errors im not sure.
 
Ressentiment has released a new game, called 行け!! 秘密結社デッドバニー団.
Like most of theirs it involves impregnantion/pregnancy. Also like most of theirs it involves loli so I won't be posting a link.

I haven't played it yet, but from the description you play as the new head of an evil organisation. You capture heroines and use them to make money to fund your organisation.

Edit:
 
Last edited:
Like most of theirs it involves impregnantion/pregnancy. Also like most of theirs it involves loli so I won't be posting a link.
You are allowed to link to a store page, what isn't allowed for Loli/Shota are direct download links.
 
[Mechanic]
I've been looking forward to this one, mainly because the art is done by my favorite pregnancy-focused dojin artists. Seriously if you haven't I highly suggest you check out the artist's work.
 
[Mechanic?/Event/Game Over] - a ryona-focused game with events where the heroine can be impregnated by various monsters (slimes/goblins/werewolves/etc.). The game is massive so I haven't done more than look at the events and gallery, but mechanic gets a "?" because I don't think she can actually fight while pregnant; instead the pregnancy has to be resolved out of combat. Most pregnancies are part of a Game Over event but some are just part of the heroine and her friends being tormented by the demons that captured them. The game is very much ryona-focused, with the circle clearly favoring electrocution and beatings. There's also a number of scenes where she's swollen but not actually pregnant; she's just that full of semen and/or sex toys.

Edit: Loli content alert I guess - there's an optional scene where the demons tamper with the MC's memory so that she remembers being tentacle raped as a child instead of being rescued like what actually happened. The game is always vague about the MC's age (I'm guessing she's 15 at most, the game keeps mentioning that she's stacked for her age), but in the scene she's "5 Years Ago".
 
Last edited:
Addendum: Pregnancy games with a male protagonist are dead, since of your list only two qualify, I think. Actually, I think male protagonists in general are in decline; games these days tend to be less "do fuck" and more "be fucked."

To each their own, I guess. But I'm sad; I want to impregnate, not be impregnated.
I agree with you on that sentiment. There is actually a need for 2 types of games when it comes to male protagonist in at least 2 different formats, one of which FOBS actually managed to almost meet to the full criteria.

1. A male protag game where the goal is to have a massive roster of monster girls of all shapes and sizes(some more feral than others), and/or some normal bland looking vanilla ass chicks all want to claim this one guy's semen for the express purpose of child rearing, and in some cases more, involving follow ups on the GO with varied fetishes.

2. A male protag game where the goal is to dominate and claim as many wombs as possible, same as before, can be from many monster girls/humanoids of all shapes and sizes as well with a whole system on managing a list of how your offsprings are handled in game either as a mechanic or a tally mark to show how much you love X character.

Both of these ideas should come in the form of a side-scroller action game much akin to FOBS and in RPGM for those whom like still images on a screen. And on top of all that these games should be handled with the passion and quality of how MYSTIC KNIGHT MAYA is being handled, content creep be damned.

There are a couple of games that have so far satisfied the itch of being an ALPHA breeder, sadly so both games are text adventure games that are surprisingly very good in their own damn right.

All in all, there is a horrible need for at least these 1 of 2 types of games to surface in order for interest to pile up and perhaps bring back a focus on male protag games with impreg/pregnancy in them.
 
Ressentiment has released a new game, called 行け!! 秘密結社デッドバニー団.
Like most of theirs it involves impregnantion/pregnancy. Also like most of theirs it involves loli so I won't be posting a link.

I haven't played it yet, but from the description you play as the new head of an evil organisation. You capture heroines and use them to make money to fund your organisation.

Edit:
Do these ever get english translations?
 
Even plants get pregnant in Princess & Conquest 💖

 

Attachments

  • PregPla.png
    PregPla.png
    890.8 KB · Views: 183
I need help with drop factory. it keeps saying "rgss202j.dll can't be found" i tried downloading it since i tried to see if i had it and nothing is working
 
I need help with drop factory. it keeps saying "rgss202j.dll can't be found" i tried downloading it since i tried to see if i had it and nothing is working
This thread is not for tech help.
 
Noticed that none to Team Niimii's games have been recommended so allow me to fix that. For the record they are all RPGs with pregnancy as a mechanic and almost all feature some form of NTR.

: Female PC. Fairly straightforward RPG which is to be expected since this was the circle's first game. Can be impregnated by both humans and monsters.

: Female PC. Also a standard RPG but with a fun twist. The PC has a disease that will turn her into a tentacle monster in 100 days unless you finds a cure. However having sex with a man will delay the transformation and give you more time. It actually gives you a reason to go around having sex. And of course there are a plethora of different tentacle monsters to fight/get fucked by.

: Small sequel/stand alone expansion of the first game. Once again can be impregnated by men and monsters, though there's only one human dude to have sex with.

: Male PC, three female MCs. The first of the circle's games to heavily feature NTR. Player can romance and impregnate three girls. All of the girls can be NTRed, some sharing similar events while others having unique ones. AFAIK there doesn't seem to be any penalty for letting them get NTRed so feel free to do whatever.

: Female PC. There are four different endings, one for a normal playthrough and three depending on which male MC you choose to be with (boyfriend with glasses, red hair dude, village chief). There are also a few minor NPCs to fuck as well as monsters that can rape you mid battle after you lose your virginity.

: Male PC, five female MCs. Player can date and impregnate four of the MCs (the fifth is his little sister and thus off limits) as well as a few nameless female NPCs hidden around. Is honestly my least favorite of the circle's games due to how mean it is toward the PC if you allow any of the girls to be NTRed.

: Male PC, two female MCs. This one is unique in that it's more of a light survival game where you need to go around gathering materials for various purposes. Can get very grindy.

: Female PC. Another more feature rich sequel to Mii no Tabi. Largely the same gameplay-wise though sex scenes are now animated.
 
I wrote a bit of code for fun, I didn't test it.

The code will work for any game to integrate a pregnancy system into it.
Or you can use it as a reference for developing your own pregnancy system. (C) NeedSomeSleep
Maybe it's helps somehow
(In original thread has some code for unreal)


Java:
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class Main : MonoBehaviour
{
    /**
     * If this parameter is enabled, then the sperm that has just entered the uterus has a higher chance of fertilization
     * than the sperm that was in the uterus.
     */
    public static readonly bool WHEN_EJACULATE_WE_TRY_IMPREGNATE = true;
}

public class Engine
{
    /**
     * you need to replace it otherwise the engine will be overloaded.
     */
    public static readonly float UPDATE_INTERVAL = 1f;
    public static readonly System.Random RANDOM = new System.Random();
}

public class Ovary
{
    private double eggPerTime = 0.001;
    private double ovums = 200;

    public void Update()
    {
        ovums += eggPerTime;
    }

    public List<Egg> Ovulate()
    {
        if (ovums < 1)
            return new List<Egg>();

        int count = Engine.RANDOM.Next(2);

        if (count > ovums)
            count = 1;

        ovums -= count;

        List<Egg> eggs = new List<Egg>();
        for (int i = 0; i < count; i++)
        {
            eggs.Add(new Egg());
        }

        return eggs;
    }

    public List<Egg> ForceOvulate()
    {
        return ForceOvulate(2);
    }

    public List<Egg> ForceOvulate(int maxCount)
    {
        int count = Engine.RANDOM.Next(maxCount);

        List<Egg> eggs = new List<Egg>();

        for (int i = 0; i < count; i++)
        {
            eggs.Add(new Egg());
        }

        return eggs;
    }
}

public class Womb : MonoBehaviour
{
    private readonly double maxCapacity = 18.0D;
    private double usedCapacity = 0.0D;
    private readonly List<Ovary> ovaries = new List<Ovary> { new Ovary(), new Ovary() };
    private readonly List<Sperm> availableSperm = new List<Sperm>();
    private readonly List<Egg> availableEggs = new List<Egg>();
    private readonly List<Egg> fertilizedEggs = new List<Egg>();
    private readonly List<Fetus> fetuses = new List<Fetus>();

    /**
     * The engine must have an update, this method needs to be linked to it, but each engine has different updates
     * that occur with different tick-rates, so you need to find the right one, and also adjust UPDATE_INTERVAL
     */
    void Update()
    {
        UpdateOvaries();
        UpdateFetuses();
        UpdateSperm(availableSperm);
        UpdateFertilizedEggsIntoFetuses();
    }

    public void Ovulate()
    {
        foreach (var ovary in ovaries)
        {
            ovary.Ovulate();
        }
    }

    public void ForceOvulate()
    {
        foreach (var ovary in ovaries)
        {
            ovary.ForceOvulate(Engine.RANDOM.Next(10));
        }
    }

    private void UpdateOvaries()
    {
        foreach (var ovary in ovaries)
        {
            ovary.Update();

            var newEggs = ovary.Ovulate();
            availableEggs.AddRange(newEggs);
        }
    }

    public void Ejaculate(List<Sperm> cum)
    {
        if (Main.WHEN_EJACULATE_WE_TRY_IMPREGNATE)
            AddSpermAndTryImpregnate(cum);
        else
            AddSperm(cum);
    }

    private void AddSperm(List<Sperm> cum)
    {
        availableSperm.AddRange(cum);
    }

    private void AddSpermAndTryImpregnate(List<Sperm> cum)
    {
        // After this we receive in 'cum' not used sperm;
        UpdateSperm(cum);

        // Then we add not used sperm to other available sperm
        AddSperm(cum);
    }

    public int TryCleanWomb()
    {
        int size = availableSperm.Count;

        int countSpermClean = Engine.RANDOM.Next(size);

        for (int i = 0; i < countSpermClean; i++)
        {
            int cleanIndex = Engine.RANDOM.Next(availableSperm.Count);

            if (availableSperm.Count - 1 < cleanIndex)
                continue;

            int chance = Engine.RANDOM.Next(100);
            if (chance > availableSperm[cleanIndex].GetChanceToClean())
                availableSperm.RemoveAt(cleanIndex);
        }

        return countSpermClean;
    }

    public Fetus BirthOne()
    {
        for (int i = 0; i < fetuses.Count; i++)
        {
            Fetus fetus = fetuses[i];

            if (fetus.IsReadyToBirth())
            {
                usedCapacity -= fetus.GetSize();
                fetuses.RemoveAt(i);
                return fetus;
            }
        }

        return null;
    }

    public HashSet<Fetus> BirthEverything()
    {
        HashSet<Fetus> birthed = new HashSet<Fetus>();

        for (int i = fetuses.Count - 1; i >= 0; i--)
        {
            Fetus fetus = fetuses[i];

            if (fetus.IsReadyToBirth())
            {
                usedCapacity -= fetus.GetSize();
                fetuses.RemoveAt(i);
                birthed.Add(fetus);
            }
        }

        return birthed;
    }

    private void UpdateFetuses()
    {
        // In every update we recalculate actual used capacity
        double tempUsedCapacity = 0;

        // Fetuses always grow or we stuck into race condition
        foreach (Fetus fetus in fetuses)
        {
            fetus.UpdateUntilBirth(Engine.UPDATE_INTERVAL);
            tempUsedCapacity += fetus.GetSize();
        }

        // We do this to prevent animation bugs
        usedCapacity = tempUsedCapacity;
    }

    private void UpdateSperm(List<Sperm> sperm)
    {
        for (int i = sperm.Count - 1; i >= 0; i--)
        {
            Sperm currentSperm = sperm[i];
            currentSperm.UpdateLifeTime(Engine.UPDATE_INTERVAL);
            if (currentSperm.IsDead())
            {
                sperm.RemoveAt(i);
                continue;
            }

            bool isFertilized = TryFertilizeOneAvailableEgg(currentSperm);
            if (isFertilized)
                sperm.RemoveAt(i);
        }
    }

    private void UpdateFertilizedEggsIntoFetuses()
    {
        if (usedCapacity >= maxCapacity)
            return;

        for (int i = fertilizedEggs.Count - 1; i >= 0; i--)
        {
            Egg fertilizedEgg = fertilizedEggs[i];

            if (!IsEggHasEnoughCapacityToGrow(fertilizedEgg))
            {
                fertilizedEgg.Pause();
                continue;
            }

            FetusSize fetusSize = fertilizedEgg.GetFertilizedBy().GetFetusSize();
            Monster producer = fertilizedEgg.GetFertilizedBy().GetProducer();

            Fetus fetus = new Fetus(fetusSize, fetusSize.CalcUntilBirth(), producer);
            fertilizedEggs.RemoveAt(i);
            fetuses.Add(fetus);
            fetus.UpdateUntilBirth(Engine.UPDATE_INTERVAL);
        }
    }

    public bool IsEggHasEnoughCapacityToGrow(Egg egg)
    {
        if (!egg.IsFertilized())
            return false;

        double maxFetusCapacity = egg.GetFertilizedBy().GetFetusSize().GetMaxCapacity();

        return usedCapacity + maxFetusCapacity < maxCapacity;
    }

    private bool TryFertilizeOneAvailableEgg(Sperm currentSperm)
    {
        for (int i = availableEggs.Count - 1; i >= 0; i--)
        {
            Egg currentEgg = availableEggs[i];
            bool isFertilized = currentEgg.TryFertilize(currentSperm);

            if (!isFertilized)
                continue;

            availableEggs.RemoveAt(i);
            fertilizedEggs.Add(currentEgg);
            return true;
        }

        return false;
    }

    public double GetMaxCapacity()
    {
        return maxCapacity;
    }

    public double GetUsedCapacity()
    {
        return usedCapacity;
    }

    public List<Sperm> GetAvailableSperm()
    {
        return availableSperm.AsReadOnly().ToList();
    }

    public List<Egg> GetAvailableEggs()
    {
        return availableEggs.AsReadOnly().ToList();
    }

    public List<Egg> GetFertilizedEggs()
    {
        return fertilizedEggs.AsReadOnly().ToList();
    }

    public List<Fetus> GetFetuses()
    {
        return fetuses.AsReadOnly().ToList();
    }
}

public class Egg : Lifetime
{
    private int defense = 100;
    private double fertilizeChance;
    private Sperm fertilizedBy;
    private long pauseTime = 0L;
    private long lifetime = 100_000;

    public bool TryFertilize(Sperm sperm)
    {
        if (IsFertilized())
            return false;

        if (UnityEngine.Random.value > fertilizeChance)
        {
            fertilizedBy = sperm;
            defense = 0;
            return true;
        }

        defense -= sperm.GetAttackPower();
        if (defense <= 0)
        {
            fertilizedBy = sperm;
            return true;
        }

        return false;
    }

    public bool IsFertilized()
    {
        return fertilizedBy != null;
    }

    public int GetDefense()
    {
        return defense;
    }

    public double GetFertilizeChance()
    {
        return fertilizeChance;
    }

    public Sperm GetFertilizedBy()
    {
        return fertilizedBy;
    }

    public long GetPauseTime()
    {
        return pauseTime;
    }

    public long Pause()
    {
        return pauseTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
    }

    public long GetLifetime()
    {
        return lifetime;
    }

    public void SetLifetime(long lifetime)
    {
        this.lifetime = lifetime;
    }
}

public class Fetus
{
    private readonly FetusSize fetusSize;
    private double untilBirth;
    private double size;
    private readonly Monster producer;

    public Fetus(FetusSize fetusSize, double untilBirth, Monster producer)
    {
        this.fetusSize = fetusSize;
        this.untilBirth = untilBirth;
        this.size = 0;
        this.producer = producer;
    }

    public FetusSize GetFetusSize()
    {
        return fetusSize;
    }

    public double GetUntilBirth()
    {
        return untilBirth;
    }

    public double GetSize()
    {
        return size;
    }

    public Monster GetProducer()
    {
        return producer;
    }

    public void UpdateUntilBirth(float minusTime)
    {
        untilBirth = Math.Max(0, untilBirth - minusTime);
        size += fetusSize.GetDefaultGrowRate();
    }

    public bool IsReadyToBirth()
    {
        return untilBirth <= 0;
    }
}

/**
* Types of creature sizes and by default growth rates
*/
public enum FetusSize
{
    PARASITE(0.01, 0.001),
    VERY_SMALL(0.1, 0.001),
    SMALL(1, 0.01),
    NORMAL(3, 0.01),
    BIG(5, 0.01),
    GIANT(7, 0.01),
    VERY_GIANT(9, 0.01);

    private readonly double maxCapacity;
    private readonly double defaultGrowRate;

    FetusSize(double maxCapacity, double defaultGrowRate)
    {
        this.maxCapacity = maxCapacity;
        this.defaultGrowRate = defaultGrowRate;
    }

    public double CalcUntilBirth(double growRate)
    {
        return maxCapacity / growRate;
    }

    public double CalcUntilBirth()
    {
        return CalcUntilBirth(defaultGrowRate);
    }

    public double GetMaxCapacity()
    {
        return maxCapacity;
    }

    public double GetDefaultGrowRate()
    {
        return defaultGrowRate;
    }
}

public class Sperm : Lifetime
{
    private int attackPower = 1;
    private FetusSize fetusSize;
    private long lifetime = 100;
    private int chanceToClean = 50;
    private Monster producer;

    public int GetAttackPower()
    {
        return attackPower;
    }

    public FetusSize GetFetusSize()
    {
        return fetusSize;
    }

    public long GetLifetime()
    {
        return lifetime;
    }

    public void SetLifetime(long lifetime)
    {
        this.lifetime = lifetime;
    }

    public Monster GetProducer()
    {
        return producer;
    }

    public void UpdateLifeTime(long minusTime)
    {
        lifetime = Math.Max(0, lifetime - minusTime);
    }

    public bool IsDead()
    {
        return lifetime == 0;
    }

    public bool IsAlive()
    {
        return lifetime > 0;
    }

    public int GetChanceToClean()
    {
        return chanceToClean;
    }
}

public class Monster
{
    // Monster properties

    public Sperm GetSpermType()
    {
        return new Sperm();
    }
}

public interface Lifetime
{
    long GetLifetime();
    void SetLifetime(long lifetime);

    default bool IsDead()
    {
        return GetLifetime() == 0;
    }

    default bool IsAlive()
    {
        return GetLifetime() > 0;
    }

    default void UpdateLifeTime(long minusTime)
    {
        if (GetLifetime() - minusTime < 0)
        {
            SetLifetime(0);
            return;
        }

        SetLifetime(GetLifetime() - minusTime);
    }
}

JavaScript:
class Main {
    static WHEN_EJACULATE_WE_TRY_IMPREGNATE = true;
}

class Engine {
    static UPDATE_INTERVAL = 1;
    static RANDOM = Math.random;
}

class Ovary {
    constructor() {
        this.eggPerTime = 0.001;
        this.ovums = 200;
    }

    update() {
        this.ovums += this.eggPerTime;
    }

    ovulate() {
        if (this.ovums < 1) return [];
      
        let count = Math.floor(Engine.RANDOM() * 2);
      
        if (count > this.ovums) count = 1;
      
        this.ovums -= count;

        const eggs = [];
        for (let i = 0; i < count; i++) {
            eggs.push(new Egg());
        }
      
        return eggs;
    }

    forceOvulate(maxCount = 2) {
        let count = Math.floor(Engine.RANDOM() * maxCount);
      
        const eggs = [];
      
        for (let i = 0; i < count; i++) {
            eggs.push(new Egg());
        }
      
        return eggs;
    }
}

class Womb {
    constructor() {
        this.maxCapacity = 18.0;
        this.usedCapacity = 0.0;
        this.ovaries = [new Ovary(), new Ovary()];
        this.availableSperm = [];
        this.availableEggs = [];
        this.fertilizedEggs = [];
        this.fetuses = [];
    }

    update() {
        this.updateOvaries();
        this.updateFetuses();
        this.updateSperm(this.availableSperm);
        this.updateFertilizedEggsIntoFetuses();
    }

    ovulate() {
        this.ovaries.forEach(ovary => ovary.ovulate());
    }

    forceOvulate() {
        this.ovaries.forEach(ovary => ovary.forceOvulate(Math.floor(Engine.RANDOM() * 10)));
    }

    updateOvaries() {
        this.ovaries.forEach(ovary => {
            ovary.update();
            const newEggs = ovary.ovulate();
            this.availableEggs.push(...newEggs);
        });
    }

    ejaculate(cum) {
        if (Main.WHEN_EJACULATE_WE_TRY_IMPREGNATE) {
            this.addSpermAndTryImpregnate(cum);
        } else {
            this.addSperm(cum);
        }
    }

    addSperm(cum) {
        this.availableSperm.push(...cum);
    }

    addSpermAndTryImpregnate(cum) {
        this.updateSperm(cum);
        this.addSperm(cum);
    }

    tryCleanWomb() {
        const size = this.availableSperm.length;
        const countSpermClean = Math.floor(Engine.RANDOM() * size);

        for (let i = 0; i < countSpermClean; i++) {
            const cleanIndex = Math.floor(Engine.RANDOM() * this.availableSperm.length);
            if (this.availableSperm.length - 1 < cleanIndex) continue;

            const chance = Math.floor(Engine.RANDOM() * 100);
            if (chance > this.availableSperm[cleanIndex].getChanceToClean()) {
                this.availableSperm.splice(cleanIndex, 1);
            }
        }

        return countSpermClean;
    }

    birthOne() {
        for (let i = 0; i < this.fetuses.length; i++) {
            const fetus = this.fetuses[i];
            if (fetus.isReadyToBirth()) {
                this.usedCapacity -= fetus.getSize();
                this.fetuses.splice(i, 1);
                return fetus;
            }
        }
        return null;
    }

    birthEverything() {
        const birthed = [];
        for (let i = 0; i < this.fetuses.length; i++) {
            const fetus = this.fetuses[i];
            if (fetus.isReadyToBirth()) {
                this.usedCapacity -= fetus.getSize();
                birthed.push(this.fetuses.splice(i, 1)[0]);
                i--;
            }
        }
        return birthed;
    }

    updateFetuses() {
        let tempUsedCapacity = 0;
        this.fetuses.forEach(fetus => {
            fetus.updateUntilBirth(Engine.UPDATE_INTERVAL);
            tempUsedCapacity += fetus.getSize();
        });
        this.usedCapacity = tempUsedCapacity;
    }

    updateSperm(sperm) {
        for (let i = sperm.length - 1; i >= 0; i--) {
            const currentSperm = sperm[i];
            currentSperm.updateLifeTime(Engine.UPDATE_INTERVAL);
            if (currentSperm.isDead()) {
                sperm.splice(i, 1);
                continue;
            }

            const isFertilized = this.tryFertilizeOneAvailableEgg(currentSperm);
            if (isFertilized) sperm.splice(i, 1);
        }
    }

    updateFertilizedEggsIntoFetuses() {
        if (this.usedCapacity >= this.maxCapacity) return;

        for (let i = 0; i < this.fertilizedEggs.length; i++) {
            const fertilizedEgg = this.fertilizedEggs[i];

            if (!this.isEggHasEnoughCapacityToGrow(fertilizedEgg)) {
                fertilizedEgg.pause();
                continue;
            }

            const fetusSize = fertilizedEgg.getFertilizedBy().getFetusSize();
            const producer = fertilizedEgg.getFertilizedBy().getProducer();

            const fetus = new Fetus(fetusSize, fetusSize.calcUntilBirth(), producer);
            this.fertilizedEggs.splice(i, 1);
            this.fetuses.push(fetus);
            fetus.updateUntilBirth(Engine.UPDATE_INTERVAL);
        }
    }

    isEggHasEnoughCapacityToGrow(egg) {
        if (!egg.isFertilized()) return false;

        const maxFetusCapacity = egg.getFertilizedBy().getFetusSize().getMaxCapacity();
        return this.usedCapacity + maxFetusCapacity < this.maxCapacity;
    }

    tryFertilizeOneAvailableEgg(currentSperm) {
        for (let i = 0; i < this.availableEggs.length; i++) {
            const currentEgg = this.availableEggs[i];
            const isFertilized = currentEgg.tryFertilize(currentSperm);

            if (!isFertilized) continue;

            this.availableEggs.splice(i, 1);
            this.fertilizedEggs.push(currentEgg);
            return true;
        }
        return false;
    }

    getMaxCapacity() {
        return this.maxCapacity;
    }

    getUsedCapacity() {
        return this.usedCapacity;
    }

    getAvailableSperm() {
        return [...this.availableSperm];
    }

    getAvailableEggs() {
        return [...this.availableEggs];
    }

    getFertilizedEggs() {
        return [...this.fertilizedEggs];
    }

    getFetuses() {
        return [...this.fetuses];
    }
}

class Egg {
    constructor() {
        this.defense = 100;
        this.fertilizeChance = Math.random();
        this.fertilizedBy = null;
        this.pauseTime = 0;
        this.lifetime = 100000;
    }

    tryFertilize(sperm) {
        if (this.isFertilized()) return false;

        if (Math.random() > this.fertilizeChance) {
            this.fertilizedBy = sperm;
            this.defense = 0;
            return true;
        }

        this.defense -= sperm.getAttackPower();
        if (this.defense <= 0) {
            this.fertilizedBy = sperm;
            return true;
        }

        return false;
    }

    isFertilized() {
        return this.fertilizedBy !== null;
    }

    getDefense() {
        return this.defense;
    }

    getFertilizeChance() {
        return this.fertilizeChance;
    }

    getFertilizedBy() {
        return this.fertilizedBy;
    }

    getPauseTime() {
        return this.pauseTime;
    }

    pause() {
        return this.pauseTime = Date.now();
    }

    getLifetime() {
        return this.lifetime;
    }

    setLifetime(lifetime) {
        this.lifetime = lifetime;
    }
}

class Fetus {
    constructor(fetusSize, untilBirth, producer) {
        this.fetusSize = fetusSize;
        this.untilBirth = untilBirth;
        this.size = 0;
        this.producer = producer;
    }

    getFetusSize() {
        return this.fetusSize;
    }

    getUntilBirth() {
        return this.untilBirth;
    }

    getSize() {
        return this.size;
    }

    getProducer() {
        return this.producer;
    }

    updateUntilBirth(minusTime) {
        if (this.untilBirth - minusTime < 0) {
            this.untilBirth = 0;
            return;
        }

        this.size += this.fetusSize.getDefaultGrowRate();
        this.untilBirth -= minusTime;
    }

    isReadyToBirth() {
        return this.untilBirth <= 0;
    }
}

const FetusSize = {
    PARASITE: { maxCapacity: 0.01, defaultGrowRate: 0.001 },
    VERY_SMALL: { maxCapacity: 0.1, defaultGrowRate: 0.001 },
    SMALL: { maxCapacity: 1, defaultGrowRate: 0.01 },
    NORMAL: { maxCapacity: 3, defaultGrowRate: 0.01 },
    BIG: { maxCapacity: 5, defaultGrowRate: 0.01 },
    GIANT: { maxCapacity: 7, defaultGrowRate: 0.01 },
    VERY_GIANT: { maxCapacity: 9, defaultGrowRate: 0.01 },
};


for (const size in FetusSize) {
    FetusSize[size].calcUntilBirth = function(growRate = this.defaultGrowRate) {
        return this.maxCapacity / growRate;
    };
}

class Sperm {
    constructor() {
        this.attackPower = 1;
        this.fetusSize = null;
        this.lifetime = 100;
        this.chanceToClean = 50;
        this.producer = null;
    }

    getAttackPower() {
        return this.attackPower;
    }

    getFetusSize() {
        return this.fetusSize;
    }

    getLifetime() {
        return this.lifetime;
    }

    setLifetime(lifetime) {
        this.lifetime = lifetime;
    }

    getProducer() {
        return this.producer;
    }

    updateLifeTime(minusTime) {
        if (this.lifetime - minusTime < 0) {
            this.lifetime = 0;
            return;
        }
        this.lifetime -= minusTime;
    }

    isDead() {
        return this.lifetime === 0;
    }

    isAlive() {
        return this.lifetime > 0;
    }

    getChanceToClean() {
        return this.chanceToClean;
    }
}

class Monster {
    getSpermType() {
        return new Sperm();
    }
}


const womb = new Womb();
womb.update();
 
Maybe it's helps somehow
(In original thread has some code for unreal)


Java:
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class Main : MonoBehaviour
{
    /**
     * If this parameter is enabled, then the sperm that has just entered the uterus has a higher chance of fertilization
     * than the sperm that was in the uterus.
     */
    public static readonly bool WHEN_EJACULATE_WE_TRY_IMPREGNATE = true;
}

public class Engine
{
    /**
     * you need to replace it otherwise the engine will be overloaded.
     */
    public static readonly float UPDATE_INTERVAL = 1f;
    public static readonly System.Random RANDOM = new System.Random();
}

public class Ovary
{
    private double eggPerTime = 0.001;
    private double ovums = 200;

    public void Update()
    {
        ovums += eggPerTime;
    }

    public List<Egg> Ovulate()
    {
        if (ovums < 1)
            return new List<Egg>();

        int count = Engine.RANDOM.Next(2);

        if (count > ovums)
            count = 1;

        ovums -= count;

        List<Egg> eggs = new List<Egg>();
        for (int i = 0; i < count; i++)
        {
            eggs.Add(new Egg());
        }

        return eggs;
    }

    public List<Egg> ForceOvulate()
    {
        return ForceOvulate(2);
    }

    public List<Egg> ForceOvulate(int maxCount)
    {
        int count = Engine.RANDOM.Next(maxCount);

        List<Egg> eggs = new List<Egg>();

        for (int i = 0; i < count; i++)
        {
            eggs.Add(new Egg());
        }

        return eggs;
    }
}

public class Womb : MonoBehaviour
{
    private readonly double maxCapacity = 18.0D;
    private double usedCapacity = 0.0D;
    private readonly List<Ovary> ovaries = new List<Ovary> { new Ovary(), new Ovary() };
    private readonly List<Sperm> availableSperm = new List<Sperm>();
    private readonly List<Egg> availableEggs = new List<Egg>();
    private readonly List<Egg> fertilizedEggs = new List<Egg>();
    private readonly List<Fetus> fetuses = new List<Fetus>();

    /**
     * The engine must have an update, this method needs to be linked to it, but each engine has different updates
     * that occur with different tick-rates, so you need to find the right one, and also adjust UPDATE_INTERVAL
     */
    void Update()
    {
        UpdateOvaries();
        UpdateFetuses();
        UpdateSperm(availableSperm);
        UpdateFertilizedEggsIntoFetuses();
    }

    public void Ovulate()
    {
        foreach (var ovary in ovaries)
        {
            ovary.Ovulate();
        }
    }

    public void ForceOvulate()
    {
        foreach (var ovary in ovaries)
        {
            ovary.ForceOvulate(Engine.RANDOM.Next(10));
        }
    }

    private void UpdateOvaries()
    {
        foreach (var ovary in ovaries)
        {
            ovary.Update();

            var newEggs = ovary.Ovulate();
            availableEggs.AddRange(newEggs);
        }
    }

    public void Ejaculate(List<Sperm> cum)
    {
        if (Main.WHEN_EJACULATE_WE_TRY_IMPREGNATE)
            AddSpermAndTryImpregnate(cum);
        else
            AddSperm(cum);
    }

    private void AddSperm(List<Sperm> cum)
    {
        availableSperm.AddRange(cum);
    }

    private void AddSpermAndTryImpregnate(List<Sperm> cum)
    {
        // After this we receive in 'cum' not used sperm;
        UpdateSperm(cum);

        // Then we add not used sperm to other available sperm
        AddSperm(cum);
    }

    public int TryCleanWomb()
    {
        int size = availableSperm.Count;

        int countSpermClean = Engine.RANDOM.Next(size);

        for (int i = 0; i < countSpermClean; i++)
        {
            int cleanIndex = Engine.RANDOM.Next(availableSperm.Count);

            if (availableSperm.Count - 1 < cleanIndex)
                continue;

            int chance = Engine.RANDOM.Next(100);
            if (chance > availableSperm[cleanIndex].GetChanceToClean())
                availableSperm.RemoveAt(cleanIndex);
        }

        return countSpermClean;
    }

    public Fetus BirthOne()
    {
        for (int i = 0; i < fetuses.Count; i++)
        {
            Fetus fetus = fetuses[i];

            if (fetus.IsReadyToBirth())
            {
                usedCapacity -= fetus.GetSize();
                fetuses.RemoveAt(i);
                return fetus;
            }
        }

        return null;
    }

    public HashSet<Fetus> BirthEverything()
    {
        HashSet<Fetus> birthed = new HashSet<Fetus>();

        for (int i = fetuses.Count - 1; i >= 0; i--)
        {
            Fetus fetus = fetuses[i];

            if (fetus.IsReadyToBirth())
            {
                usedCapacity -= fetus.GetSize();
                fetuses.RemoveAt(i);
                birthed.Add(fetus);
            }
        }

        return birthed;
    }

    private void UpdateFetuses()
    {
        // In every update we recalculate actual used capacity
        double tempUsedCapacity = 0;

        // Fetuses always grow or we stuck into race condition
        foreach (Fetus fetus in fetuses)
        {
            fetus.UpdateUntilBirth(Engine.UPDATE_INTERVAL);
            tempUsedCapacity += fetus.GetSize();
        }

        // We do this to prevent animation bugs
        usedCapacity = tempUsedCapacity;
    }

    private void UpdateSperm(List<Sperm> sperm)
    {
        for (int i = sperm.Count - 1; i >= 0; i--)
        {
            Sperm currentSperm = sperm[i];
            currentSperm.UpdateLifeTime(Engine.UPDATE_INTERVAL);
            if (currentSperm.IsDead())
            {
                sperm.RemoveAt(i);
                continue;
            }

            bool isFertilized = TryFertilizeOneAvailableEgg(currentSperm);
            if (isFertilized)
                sperm.RemoveAt(i);
        }
    }

    private void UpdateFertilizedEggsIntoFetuses()
    {
        if (usedCapacity >= maxCapacity)
            return;

        for (int i = fertilizedEggs.Count - 1; i >= 0; i--)
        {
            Egg fertilizedEgg = fertilizedEggs[i];

            if (!IsEggHasEnoughCapacityToGrow(fertilizedEgg))
            {
                fertilizedEgg.Pause();
                continue;
            }

            FetusSize fetusSize = fertilizedEgg.GetFertilizedBy().GetFetusSize();
            Monster producer = fertilizedEgg.GetFertilizedBy().GetProducer();

            Fetus fetus = new Fetus(fetusSize, fetusSize.CalcUntilBirth(), producer);
            fertilizedEggs.RemoveAt(i);
            fetuses.Add(fetus);
            fetus.UpdateUntilBirth(Engine.UPDATE_INTERVAL);
        }
    }

    public bool IsEggHasEnoughCapacityToGrow(Egg egg)
    {
        if (!egg.IsFertilized())
            return false;

        double maxFetusCapacity = egg.GetFertilizedBy().GetFetusSize().GetMaxCapacity();

        return usedCapacity + maxFetusCapacity < maxCapacity;
    }

    private bool TryFertilizeOneAvailableEgg(Sperm currentSperm)
    {
        for (int i = availableEggs.Count - 1; i >= 0; i--)
        {
            Egg currentEgg = availableEggs[i];
            bool isFertilized = currentEgg.TryFertilize(currentSperm);

            if (!isFertilized)
                continue;

            availableEggs.RemoveAt(i);
            fertilizedEggs.Add(currentEgg);
            return true;
        }

        return false;
    }

    public double GetMaxCapacity()
    {
        return maxCapacity;
    }

    public double GetUsedCapacity()
    {
        return usedCapacity;
    }

    public List<Sperm> GetAvailableSperm()
    {
        return availableSperm.AsReadOnly().ToList();
    }

    public List<Egg> GetAvailableEggs()
    {
        return availableEggs.AsReadOnly().ToList();
    }

    public List<Egg> GetFertilizedEggs()
    {
        return fertilizedEggs.AsReadOnly().ToList();
    }

    public List<Fetus> GetFetuses()
    {
        return fetuses.AsReadOnly().ToList();
    }
}

public class Egg : Lifetime
{
    private int defense = 100;
    private double fertilizeChance;
    private Sperm fertilizedBy;
    private long pauseTime = 0L;
    private long lifetime = 100_000;

    public bool TryFertilize(Sperm sperm)
    {
        if (IsFertilized())
            return false;

        if (UnityEngine.Random.value > fertilizeChance)
        {
            fertilizedBy = sperm;
            defense = 0;
            return true;
        }

        defense -= sperm.GetAttackPower();
        if (defense <= 0)
        {
            fertilizedBy = sperm;
            return true;
        }

        return false;
    }

    public bool IsFertilized()
    {
        return fertilizedBy != null;
    }

    public int GetDefense()
    {
        return defense;
    }

    public double GetFertilizeChance()
    {
        return fertilizeChance;
    }

    public Sperm GetFertilizedBy()
    {
        return fertilizedBy;
    }

    public long GetPauseTime()
    {
        return pauseTime;
    }

    public long Pause()
    {
        return pauseTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
    }

    public long GetLifetime()
    {
        return lifetime;
    }

    public void SetLifetime(long lifetime)
    {
        this.lifetime = lifetime;
    }
}

public class Fetus
{
    private readonly FetusSize fetusSize;
    private double untilBirth;
    private double size;
    private readonly Monster producer;

    public Fetus(FetusSize fetusSize, double untilBirth, Monster producer)
    {
        this.fetusSize = fetusSize;
        this.untilBirth = untilBirth;
        this.size = 0;
        this.producer = producer;
    }

    public FetusSize GetFetusSize()
    {
        return fetusSize;
    }

    public double GetUntilBirth()
    {
        return untilBirth;
    }

    public double GetSize()
    {
        return size;
    }

    public Monster GetProducer()
    {
        return producer;
    }

    public void UpdateUntilBirth(float minusTime)
    {
        untilBirth = Math.Max(0, untilBirth - minusTime);
        size += fetusSize.GetDefaultGrowRate();
    }

    public bool IsReadyToBirth()
    {
        return untilBirth <= 0;
    }
}

/**
* Types of creature sizes and by default growth rates
*/
public enum FetusSize
{
    PARASITE(0.01, 0.001),
    VERY_SMALL(0.1, 0.001),
    SMALL(1, 0.01),
    NORMAL(3, 0.01),
    BIG(5, 0.01),
    GIANT(7, 0.01),
    VERY_GIANT(9, 0.01);

    private readonly double maxCapacity;
    private readonly double defaultGrowRate;

    FetusSize(double maxCapacity, double defaultGrowRate)
    {
        this.maxCapacity = maxCapacity;
        this.defaultGrowRate = defaultGrowRate;
    }

    public double CalcUntilBirth(double growRate)
    {
        return maxCapacity / growRate;
    }

    public double CalcUntilBirth()
    {
        return CalcUntilBirth(defaultGrowRate);
    }

    public double GetMaxCapacity()
    {
        return maxCapacity;
    }

    public double GetDefaultGrowRate()
    {
        return defaultGrowRate;
    }
}

public class Sperm : Lifetime
{
    private int attackPower = 1;
    private FetusSize fetusSize;
    private long lifetime = 100;
    private int chanceToClean = 50;
    private Monster producer;

    public int GetAttackPower()
    {
        return attackPower;
    }

    public FetusSize GetFetusSize()
    {
        return fetusSize;
    }

    public long GetLifetime()
    {
        return lifetime;
    }

    public void SetLifetime(long lifetime)
    {
        this.lifetime = lifetime;
    }

    public Monster GetProducer()
    {
        return producer;
    }

    public void UpdateLifeTime(long minusTime)
    {
        lifetime = Math.Max(0, lifetime - minusTime);
    }

    public bool IsDead()
    {
        return lifetime == 0;
    }

    public bool IsAlive()
    {
        return lifetime > 0;
    }

    public int GetChanceToClean()
    {
        return chanceToClean;
    }
}

public class Monster
{
    // Monster properties

    public Sperm GetSpermType()
    {
        return new Sperm();
    }
}

public interface Lifetime
{
    long GetLifetime();
    void SetLifetime(long lifetime);

    default bool IsDead()
    {
        return GetLifetime() == 0;
    }

    default bool IsAlive()
    {
        return GetLifetime() > 0;
    }

    default void UpdateLifeTime(long minusTime)
    {
        if (GetLifetime() - minusTime < 0)
        {
            SetLifetime(0);
            return;
        }

        SetLifetime(GetLifetime() - minusTime);
    }
}

JavaScript:
class Main {
    static WHEN_EJACULATE_WE_TRY_IMPREGNATE = true;
}

class Engine {
    static UPDATE_INTERVAL = 1;
    static RANDOM = Math.random;
}

class Ovary {
    constructor() {
        this.eggPerTime = 0.001;
        this.ovums = 200;
    }

    update() {
        this.ovums += this.eggPerTime;
    }

    ovulate() {
        if (this.ovums < 1) return [];
     
        let count = Math.floor(Engine.RANDOM() * 2);
     
        if (count > this.ovums) count = 1;
     
        this.ovums -= count;

        const eggs = [];
        for (let i = 0; i < count; i++) {
            eggs.push(new Egg());
        }
     
        return eggs;
    }

    forceOvulate(maxCount = 2) {
        let count = Math.floor(Engine.RANDOM() * maxCount);
     
        const eggs = [];
     
        for (let i = 0; i < count; i++) {
            eggs.push(new Egg());
        }
     
        return eggs;
    }
}

class Womb {
    constructor() {
        this.maxCapacity = 18.0;
        this.usedCapacity = 0.0;
        this.ovaries = [new Ovary(), new Ovary()];
        this.availableSperm = [];
        this.availableEggs = [];
        this.fertilizedEggs = [];
        this.fetuses = [];
    }

    update() {
        this.updateOvaries();
        this.updateFetuses();
        this.updateSperm(this.availableSperm);
        this.updateFertilizedEggsIntoFetuses();
    }

    ovulate() {
        this.ovaries.forEach(ovary => ovary.ovulate());
    }

    forceOvulate() {
        this.ovaries.forEach(ovary => ovary.forceOvulate(Math.floor(Engine.RANDOM() * 10)));
    }

    updateOvaries() {
        this.ovaries.forEach(ovary => {
            ovary.update();
            const newEggs = ovary.ovulate();
            this.availableEggs.push(...newEggs);
        });
    }

    ejaculate(cum) {
        if (Main.WHEN_EJACULATE_WE_TRY_IMPREGNATE) {
            this.addSpermAndTryImpregnate(cum);
        } else {
            this.addSperm(cum);
        }
    }

    addSperm(cum) {
        this.availableSperm.push(...cum);
    }

    addSpermAndTryImpregnate(cum) {
        this.updateSperm(cum);
        this.addSperm(cum);
    }

    tryCleanWomb() {
        const size = this.availableSperm.length;
        const countSpermClean = Math.floor(Engine.RANDOM() * size);

        for (let i = 0; i < countSpermClean; i++) {
            const cleanIndex = Math.floor(Engine.RANDOM() * this.availableSperm.length);
            if (this.availableSperm.length - 1 < cleanIndex) continue;

            const chance = Math.floor(Engine.RANDOM() * 100);
            if (chance > this.availableSperm[cleanIndex].getChanceToClean()) {
                this.availableSperm.splice(cleanIndex, 1);
            }
        }

        return countSpermClean;
    }

    birthOne() {
        for (let i = 0; i < this.fetuses.length; i++) {
            const fetus = this.fetuses[i];
            if (fetus.isReadyToBirth()) {
                this.usedCapacity -= fetus.getSize();
                this.fetuses.splice(i, 1);
                return fetus;
            }
        }
        return null;
    }

    birthEverything() {
        const birthed = [];
        for (let i = 0; i < this.fetuses.length; i++) {
            const fetus = this.fetuses[i];
            if (fetus.isReadyToBirth()) {
                this.usedCapacity -= fetus.getSize();
                birthed.push(this.fetuses.splice(i, 1)[0]);
                i--;
            }
        }
        return birthed;
    }

    updateFetuses() {
        let tempUsedCapacity = 0;
        this.fetuses.forEach(fetus => {
            fetus.updateUntilBirth(Engine.UPDATE_INTERVAL);
            tempUsedCapacity += fetus.getSize();
        });
        this.usedCapacity = tempUsedCapacity;
    }

    updateSperm(sperm) {
        for (let i = sperm.length - 1; i >= 0; i--) {
            const currentSperm = sperm[i];
            currentSperm.updateLifeTime(Engine.UPDATE_INTERVAL);
            if (currentSperm.isDead()) {
                sperm.splice(i, 1);
                continue;
            }

            const isFertilized = this.tryFertilizeOneAvailableEgg(currentSperm);
            if (isFertilized) sperm.splice(i, 1);
        }
    }

    updateFertilizedEggsIntoFetuses() {
        if (this.usedCapacity >= this.maxCapacity) return;

        for (let i = 0; i < this.fertilizedEggs.length; i++) {
            const fertilizedEgg = this.fertilizedEggs[i];

            if (!this.isEggHasEnoughCapacityToGrow(fertilizedEgg)) {
                fertilizedEgg.pause();
                continue;
            }

            const fetusSize = fertilizedEgg.getFertilizedBy().getFetusSize();
            const producer = fertilizedEgg.getFertilizedBy().getProducer();

            const fetus = new Fetus(fetusSize, fetusSize.calcUntilBirth(), producer);
            this.fertilizedEggs.splice(i, 1);
            this.fetuses.push(fetus);
            fetus.updateUntilBirth(Engine.UPDATE_INTERVAL);
        }
    }

    isEggHasEnoughCapacityToGrow(egg) {
        if (!egg.isFertilized()) return false;

        const maxFetusCapacity = egg.getFertilizedBy().getFetusSize().getMaxCapacity();
        return this.usedCapacity + maxFetusCapacity < this.maxCapacity;
    }

    tryFertilizeOneAvailableEgg(currentSperm) {
        for (let i = 0; i < this.availableEggs.length; i++) {
            const currentEgg = this.availableEggs[i];
            const isFertilized = currentEgg.tryFertilize(currentSperm);

            if (!isFertilized) continue;

            this.availableEggs.splice(i, 1);
            this.fertilizedEggs.push(currentEgg);
            return true;
        }
        return false;
    }

    getMaxCapacity() {
        return this.maxCapacity;
    }

    getUsedCapacity() {
        return this.usedCapacity;
    }

    getAvailableSperm() {
        return [...this.availableSperm];
    }

    getAvailableEggs() {
        return [...this.availableEggs];
    }

    getFertilizedEggs() {
        return [...this.fertilizedEggs];
    }

    getFetuses() {
        return [...this.fetuses];
    }
}

class Egg {
    constructor() {
        this.defense = 100;
        this.fertilizeChance = Math.random();
        this.fertilizedBy = null;
        this.pauseTime = 0;
        this.lifetime = 100000;
    }

    tryFertilize(sperm) {
        if (this.isFertilized()) return false;

        if (Math.random() > this.fertilizeChance) {
            this.fertilizedBy = sperm;
            this.defense = 0;
            return true;
        }

        this.defense -= sperm.getAttackPower();
        if (this.defense <= 0) {
            this.fertilizedBy = sperm;
            return true;
        }

        return false;
    }

    isFertilized() {
        return this.fertilizedBy !== null;
    }

    getDefense() {
        return this.defense;
    }

    getFertilizeChance() {
        return this.fertilizeChance;
    }

    getFertilizedBy() {
        return this.fertilizedBy;
    }

    getPauseTime() {
        return this.pauseTime;
    }

    pause() {
        return this.pauseTime = Date.now();
    }

    getLifetime() {
        return this.lifetime;
    }

    setLifetime(lifetime) {
        this.lifetime = lifetime;
    }
}

class Fetus {
    constructor(fetusSize, untilBirth, producer) {
        this.fetusSize = fetusSize;
        this.untilBirth = untilBirth;
        this.size = 0;
        this.producer = producer;
    }

    getFetusSize() {
        return this.fetusSize;
    }

    getUntilBirth() {
        return this.untilBirth;
    }

    getSize() {
        return this.size;
    }

    getProducer() {
        return this.producer;
    }

    updateUntilBirth(minusTime) {
        if (this.untilBirth - minusTime < 0) {
            this.untilBirth = 0;
            return;
        }

        this.size += this.fetusSize.getDefaultGrowRate();
        this.untilBirth -= minusTime;
    }

    isReadyToBirth() {
        return this.untilBirth <= 0;
    }
}

const FetusSize = {
    PARASITE: { maxCapacity: 0.01, defaultGrowRate: 0.001 },
    VERY_SMALL: { maxCapacity: 0.1, defaultGrowRate: 0.001 },
    SMALL: { maxCapacity: 1, defaultGrowRate: 0.01 },
    NORMAL: { maxCapacity: 3, defaultGrowRate: 0.01 },
    BIG: { maxCapacity: 5, defaultGrowRate: 0.01 },
    GIANT: { maxCapacity: 7, defaultGrowRate: 0.01 },
    VERY_GIANT: { maxCapacity: 9, defaultGrowRate: 0.01 },
};


for (const size in FetusSize) {
    FetusSize[size].calcUntilBirth = function(growRate = this.defaultGrowRate) {
        return this.maxCapacity / growRate;
    };
}

class Sperm {
    constructor() {
        this.attackPower = 1;
        this.fetusSize = null;
        this.lifetime = 100;
        this.chanceToClean = 50;
        this.producer = null;
    }

    getAttackPower() {
        return this.attackPower;
    }

    getFetusSize() {
        return this.fetusSize;
    }

    getLifetime() {
        return this.lifetime;
    }

    setLifetime(lifetime) {
        this.lifetime = lifetime;
    }

    getProducer() {
        return this.producer;
    }

    updateLifeTime(minusTime) {
        if (this.lifetime - minusTime < 0) {
            this.lifetime = 0;
            return;
        }
        this.lifetime -= minusTime;
    }

    isDead() {
        return this.lifetime === 0;
    }

    isAlive() {
        return this.lifetime > 0;
    }

    getChanceToClean() {
        return this.chanceToClean;
    }
}

class Monster {
    getSpermType() {
        return new Sperm();
    }
}


const womb = new Womb();
womb.update();
Wow! That looks cool! But in order for game to have real pregnancy content we need to add it to intarface, standing picture etc. How did you use it? Or maybe you have any ideas?
 

:Female PC.Coming very soon,the name is all the game about,only human impregnation,but very detailed.You can get the demo here,you guys really should try it.If all the creater promised work,it will be a nice game comparable to Hazumi.


I have done something fool before,hope I do right this time,I don't wan't to lose another accont.
 
Wow! That looks cool! But in order for game to have real pregnancy content we need to add it to intarface, standing picture etc. How did you use it? Or maybe you have any ideas?
It's actually not hard, if I had the graphic resources I could work something out.

The only thing is that it's best to mod games on rpg maker mv, and other games are harder to mod, so it's much better to be the developer of such a game or know him to offer to help him.
 
Back
Top