code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.BaseContent;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Items.Mutations;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.AnalPregnancy;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.StatusEffects;
	import classes.internals.GuiOutput;
	import classes.internals.PregnancyUtils;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by a bunny.
	 */
	public class PlayerBunnyPregnancy implements VaginalPregnancy, AnalPregnancy
	{
		private var pregnancyProgression:PregnancyProgression;
		private var output:GuiOutput;
		private var mutations:Mutations;

		/**
		 * Create a new bunny pregnancy for the player. Registers pregnancy for bunnies.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerBunnyPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput, mutations:Mutations)
		{
			this.pregnancyProgression = pregnancyProgression;
			this.output = output;
			this.mutations = mutations;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_BUNNY, this);
			pregnancyProgression.registerAnalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_BUNNY, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 800) {
				output.text("\nYour womb gurgles strangely.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 785) {
				//output.text("\nAn unexpected change occurs, no doubt brought on by the bunny's eggs inside you!");
				kGAMECLASS.consumables.NPNKEGG.applyEffect(player, true);
				output.text("\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 776) {
				output.text("\nYour womb feels full and bloated.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 765) {
				//output.text("\nAn unexpected change occurs, no doubt brought on by the bunny's eggs inside you!");
				kGAMECLASS.consumables.NPNKEGG.applyEffect(player, true);
				output.text("\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation <= 745 && player.pregnancyIncubation > 400) {
				output.text("\nAfter dealing with the discomfort and bodily changes for the past day or so, you finally get the feeling that the eggs in your womb have dissolved.\n");
				displayedUpdate = true;
				player.knockUpForce(); //Clear Pregnancy
			}

			//BREAK - REAL PREGNANCY BELOW THIS:
			if (player.pregnancyIncubation === 198) {
				output.text("\nYou realize your belly has gotten slightly larger.  Maybe there's some truth to what the bunny-girl said.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 178) {
				output.text("\nYour belly is getting more noticeably distended.   You are probably pregnant.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 156) {
				output.text("\nThe unmistakable bulge of pregnancy is visible in your tummy.  ");

				if (player.cor < 40) {
					output.text("You are distressed by your unwanted pregnancy, and your inability to force this thing out of you.");
				}

				if (player.cor >= 40 && player.cor < 75) {
					output.text("You find yourself wondering what giving birth to bunny-girls is like.");
				}

				if (player.cor >= 75) {
					output.text("You dreamily wonder if you could find a bunny willing to put more than two eggs inside you at once.");
				}

				kGAMECLASS.dynStats("spe", -1, "lib", 1, "sen", 1, "lus", 2);
				output.text("\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 140) {
				output.text("\nThe sudden impact of a kick from inside your womb startles you, and it's immediately followed by a second on the other side.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 120) {
				output.text("\nYour ever-growing belly makes your pregnancy obvious for those around you.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 72) {
				output.text("\nYour belly is painfully distended, ");

				if (player.cor < 40) {
					output.text("making it difficult to function.");
				}

				if (player.cor >= 40 && player.cor < 75) {
					output.text("and you wonder how much longer you have to wait.");
				}

				if (player.cor >= 75) {
					output.text("and you're eager to give birth so you'll be able to get pregnant again.");
				}

				output.text("\n");
				kGAMECLASS.dynStats("spe", -3, "lib", 1, "sen", 1, "lus", 4);
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 48) {
				output.text("\nYou rub your hands over your bulging belly, lost in the sensations of motherhood.  ");

				if (player.cor < 40) {
					output.text("Afterwards you feel somewhat disgusted with yourself.\n");
				}

				if (player.cor >= 40 && player.cor < 75) {
					output.text("You estimate you'll give birth in the next few days.\n");
				}

				if (player.cor >= 75) {
					output.text("You find yourself daydreaming about birthing bunnies repeatedly, each time being re-impregnated with dozens of eggs from your lusty adolescent children.\n");
				}

				displayedUpdate = true;
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;

			pregnancyProgression.detectVaginalBirth(PregnancyStore.PREGNANCY_BUNNY);

			output.text(kGAMECLASS.images.showImage("birth-bunny"));
			PregnancyUtils.createVaginaIfMissing(output, player);

			output.text("A dangerous rumble comes from your womb, signaling that it's time to birth your body's cargo at last.  Your " + player.legs() + " wobble unsteadily as your strength ebbs with every gush that erupts  from your now-broken water until you collapse on your " + player.buttDescript() + ", grunting and groaning.  At first it goes slow – there's just a few small contractions that are more strange than anything else, rippling down your " + player.vaginaDescript(0) + " and squirting out more of your pregnancy's fluid.  All too soon the tempo kicks up, and you feel something starting to stretch you wider and wider.\n\n");

			output.text("You heave and push, instinctively driven to flex muscles you didn't even know you had to speed the super human labor you've entered into.  ");

			if (player.vaginalCapacity() < 60) {
				output.text("It hurts a little as your cervix starts to stretch wide");
			}
			else {
				output.text("It actually feels kind of nice as your cervix is stretched wide");
			}

			output.text(", but somehow your body accommodates the forced dilation without too much discomfort.  It's soon forgotten as you feel your " + player.vaginaDescript(0) + " pushed into a large sphere, stretched around the inhuman form of your child as it squirms and writhes inside you on its path to freedom.  You grunt and flex, watching with disbelief as a tiny, rabbit-eared form slides from your slick canal into the grass, the process leaving your " + player.chestDesc() + " heaving with unexpected pleasure.\n\n");

			output.text("The whole process starts over again – there's another one!  By now your well-stretched pussy is oozing both the birthing fluids and your own lubricants, and the second bunny-child slides down to bump into its sibling with ease.  You shake and shudder, groaning and spasming as you nearly cum from the stimulation, but in the end you're left panting and horny.  The two bunnies look like " + (kGAMECLASS.noFur() ? "ordinary human babies" : "miniature people") + " except for their " + (kGAMECLASS.noFur() ? "fuzzy ears and tails" : "ears, tails, and fuzzy legs") + ".  Your children lick themselves clean before hopping up onto your " + player.chestDesc() + " and suckling your nipples for a while");

			if (player.lactationQ() > 500) {
				output.text(", growing fat from all the milk");
			}

			output.text(".  At last they finish, and with one last nuzzle, your strange bunny-children go hopping off, doubtless to find more of their own kind.\n\n");

			output.text("You sink into restful unconsciousness, marveling at how stretchy and sensitive your " + player.vaginaDescript(0) + " feels now.");

			player.cuntChange(60,true,true,false);
			player.boostLactation(.01);
			//Boost capacity
			if (player.vaginalCapacity() < 300) {
				if (!player.hasStatusEffect(StatusEffects.BonusVCapacity)) {
					player.createStatusEffect(StatusEffects.BonusVCapacity,0,0,0,0);
				}

				player.addStatusValue(StatusEffects.BonusVCapacity, 1, 10);
			}

			player.orgasm('Vaginal');
			kGAMECLASS.dynStats("lib", 1, "sen", 10, "cor", -2);
		}

		/**
		 * @inheritDoc
		 */
		public function updateAnalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.buttPregnancyIncubation === 800) {
				output.text("\nYour gut gurgles strangely.\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 785) {
				kGAMECLASS.consumables.NPNKEGG.applyEffect(player, true);
				output.text("\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 776) {
				output.text("\nYour gut feels full and bloated.\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 765) {
				kGAMECLASS.consumables.NPNKEGG.applyEffect(player, true);
				output.text("\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 745) {
				output.text("\nAfter dealing with the discomfort and bodily changes for the past day or so, you finally get the feeling that the eggs in your ass have dissolved.\n");

				displayedUpdate = true;

				player.buttKnockUpForce();
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function analBirth():void
		{
			// there is no bunny anal birth, see PlayerBunnyPregnancy#updateAnalPregnancy()
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.GlobalFlags.kFLAGS;
	import classes.Player;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.Vagina;
	import classes.StatusEffects;
	import classes.internals.GuiOutput;
	import classes.internals.PregnancyUtils;
	import classes.internals.Utils;
	import classes.PregnancyStore;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by an centaur or the NPC Kelt.
	 */
	public class PlayerCentaurPregnancy implements VaginalPregnancy {
		private var output:GuiOutput;
		private var pregnancyProgression:PregnancyProgression;

		/**
		 * Create a new centaur pregnancy for the player. Registers pregnancies for centaurs and Kelt.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerCentaurPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput) {
			// needed as an instance variable for refactor test code (detectVaginalBirth)
			this.pregnancyProgression = pregnancyProgression;
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_CENTAUR, this);
			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_KELT, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
				//TODO remove this once new Player calls have been removed
				var player:Player = kGAMECLASS.player;
				var displayedUpdate:Boolean = false;

				if (player.pregnancyIncubation === 350) {
					output.text("\nYou realize your belly has gotten bigger. Maybe you should cut back on all the strange food.\n");
					displayedUpdate = true;
				}

				if (player.pregnancyIncubation === 280) {
					output.text("\nYour belly is getting more noticeably distended. You are probably pregnant.\n");
					displayedUpdate = true;
				}

				if (player.pregnancyIncubation === 216) {
					output.text("\nThe unmistakable bulge of pregnancy is visible in your tummy.  Somehow, you don't feel worried. Only content.\n");
					kGAMECLASS.dynStats("spe", -1, "lib", 1, "sen", 1, "lus", 2);
					displayedUpdate = true;
				}

				if (player.pregnancyIncubation === 180) {
					output.text("\nThe pregnancy is moving much faster than you expected. It's already as big as the belly of any pregnant woman back home.  However, a feeling of warm satisfaction fills you.\n");
					displayedUpdate = true;
				}

				if (player.pregnancyIncubation === 120) {
					output.text("\nYour belly is painfully distended and overswollen with the offspring of some huge beast, making it difficult to function.\n");
					kGAMECLASS.dynStats("spe", -1, "lib", .5, "sen", .5, "lus", 4);
					displayedUpdate = true;
				}

				if (player.pregnancyIncubation === 72) {
					output.text("\nYour stomach is easily the size of a beach ball, and still growing ever further. Strangely, you don't feel hindered. In fact, you feel like running...\n");
					kGAMECLASS.dynStats("spe", -1, "lib", 1, "sen", 1, "lus", 4);
					displayedUpdate = true;
				}

				if (player.pregnancyIncubation === 48) {
					output.text("\nIt seems impossible for your pregnant belly to grow any larger, but you are at your happiest yet, satisfied that somehow, you are fulfilling your role. It feels right to be pregnant, and you can't wait to get knocked up again afterwards.\n");
					displayedUpdate = true;
				}

				if (player.pregnancyIncubation === 32 || player.pregnancyIncubation === 64 || player.pregnancyIncubation === 85 || player.pregnancyIncubation === 150) {
					displayedUpdate = true;

					//Increase lactation!
					if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() >= 1 && player.biggestLactation() < 2) {
						output.text("\nYour breasts feel swollen with all the extra milk they're accumulating.  You wonder just what kind of creature they're getting ready to feed.\n");
						player.boostLactation(.5);
					}

					if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() > 0 && player.biggestLactation() < 1) {
						output.text("\nDrops of breastmilk escape your nipples as your body prepares for the coming birth.\n");
						player.boostLactation(.5);
					}

					//Lactate if large && not lactating
					if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() === 0) {
						output.text("\nYou realize your breasts feel full, and occasionally lactate.  It must be due to the pregnancy.\n");
						player.boostLactation(1);
					}

					//Enlarge if too small for lactation
					if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
						output.text("\nYour breasts have swollen to C-cups, in light of your coming pregnancy.\n");
						player.growTits(1, 1, false, 3);
					}

					//Enlarge if really small!
					if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
						output.text("\nYour breasts have grown to B-cups, likely due to the hormonal changes of your pregnancy.\n");
						player.growTits(1, 1, false, 3);
					}
				}

				return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
				//TODO remove this once new Player calls have been removed
				var player:Player = kGAMECLASS.player;

				pregnancyProgression.detectVaginalBirth(PregnancyStore.PREGNANCY_CENTAUR);

				output.text("\nYou blink, feeling a sudden ache of need radiating from your massive stomach. You can't even get off the ground, it is so heavy... you simply lie on your side, panting with desire, as the convulsions start. New life moves beneath your stomach, ready to be born, and it is time to do your part.\n");

				PregnancyUtils.createVaginaIfMissing(output, player);

				//Main Text here
				player.boostLactation(.01);
				output.text("Perhaps strangely, there is no pain, just a steady, rhythmic compulsion that directs you to breathe steadily and spread your legs as wide as possible. You hardly have to push at all, as the child - no, your child, begins pressing against the walls of your womb, searching for escape. It finds it, and begins the arduous task of squeezing through your cervix, making you gasp with barely concealed pleasure.  It doesn't even hurt; there's only a dull little whisper of happiness followed by a tide of satisfaction.\n\n");
				output.text("The head comes first, and your first thought is relief as you see the face of a small, elfin child.  She's slick with afterbirth and pushing her way free. But the greater part is to come.  She pulls her body free, easily twice as large as her human torso. Soft downy fur with long, spindly legs and a bristly tail... she is a centaur! You help as best as you can, proud of your achievement, but are too exhausted by the ordeal. Your newfound daughter does most of the work.\n\n");
				output.text("She cannot stand, at first, and stumbles over her own shaky legs in a cute, innocent way. She appears to be a six-year old girl, stuck on top of the body of a young foal, and your heart goes out to her involuntarily. She manages to stand at last, wobbling uncertainly, and moves immediately towards your prone form. Knowing her needs, you reveal a breast to her, and she nickers affectionately before latching on, drinking hungrily from your heavily lactating teat.\n\n");
				output.text("She drinks endlessly, and seems more alive and stronger with every gulp. Hours pass in quiet, motherly bliss as she drains your breastmilk first from one breast, then the other. Her little stomach bulges slightly, but she does not stop, and you do not want her to. Even with the strange, soothing effect of the pregnancy wearing off, you feel nothing but affection for this child.\n\n");
				output.text("By the time she is finished, the centaur girl is obviously stronger, able to stand and move about on her own. She explores her new body, jumping and prancing happily, while you lay back and watch, too exhausted to join her. Suddenly, though, her ears perk up, as she looks towards the horizon urgently. She hesitates just long enough to plant a sweet kiss on your cheek, then dashes off, smiling broadly. Exhausted, you are unable to follow... but that comforting sensation returns.  Somehow, you sense she will be all right.");

				if (player.averageLactation() > 0 && player.averageLactation() < 5) {
					output.text("  Your " + player.allBreastsDescript() + " won't seem to stop dribbling milk, lactating more heavily than before.");
					player.boostLactation(.5);
				}

				output.text("  ");
				player.cuntChange(100, true);

				if (player.vaginas[0].vaginalWetness === Vagina.WETNESS_DRY) {
					player.vaginas[0].vaginalWetness++;
				}

				player.orgasm('Vaginal');
				kGAMECLASS.dynStats("str", -1, "tou", -4, "spe", 2, "lib", 1, "sen", .5);

				//Butt increase
				if (player.butt.rating < 14 && Utils.rand(2) === 0) {
					if (player.butt.rating < 10) {
						player.butt.rating++;
						output.text("\n\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.");
					}
					//Big butts grow slower!
					else if (player.butt.rating < 14 && Utils.rand(2) === 0) {
						player.butt.rating++;
						output.text("\n\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.");
					}
				}

				player.knockUpForce(); //Clear Pregnancy
				output.text("\n");
		}
	}
}

license: unknown


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by Cockatrice.
	 */
	public class PlayerCockatricePregnancy implements VaginalPregnancy
	{
		private var output:GuiOutput;
		private var pregnancyProgression:PregnancyProgression;

		/**
		 * Create a new Cockatrice pregnancy for the player. Registers pregnancy for Cockatrice.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerCockatricePregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			// needed as an instance variable for refactor test code (detectVaginalBirth)
			this.pregnancyProgression = pregnancyProgression;
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_COCKATRICE, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 185) {
				output.text("\nYour belly grumbles as if empty, even though you ate not long ago.  Perhaps with all the exercise you're getting you just need to eat a little bit more.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 160) {
				output.text("\nYour belly looks a little pudgy");

				if (player.thickness > 60 && player.tone < 40) {
					output.text(" even for you");
				}

				output.text(", maybe you should cut back on all the food you've been consuming lately?\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 140) {
				output.text("\nYour belly is definitely getting bigger, and no matter what you do, you can't seem to stop yourself from eating at the merest twinge of hunger.  The only explanation you can come up with is that you've gotten pregnant during your travels.  Hopefully it won't inconvenience your adventuring.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 110) {
				output.text("\nYour belly has gotten nice and big, perhaps as big as you remember the bellies of the pregnant women back home being.  The elders always did insist on everyone doing their part to keep the population high enough to sustain the loss of a champion every year.  You give yourself a little hug, getting a surge of happiness from your hormone-addled body.  Pregnancy sure is great!\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 72) {
				output.text("\nThe huge size of your pregnant belly constantly impedes your movement, but the constant squirming and shaking of your unborn offspring makes you pretty sure you won't have to carry them much longer.  A sense of motherly pride wells up in your breast - you just know you'll have such wonderful babies.");

				if (player.cor < 50) {
					output.text("  You shudder and shake your head, wondering why you're thinking such unusual things.");
				}

				output.text("\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 32 || player.pregnancyIncubation === 64 || player.pregnancyIncubation === 85 || player.pregnancyIncubation === 150) {
				//Increase lactation!
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() >= 1 && player.biggestLactation() < 2) {
					output.text("\nYour breasts feel swollen with all the extra milk they're accumulating.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() > 0 && player.biggestLactation() < 1) {
					output.text("\nDrops of breastmilk escape your nipples as your body prepares for the coming birth.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				//Lactate if large && not lactating
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() === 0) {
					output.text("\nYou realize your breasts feel full, and occasionally lactate.  It must be due to the pregnancy.\n");

					player.boostLactation(1);
					displayedUpdate = true;
				}

				//Enlarge if too small for lactation
				if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have swollen to C-cups, in light of your coming pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}

				//Enlarge if really small!
				if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have grown to B-cups, likely due to the hormonal changes of your pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
			pregnancyProgression.detectVaginalBirth(PregnancyStore.PREGNANCY_COCKATRICE);
			kGAMECLASS.highMountains.cockatriceScene.cockatriceBirth();
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.AnalPregnancy;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by a drider .
	 */
	public class PlayerDriderPregnancy implements VaginalPregnancy, AnalPregnancy
	{
		private var output:GuiOutput;
		private var pregnancyProgression:PregnancyProgression;

		/**
		 * Create a new drider pregnancy for the player. Registers pregnancy for drider eggs .
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerDriderPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			// needed as an instance variable for refactor test code (detectVaginalBirth)
			this.pregnancyProgression = pregnancyProgression;
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_DRIDER_EGGS, this);
			pregnancyProgression.registerAnalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_DRIDER_EGGS, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 399) {
				output.text("\nAfter your session with the spider, you feel much... fuller.  There is no outward change on your body as far as you can see but your womb feels slightly tingly whenever you move.  Hopefully it's nothing to be alarmed about.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 275) {
				output.text("\nYour belly grumbles as if empty, even though you ate not long ago.  Perhaps with all the exercise you're getting you just need to eat a little bit more.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 250) {
				output.text("\nYour belly looks a little pudgy");

				if (player.thickness > 60 && player.tone < 40) {
					output.text(" even for you");
				}

				output.text(", maybe you should cut back on all the food you've been consuming lately?\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 216) {
				output.text("\nYour belly is definitely getting bigger, and no matter what you do, you can't seem to stop yourself from eating at the merest twinge of hunger.  The only explanation you can come up with is that you've gotten pregnant during your travels.  Hopefully it won't inconvenience your adventuring.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 180) {
				output.text(kGAMECLASS.images.showImage("spidermorph-male-loss-vag"));
				output.text("\nA hot flush works its way through you, and visions of aroused ");
				output.text("driders ");
				output.text("quickly come to dominate your thoughts.  You start playing with a nipple while you lose yourself in the fantasy, imagining being tied up in webs and mated with over and over, violated by a pack of horny males, each hoping to father your next brood.  You shake free of the fantasy and notice your hands rubbing over your slightly bloated belly.  Perhaps it wouldn't be so bad?\n");

				kGAMECLASS.dynStats("lib", 1, "sen", 1, "lus", 20);

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 120) {
				output.text("\nYour belly has gotten nice and big, perhaps as big as you remember the bellies of the pregnant women back home being.  The elders always did insist on everyone doing their part to keep the population high enough to sustain the loss of a champion every year.  You give yourself a little hug, getting a surge of happiness from your hormone-addled body.  Pregnancy sure is great!\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 72) {
				output.text("\nThe huge size of your pregnant belly constantly impedes your movement, but the constant squirming and shaking of your unborn offspring makes you pretty sure you won't have to carry them much longer.  A sense of motherly pride wells up in your breast - you just know you'll have such wonderful babies.");

				if (player.cor < 50) {
					output.text("  You shudder and shake your head, wondering why you're thinking such unusual things.");
				}

				output.text("\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 32 || player.pregnancyIncubation === 64 || player.pregnancyIncubation === 85 || player.pregnancyIncubation === 150) {
				//Increase lactation!
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() >= 1 && player.biggestLactation() < 2) {
					output.text("\nYour breasts feel swollen with all the extra milk they're accumulating.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() > 0 && player.biggestLactation() < 1) {
					output.text("\nDrops of breastmilk escape your nipples as your body prepares for the coming birth.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				//Lactate if large && not lactating
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() === 0) {
					output.text("\nYou realize your breasts feel full, and occasionally lactate.  It must be due to the pregnancy.\n");
					player.boostLactation(1);

					displayedUpdate = true;
				}

				//Enlarge if too small for lactation
				if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have swollen to C-cups, in light of your coming pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}

				//Enlarge if really small!
				if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have grown to B-cups, likely due to the hormonal changes of your pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
			pregnancyProgression.detectVaginalBirth(PregnancyStore.PREGNANCY_DRIDER_EGGS);
			kGAMECLASS.swamp.corruptedDriderScene.driderPregVagBirth();
		}

		/**
		 * @inheritDoc
		 */
		public function updateAnalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.buttPregnancyIncubation === 199) {
				output.text("\nAfter your session with the drider, you feel so nice and... full.  There is no outward change on your body, aside from the egg-packed bulge of your belly, but your " + player.assholeDescript() + " tingles slightly and leaks green goop from time to time. Hopefully it's nothing to be alarmed about.\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 180) {
				output.text(kGAMECLASS.images.showImage("cDrider-loss-butt"));
				output.text("\nA hot flush works its way through you, and visions of aroused driders quickly come to dominate your thoughts.  You start playing with a nipple while you lose yourself in the fantasy, imagining being tied up in webs and packed completely full of eggs, stuffing your belly completely with burgeoning spheres of love.  You shake free of the fantasy and notice your hands rubbing over your slightly bloated belly.  Perhaps it wouldn't be so bad?\n");

				kGAMECLASS.dynStats("lib", 1, "sen", 1, "lus", 20);

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 120) {
				output.text("\nYour belly is bulging from the size of the eggs growing inside you and gurgling just about any time you walk.  Green goo runs down your " + player.legs() + " frequently, drooling out of your pregnant asshole.\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 72) {
				output.text("\nThe huge size of your pregnant belly constantly impedes your movement, but the constant squirming and shaking of your unborn offspring makes you pretty sure you won't have to carry them much longer.");
				output.text("\n");

				displayedUpdate = true;
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function analBirth():void
		{
			kGAMECLASS.swamp.corruptedDriderScene.birthSpiderEggsFromAnusITSBLEEDINGYAYYYYY();

			pregnancyProgression.detectAnalBirth(PregnancyStore.PREGNANCY_DRIDER_EGGS);
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by GooGirl.
	 */
	public class PlayerGooGirlPregnancy implements VaginalPregnancy
	{
		private var output:GuiOutput;

		/**
		 * Create a new GooGirl pregnancy for the player. Registers pregnancy for GooGirl.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerGooGirlPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_GOO_GIRL, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 72) {
				output.text("\nThe huge size of your pregnant belly constantly impedes your movement, but the constant squirming and shaking of your slime-packed belly is reassuring in its own way.  You can't wait to see how it feels to have the slime flowing and gushing through your lips, stroking you intimately as you birth new life into this world.");

				if (player.cor < 50) {
					output.text("  You shudder and shake your head, wondering why you're thinking such unusual things.");
				}

				output.text("\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 32 || player.pregnancyIncubation === 64 || player.pregnancyIncubation === 82 || player.pregnancyIncubation === 16) {
				//Increase lactation!
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() >= 1 && player.biggestLactation() < 2) {
					output.text("\nYour breasts feel swollen with all the extra milk they're accumulating.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() > 0 && player.biggestLactation() < 1) {
					output.text("\nDrops of breastmilk escape your nipples as your body prepares for the coming birth.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				//Lactate if large && not lactating
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() === 0) {
					output.text("\nYou realize your breasts feel full, and occasionally lactate.  It must be due to the pregnancy.\n");
					player.boostLactation(1);

					displayedUpdate = true;
				}

				//Enlarge if too small for lactation
				if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have swollen to C-cups, in light of your coming pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}

				//Enlarge if really small!
				if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have grown to B-cups, likely due to the hormonal changes of your pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
			kGAMECLASS.lake.gooGirlScene.gooPregVagBirth();
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.Vagina;
	import classes.internals.GuiOutput;
	import classes.internals.PregnancyUtils;
	import classes.internals.Utils;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by an Hellhound.
	 */
	public class PlayerHellhoundPregnancy implements VaginalPregnancy
	{
		private var output:GuiOutput;
		private var pregnancyProgression:PregnancyProgression;

		/**
		 * Create a new Hellhound pregnancy for the player. Registers pregnancy for Hellhound.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerHellhoundPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			this.pregnancyProgression = pregnancyProgression;
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_HELL_HOUND, this);
		}

		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 290) {
				output.text("\nYou realize your belly has gotten slightly larger.  Maybe you need to cut back on the strange food.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 240) {
				output.text("\nYour belly is getting more noticeably distended and squirming around.  You are probably pregnant.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 216) {
				output.text("\nThe unmistakable bulge of pregnancy is visible in your tummy.  It's feeling heavier by the moment.  ");

				if (player.cor < 40) {
					output.text("You are distressed by your unwanted pregnancy, and your inability to force this thing out of you.");
				}

				if (player.cor >= 40 && player.cor < 75) {
					output.text("Considering the size of the creatures you've fucked, you hope it doesn't hurt when it comes out.");
				}

				if (player.cor >= 75) {
					output.text("You think dreamily about the monstrous cocks that have recently been fucking you, and hope that your offspring inherit such a pleasure tool.");
				}

				output.text("\n");
				kGAMECLASS.dynStats("spe", -1, "lib", 1, "sen", 1, "lus", 2);
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 180) {
				output.text("\nThere is a strange heat within your belly, it makes you a little tired.\n");
				kGAMECLASS.dynStats("tou", -1);
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 120) {
				output.text("\nYour ever-growing belly makes your pregnancy obvious for those around you.  With each day you can feel the heat within you growing.\n");
				displayedUpdate = true;
				kGAMECLASS.dynStats("tou", -1);
			}

			if (player.pregnancyIncubation === 72) {
				output.text("\nThe heat within doesn't drain you as much as it used to, instead giving you an odd strength.");
				output.text("\n");
				kGAMECLASS.dynStats("str", 1,"tou", 1);
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 48) {
				output.text("\nYou can feel two large lumps pushing against your womb together ");

				if (player.cor < 40) {
					output.text("making it difficult to function.");
				}

				if (player.cor >= 40 && player.cor < 75) {
					output.text("and you wonder how much longer you have to wait.");
				}

				if (player.cor >= 75) {
					output.text("and you're eager to give birth, so you can get impregnated again by monstrous cocks unloading their corrupted seed directly into your eager womb.");
				}

				output.text("\n");
				kGAMECLASS.dynStats("spe", -2, "lib", 1, "sen", 1, "lus", 4);
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 32 || player.pregnancyIncubation === 64 || player.pregnancyIncubation === 85 || player.pregnancyIncubation === 150) {
				//Increase lactation!
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() >= 1 && player.biggestLactation() < 2) {
					output.text("\nYour breasts feel swollen with all the extra milk they're accumulating.  You wonder just what kind of creature they're getting ready to feed.\n");
					player.boostLactation(.5);
				}

				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() > 0 && player.biggestLactation() < 1) {
					output.text("\nDrops of breastmilk escape your nipples as your body prepares for the coming birth.\n");
					player.boostLactation(.5);
				}

				//Lactate if large && not lactating
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() === 0) {
					output.text("\nYou realize your breasts feel full, and occasionally lactate.  It must be due to the pregnancy.\n");
					player.boostLactation(1);
				}

				//Enlarge if too small for lactation
				if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have swollen to C-cups, in light of your coming pregnancy.\n");
					player.growTits(1, 1, false, 3);
				}

				//Enlarge if really small!
				if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have grown to B-cups, likely due to the hormonal changes of your pregnancy.\n");
					player.growTits(1, 1, false, 3);
				}
			}

			return displayedUpdate;
		}

		public function vaginalBirth():void
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;

			pregnancyProgression.detectVaginalBirth(PregnancyStore.PREGNANCY_HELL_HOUND);

			output.text("\nYou are suddenly awoken by the heat inside your womb suddenly flaring up rather intensely.  It gives you a sudden charge of energy and you feel a strong need to stand up.  You can feel the two heads moving inside of you and you know that a hellhound will soon be born.  Guided by your instincts, you spread your legs and squat down, but wonder how exactly you are going to pass a creature with two heads?\n");
			PregnancyUtils.createVaginaIfMissing(output, player);
			output.text("Hearing a hiss, you look down to see drops of water hitting the ground and instantly turning to steam.  There is unnatural heat filling you, hot enough to boil water; but thanks to the creature inside you, you're barely feeling a thing!  More energy fills you and you begin to push down on the child within in earnest.  The process is painful, but satisfying; you feel like you could push out a mountain with the energy you have right now.  Within a minute, you can feel the heads emerge.  The heads are quickly followed by the rest of the body and you catch your hellhound child in your hands and lift it up to look at it.\n\n");
			output.text("You can see the distinctive dog heads are wrapped around each other and " + (kGAMECLASS.noFur() ? "squealing" : "yipping") + " softly; a hint of flame can sometimes be seen inside their mouths.  Its cute paws are waving in the air looking for purchase" + (kGAMECLASS.noFur() ? ", and the rest of its body resembles an ordinary newborn puppy, aside from the tiny double dicks" : ", but the rest of its body looks entirely human except for the double dicks, and it even has your skin color") + ".  Its mouths are aching for nutrition, and you realize that your breasts are filled with what this pup needs and pull it to your chest.  Each head quickly finds a nipple and begins to suckle.  Having finished the birthing, you contentedly sit back down and bask in the feeling of giving milk to your child, or is it children?\n\n");
			output.text("You sit there in a state of euphoria for some time.  It's not until the child in front of you starts to become uncomfortably hot and heavy, that you are brought back to reality.  You look down to see that the hellhound pup has grown to three times its original size and even sprouted the distinctive layer of tough black fur.  The beast is licking contentedly at your breasts instead of sucking.  It was the now-full flames in its mouth that had broken your reverie, but before you get a real grasp of what had happened, the hellhound pulls away from you and gives you a few quick happy barks before turning around and running off into the wilds" + (kGAMECLASS.noFur() ? "" : ", dropping down onto four legs just before disappearing from view") + ".  You feel the unnatural strength you gained during the birth fade away, and you fall into a deep contented sleep.\n\n");

			player.boostLactation(.01);

			//Main Text here
			if (player.averageLactation() > 0 && player.averageLactation() < 5) {
				output.text("Your breasts won't seem to stop dribbling milk, lactating more heavily than before.  ");
				player.boostLactation(.5);
			}

			player.cuntChange(60, true);

			if (player.vaginas[0].vaginalWetness === Vagina.WETNESS_DRY) {
				player.vaginas[0].vaginalWetness++;
			}

			player.orgasm('Vaginal');
			kGAMECLASS.dynStats("str", -1, "tou", -1, "spe", 2, "lib", 1, "sen", .5);

			//Butt increase
			if (player.butt.rating < 14 && Utils.rand(2) === 0) {
				if (player.butt.rating < 10) {
					player.butt.rating++;
					output.text("\n\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.");
				}
				//Big butts grow slower!
				else if (player.butt.rating < 14 && Utils.rand(2) === 0) {
					player.butt.rating++;
					output.text("\n\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.");
				}
			}

			output.text("\n");
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.Vagina;
	import classes.StatusEffects;
	import classes.internals.GuiOutput;
	import classes.internals.PregnancyUtils;
	import classes.internals.Utils;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by an Imp.
	 */
	public class PlayerImpPregnancy implements VaginalPregnancy
	{
		private var output:GuiOutput;

		//TODO inject player, once the new Player calls have been removed. Currently it would break on new game or load (reference changed)

		/**
		 * Create a new imp pregnancy for the player.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerImpPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_IMP, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 336) {
				output.text("\nYou realize your belly has gotten slightly larger.  Maybe you need to cut back on the strange food.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 280) {
				output.text("\nYour belly is getting more noticeably distended.   You are probably pregnant.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 216) {
				output.text("\nThe unmistakable bulge of pregnancy is visible in your tummy.  ");
				if (player.cor < 40) {
					output.text("You are distressed by your unwanted pregnancy, and your inability to force this thing out of you.");
				}

				if (player.cor >= 40 && player.cor < 75) {
					output.text("Considering the size of the creatures you've fucked, you hope it doesn't hurt when it comes out.");
				}

				if (player.cor >= 75) {
					output.text("You think dreamily about the monstrous cocks that have recently been fucking you, and hope that your offspring inherit such a pleasure tool.");
				}

				kGAMECLASS.dynStats("spe", -1, "lib", 1, "sen", 1, "lus", 2);
				output.text("\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 180) {
				output.text("\nThe sudden impact of a kick from inside your womb startles you.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 120) {
				output.text("\nYour ever-growing belly makes your pregnancy obvious for those around you.\n");
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 72) {
				output.text("\nYour belly is painfully distended, ");
				if (player.cor < 40) output.text("making it difficult to function.");
				if (player.cor >= 40 && player.cor < 75) output.text("and you wonder how much longer you have to wait.");
				if (player.cor >= 75) output.text("and you're eager to give birth, so you can get impregnated again by corrupted or monstrous cum filling out your eager womb.");
				output.text("\n");
				kGAMECLASS.dynStats("spe", -3, "lib", 1, "sen", 1, "lus", 4);
				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 48) {
				output.text("\nYou rub your hands over your bulging belly, lost in the sensations of motherhood.  ");
				if (player.cor < 40) output.text("Afterwards you feel somewhat disgusted with yourself.\n");
				if (player.cor >= 40 && player.cor < 75) output.text("You estimate you'll give birth in the next few days.\n");
				if (player.cor >= 75) output.text("You find yourself daydreaming about birthing demons repeatedly, each time being re-impregnated by your hordes of lusty adolescent children.\n");
				displayedUpdate = true;
			}

			return displayedUpdate;
		}

		public function vaginalBirth():void
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;

			output.text(kGAMECLASS.images.showImage("birth-imp"));

			//Add imp birth status - used to control frequency of night imp gangbag
			if (player.hasStatusEffect(StatusEffects.BirthedImps)) {
				player.addStatusValue(StatusEffects.BirthedImps,1,1);
			}
			else {
				player.createStatusEffect(StatusEffects.BirthedImps,1,0,0,0);
			}

			PregnancyUtils.createVaginaIfMissing(output,player);
			output.text("A sudden gush of fluids erupts from your vagina - your water just broke.  You grunt painfully as you feel wriggling and squirming inside your belly, muscle contractions forcing it downwards.  ");

			if (player.cor < 50) {
				output.text("You rue the day you encountered that hateful imp.  ");
			}

			output.text("The pain begins to subside as your delivery continues... replaced with a building sensation of pleasure.  Arousal spikes through you as the contractions intensify, and as you feel something pass you have a tiny orgasm.\n\nYet you feel more within you, and the contractions spike again, pushing you to orgasm as you pass something else.  It repeats, over and over, nearly a dozen times you birth and orgasm.  After an eternity of procreation and pleasure, you sense your ordeal is over and collapse, unconscious.");

			if (player.vaginas[0].vaginalLooseness === Vagina.LOOSENESS_TIGHT) {
				player.vaginas[0].vaginalLooseness++;
			}

			//50% chance
			if (player.vaginas[0].vaginalLooseness < Vagina.LOOSENESS_GAPING_WIDE && Utils.rand(2) === 0) {
				player.vaginas[0].vaginalLooseness++;
				output.text("\n\nYour cunt is painfully stretched from the ordeal, permanently enlarged.");
			}

			output.text("\n\nWhen you wake you find a large number of tiny imp tracks... and a spattering of cum on your clothes and body.  They must be born fully-formed.");

			if (player.averageLactation() > 0 && player.averageLactation() < 5) {
				output.text("  Your breasts won't seem to stop dribbling milk, lactating more heavily than before.");
				player.boostLactation(.5);
			}

			//Lactate if large && not lactating
			if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.averageLactation() === 0) {
				output.text("  As you ponder the implications, you realize your breasts have been slowly lactating.  You wonder how much longer it will be before they stop.");
				player.boostLactation(1);
			}

			player.boostLactation(.01);

			//Enlarge if too small for lactation
			if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
				output.text("  Your breasts have grown to C-cups!");
				player.growTits(1, 1, false, 3);
			}

			//Enlarge if really small!
			if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
				output.text("  Your breasts have grown to B-cups!");
				player.growTits(1, 1, false, 3);
			}

			if (player.vaginas[0].vaginalWetness === Vagina.WETNESS_DRY) {
				player.vaginas[0].vaginalWetness++;
			}

			player.orgasm('Vaginal');
			kGAMECLASS.dynStats("tou", -2, "spe", 2, "lib", 1, "sen", .5, "cor", 7);

			if (player.butt.rating < 10 && Utils.rand(2) === 0) {
				player.butt.rating++;
				output.text("\n\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.");
			}
			else if (player.hips.rating < 10) {
				player.hips.rating++;
				output.text("\n\nAfter the birth your " + player.armorName + " fits a bit more snugly about your " + player.hipDescript() + ".");
			}
			output.text("\n");
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.CockTypesEnum;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.AnalPregnancy;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;
	import classes.internals.Utils;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by sandtrap.
	 */
	public class PlayerSandTrapFertilePregnancy implements AnalPregnancy
	{
		private var pregnancyProgression:PregnancyProgression;
		private var output:GuiOutput;

		/**
		 * Create a new sandtrap pregnancy for the player. Registers pregnancy for sandtrap.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerSandTrapFertilePregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			this.output = output;
			this.pregnancyProgression = pregnancyProgression;

			pregnancyProgression.registerAnalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_SANDTRAP_FERTILE, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateAnalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.buttPregnancyIncubation === 36) {
				//(Eggs take 2-3 days to lay)
				output.text("<b>\nYour bowels make a strange gurgling noise and shift uneasily.  You feel ");
				output.text(" bloated and full; the sensation isn't entirely unpleasant.");
				output.text("</b>\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 20) {
				//end eggpreg here if unfertilized
				output.text("\nSomething oily drips from your sphincter, staining the ground.  You suppose you should feel worried about this, but the overriding emotion which simmers in your gut is one of sensual, yielding calm.  The pressure in your bowels which has been building over the last few days feels right somehow, and the fact that your back passage is dribbling lubricant makes you incredibly, perversely hot.  As you stand there and savor the wet, soothing sensation a fantasy pushes itself into your mind, one of being on your hands and knees and letting any number of beings use your ass, of being bred over and over by beautiful, irrepressible insect creatures.  With some effort you suppress these alien emotions and carry on, trying to ignore the oil which occasionally beads out of your " + player.assholeDescript() + " and stains your [armor].\n");

				kGAMECLASS.dynStats("int", -.5, "lus", 500);

				displayedUpdate = true;
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function analBirth():void
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			kGAMECLASS.desert.sandTrapScene.birfSandTarps();
			if (player.butt.rating < 17) {
				if (player.butt.rating < 13) {
					//Guaranteed increase up to level 10
					player.butt.rating++;
					output.text("\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.\n");
				} else if (Utils.rand(2) === 0) {
					//Big butts only increase 50% of the time.
					player.butt.rating++;
					output.text("\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.\n");
				}
			}

			displayedUpdate = true;

			pregnancyProgression.detectAnalBirth(PregnancyStore.PREGNANCY_SANDTRAP_FERTILE);
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.CockTypesEnum;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.AnalPregnancy;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;
	import classes.internals.Utils;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by sandtrap.
	 */
	public class PlayerSandTrapPregnancy implements AnalPregnancy
	{
		private var pregnancyProgression:PregnancyProgression;
		private var output:GuiOutput;

		/**
		 * Create a new sandtrap pregnancy for the player. Registers pregnancy for sandtrap.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerSandTrapPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			this.output = output;
			this.pregnancyProgression = pregnancyProgression;

			pregnancyProgression.registerAnalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_SANDTRAP, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateAnalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.buttPregnancyIncubation === 36) {
				output.text("<b>\nYour bowels make a strange gurgling noise and shift uneasily.  You feel ");
				output.text("increasingly empty, as though some obstructions inside you were being broken down.");
				output.text("</b>\n");

				player.buttKnockUpForce();

				displayedUpdate = true;
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function analBirth():void
		{
			// there is no birth, since the sand trap was not fertile
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.AnalPregnancy;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by Satyr.
	 */
	public class PlayerSatyrPregnancy implements VaginalPregnancy, AnalPregnancy
	{
		private var pregnancyProgression:PregnancyProgression;
		private var output:GuiOutput;

		/**
		 * Create a new Satyr pregnancy for the player. Registers pregnancy for Satyr.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerSatyrPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			this.output = output;
			this.pregnancyProgression = pregnancyProgression;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_SATYR, this);
			pregnancyProgression.registerAnalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_SATYR, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			//Stage 1:
			if (player.pregnancyIncubation === 150) {
				output.text("\nYou find that you're feeling quite sluggish these days; you just don't have as much energy as you used to.  You're also putting on weight.\n");

				displayedUpdate = true;
			}

			//Stage 2:
			if (player.pregnancyIncubation === 125) {
				output.text("\nYour belly is getting bigger and bigger.  Maybe your recent urges are to blame for this development?\n");

				displayedUpdate = true;
			}

			//Stage 3:
			if (player.pregnancyIncubation === 100) {
				output.text("\nYou can feel the strangest fluttering sensations in your distended belly; it must be a pregnancy.  You should eat more and drink plenty of wine so your baby can grow properly.  Wait, wine...?\n");

				displayedUpdate = true;
			}

			//Stage 4:
			if (player.pregnancyIncubation === 75) {
				output.text("\nSometimes you feel a bump in your pregnant belly.  You wonder if it's your baby complaining about your moving about.\n");

				displayedUpdate = true;
			}

			//Stage 5:
			if (player.pregnancyIncubation === 50) {
				output.text("\nWith your bloating gut, you are loathe to exert yourself in any meaningful manner; you feel horny and hungry all the time...\n");

				displayedUpdate = true;
				//temp min lust up +5
			}

			//Stage 6:
			if (player.pregnancyIncubation === 30) {
				output.text("\nThe baby you're carrying constantly kicks your belly in demand for food and wine, and you feel sluggish and horny.  You can't wait to birth this little one so you can finally rest for a while.\n");

				displayedUpdate = true;
				//temp min lust up addl +5
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
			kGAMECLASS.plains.satyrScene.satyrBirth(true);
		}

		/**
		 * @inheritDoc
		 */
		public function updateAnalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			//Stage 1:
			if (player.buttPregnancyIncubation === 150) {
				output.text("\nYou find that you're feeling quite sluggish these days; you just don't have as much energy as you used to.  You're also putting on weight.\n");
				displayedUpdate = true;
			}

			//Stage 2:
			if (player.buttPregnancyIncubation === 125) {
				output.text("\nYour belly is getting bigger and bigger.  Maybe your recent urges are to blame for this development?\n");
				displayedUpdate = true;
			}

			//Stage 3:
			if (player.buttPregnancyIncubation === 100) {
				output.text("\nYou can feel the strangest fluttering sensations in your distended belly; it must be a pregnancy.  You should eat more and drink plenty of wine so your baby can grow properly.  Wait, wine...?\n");
				displayedUpdate = true;
			}

			//Stage 4:
			if (player.buttPregnancyIncubation === 75) {
				output.text("\nSometimes you feel a bump in your pregnant belly.  You wonder if it's your baby complaining about your moving about.\n");
				displayedUpdate = true;
			}

			//Stage 5:
			if (player.buttPregnancyIncubation === 50) {
				output.text("\nWith your bloating gut, you are loathe to exert yourself in any meaningful manner; you feel horny and hungry all the time...\n");
				displayedUpdate = true;
			}

			//Stage 6:
			if (player.buttPregnancyIncubation === 30) {
				output.text("\nThe baby you're carrying constantly kicks your belly in demand for food and wine, and you feel sluggish and horny.  You can't wait to birth this little one so you can finally rest for a while.\n");
				displayedUpdate = true;
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function analBirth():void
		{
			kGAMECLASS.plains.satyrScene.satyrBirth(false);

			pregnancyProgression.detectAnalBirth(PregnancyStore.PREGNANCY_SATYR);
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by a spider.
	 */
	public class PlayerSpiderPregnancy implements VaginalPregnancy
	{
		private var output:GuiOutput;
		private var pregnancyProgression:PregnancyProgression;

		/**
		 * Create a new spider pregnancy for the player. Registers pregnancy for spiders.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerSpiderPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			// needed as an instance variable for refactor test code (detectVaginalBirth)
			this.pregnancyProgression = pregnancyProgression;
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_SPIDER, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 399) {
				output.text("\nAfter your session with the spider, you feel much... fuller.  There is no outward change on your body as far as you can see but your womb feels slightly tingly whenever you move.  Hopefully it's nothing to be alarmed about.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 275) {
				output.text("\nYour belly grumbles as if empty, even though you ate not long ago.  Perhaps with all the exercise you're getting you just need to eat a little bit more.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 250) {
				output.text("\nYour belly looks a little pudgy");

				if (player.thickness > 60 && player.tone < 40) {
					output.text(" even for you");
				}

				output.text(", maybe you should cut back on all the food you've been consuming lately?\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 216) {
				output.text("\nYour belly is definitely getting bigger, and no matter what you do, you can't seem to stop yourself from eating at the merest twinge of hunger.  The only explanation you can come up with is that you've gotten pregnant during your travels.  Hopefully it won't inconvenience your adventuring.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 180) {
				output.text(kGAMECLASS.images.showImage("spidermorph-male-loss-vag"));
				output.text("\nA hot flush works its way through you, and visions of aroused ");
				output.text("spider-morphs ");
				output.text("quickly come to dominate your thoughts.  You start playing with a nipple while you lose yourself in the fantasy, imagining being tied up in webs and mated with over and over, violated by a pack of horny males, each hoping to father your next brood.  You shake free of the fantasy and notice your hands rubbing over your slightly bloated belly.  Perhaps it wouldn't be so bad?\n");

				kGAMECLASS.dynStats("lib", 1, "sen", 1, "lus", 20);

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 120) {
				output.text("\nYour belly has gotten nice and big, perhaps as big as you remember the bellies of the pregnant women back home being.  The elders always did insist on everyone doing their part to keep the population high enough to sustain the loss of a champion every year.  You give yourself a little hug, getting a surge of happiness from your hormone-addled body.  Pregnancy sure is great!\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 72) {
				output.text("\nThe huge size of your pregnant belly constantly impedes your movement, but the constant squirming and shaking of your unborn offspring makes you pretty sure you won't have to carry them much longer.  A sense of motherly pride wells up in your breast - you just know you'll have such wonderful babies.");

				if (player.cor < 50) {
					output.text("  You shudder and shake your head, wondering why you're thinking such unusual things.");
				}

				output.text("\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 32 || player.pregnancyIncubation === 64 || player.pregnancyIncubation === 85 || player.pregnancyIncubation === 150) {
				//Increase lactation!
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() >= 1 && player.biggestLactation() < 2) {
					output.text("\nYour breasts feel swollen with all the extra milk they're accumulating.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() > 0 && player.biggestLactation() < 1) {
					output.text("\nDrops of breastmilk escape your nipples as your body prepares for the coming birth.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				//Lactate if large && not lactating
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() === 0) {
					output.text("\nYou realize your breasts feel full, and occasionally lactate.  It must be due to the pregnancy.\n");
					player.boostLactation(1);

					displayedUpdate = true;
				}

				//Enlarge if too small for lactation
				if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have swollen to C-cups, in light of your coming pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}

				//Enlarge if really small!
				if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have grown to B-cups, likely due to the hormonal changes of your pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
			pregnancyProgression.detectVaginalBirth(PregnancyStore.PREGNANCY_SPIDER);
			kGAMECLASS.swamp.maleSpiderMorphScene.spiderPregVagBirth();
		}
	}
}


code:
# Monster related pregnancies

Contains pregnancy content for Monsters.
Files are named in the following pattern: `MotherFatherPregnancy.as`


code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.BodyParts.*;
import classes.BodyParts.Butt;
import classes.BodyParts.Hips;
import classes.StatusEffects.Combat.AmilyVenomDebuff;
import classes.internals.*;
	import classes.GlobalFlags.kGAMECLASS;

/**
	 * ...
	 * @author ...
	 */
	public class Amily extends Monster
	{

		public function doubleAttack():void{
			createStatusEffect(StatusEffects.Attacks, 2, 0, 0, 0);
			eAttack();
		}
		override protected function performCombatAction():void
		{
			var actionChoices:MonsterAI = new MonsterAI();
			actionChoices.add(amilyConcentration, 1, !hasStatusEffect(StatusEffects.Concentration), 10, FATIGUE_PHYSICAL, RANGE_SELF);
			actionChoices.add(amilyDartGo, 1, true, 10, FATIGUE_PHYSICAL, RANGE_RANGED);
			actionChoices.add(doubleAttack, 1, true, 5, FATIGUE_PHYSICAL, RANGE_MELEE_CHARGING);
			actionChoices.add(eAttack, 1, true, 0, FATIGUE_NONE, RANGE_MELEE_CHARGING);
			actionChoices.exec();
		}

		//-Poison Dart: Deals speed and str damage to the PC. (Not constant)
		private function amilyDartGo():void
		{
			//Determine if dodged!
			var result:Object = combatAvoidDamage({doDodge:true,doParry:false,doBlock:false});
			if (result.failed) {
				outputText("Amily dashes at you and swipes her knife rather slowly. You easily dodge the attack; but it was all a feint, her other hands tries to strike at you with a poisoned dart. Luckily you manage to avoid it.");
				//Add tags for miss/evade/flexibility/etc.
				switch (result.dodge) {
					case EVASION_SPEED:
						outputText(" [Dodge]");
						break;
					case EVASION_EVADE:
						outputText(" [Evade]");
						break;
					case EVASION_MISDIRECTION:
						outputText(" [Misdirect]");
						break;
					case EVASION_FLEXIBILITY:
						outputText(" [Flexibility]");
						break;
					default:
						outputText(" [Dodge]");
						break;
				}
			}
			//Else hit!
			else {
				outputText("Amily dashes at you and swipes her knife at you, surprisingly slowly.  You easily dodge the attack; but it was a feint - her other hand tries to strike at you with a poisoned dart. However, she only manages to scratch you, only causing your muscles to grow slightly numb.");
				//Set status
				var venom:AmilyVenomDebuff = player.createOrFindStatusEffect(StatusEffects.AmilyVenom) as AmilyVenomDebuff;
				venom.increase();
				//If PC is reduced to 0 Speed and Strength, normal defeat by HP plays.
				if (player.spe <= 2 && player.str <= 2) {
					outputText("  You've become so weakened that you can't even make an attempt to defend yourself, and Amily rains blow after blow down upon your helpless form.");
					player.takeDamage(8999);
				}
			}

		}

		//Concentrate: always avoids the next attack. Can be disrupted by tease/seduce.
		private function amilyConcentration():void {
			outputText("Amily takes a deep breath and attempts to concentrate on your movements.");
			createStatusEffect(StatusEffects.Concentration,0,0,0,0);

		}

		override public function react(context:int):Boolean{
			switch(context){
				case CON_BEFOREATTACKED:
					if (hasStatusEffect(StatusEffects.Concentration) && !game.combat.isWieldingRangedWeapon() && player.statusEffectv1(StatusEffects.CounterAB) != 1) {
					outputText("Amily easily glides around your attack thanks to her complete concentration on your movements.\n\n");
					return false;
				}
			}
			return true;
		}
		/*
		override public function beforeAttacked():Boolean{
			if (hasStatusEffect(StatusEffects.Concentration) && !game.combat.isWieldingRangedWeapon() && player.statusEffectv1(StatusEffects.CounterAB) != 1) {
				outputText("Amily easily glides around your attack thanks to her complete concentration on your movements.\n\n");
				return false;
			}
			return true;
		}*/

		//(if PC uses tease/seduce after this)
		//Deals big lust increase, despite her resistance.
		override public function teased(lustDelta:Number):void
		{
			if (hasStatusEffect(StatusEffects.Concentration)) {
				outputText("Amily flushes hotly; her concentration only makes her pay more attention to your parts!");
				lustDelta += 25+lustDelta;
				removeStatusEffect(StatusEffects.Concentration);
				applyTease(lustDelta);
			} else {
				super.teased(lustDelta);
			}
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.amilyScene.conquerThatMouseBitch();
		}

		public function Amily()
		{
			this.a = "";
			this.short = "Amily";
			this.imageName = "amily";
			this.long = "You are currently fighting Amily. The mouse-morph is dressed in rags and glares at you in rage, knife in hand. She keeps herself close to the ground, ensuring she can quickly close the distance between you two or run away.";
			this.race = "Mouse-Morph";
			// this.plural = false;
			this.createVagina(false, Vagina.WETNESS_NORMAL, Vagina.LOOSENESS_NORMAL);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 48, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("C"));
			this.ass.analLooseness = Ass.LOOSENESS_VIRGIN;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.tallness = 4*12;
			this.hips.rating = Hips.RATING_AMPLE;
			this.butt.rating = Butt.RATING_TIGHT;
			this.skin.tone = game.noFur() ? "tan" : "tawny";
			this.skin.setType(game.noFur() ? Skin.PLAIN : Skin.FUR);
			this.hair.color = "brown";
			this.hair.length = 5;
			initStrTouSpeInte(30, 30, 85, 60);
			initLibSensCor(45, 45, 10);
			this.weaponName = "knife";
			this.weaponVerb="slash";
			this.weaponAttack = 6;
			this.armorName = "rags";
			this.armorDef = 1;
			this.bonusHP = 20;
			this.lust = 20;
			this.lustVuln = .85;
			this.level = 4;
			this.gems = 2 + rand(5);
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}


code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.BodyParts.*;
import classes.BodyParts.Butt;
import classes.StatusEffects.Combat.AnemoneVenomDebuff;
import classes.internals.*;

	public class Anemone extends Monster
	{

		override public function eAttack():void
		{
			outputText("Giggling playfully, the anemone launches several tentacles at you.  Most are aimed for your crotch, but a few attempt to caress your chest and face.\n");
			super.eAttack();
		}

		override public function eOneAttack():int
		{
			applyVenom(rand(4 + player.sens / 20) + 1);
			return 1;
		}

		override protected function performCombatAction():void{
			var actionChoices:MonsterAI = new MonsterAI();
			actionChoices.add(eAttack, 1, true, 0, FATIGUE_NONE, RANGE_MELEE_FLYING);
			actionChoices.exec();
		}
		//Apply the effects of AnemoneVenom()
		public function applyVenom(str:Number = 1):void
		{
			//First application
			var ave:AnemoneVenomDebuff = player.createOrFindStatusEffect(StatusEffects.AnemoneVenom) as AnemoneVenomDebuff;
			ave.applyEffect(str);
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.anemoneScene.defeatAnemone();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void
		{
			if (pcCameWorms){
				outputText("\n\nYour foe doesn't seem to mind at all...");
				doNext(game.combat.endLustLoss);
			} else {
				game.anemoneScene.loseToAnemone();
			}
		}

		override public function outputAttack(damage:int):void
		{
			outputText("You jink and dodge valiantly but the tentacles are too numerous and coming from too many directions.  A few get past your guard and caress your skin, leaving a tingling, warm sensation that arouses you further.");
		}

		override public function react(context:int):Boolean{
			switch(context){
				case CON_WHENATTACKED:
					//ANEMONE SHIT
					if (!game.combat.isWieldingRangedWeapon() && player.statusEffectv1(StatusEffects.CounterAB) != 1) {
						//hit successful:
						//special event, block (no more than 10-20% of turns, also fails if PC has >75 corruption):
						if (rand(10) <= 2) {
							outputText("Seeing your " + player.weaponName + " raised, the anemone looks down at the water, angles her eyes up at you, and puts out a trembling lip.  ");
							if (player.cor < 75) {
								outputText("You stare into her hangdog expression and lose most of the killing intensity you had summoned up for your attack, stopping a few feet short of hitting her.\n\n");
								game.combat.damage = 0;
								//Kick back to main if no damage occured!
								if (HP > 0 && lust < maxLust()) {
									if (player.hasStatusEffect(StatusEffects.FirstAttack)) {
										game.combat.attack();
										return false;
									}
								}
								return false;
							}
							else outputText("Though you lose a bit of steam to the display, the drive for dominance still motivates you to follow through on your swing.");
						}
					}
					break;
				case CON_AFTERATTACKED:
					//Lust raised by anemone contact!
					if (game.combat.damage > 0 && !game.combat.isWieldingRangedWeapon()) {
						outputText("\nThough you managed to hit the anemone, several of the tentacles surrounding her body sent home jolts of venom when your swing brushed past them.");
						//(gain lust, temp lose str/spd)
						applyVenom((1+rand(2)));
					}
			}
			return true;
		}
		/*
		override public function whenAttacked():Boolean{
			//ANEMONE SHIT
			if (!game.combat.isWieldingRangedWeapon() && player.statusEffectv1(StatusEffects.CounterAB) != 1) {
				//hit successful:
				//special event, block (no more than 10-20% of turns, also fails if PC has >75 corruption):
				if (rand(10) <= 2) {
					outputText("Seeing your " + player.weaponName + " raised, the anemone looks down at the water, angles her eyes up at you, and puts out a trembling lip.  ");
					if (player.cor < 75) {
						outputText("You stare into her hangdog expression and lose most of the killing intensity you had summoned up for your attack, stopping a few feet short of hitting her.\n\n");
						game.combat.damage = 0;
						//Kick back to main if no damage occured!
						if (HP > 0 && lust < maxLust()) {
							if (player.hasStatusEffect(StatusEffects.FirstAttack)) {
								game.combat.attack();
								return false;
							}
						}
						return false;
					}
					else outputText("Though you lose a bit of steam to the display, the drive for dominance still motivates you to follow through on your swing.");
				}
			}
		return true;
		}*/
		/*
		override public function afterAttacked():Boolean{

			return true;

		}
		*/

		public function Anemone()
		{
			this.a = "the ";
			this.short = "anemone";
			this.imageName = "anemone";
			this.long = "The anemone is a blue androgyne humanoid of medium height and slender build, with colorful tentacles sprouting on her head where hair would otherwise be.  Her feminine face contains two eyes of solid color, lighter than her skin.  Two feathery gills sprout from the middle of her chest, along the line of her spine and below her collarbone, and drape over her pair of small B-cup breasts.  Though you wouldn't describe her curves as generous, she sways her girly hips back and forth in a way that contrasts them to her slim waist quite attractively.  Protruding from her groin is a blue shaft with its head flanged by diminutive tentacles, and below that is a dark-blue pussy ringed by small feelers.  Further down are a pair of legs ending in flat sticky feet; proof of her aquatic heritage.  She smiles broadly and innocently as she regards you from her deep eyes.";
			this.race = "Anemone";
			// this.plural = false;
			this.createCock(7,1,CockTypesEnum.ANEMONE);
			this.createVagina(false, Vagina.WETNESS_SLICK, Vagina.LOOSENESS_LOOSE);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 5, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("B"));
			this.ass.analLooseness = Ass.LOOSENESS_NORMAL;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,10,0,0,0);
			this.tallness = 5*12+5;
			this.hips.rating = Hips.RATING_CURVY;
			this.butt.rating = Butt.RATING_NOTICEABLE;
			this.skin.tone = "purple";
			this.hair.color = "purplish-black";
			this.hair.length = 20;
			this.hair.type = Hair.ANEMONE;
			initStrTouSpeInte(40, 20, 40, 50);
			initLibSensCor(55, 35, 50);
			this.weaponName = "tendrils";
			this.weaponVerb="tentacle";
			this.weaponAttack = 5;
			this.armorName = "clammy skin";
			this.bonusHP = 120;
			this.lust = 30;
			this.lustVuln = .9;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 4;
			this.gems = rand(5) + 1;
			this.drop = new WeightedDrop(consumables.DRYTENT, 1);
			checkMonster();
		}

	}

}


code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.BodyParts.*;
	import classes.BodyParts.Hips;
	import classes.GlobalFlags.kFLAGS;

	import classes.display.SpriteDb;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.internals.*;

	public class Ceraph extends Monster
	{

//[IN COMBAT SPECIALS]
//[SPECIAL 1] – Ubercharge!
		private function ceraphSpecial1():void
		{
			game.spriteSelect(SpriteDb.s_ceraph);
			if (!hasStatusEffect(StatusEffects.Uber)) {
				if (rand(2) == 0) {
					outputText("Ceraph winks and says, \"Have you ever cum without being touched? You will.\"\n\n");
				}
				else {
					outputText("Ceraph titters, \"Let me show you the true power of an Omnibus.\"\n\n");
				}
				outputText("Despite her sultry tease, you can tell she's starting to build up to something big...");
				createStatusEffect(StatusEffects.Uber, 0, 0, 0, 0);
			}
			else {
				//(Next Round)
				if (statusEffectv1(StatusEffects.Uber) == 0) {
					addStatusValue(StatusEffects.Uber, 1, 1);
					if (rand(2) == 0) outputText("The demonic hermaphrodite begins forging demonic symbols in the air before her, each glowing brilliant pink before they blur away in a haze.");
					else outputText("The demonette makes obscene motions with her hands, as if masturbating an imaginary cock or vagina while her hands are wreathed in pink flames.");
					outputText("  She's about to unleash something huge!");
					if (player.inte > 50) outputText("  You should probably wait so you'll have a chance to avoid whatever's coming.");
				}
				//FIRE!
				else {
					removeStatusEffect(StatusEffects.Uber);
					//(Avoid!)
					if (flags[kFLAGS.IN_COMBAT_USE_PLAYER_WAITED_FLAG] == 1) {
						outputText("She throws her hands out, palms facing you, and a rush of pink flame washes towards you.  Thanks to your decision to wait, it's easy to avoid the onrushing flames and her attack.\n\n");
						outputText("Ceraph sighs and asks, \"Why would you move?  It would make you feel soooo good!\"");
					}
					//(AUTO-LOSE)
					else {
						outputText("She throws her hands out, palms facing you, and a rush of pink flame washes towards you.  Too busy with your own attack to effectively dodge, you're hit full on by the pink fire.  Incredibly, it doesn't burn.  The fire actually seems to flow inside you, disappearing into your skin.  You stumble, confused for a second, but then it hits you.  Every inch of your body is buzzing with pleasure, practically squirming and convulsing with sexual delight.  You collapse, twitching and heaving, feeling the constant sensation of sexual release running from your head to your " + player.feet() + ".  Too horny and pleasured to resist, you lie down and tremble, occasionally rubbing yourself to enhance the bliss.");
						game.dynStats("lus", 999);
					}
				}
			}

		}
//[SPECIAL] – Whip Binding
		private function ceraphSpecial2():void
		{
			if (!player.hasStatusEffect(StatusEffects.Bound)) {
				outputText("Ceraph snaps her whip at you, lightning fast.  Unable to avoid the blinding speed of her attack, you find yourself wrapped from head to toe in the strong leather of her whip.  Remarkably, the fire dies out everywhere the whip touches you, leaving you bound but unharmed.");
				//If player has l2 piercing
				if (game.fetishManager.compare(FetishManager.FETISH_BONDAGE)) {
					outputText("  Gods this turns you on!");
					player.takeLustDamage(5, true);
				}
				player.createStatusEffect(StatusEffects.Bound, 2 + rand(5), 0, 0, 0);
			}
			//[SPECIAL WHILE PC RESTRAINED]
			else {
				if (rand(2) == 0) {
					outputText("Ceraph cuddles up against you, embracing you tenderly.  Her more-than-ample bosom crushes against your flank, and her demonic prick grinds and rubs against your " + player.skin.desc + ", smearing it with her juices.  Her hands slide over your bound form, sneaking underneath your " + player.armorName + " to caress you more intimately while you're at her mercy.");
					player.takeLustDamage(9 + player.sens / 10, true);
				}
				//[SPECIAL 2 WHILE PC RESTRAINED]
				else {
					outputText("Ceraph blows hot kisses in your ear and slides and rubs against you as she slips over to embrace your front.  She holds up a finger, licks it, and wiggles it back and forth.  It begins to glow pink, dimly at first and then with increasing luminosity.  Once it's reached a brilliant intensity, the sparkling digit is roughly inserted into your mouth.  You can feel the dark magic soaking into your body just like water soaks into a sponge.  ");
					if (player.lust < 33) outputText("It makes you feel warm and flushed.");
					else if (player.lust < 60) outputText("It gets inside you and turns you on, stoking the flames of your desire.");
					else if (player.lust < 80) outputText("It makes you very horny, and you begin to wonder if it's worth resisting.");
					else outputText("It makes you ache and tremble with need, practically begging for another touch.");
					player.takeLustDamage(5 + player.cor / 10 + player.lib / 20, true);
				}
			}

		}

		//(Struggle)
		override public function struggle():void
		{
			clearOutput();
			if (player.hasStatusEffect(StatusEffects.Bound)){
				outputText("You wriggle in the tight binding, trying your best to escape.  ");
				if (player.statusEffectv1(StatusEffects.Bound) - 1 <= 0) {
					outputText("With a mighty twist and stretch, the whip gives and uncurls from you all at once.  You've regained your freedom");
					if (game.fetishManager.compare(FetishManager.FETISH_BONDAGE)) {
						outputText(", though you miss the tight leathery embrace");
					}
					outputText("!");
					player.removeStatusEffect(StatusEffects.Bound);

				}
				else {
					outputText("Despite your frantic struggling, all you manage to do is chafe against her impressively taut leather whip.");
					if (game.fetishManager.compare(FetishManager.FETISH_BONDAGE)) {
						outputText("  You get nice and hot from being so effectively restrained, maybe you should just accept it?");
					}
					player.addStatusValue(StatusEffects.Bound, 1, -1);
					//Strong characters break free faster
					if (player.str > 65 && rand(player.str) > 45) {
						outputText("  Though you didn't break free, it seems like your mighty struggles loosened the whip slightly...");
						player.addStatusValue(StatusEffects.Bound, 1, -1);
					}
				}
				outputText("\n\n");
			}

		}

//(Wait)
		override public function react(context:int):Boolean
		{
			switch(context){
				case CON_PLAYERWAITED:
					clearOutput();
					if (player.hasStatusEffect(StatusEffects.Bound)){
						outputText("Why bother resisting?  The feeling of the leather wrapped tightly around you, digging into your " + player.skin.desc + ", is intoxicating.");
						if (game.fetishManager.compare(FetishManager.FETISH_BONDAGE)) {
							outputText("  You squirm inside the bindings as you get more and more turned on, hoping that Ceraph will strip away your armor and force you to parade around as her bound, naked pet.");
							player.takeLustDamage(5, true);
						}
						player.takeLustDamage(player.lib / 20 + 5 + rand(5), true);
						outputText("\n\n");
						return false;
					}
			}
		return true;
		}

//[Double-Attack]
		private function ceraphSpecial3():void
		{
			//[Mini-cum] – takes place of double-attack if very horny
			if (lust100 >= 75) {
				outputText("Ceraph spreads her legs and buries three fingers in her sopping twat, her thumb vigorously rubbing against the base of her bumpy prick.  Her other hand wraps around the meaty pole and begins jerking it rapidly.  In one practiced movement she stops jerking long enough to wrap the whip around her nodule-studded demon-cock, using it like a cockring.  The organ swells thanks to the forced blood-flow, and after a few more seconds of intense masturbation, the demoness cums hard.  Her cunny squirts all over her hand, dripping clear feminine drool down her thighs.  Ceraph's masculine endowment pulses and twitches, blasting out two big squirts of jizm before it slows to a trickle.\n");
				outputText("Letting out a throaty sigh, the demon unties her self-induced binding and gives you a wink.  Did you really just stand there and watch the whole thing?  Amazingly Ceraph actually seems stronger after such a crude display...");
				//(+10 str/toughness, 1 level, and 10 xp reward.)
				XP += 10;
				level += 1;
				str += 10;
				tou += 10;
				HP += 20;
				lust = 33;
				game.dynStats("lus", 3);
				outputText("\n");

				return;
			}
			var damage:Number = 0;
			outputText("The demoness weaves her whip in the air until you can practically hear it slithering like a snake, cutting the air as it weaves back and forth, still magically alight with flames.  In a blink she lashes out twice in quick succession!\n");
			createStatusEffect(StatusEffects.Attacks, 2, 0, 0, 0);
			eAttack();

		}

		override protected function performCombatAction():void
		{
			var choice:Number = rand(4);
			if (player.hasStatusEffect(StatusEffects.Bound)) {
				ceraphSpecial2();
				return;
			}
			if (hasStatusEffect(StatusEffects.Uber)) {
				ceraphSpecial1();
				return;
			}
			switch (choice) {
				case 0:
					eAttack();
					break;
				case 1:
					ceraphSpecial1();
					break;
				case 2:
					ceraphSpecial2();
					break;
				case 3:
					ceraphSpecial3();
					break;
				default:
					eAttack();
			}
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.ceraphScene.winRapeChoices();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void
		{
			if (pcCameWorms){
				outputText("\n\nYour foe doesn't seem disgusted enough to leave...");
				doNext(game.combat.endLustLoss);
			} else {
				game.ceraphScene.loseFUCKME();
			}
		}

		public function Ceraph()
		{
			//trace("Ceraph Constructor!");
			this.a = "";
			this.short = "Ceraph";
			this.imageName = "ceraph";
			this.long = "Ceraph the Omnibus is totally nude and reveling in it.  Her large yet perky breasts jiggle heavily against her chest as she moves.  The flawless purple skin of her twin mounds glistens with a thin sheen of sweat, inviting you to touch and rub your fingers along their slippery surface.  Her eyes are solid black, but convey a mix of amusement and desire, in spite of their alien appearance.  The demon's crotch is a combination of both genders – a drooling cunt topped with a thick demonic shaft, sprouting from where a clit should be.";
			this.race = "Demon";
			// this.plural = false;
			this.createCock(10,2,CockTypesEnum.DEMON);
			this.createVagina(false, Vagina.WETNESS_SLAVERING, Vagina.LOOSENESS_GAPING);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 20, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("E"));
			this.ass.analLooseness = Ass.LOOSENESS_STRETCHED;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,15,0,0,0);
			this.tallness = 5*12+6;
			this.hips.rating = Hips.RATING_CURVY;
			this.butt.rating = Butt.RATING_NOTICEABLE;
			this.lowerBody.type= LowerBody.DEMONIC_HIGH_HEELS;
			this.skin.tone = "purple";
			this.hair.color = "black";
			this.hair.length = 20;
			initStrTouSpeInte(65, 40, 80, 80);
			initLibSensCor(75, 15, 100);
			this.weaponName = "flaming whip";
			this.weaponVerb="flame-whip";
			this.weaponAttack = 15;
			this.armorName = "demon-skin";
			this.bonusHP = 200;
			this.lust = 30;
			this.lustVuln = 0.75;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 9;
			this.gems = rand(5) + 38;
			this.drop = NO_DROP;
			this.special1 = ceraphSpecial1;
			this.special2 = ceraphSpecial2;
			this.special3 = ceraphSpecial3;
			checkMonster();
		}

	}

}