code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	/**
	 * Raw mint.
	 */
	public class Mint extends Consumable
	{
		public function Mint()
		{
			super("C. Mint","C. Mint", "a calm mint", ConsumableLib.DEFAULT_VALUE,"This is a sprig of silver-colored mint.  Its strong scent makes you feel calmer and less lustful.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("Eating the sprig of raw mint is a bit of a stretch, but you manage to gulp it down.  As the strong minty flavor overwhelms your taste buds, your mind feels calmer, and a relaxed sensation spreads through your body.");
			dynStats("lib", -1, "lust", -10, "inte", 0.5, "scale", false);
			player.refillHunger(5);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.PerkLib;
	import classes.PregnancyStore;
	import classes.StatusEffects;

	//special attack - bite?
	//tooth length counter starts when you get teef, mouse bite gets more powerful over time as teeth grow in
	//hit
	//You sink your prominent incisors deep into your foe.  They're not as sharp as a predator's, but even a mouse bites when threatened, and you punch quite a large hole.
	//miss
	//You attempt to turn and bite your foe, but " + monster.pronoun1 + " pulls back deftly and your jaws close on empty air.

	//perk - fuck if i know
	//maybe some pregnancy-accelerating thing

	/**
	 * Mouse transformative item.
	 */
	public class MouseCocoa extends Consumable
	{
		public function MouseCocoa()
		{
			super("MouseCo","MouseCo", "a handful of mouse cocoa", ConsumableLib.DEFAULT_VALUE, "A handful of rare aromatic beans with sharp creases in the middle, making them look like small mouse ears.  Allegedly very popular and plentiful before the mice-folk were wiped out.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "mouseCocoa";
			var temp:int = 0;

			mutations.initTransformation([2, 3, 3]);
			clearOutput();
			//use:
			outputText("You pop several of the beans in your mouth and suck; they immediately reward you by giving up an oily, chocolatey flavor with a hint of bitterness.  For several minutes you ");
			if (!player.isTaur()) outputText("sit and ");
			outputText("enjoy the taste.");

			//stat changes:
			//lose height + gain speed (42" height floor, no speed ceiling but no speed changes without height change)
			if (player.tallness >= 45 && changes < changeLimit && rand(3) === 0) {
				//not horse
				if (!player.isTaur()) outputText("\n\nYou tap your [feet] idly against the rock you sit upon as you enjoy the treat; it takes several minutes before you realize you don't reach as far down as you did when you sat down!  In shock, you jerk upright and leap off, nearly falling forward as your body moves more responsively than before!  Experimentally, you move in place as you look down at your now-closer [feet]; the sensation of a more compact agility stays with you.");
				//horse
				else outputText("\n\nYou trot idly in place as you eat, moving quicker and quicker as you become increasingly bored; on one step, the ground sneaks up on you and you hit it sharply, expecting a few more inches before contact!  Looking down, you notice better resolution than before - you can make out the dirt a bit more clearly.  It looks like you just shed some height, but... you're feeling too jittery to care.  You just want to run around.");
				dynStats("spe", 1);
				player.tallness--;
				if (player.tallness > 60) player.tallness--;
				if (player.tallness > 70) player.tallness--;
				if (player.tallness > 80) player.tallness--;
				if (player.tallness > 90) player.tallness -= 2;
				if (player.tallness > 100) player.tallness -= 2;
				changes++;
			}
			//lose tough
			if (player.tou100 > 50 && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nYou feel a bit less sturdy, both physically and mentally.  In fact, you'd prefer to have somewhere to hide for the time being, until your confidence returns.  The next few minutes are passed in a mousey funk - even afterward, you can't quite regain the same sense of invincibility you had before.");
				dynStats("tou", -1);
				if (player.tou100 >= 75) dynStats("tou", -1);
				if (player.tou100 >= 90) dynStats("tou", -1);
			}

			//SEXYYYYYYYYYYY
			//vag-anal capacity up for non-goo (available after PC < 5 ft; capacity ceiling reasonable but not horse-like or gooey)
			if (player.tallness < 60 && (player.analCapacity() < 100 || (player.vaginalCapacity() < 100 && player.hasVagina())) && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nYour ");
				if (player.vaginalCapacity() < 100 && player.hasVagina()) outputText("[vagina]");
				else outputText("[asshole]");
				outputText(" itches, and you shyly try to scratch it, looking around to see if you're watched.  ");
				if (player.isTaur()) outputText("Backing up to a likely rock, you rub your hindquarters against it, only to be surprised when you feel your hole part smoothly against the surface, wider than you're used to!");
				else outputText("Slipping a hand in your [armor], you rub vigorously; your hole opens more easily and your fingers poke in farther than you're used to!");
				outputText("  It feels unusual - not bad, really, but definitely weird.  You can see how it would come in handy, now that you're smaller than most prospective partners, but... shaking your head, you ");
				if (player.isTaur()) outputText("back away from your erstwhile sedimentary lover");
				else outputText("pull your hand back out");
				outputText(".");
				//adds some lust
				dynStats("lus", 10 + player.sens / 5);
				if (player.vaginalCapacity() < 100 && player.hasVagina()) {
					if (!player.hasStatusEffect(StatusEffects.BonusVCapacity)) player.createStatusEffect(StatusEffects.BonusVCapacity, 0, 0, 0, 0);
					player.addStatusValue(StatusEffects.BonusVCapacity, 1, 5);
				}
				else {
					if (!player.hasStatusEffect(StatusEffects.BonusACapacity)) player.createStatusEffect(StatusEffects.BonusACapacity, 0, 0, 0, 0);
					player.addStatusValue(StatusEffects.BonusACapacity, 1, 5);
				}
				changes++;
			}
			//fem fertility up and heat (suppress if pregnant)
			//not already in heat (add heat and lust)
			if (player.statusEffectv2(StatusEffects.Heat) < 30 && rand(2) === 0 && changes < changeLimit) {

        var intensified:Boolean = player.inHeat;
        if (player.goIntoHeat(false)) {
          if (intensified) {
  					outputText("\n\nYour womb feels achingly empty, and your temperature shoots up.  Try as you might, you can't stop fantasizing about being filled with semen, drenched inside and out with it, enough to make a baker's dozen offspring.  ");
  					//[(no mino cum in inventory)]
  					if (!player.hasItem(consumables.MINOCUM)) {
  						outputText("Your heat has intensified as much as your fertility has increased, which is a considerable amount!");
  					}
  					else if (player.lust < player.maxLust() || player.isTaur()) outputText("You even pull out a bottle of minotaur jism and spend several minutes considering the feasibility of pouring it directly in your [vagina], but regain your senses as you're unsealing the cap, setting it aside.  Still, your heat is more intense than ever and your increasingly-fertile body is practically begging for dick - it'll be hard to resist any that come near!");
  					//(mino cum in inventory and non-horse, 100 lust)
  					else {
  						outputText("Desperately horny, you pull out your bottle of minotaur jism and break the seal in two shakes, then lie down with your hips elevated and upend it over your greedy vagina.  The gooey seed pours into you, and you orgasm fitfully, shaking and failing to hold the bottle in place as it coats your labia.  As a hazy doze infiltrates your mind, you pray the pregnancy takes and dream of the sons you'll bear with your increasingly fertile body... you're going to go insane if you don't get a baby in you.");
  						//(consumes item, increment addiction/output addict message, small chance of mino preg, reduce lust)]");
  						player.minoCumAddiction(5);
						player.knockUp(PregnancyStore.PREGNANCY_MINOTAUR, PregnancyStore.INCUBATION_MINOTAUR, 175);
						var consumables:ConsumableLib = consumables;
  						player.consumeItem(consumables.MINOCUM);
  					}
          }
          else {
  					outputText("\n\nYour insides feel... roomy.  Accommodating, even.  You could probably carry a whole litter of little [name]s right now.  Filled with a sudden flush of desire, you look around furtively for any fertile males.  With a shake of your head, you try to clear your thoughts, but daydreams of being stuffed with seed creep right back in - it looks like your body is intent on probing the limits of your new fertility.  You're in heat, and pregnable in several senses of the word!");

            // Also make a permanent nudge.
  					player.fertility++;
          }
          changes++;
        }
      }
			//Neck restore
			if (player.neck.type != Neck.NORMAL && changes < changeLimit && rand(4) == 0) mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && rand(5) == 0) mutations.restoreRearBody(tfSource);
			//Ovi perk loss
			if (rand(5) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			//bodypart changes:
			//gain ears
			if (player.ears.type !== Ears.MOUSE && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nYour ears ");
				if (player.ears.type === Ears.HORSE || player.ears.type === Ears.COW || player.ears.type === Ears.DOG || player.ears.type === Ears.BUNNY || player.ears.type === Ears.KANGAROO) outputText("shrink suddenly");
				else outputText("pull away from your head");
				outputText(", like they're being pinched, and you can distinctly feel the auricles taking a rounded shape through the pain.  Reaching up to try and massage away their stings, you're not terribly surprised when you find a pair of fuzzy mouse's ears poking through your " + player.hairDescript() + ".");
				player.ears.type = Ears.MOUSE;
				changes++;
			}
			//gain tail
			//from no tail
			if (player.ears.type === Ears.MOUSE && player.tail.type !== Tail.MOUSE && changes < changeLimit && rand(4) === 0) {
				//from other tail
				if (player.tail.type > Tail.NONE) {
					outputText("\n\nYour tail clenches and itches simultaneously, leaving you wondering whether to cry out or try to scratch it.  The question is soon answered as the pain takes the forefront; looking backward is a horrible strain, but when you manage it, you can see your old appendage ");
					if (player.tail.type === Tail.HORSE) outputText("elongating");
					else outputText("compressing");
					outputText(" into a long, thin line.  With a shudder, it begins to shed until it's completely, starkly nude.  Your new mouse tail looks a bit peaked.");
				}
				else outputText("\n\nA small nub pokes from your backside, and you turn to look at it.  When you do, your neck aches as if whiplashed, and you groan as your spine shifts smoothly downward like a rope being pulled, growing new vertebra behind it and expanding the nub into a naked, thin, tapered shape.  Rubbing at your sore neck, you stare at your new mouse tail.");
				player.tail.type = Tail.MOUSE;
				changes++;
			}
			//get teeth - from human, bunny, coonmask, or other humanoid teeth faces
			if (mutations.tfNoFur() && player.ears.type === Ears.MOUSE && (player.face.type === Face.HUMAN || player.face.type === Face.SHARK_TEETH || player.face.type === Face.BUNNY || player.face.type === Face.SPIDER_FANGS || player.face.type === Face.RACCOON_MASK) && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYour teeth grind on their own, and you feel a strange, insistent pressure just under your nose.  As you open your mouth and run your tongue along them, you can feel ");
				if (player.face.type !== Face.HUMAN) outputText("the sharp teeth receding and ");
				outputText("your incisors lengthening.  It's not long before they're twice as long as their neighbors and the obvious growth stops, but the pressure doesn't go away completely.  Well, you now have mouse incisors and your face aches a tiny bit - wonder if they're going to keep growing?");
				player.face.type = Face.BUCKTEETH;
				changes++;
			}
			//get mouse muzzle from mouse teeth or other muzzle
			if (mutations.tfNoFur() && player.hasFur() && player.face.type !== Face.MOUSE && (player.face.type !== Face.HUMAN || player.face.type !== Face.SHARK_TEETH || player.face.type !== Face.BUNNY || player.face.type !== Face.SPIDER_FANGS || player.face.type !== Face.RACCOON_MASK) && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nA wave of light-headedness hits you, and you black out.  In your unconsciousness, you dream of chewing - food, wood, cloth, paper, leather, even metal... whatever you can fit in your mouth, even if it doesn't taste like anything much.  For several minutes you just chew and chew your way through a parade of ordinary objects, savoring the texture of each one against your teeth, until finally you awaken.  Your teeth work, feeling longer and more prominent than before, and you hunt up your reflection.  Your face has shifted to resemble a mouse's, down to the whiskers!");
				player.face.type = Face.MOUSE;
				changes++;
			}
			//get fur
			if (mutations.tfNoFur() && (!player.hasFur() || (player.hasFur() && (player.skin.furColor !== "brown" && player.skin.furColor !== "white"))) && changes < changeLimit && rand(4) === 0) {
				//from skinscales
				if (!player.hasFur()) {
					outputText("\n\nYour " + player.skinFurScales() + " itch");
					if (!player.hasPlainSkin()) outputText("es");
					outputText(" all over");
					if (player.tail.type > Tail.NONE) outputText(", except on your tail");
					outputText(".  Alarmed and suspicious, you tuck in your hands, trying to will yourself not to scratch, but it doesn't make much difference.  Tufts of ");
					temp = rand(10);
					if (temp < 8) {
						outputText("brown");
						player.skin.furColor = "brown";
					}
					else {
						outputText("white");
						player.skin.furColor = "white";
					}
					outputText(" fur begin to force through your skin");
					if (player.hasScales()) outputText(", pushing your scales out with little pinches");
					outputText(", resolving the problem for you.  You now have fur.");
				}
				//from other color fur
				else {
					outputText("\n\nYour fur stands on end, as if trying to leap from your body - which it does next.  You watch, dumb with shock, as your covering deserts you, but it's quickly replaced with another layer of ");
					temp = rand(10);
					if (temp < 8) {
						outputText("brown");
						player.skin.furColor = "brown";
					}
					else {
						outputText("white");
						player.skin.furColor = "white";
					}
					outputText(" fuzz coming in behind it that soon grows to full-fledged fur.");
				}
				player.skin.adj = "";
				player.skin.desc = "fur";
				player.skin.type = Skin.FUR;
				player.underBody.restore(); // Restore the underbody for now
				changes++;
			}
			player.refillHunger(10);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}
	}
}

license: unknown


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.GlobalFlags.*;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.PerkLib;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.lists.BodyPartLists;
	import classes.lists.Gender;

	/**
	 * @since March 30, 2018
	 * @author Stadler76
	 */
	public class NeonPinkEgg extends Consumable
	{
		public function NeonPinkEgg()
		{
			super(
				"NPnkEgg",
				"NPnkEgg",
				"a neon pink egg",
				ConsumableLib.DEFAULT_VALUE,
				"This is an oblong egg with an unnatural neon pink coloration." +
				" It tingles in your hand with odd energies that make you feel as if you could jump straight into the sky."
			);
		}

		public function applyEffect(player:Player, pregnantChange:Boolean = false):Boolean
		{
			var tfSource:String = "neonPinkEgg";
			mutations.initTransformation([2, 2]);
			if (!pregnantChange) {
				//If not pregnancy, mention eating it.
				clearOutput();
				outputText("You eat the neon pink egg, and to your delight it tastes sweet, like candy."
				          +" In seconds you've gobbled down the entire thing,"
				          +" and you lick your fingers clean before you realize you ate the shell - and it still tasted like candy.");
			} else {
				//If this is a pregnancy change, only 1 change per proc.
				changeLimit = 1;
				//If pregnancy, warning!
				outputText("\nYour egg-stuffed ");
				if (player.pregnancyType === PregnancyStore.PREGNANCY_BUNNY) {
					outputText("womb ");
					if (player.buttPregnancyType === PregnancyStore.PREGNANCY_BUNNY) {
						outputText("and ");
					}
				}
				if (player.buttPregnancyType === PregnancyStore.PREGNANCY_BUNNY) {
					outputText("backdoor ");
				}
				if (player.buttPregnancyType === PregnancyStore.PREGNANCY_BUNNY && player.pregnancyType === PregnancyStore.PREGNANCY_BUNNY) {
					outputText("rumble");
				} else {
					outputText("rumbles");
				}
				outputText(" oddly, and you have a hunch that something's about to change.");
			}
			//STATS CHANGURYUUUUU
			//Boost speed (max 80!)
			if (changes < changeLimit && rand(3) === 0 && player.spe100 < 80) {
				if (player.spe100 < 30) {
					outputText("\n\nTingles run through your muscles, and your next few movements seem unexpectedly fast."
					          +" The egg somehow made you faster!");
				} else if (player.spe100 < 50) {
					outputText("\n\nYou feel tingles running through your body, and after a moment, it's clear that you're getting faster.");
				} else if (player.spe100 < 65) {
					outputText("\n\nThe tight, ready feeling you've grown accustomed to seems to intensify,"
					          +" and you know in the back of your mind that you've become even faster.");
				} else {
					outputText("\n\nSomething changes in your physique, and you grunt, chopping an arm through the air experimentally."
					          +" You seem to move even faster than before, confirming your suspicions.");
				}
				dynStats("spe", player.spe100 < 35 ? 2 : 1);
			}
			//Boost libido
			if (changes < changeLimit && rand(5) === 0) {
				dynStats("lib", 1, "lus", (5 + player.lib / 7));
				if (player.lib100 < 30) dynStats("lib", 1);
				if (player.lib100 < 40) dynStats("lib", 1);
				if (player.lib100 < 60) dynStats("lib", 1);
				//Lower ones are gender specific for some reason
				if (player.lib100 < 60) {
					//(Cunts or assholes!
					if (!player.hasCock() || (player.gender === Gender.HERM && rand(2) === 0)) {
						if (player.lib100 >= 30) {
							outputText("\n\nYour mouth rolls open as you start to pant with desire. Did it get hotter?"
							          +" Your hand reaches down to your [assholeOrPussy], and you're struck by just how empty it feels."
							          +" The desire to be filled, not by a hand or a finger but by a virile male, rolls through you like a wave,"
							          +" steadily increasing your desire for sex.");
						} else {
							outputText("\n\nYou squirm a little and find your eyes glancing down to your groin."
							          +" Strange thoughts jump to mind, wondering how it would feel to breed until you're swollen and pregnant. ");
							if (player.cor < 25) {
								outputText("You're repulsed by such shameful thoughts.");
							} else if (player.cor < 60) {
								outputText("You worry that this place is really getting to you.");
							} else if (player.cor < 90) {
								outputText("You pant a little and wonder where the nearest fertile male is.");
							} else {
								outputText("You grunt and groan with desire and disappointment.  You should get bred soon!");
							}
						}
					}
					//WANGS!
					if (player.hasCock()) {
						if (player.lib100 >= 30) {
							outputText("\n\nYour mouth rolls open as you start to pant with desire. Did it get hotter?"
							          +" Your hand reaches down to [eachcock], and you groan from how tight and hard it feels."
							          +" The desire to squeeze it, not with your hand but with a tight pussy or puckered asshole,"
							          +" runs through you like a wave, steadily increasing your desire for sex.");
						} else {
							outputText("\n\nYou squirm a little and find your eyes glancing down to your groin."
							          +" Strange thoughts jump to mind, wondering how it would feel to fuck a ");
							if (rand(2) === 0) {
								outputText("female hare until she's immobilized by all her eggs. ");
							} else {
								outputText("herm rabbit until her sack is so swollen that she's forced to masturbate over and over again"
								          +" just to regain mobility. ");
							}
							if (player.cor < 25) {
								outputText("You're repulsed by such shameful thoughts.");
							} else if (player.cor < 50) {
								outputText("You worry that this place is really getting to you.");
							} else if (player.cor < 75) {
								outputText("You pant a little and wonder where the nearest fertile female is.");
							} else {
								outputText("You grunt and groan with desire and disappointment.  Gods you need to fuck!");
							}
						}
					}
				} else if (player.lib100 < 80) {
					//Libido over 60? FUCK YEAH!
					outputText("\n\nYou fan your neck and start to pant as your [skinTone] skin begins to flush red with heat"
					          +"[if (hasPlainSkin == false) through your [skinDesc]]. ");
					switch (player.gender) {
						case Gender.NONE:
							outputText("Sexual hunger seems to gnaw at your [asshole], demanding it be filled,"
							          +" but you try to resist your heightened libido. It's so very, very hard.");
							break;

						case Gender.MALE:
							outputText("Compression tightens down on [eachcock] as it strains against your [armor]."
							          +" You struggle to fight down your heightened libido, but it's hard – so very hard.");
							break;

						case Gender.FEMALE:
							outputText("Moisture grows between your rapidly-engorging vulva, making you squish and squirm as"
							          +" you try to fight down your heightened libido, but it's hard – so very hard.");
							break;

						case Gender.HERM:
							outputText("Steamy moisture and tight compression war for your awareness in your groin"
							          +" as [eachcock] starts to strain against your [armor]."
							          +" Your vulva engorges with blood, growing slicker and wetter."
							          +" You try so hard to fight down your heightened libido, but it's so very, very hard."
							          +" The urge to breed lingers in your mind, threatening to rear its ugly head.");
							break;

						default:
					}
				} else {
					//MEGALIBIDO
					outputText("\n\nDelicious, unquenchable desire rises higher and higher inside you,"
					          +" until you're having trouble tamping it down all the time."
					          +" A little, nagging voice questions why you would ever want to tamp it down."
					          +" It feels so good to give in and breed that you nearly cave to the delicious idea on the spot."
					          +" Life is beginning to look increasingly like constant fucking or masturbating in a lust-induced haze,"
					          +" and you're having a harder and harder time finding fault with it.  ");
					if (player.cor < 33) {
						outputText("You sigh, trying not to give in completely.");
					} else if (player.cor < 66) {
						outputText("You pant and groan, not sure how long you'll even want to resist.");
					} else {
						outputText("You smile and wonder if you can ");
						if (player.lib100 < 100) {
							outputText("get your libido even higher.");
						} else {
							outputText("find someone to fuck right now.");
						}
					}
				}
			}
			//BIG sensitivity gains to 60.
			if (player.sens100 < 60 && changes < changeLimit && rand(3) === 0) {
				outputText("\n\n");
				//(low)
				if (rand(3) !== 2) {
					outputText("The feeling of small breezes blowing over your [skinDesc] gets a little bit stronger."
					          +" How strange.  You pinch yourself and nearly jump when it hurts a tad more than you'd think."
					          +" You've gotten more sensitive!");
					dynStats("sen", 5);
				}
				//(BIG boost 1/3 chance)
				else {
					dynStats("sen", 15);
					outputText("Every movement of your body seems to bring heightened waves of sensation that make you woozy."
					          +" Your [armor] rubs your [nipples] deliciously"
					          +"[if (hasnipplecunts)"
					          +    ", sticking to the "
					          +    "[if (biggestLactation > 2)"
					          +        "milk-leaking nipple-twats"
					          +    "|"
					          +        "slippery nipple-twats"
					          +    "]"
					          +"|"
					          +    "[if (biggestLactation > 2)"
					          +        ", sliding over the milk-leaking teats with ease"
					          +    "|"
					          +        " catching on each of the hard nubs repeatedly"
					          +    "]"
					          +"]."
					          +" Meanwhile, your crotch... your crotch is filled with such heavenly sensations from ");

					switch (player.gender) {
						case Gender.NONE:
							//oh god genderless
							outputText("your [asshole]");
							break;

						case Gender.MALE:
							outputText("[eachcock] and your [if (hasBalls)[balls]|[asshole]]");
							break;

						case Gender.FEMALE:
							outputText("your [cunt] and [clit]");
							break;

						case Gender.HERM:
							outputText("[eachcock], [if (hasBalls)[balls], ][cunt], and [clit]");
							break;

						default:
					}
					outputText(" that you have to stay stock-still to keep yourself from falling down and masturbating on the spot."
					          +" Thankfully the orgy of tactile bliss fades after a minute,"
					          +" but you still feel way more sensitive than your previous norm."
					          +" This will take some getting used to!");
				}
			}

			//Makes girls very girl(90), guys somewhat girly (61).
			if (changes < changeLimit && rand(2) === 0) {
				var buffer:String = "";
				buffer += player.modFem((player.isFemaleOrHerm() ? 90 : 61), 4);
				if (buffer !== "") {
					outputText(buffer);
					changes++;
				}
			}

			//De-wettification of cunt (down to 3?)!
			if (player.wetness() > 3 && changes < changeLimit && rand(3) === 0) {
				//Just to be safe
				if (player.hasVagina()) {
					outputText("\n\nThe constant flow of fluids that sluice from your [cunt] slow down,"
					          +" leaving you feeling a bit less like a sexual slip-'n-slide.");
					player.vaginas[0].vaginalWetness--;
					changes++;
				}
			}
			//Fertility boost!
			if (changes < changeLimit && rand(4) === 0 && player.fertility < 50 && player.hasVagina()) {
				player.fertility += 2 + rand(5);
				changes++;
				outputText("\n\nYou feel strange.  Fertile... somehow.  You don't know how else to think of it,"
				          +" but you know your body is just aching to be pregnant and give birth.");
			}
			//-VAGs
			//Neck restore
			if (player.neck.type !== Neck.NORMAL && changes < changeLimit && rand(4) === 0) {
				mutations.restoreNeck(tfSource);
			}
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && rand(5) === 0) {
				mutations.restoreRearBody(tfSource);
			}
			//Ovi perk loss
			if (rand(4) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			if (player.hasVagina() && player.findPerk(PerkLib.BunnyEggs) < 0 && changes < changeLimit && rand(4) === 0 && player.bunnyScore() > 3) {
				outputText("\n\nDeep inside yourself there is a change. It makes you feel a little woozy, but passes quickly."
				          +" Beyond that, you aren't sure exactly what just happened, but you are sure it originated from your womb.\n\n");
				outputText("(Perk Gained: Bunny Eggs)");
				player.createPerk(PerkLib.BunnyEggs, 0, 0, 0, 0);
				changes++;
			}
			//Shrink Balls!
			if (player.balls > 0 && player.ballSize > 5 && rand(3) === 0 && changes < changeLimit) {
				if (player.ballSize < 10) {
					outputText("\n\nRelief washes through your groin as your [balls] lose about an inch of their diameter.");
					player.ballSize--;
				}
				else if (player.ballSize < 25) {
					outputText("\n\nRelief washes through your groin as your [balls] lose a few inches of their diameter."
					          +" Wow, it feels so much easier to move!");
					player.ballSize -= (2 + rand(3));
				}
				else {
					outputText("\n\nRelief washes through your groin as your [balls] lose at least six inches of diameter."
					          +" Wow, it feels SOOOO much easier to move!");
					player.ballSize -= (6 + rand(3));
				}
				changes++;
			}
			//Get rid of extra balls
			if (player.balls > 2 && changes < changeLimit && rand(3) === 0) {
				changes++;
				outputText("\n\nThere's a tightening in your [sack] that only gets higher and higher until you're doubled over and wheezing."
				          +"  When it passes, you reach down and discover that two of your testicles are gone.");
				player.balls -= 2;
			}
			//Boost cum production
			if ((player.balls > 0 || player.hasCock()) && player.cumQ() < 3000 && rand(3) === 0 && changeLimit > 1) {
				changes++;
				player.cumMultiplier += 3 + rand(7);
				if (player.cumQ() >= 250) dynStats("lus", 3);
				if (player.cumQ() >= 750) dynStats("lus", 4);
				if (player.cumQ() >= 2000) dynStats("lus", 5);
				//Balls
				if (player.balls > 0) {
					if (player.cumQ() < 50) {
						//(Small cum quantity) < 50
						outputText("\n\nA twinge of discomfort runs through your [balls], but quickly vanishes."
						          +" You heft your orbs but they haven't changed in size – they just feel a little bit denser.");
					} else if (player.cumQ() < 250) {
						//(medium cum quantity) < 250
						outputText("\n\nA ripple of discomfort runs through your [balls], but it fades into a pleasant tingling."
						          +" You reach down to heft the orbs experimentally but they don't seem any larger.");
						if (player.hasCock()) {
							outputText("  In the process, you brush [eachcock] and discover a bead of pre leaking at the tip.");
						}
					}
					//(large cum quantity) < 750
					else if (player.cumQ() < 750) {
						outputText("\n\nA strong contraction passes through your [sack], almost painful in its intensity. ");
						if (player.hasCock()) {
							outputText("[Eachcock] leaks and dribbles pre-cum down your [legs]"
							          +" as your body's cum production kicks up even higher.");
						} else {
							outputText("You wince, feeling pent up and yet unable to release. You really wish you had a cock right about now.");
						}
					}
					//(XL cum quantity) < 2000
					else if (player.cumQ() < 2000) {
						outputText("\n\nAn orgasmic contraction wracks your [balls],"
						          +" shivering through the potent orbs and passing as quickly as it came. ");
						if (player.hasCock()) {
							outputText("A thick trail of slime leaks from [eachcock] down your [leg], pooling below you.");
						} else {
							outputText("You grunt, feeling terribly pent-up and needing to release."
							          +" Maybe you should get a penis to go with these balls...");
						}
						outputText(" It's quite obvious that your cum production has gone up again.");
					}
					//(XXL cum quantity)
					else {
						outputText("\n\nA body-wrenching contraction thrums through your [balls],"
						          +" bringing with it the orgasmic feeling of your body kicking into cum-production overdrive. ");
						if (player.hasCock()) {
							outputText("pre-cum explodes from [eachcock], running down your [leg] and splattering into puddles"
							          +" that would shame the orgasms of lesser [malespersons]."
							          +" You rub yourself a few times, nearly starting to masturbate on the spot,"
							          +" but you control yourself and refrain for now.");
						} else {
							outputText("You pant and groan but the pleasure just turns to pain."
							          +" You're so backed up – if only you had some way to vent all your seed!");
						}
					}
				}
				//NO BALLZ (guaranteed cock tho)
				else {
					if (player.cumQ() < 50) {
						//(Small cum quantity) < 50
						outputText("\n\nA twinge of discomfort runs through your body,"
						          +" but passes before you have any chance to figure out exactly what it did.");
					} else if (player.cumQ() < 250) {
						//(Medium cum quantity) < 250)
						outputText("\n\nA ripple of discomfort runs through your body,"
						          +" but it fades into a pleasant tingling that rushes down to [eachcock]."
						          +" You reach down to heft yourself experimentally and smile when you see pre-beading from your maleness."
						          +" Your cum production has increased!");
					} else if (player.cumQ() < 750) {
						//(large cum quantity) < 750
						outputText("\n\nA strong contraction passes through your body, almost painful in its intensity."
						          +" [Eachcock] leaks and dribbles pre-cum down your [legs] as your body's cum production kicks up even higher!"
						          +" Wow, it feels kind of... good.");
					} else if (player.cumQ() < 2000) {
						//(XL cum quantity) < 2000
						outputText("\n\nAn orgasmic contraction wracks your abdomen, shivering through your midsection and down towards your groin."
						          +" A thick trail of slime leaks from [eachcock] and trails down your [leg], pooling below you."
						          +" It's quite obvious that your body is producing even more cum now.");
					} else {
						//(XXL cum quantity)
						outputText("\n\nA body-wrenching contraction thrums through your gut,"
						          +" bringing with it the orgasmic feeling of your body kicking into cum-production overdrive."
						          +" Pre-cum explodes from [eachcock], running down your [legs] and splattering into puddles"
						          +" that would shame the orgasms of lesser [malespersons]."
						          +" You rub yourself a few times, nearly starting to masturbate on the spot,"
						          +" but you control yourself and refrain for now.");
					}
				}
			}
			//Bunny feet! - requirez earz
			if (player.lowerBody.type !== LowerBody.BUNNY && changes < changeLimit && rand(5) === 0 && player.ears.type === Ears.BUNNY) {
				if (player.isTaur()) {
					//Taurs
					outputText("\n\nYour quadrupedal hind-quarters seizes, overbalancing your surprised front-end and causing you to stagger"
					          +" and fall to your side.  Pain lances throughout, contorting your body into a tightly clenched ball of pain"
					          +" while tendons melt and bones break, melt, and regrow.  When it finally stops,"
					          +" you look down to behold your new pair of fur-covered rabbit feet!");
				} else {
					//Non-taurs
					outputText("\n\nNumbness envelops your [legs] as they pull tighter and tighter. You overbalance and drop on your [ass]"
					          +"[if (hasTail), nearly smashing your tail flat| hard enough to sting] while the change works its way through you."
					          +" Once it finishes, you discover that you now have fuzzy bunny feet and legs!");
				}
				changes++;
				player.lowerBody.type = LowerBody.BUNNY;
				player.lowerBody.legCount = 2;
			}
			//BUN FACE!  REQUIREZ EARZ
			if (mutations.tfNoFur() && player.ears.type === Ears.BUNNY && player.face.type !== Face.BUNNY && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\n");
				changes++;
				if (BodyPartLists.HUMANISH_FACES.indexOf(player.face.type) !== -1) {
					//Human(ish) face
					outputText("You catch your nose twitching on its own at the bottom of your vision, but as soon as you focus on it, it stops."
					          +" A moment later, some of your teeth tingle and brush past your lips, exposing a white pair of buckteeth!"
					          +" Your face has taken on some rabbit-like characteristics!");
				} else {
					//Crazy furry TF shit
					outputText("You grunt as your [face] twists and reforms. Even your teeth ache as their positions are rearranged"
					          +" to match some new, undetermined order.  When the process finishes,"
					          +" you're left with a perfectly human looking face,"
					          +" save for your constantly twitching nose and prominent buck-teeth.");
				}
				player.face.type = Face.BUNNY;
			}
			//DAH BUNBUN EARZ - requires poofbutt!
			if (player.ears.type !== Ears.BUNNY && changes < changeLimit && rand(3) === 0 && player.tail.type === Tail.RABBIT) {
				outputText("\n\nYour ears twitch and curl in on themselves, sliding around on the flesh of your head."
				          +" They grow warmer and warmer before they finally settle on the top of your head and unfurl into long, fluffy bunny-ears."
				          +" You now have a pair of bunny ears.");
				player.ears.type = Ears.BUNNY;
				changes++;
			}
			//DAH BUNBUNTAILZ
			if (player.tail.type !== Tail.RABBIT && rand(2) === 0 && changes < changeLimit) {
				if (player.hasTail()) {
					outputText("\n\nYour tail burns as it shrinks, pulling tighter and tighter to your backside until it's the barest hint of a stub."
					          +" At once, white, poofy fur explodes out from it."
					          +" You've got a white bunny-tail! It even twitches when you aren't thinking about it.");
				} else {
					outputText("\n\nA burning pressure builds at your spine before dissipating in a rush of relief."
					          +" You reach back and discover a small, fleshy tail that's rapidly growing long, poofy fur."
					          +" You have a rabbit tail!");
				}
				player.tail.type = Tail.RABBIT;
				changes++;
			}
			// Remove gills
			if (rand(4) === 0 && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}
			// Remove antennae
			if (player.antennae.type !== Antennae.NONE && rand(3) === 0 && changes < changeLimit) {
				mutations.removeAntennae();
			}
			// Remove wings
			if ((player.wings.type !== Wings.NONE || player.rearBody.type === RearBody.SHARK_FIN) && rand(4) === 0 && changes < changeLimit) {
				mutations.removeWings(tfSource);
			}
			//Bunny Breeder Perk?
			//FAILSAAAAFE
			if (changes === 0) {
				if (player.lib100 < 100) changes++;
				dynStats("lib", 1, "lus", (5 + player.lib / 7));
				if (player.lib100 < 30) dynStats("lib", 1);
				if (player.lib100 < 40) dynStats("lib", 1);
				if (player.lib100 < 60) dynStats("lib", 1);
				//Lower ones are gender specific for some reason
				if (player.lib100 < 60) {
					if (!player.hasCock() || (player.gender === Gender.HERM && rand(2) === 0)) {
						//(Cunts or assholes!
						if (player.lib100 >= 30) {
							outputText("\n\nYour mouth rolls open as you start to pant with desire.  Did it get hotter?"
							          +" Your hand reaches down to your [assholeOrPussy], and you're struck by just how empty it feels."
							          +" The desire to be filled, not by a hand or a finger but by a virile male, rolls through you like a wave,"
							          +" steadily increasing your desire for sex.");
						} else {
							outputText("\n\nYou squirm a little and find your eyes glancing down to your groin."
							          +" Strange thoughts jump to mind, wondering how it would feel to breed until you're swollen and pregnant. ");
							if (player.cor < 25) {
								outputText("You're repulsed by such shameful thoughts.");
							} else if (player.cor < 60) {
								outputText("You worry that this place is really getting to you.");
							} else if (player.cor < 90) {
								outputText("You pant a little and wonder where the nearest fertile male is.");
							} else {
								outputText("You grunt and groan with desire and disappointment.  You should get bred soon!");
							}
						}
					} else {
						//WANGS!
						if (player.lib100 >= 30) {
							outputText("\n\nYour mouth rolls open as you start to pant with desire. Did it get hotter?"
							          +" Your hand reaches down to [eachcock], and you groan from how tight and hard it feels."
							          +" The desire to have it squeezed, not with your hand but with a tight pussy or puckered asshole,"
							          +" runs through you like a wave, steadily increasing your desire for sex.");
						} else {
							outputText("\n\nYou squirm a little and find your eyes glancing down to your groin."
							          +" Strange thoughts jump to mind, wondering how it would feel to fuck a ");
							if (rand(2) === 0) {
								outputText("female hare until she's immobilized by all her eggs. ");
							} else {
								outputText("herm rabbit until her sack is so swollen that she's forced to masturbate over and over again"
								          +" just to regain mobility. ");
							}
							if (player.cor < 25) {
								outputText("You're repulsed by such shameful thoughts.");
							} else if (player.cor < 50) {
								outputText("You worry that this place is really getting to you.");
							} else if (player.cor < 75) {
								outputText("You pant a little and wonder where the nearest fertile female is.");
							} else {
								outputText("You grunt and groan with desire and disappointment.  Gods you need to fuck!");
							}
						}
					}
				} else if (player.lib100 < 80) {
					//Libido over 60? FUCK YEAH!
					outputText("\n\nYou fan your neck and start to pant as your [skinTone] skin begins to flush red with heat"
					          +"[if (hasPlainSkin == false) through your [skinDesc]]. ");
					switch (player.gender) {
						case Gender.NONE:
							outputText("Sexual hunger seems to gnaw at your [asshole], demanding it be filled,"
							          +" but you try to resist your heightened libido. It's so very, very hard.");
							break;

						case Gender.MALE:
							outputText("Compression tightens down on [eachcock] as it strains against your [armor]."
							          +" You struggle to fight down your heightened libido, but it's hard – so very hard.");
							break;

						case Gender.FEMALE:
							outputText("Moisture grows between your rapidly-engorging vulva, making you squish and squirm"
							          +" as you try to fight down your heightened libido, but it's hard – so very hard.");
							break;

						case Gender.HERM:
							outputText("Steamy moisture and tight compression war for your awareness in your groin as [eachcock] starts to strain"
							          +" against your [armor]. Your vulva engorges with blood, growing slicker and wetter."
							          +" You try so hard to fight down your heightened libido, but it's so very, very hard."
							          +" The urge to breed lingers in your mind, threatening to rear its ugly head.");
							break;

						default:
					}
				} else {
					//MEGALIBIDO
					outputText("\n\nDelicious, unquenchable desire rises higher and higher inside you, until you're having trouble"
					          +" tamping it down all the time. A little, nagging voice questions why you would ever want to tamp it down."
					          +" It feels so good to give in and breed that you nearly cave to the delicious idea on the spot."
					          +" Life is beginning to look increasingly like constant fucking or masturbating in a lust-induced haze,"
					          +" and you're having a harder and harder time finding fault with it. ");
					if (player.cor < 33) {
						outputText("You sigh, trying not to give in completely.");
					} else if (player.cor < 66) {
						outputText("You pant and groan, not sure how long you'll even want to resist.");
					} else {
						outputText("You smile and wonder if you can ");
						if (player.lib100 < 100) {
							outputText("get your libido even higher.");
						} else {
							outputText("find someone to fuck right now.");
						}
					}
				}
			}
			player.refillHunger(20);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}

		override public function useItem():Boolean
		{
			return applyEffect(player);
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.PerkLib;
	import classes.StatusEffects;

	/**
	 * Lower lust significantly but has a chance of inducing the masturbation preventing effect from minotaur.
	 */
	public class NumbRocks extends Consumable
	{
		private static const ITEM_VALUE:int = 15;

		public function NumbRocks()
		{
			super("NumbRox","Numb Rox", "a strange packet of candy called 'Numb Rocks'", ITEM_VALUE, "This packet of innocuous looking 'candy' guarantees to reduce troublesome sensations and taste delicious.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You pop open the package of numb rocks and dump it into your waiting mouth.  The strange candy fizzes and pops, leaving the nerves on your tongue feeling a bit deadened as you swallow the sweet mess.");

			if (player.lust >= 33) {
				outputText("\n\nThe numbness spreads through your body, bringing with it a sense of calm that seems to muffle your sexual urges.");
				player.lust -= 20 + rand(40);
			}

			if (rand(5) === 0) {
				if (!player.hasStatusEffect(StatusEffects.Dysfunction)) {
					outputText("\n\nUnfortunately, the skin of ");
					if (player.cockTotal() > 0) {
						outputText(player.sMultiCockDesc());
						if (player.hasVagina()) outputText(" and");
						outputText(" ");
					}
					if (player.hasVagina()) {
						if (!player.hasCock()) outputText("your ");
						outputText(player.vaginaDescript(0) + " ");
					}
					if (!(player.hasCock() || player.hasVagina())) outputText(player.assholeDescript() + " ");
					outputText(" numbs up too.  You give yourself a gentle touch, but are quite disturbed when you realize you can barely feel it.  You can probably still fuck something to get off, but regular masturbation is out of the question...");
					player.createStatusEffect(StatusEffects.Dysfunction, 50 + rand(100), 0, 0, 0);
				}
				else {
					outputText("\n\nSadly your groin becomes even more deadened to sensation.  You wonder how much longer you'll have to wait until you can please yourself again.");
					player.addStatusValue(StatusEffects.Dysfunction, 1, 50 + rand(100));
				}
			}
			else if (rand(4) === 0 && player.inte > 15) {
				outputText("\n\nNumbness clouds your mind, making you feel slow witted and dull.  Maybe these candies weren't such an exceptio... fantas... good idea.");
				dynStats("int", -(1 + rand(5)));
			}
			if (player.findPerk(PerkLib.ThickSkin) < 0 && player.sens100 < 30 && rand(4) === 0) {
				outputText("Slowly, ");
				if (player.hasPlainSkin()) outputText("your skin");
				else outputText("the skin under your " + player.skin.desc);
				outputText(" begins to feel duller, almost... thicker.  You pinch yourself and find that your epidermis feels more resistant to damage, almost like natural armor!\n<b>(Thick Skin - Perk Gained!)</b>");
				player.createPerk(PerkLib.ThickSkin, 0, 0, 0, 0);
			}
			outputText("\n\nAfter the sensations pass, your " + player.skin.desc + " feels a little less receptive to touch.");
			dynStats("sen", -3);
			if (player.sens < 1) player.sens = 1;
			player.refillHunger(20);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;

	/**
	 * Oil that reduces sensitivity.
	 */
	public class NumbingOil extends Consumable
	{
		private static const ITEM_VALUE:int = 100;

		public function NumbingOil()
		{
			super("NumbOil","Numb Oil", "a bottle of numbing oil", ITEM_VALUE, "This bottle feels a bit warm to the touch. From the look of the label on the bottle of oil, you suspect this will make you less sensitive.");
		}

		override public function useItem():Boolean
		{
			outputText("You open the bottle and begin pouring the oil all over your body.\r\r");
			if (player.sens100 < 20) {
				outputText("Your skin tingles slightly, and afterwords, you feel less sensitive than before.");
			}

			if (player.sens100 >= 20 && player.sens100 < 40) {
				outputText("Your skin burns a bit, but eventually the burning fades away, leaving your skin less sensitive than before.");
			}

			if (player.sens100 >= 40 && player.sens100 < 60) {
				outputText("Your skin burns and itches unbearably for several minutes, but eventually returns to normal. You feel less sensitive than before.");
			}

			if (player.sens100 >= 60) {
				outputText("As you finish rubbing the oil into your skin, you fall gasping to your knees. It feels like someone lit you on fire, and that the fire is made of biting ants. You write in agony for a few minutes until the sensations fade. You feel slightly less sensitive than before.");
			}

            var senLoss:Number = 5 + Math.floor(player.sens / 10);
			dynStats("sen", -senLoss);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.GlobalFlags.kFLAGS;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	/**
	 * Spider eyes transformative item
	 */
	public class OculumArachnae extends Consumable
	{
		public function OculumArachnae()
		{
			super(
				"Oculum",
				"Oculum A.",
				"a jar of Oculum Arachnae",
				ConsumableLib.DEFAULT_VALUE,
				"This is a small glass jar containing a viscous light-orange fluid with a small label that reads, \"Oculum Arachnae\"." +
				" It is likely this potion is tied to arachnids in some way."
			);
		}

		override public function useItem():Boolean
		{
			mutations.initTransformation([3]);
			player.slimeFeed();
			clearOutput();
			outputText("You eat the fluid and lick the rest from your fingers. It tastes a bit like roasted cheese with blueberry marmalade.");
			if (changeLimit > 0 && rand(3) === 0 && player.eyes.count < 4) {
				outputText("\n\nYou suddenly get the strangest case of double vision; you stumble and blink around, clutching your face,"
				          +" but you draw your hands back when you poke yourself in the eye. Wait, those fingers were on your forehead!"
				          +" You tentatively run your fingertips across your forehead, not quite believing what you felt."
				          +" There's now a pair of eyes on your forehead, positioned just above your normal ones!"
				          +" This will take some getting used to!");
				player.eyes.count = 4;
				flags[kFLAGS.TIMES_TRANSFORMED]++;
				return false;
			}
			// If we got here, then no changes happened
			outputText("\n\nThe cheesy sweetness energizes you, leaving you feeling refreshed.");
			player.changeFatigue(-33);
			return false;
		}
	}
}


code:
/**
 * Created by aimozg on 18.01.14.
 */
package classes.Items.Consumables
{
public class OvipositionElixir extends CustomOviElixir {

		public function OvipositionElixir() {
			super("OviElix", "Ovi Elixir", "a hexagonal crystal bottle tagged with an image of an egg", 30, "This hexagonal crystal bottle is filled with a strange green fluid.  A tag with a picture of an egg is tied to the neck of the bottle, indicating it is somehow connected to egg-laying.");
		}

}
}


code:
/**
 * Created by aimozg on 18.01.14.
 */
package classes.Items.Consumables
{
	import classes.*;
	import classes.internals.Utils;
	import classes.Items.Consumable;

	public class OvipositionMax extends CustomOviElixir {

		public function OvipositionMax() {
			super("Ovi Max", "Ovi Max", "an enhanced hexagonal crystal bottle tagged with an image of an egg", 75, "This hexagonal crystal bottle is filled with a strange yellow fluid. A tag with a picture of a glowing egg is tied to the neck of the bottle, indicating it is somehow connected to egg-laying and you know it will be more potent.");
		}

		override protected function doSpeedUp(incubation:int):int {
			return incubation - int(incubation * 0.5 + 15);
		}

		override protected function canSpeedUp():Boolean {
			return player.pregnancyIncubation > 20;
		}

		override protected function randEggCount():int {
			return rand(4)+6;
		}

		override protected function randBigEgg():Boolean {
			return rand(2)==0;
		}

	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;

	/**
	 * @since March 26, 2018
	 * @author Stadler76
	 */
	public class PeppermintWhite extends Consumable
	{
		public function PeppermintWhite()
		{
			super(
				"PeppWht",
				"PeppWht",
				"a vial of peppermint white",
				120,
				"This tightly corked glass bottle gives of a pepperminty smell and reminds you of the winter holidays. How odd."
			);
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You pull the cork off the gift from the mysterious stranger. The scent of alluring mint fills your nose once again."
			          +" You bring the head of the bottle to your lips and tip it back, the creamy white fluid hits your tongue and slips down your"
			          +" throat. The liquid is surprisingly refreshing, the creamy mint flavor clings to your tongue and mouth,"
			          +" and makes your breath feel cool as you exhale over your lips.  You can feel the liquid drip down to your stomach"
			          +" and fill you with a pleasant warmth and holiday cheer.\n\n");
			//Recovers health and fatigue, adds five to max health, and one to libido.*/
			player.HPChange(player.maxHP(), true);
			player.changeFatigue( -100);
			return false;
		}
	}
}


code:
/**
 * Created by K.Quesom 11.06.14
 */
package classes.Items.Consumables
{
	import classes.GlobalFlags.kFLAGS;
    import classes.Player;
	import classes.PregnancyStore;
	import classes.StatusEffects;
    import classes.internals.Utils;
	import classes.Items.Consumable;
	import classes.GlobalFlags.kGAMECLASS;

	public class PhoukaWhiskey extends Consumable {

		public function PhoukaWhiskey() {
			super("P_Whsky", "Ph. Whiskey", "a small bottle of whiskey", 20, "A small, corked glass bottle with a dark amber liquid inside.  The whiskey smells strongly of peat.");
		}

        override public function canUse():Boolean {
			switch (phoukaWhiskeyAcceptable(player)) {
				case -4:
					outputText("You stare at the bottle for a moment, but decide not to risk harming one of the children growing inside you.\n\n");
					return false;
				case -3:
					outputText("You stare at the bottle for a moment, but decide not to risk harming either of the children growing inside you.\n\n");
					return false;
				case -2:
					outputText("You stare at the bottle for a moment, but decide not to risk harming the child growing inside your colon.\n\n");
					return false;
				case -1:
					outputText("You stare at the bottle for a moment, but decide not to risk harming the child growing inside your womb.\n\n");
					return false;
				default:
			}
            return true; //Zero and up will return true
        }

		override public function useItem():Boolean {
			player.slimeFeed();
			switch (phoukaWhiskeyDrink(player)) {
				case 0: //Player isn't pregnant
					outputText("You uncork the bottle and drink some whiskey, hoping it will let you relax for a while.\n\nIt's strong stuff and afterwards you worry a bit less about the future.  Surely things will right themselves in the end.");
					dynStats("cor", Utils.rand(2) + 1, "lus", Utils.rand(8) + 1); //These gains are permanent
					break;
				case 1: //Child is a phouka or satyr, loves alcohol
					outputText("You uncork the bottle and drink some whiskey, hoping it will help with the gnawing hunger for alcohol you've had since this baby started growing inside you.\n\nYou down the booze in one shot and a wave of contentment washes over you.  It seems your passenger enjoyed the meal.");
					break;
				case 2: //Child is a faerie but will become a phouka with this drink
					outputText("At first you feel your baby struggle against the whiskey, then it seems to grow content and enjoy it.");
					break;
				case 3: //Child is a faerie, hates phouka whiskey
					outputText("You feel queasy and want to throw up.  There's a pain in your belly and you realize the baby you're carrying didn't like that at all.");
					break;
				default:
			}
			flags[kFLAGS.PREGNANCY_CORRUPTION]++; //Faerie or phouka babies become more corrupted, no effect if the player is not pregnant or on other types of babies
			phoukaWhiskeyAddStatus(player);
			return(false);
        }

		public function phoukaWhiskeyAcceptable(player:Player):int
		{ //This function provides a single common test that can be used both by this class and the PhoukaScene class
			//Returns:	0 = canUse (not pregnant), 1 = canUse (single pregnancy, womb), 2 = canUse (single pregnancy, colon), 3 = canUse (double pregnancy, both OK),
			//			-1 = No (single pregnancy, womb), -2 = No (single pregnancy, colon), -3 = No (double pregnancy, both not OK), -4 = No (double pregnancy, one OK, one not)
			if (player.pregnancyIncubation == 0) {
				if (player.buttPregnancyIncubation == 0) return 0; //No baby. Simplest, most common case
				if (player.buttPregnancyType == PregnancyStore.PREGNANCY_SATYR) return 2;
				return -2;
			}
			if (player.buttPregnancyIncubation == 0) { //Single pregnancy, carried in the womb
				if (player.pregnancyType == PregnancyStore.PREGNANCY_SATYR) return 1;
				if (player.pregnancyType == PregnancyStore.PREGNANCY_FAERIE) return 1;
				return -1;
			}
			//Double pregnancy
			var wombBabyLikesAlcohol:Boolean = (player.pregnancyType == PregnancyStore.PREGNANCY_SATYR) || (player.pregnancyType == PregnancyStore.PREGNANCY_FAERIE);
			var colonBabyLikesAlcohol:Boolean = (player.buttPregnancyType == PregnancyStore.PREGNANCY_SATYR);
			if (wombBabyLikesAlcohol && colonBabyLikesAlcohol) return 3;
			if (!wombBabyLikesAlcohol && !colonBabyLikesAlcohol) return -3;
			return -4;
		}

		public function phoukaWhiskeyDrink(player:Player):int
		{ //This function provides a single common test that can be used both by this class and the PhoukaScene class
			//Returns:	0 = Player is not pregnant, 1 = Player is pregnant with a satyr or phouka, 2 = Player is pregnant with a faerie that will become a phouka with this drink,
			//			3 = Player is pregnant with a faerie that will remain a faerie after this drink
			if ((player.pregnancyIncubation == 0) && (player.buttPregnancyIncubation == 0)) return 0;
			if (player.pregnancyType == PregnancyStore.PREGNANCY_FAERIE) {
				if (flags[kFLAGS.PREGNANCY_CORRUPTION] == 0) return 2;
				if (flags[kFLAGS.PREGNANCY_CORRUPTION] < 0) return 3;
			}
			return 1; //Pregnancy has to be either a satyr or a phouka
		}

        public function phoukaWhiskeyAddStatus(player:Player):void
        {
			var libidoChange:int = (player.lib + 25 > 100 ? 100 - player.lib : 25);
			var sensChange:int = (player.sens < 10 ? player.sens : 10);
			var speedChange:int = (player.spe < 20 ? player.spe : 20);
			var intChange:int = (player.inte < 20 ? player.inte : 20);
			if (player.hasStatusEffect(StatusEffects.PhoukaWhiskeyAffect)) {
				var drinksSoFar:int = player.statusEffectv2(StatusEffects.PhoukaWhiskeyAffect);
				if (drinksSoFar < 4)
					player.addStatusValue(StatusEffects.PhoukaWhiskeyAffect, 1, 8 - (2 * drinksSoFar));
				else
					player.addStatusValue(StatusEffects.PhoukaWhiskeyAffect, 1, 1); //Always get at least one more hour of drunkenness
				player.addStatusValue(StatusEffects.PhoukaWhiskeyAffect, 2, 1);
				player.addStatusValue(StatusEffects.PhoukaWhiskeyAffect, 3, 256 * libidoChange + sensChange);
				player.addStatusValue(StatusEffects.PhoukaWhiskeyAffect, 4, 256 * speedChange + intChange);
				outputText("\n\nOh, it tastes so good.  This stuff just slides down your throat.");
				dynStats("lib", libidoChange, "sens", -sensChange, "spe", -speedChange, "int", -intChange);
			}
			else { //First time
				player.createStatusEffect(StatusEffects.PhoukaWhiskeyAffect, 8, 1, 256 * libidoChange + sensChange, 256 * speedChange + intChange);
					//The four stats we’re affecting get paired together to save space. This way we don’t need a second StatusEffect to store more info.
				dynStats("lib", libidoChange, "sens", -sensChange, "spe", -speedChange, "int", -intChange);
			}
			statScreenRefresh();
        }

		public function phoukaWhiskeyExpires(player:Player):void
		{
			var numDrunk:int = player.statusEffectv2(StatusEffects.PhoukaWhiskeyAffect);
			var libidoSensCombined:int = player.statusEffectv3(StatusEffects.PhoukaWhiskeyAffect);
			var intSpeedCombined:int = player.statusEffectv4(StatusEffects.PhoukaWhiskeyAffect);

			var sensChange:int = libidoSensCombined & 255;
			var libidoChange:int = (libidoSensCombined - sensChange) / 256;
			var intChange:int = intSpeedCombined & 255;
			var speedChange:int = (intSpeedCombined - intChange) / 256;
			dynStats("lib", -libidoChange , "sens", sensChange, "spe", speedChange, "int", intChange); //Get back all the stats you lost
			player.removeStatusEffect(StatusEffects.PhoukaWhiskeyAffect);
			if (numDrunk > 3)
				outputText("\nThe dizzy sensation dies away and is replaced by a throbbing pain that starts in your skull and then seems to run all through your body, seizing up your joints and making your stomach turn.  The world feels like it’s off kilter and you aren’t in any shape to face it.  You suppose you could down another whiskey, but right now that doesn’t seem like such a good idea.\n");
			else if (numDrunk > 1)
				outputText("\nThe fuzzy, happy feeling ebbs away.  With it goes the warmth and carefree feelings.  Your head aches and you wonder if you should have another whiskey, just to tide you over\n");
			else
				outputText("\nThe fuzzy, happy feeling ebbs away.  The weight of the world’s problems seems to settle on you once more.  It was nice while it lasted and you wouldn’t mind having another whiskey.\n");
			statScreenRefresh();
		}
    }
}


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.CockTypesEnum;
	import classes.GlobalFlags.*;
	import classes.Items.*;
	import classes.PerkLib;

	public class PigTruffle extends Consumable
	{

		public function PigTruffle(boar:Boolean)
		{
			super(boar ? "BoarTru" : "PigTruf", boar ? "BoarTruffle" : "PigTruffle", boar ? "a boar truffle" : "a pigtail truffle", ConsumableLib.DEFAULT_VALUE, boar ? "It’s clear where this fungus gets its name. A small, curly sprig resembling a pig’s tail can be seen jutting out of it. Now that it’s been enhanced by Lumi, it’s larger and fuzzier than it was before, almost like a peach." : "It’s clear where this fungus gets its name. A small, curly sprig resembling a pig’s tail can be seen jutting out of it.");
		}

		override public function useItem():Boolean
		{
			pigTruffle(this.id == "BoarTru");
			return false;
		}

		public function pigTruffle(boar:Boolean):void
		{
			var tfSource:String = "pigTruffle";
			if (boar) tfSource += "-boar";
			var temp:int = 0;
			var x:int = 0;
			mutations.initTransformation([2, 2, 3], boar ? 2 : 1);
			outputText("You take a bite into the pigtail truffle. It oddly tastes like bacon. You eventually finish eating. ");
			player.refillHunger(20);
			//-----------------------
			// SIZE MODIFICATIONS
			//-----------------------
			//Increase thickness
			if (rand(3) === 0 && changes < changeLimit && player.thickness < 75) {
				outputText(player.modThickness(75, 3));
				changes++;
			}
			//Decrease muscle tone
			if (rand(3) === 0 && changes < changeLimit && player.gender >= 2 && player.tone > 20) {
				outputText(player.modTone(20, 4));
				changes++;
			}
			//Increase hip rating
			if (rand(3) === 0 && changes < changeLimit && player.gender >= 2 && player.hips.rating < 15) {
				outputText("\n\nYour gait shifts slightly to accommodate your widening " + player.hipDescript() + ". The change is subtle, but they're definitely broader.");
				player.hips.rating++;
				changes++;
			}
			//Increase ass rating
			if (rand(3) === 0 && changes < changeLimit && player.butt.rating < 12) {
				outputText("\n\nWhen you stand back, up your [ass] jiggles with a good bit of extra weight.");
				player.butt.rating++;
				changes++;
			}
			//Increase ball size if you have balls.
			if (rand(3) === 0 && changes < changeLimit && player.balls > 0 && player.ballSize < 4) {
				if (player.ballSize < 3)
					outputText("\n\nA flash of warmth passes through you and a sudden weight develops in your groin. You pause to examine the changes and your roving fingers discover your " + (player.balls == 4 ? "quartette" : "duo") + " of [balls] have grown larger than a human’s.");
				else
					outputText("\n\nA sudden onset of heat envelops your groin, focusing on your ballsack. Walking becomes difficult as you discover your " + (player.balls == 4 ? "quartette" : "duo") + " of testicles have enlarged again.");
				player.ballSize++;
				changes++;
			}
			//Neck restore
			if (player.neck.type !== Neck.NORMAL && changes < changeLimit && rand(4) === 0) {
				mutations.restoreNeck(tfSource);
			}
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && rand(5) === 0) mutations.restoreRearBody(tfSource);
			//Ovi perk loss
			if (rand(5) === 0) mutations.updateOvipositionPerk(tfSource);
			//-----------------------
			// TRANSFORMATIONS
			//-----------------------
			//Gain pig cock, independent of other pig TFs.
			if (rand(4) === 0 && changes < changeLimit && player.hasCockNotOfType(CockTypesEnum.PIG)) {
				if (player.cocks.length == 1) { //Single cock
					outputText("\n\nYou feel an uncomfortable pinching sensation in your [cock]. " + player.clothedOrNakedLower("You pull open your [armor]", "You look down at your exposed groin") + ", watching as it warps and changes. As the transformation completes, you’re left with a shiny, pinkish red pecker ending in a prominent corkscrew at the tip. You now have a pig penis!");
					player.cocks[0].cockType = CockTypesEnum.PIG;
				}
				else { //Multiple cocks
					outputText("\n\nYou feel an uncomfortable pinching sensation in one of your cocks. You pull open your [armor], watching as it warps and changes. As the transformation completes, you’re left with a shiny pinkish red pecker ending in a prominent corkscrew at the tip. You now have a pig penis!");
					player.setFirstCockNotOfType(CockTypesEnum.PIG);
				}
				changes++;
			}
			//Gain pig ears!
			if (rand(boar ? 3 : 4) === 0 && changes < changeLimit && player.ears.type !== Ears.PIG) {
				outputText("\n\nYou feel a pressure on your ears as they begin to reshape. Once the changes finish, you flick them about experimentally, and you’re left with pointed, floppy pig ears.");
				player.ears.type = Ears.PIG;
				changes++;
			}
			//Gain pig tail if you already have pig ears!
			if (rand(boar ? 2 : 3) === 0 && changes < changeLimit && player.ears.type == Ears.PIG && player.tail.type !== Tail.PIG) {
				if (player.tail.type > 0) //If you have non-pig tail.
					outputText("\n\nYou feel a pinching sensation in your [tail] as it begins to warp in change. When the sensation dissipates, you are left with a small, curly pig tail.");
				else //If you don't have a tail.
					outputText("\n\nYou feel a tug at the base of your spine as it lengthens ever so slightly. Looking over your shoulder, you find that you have sprouted a small, curly pig tail.");
				player.tail.type = Tail.PIG;
				changes++;
			}
			//Gain pig tail even when centaur, needs pig ears.
			if (rand(boar ? 2 : 3) === 0 && changes < changeLimit && player.ears.type == Ears.PIG && player.tail.type !== Tail.PIG && player.isTaur() && (player.lowerBody.type == LowerBody.HOOFED || player.lowerBody.type == LowerBody.PONY)) {
				outputText("\n\nThere is a tingling in your [tail] as it begins to warp and change. When the sensation dissipates, you are left with a small, curly pig tail. This new, mismatched tail looks a bit odd on your horse lower body.");
				player.tail.type = Tail.PIG;
				changes++;
			}
			//Turn your lower body into pig legs if you have pig ears and tail.
			if (rand(boar ? 3 : 4) === 0 && changes < changeLimit && player.ears.type == Ears.PIG && player.tail.type == Tail.PIG && player.lowerBody.type !== LowerBody.CLOVEN_HOOFED) {
				if (player.isTaur()) //Centaur
					outputText("\n\nYou scream in agony as a horrible pain racks your entire bestial lower half. Unable to take it anymore, you pass out. When you wake up, you’re shocked to find that you no longer have the animal's lower body. Instead, you only have two legs. They are digitigrade and end in cloven hooves. You now have pig legs!");
				else if (player.lowerBody.type == LowerBody.NAGA) //Naga
					outputText("\n\nYou scream in agony as a horrible pain racks the entire length of your snake-like coils. Unable to take it anymore, you pass out. When you wake up, you’re shocked to find that you no longer have the lower body of a snake. Instead, you only have two legs. They are digitigrade and end in cloven hooves. You now have pig legs!");
				else //Bipedal
					outputText("\n\nYou scream in agony as the bones in your legs break and rearrange. Once the pain subsides, you inspect your legs, finding that they are digitigrade and ending in cloven hooves. You now have pig legs!");
				player.lowerBody.type = LowerBody.CLOVEN_HOOFED;
				player.lowerBody.legCount = 2;
				changes++;
			}
			//Gain pig face when you have the first three pig TFs.
			if (mutations.tfNoFur() && rand(boar ? 2 : 3) === 0 && changes < changeLimit && player.ears.type == Ears.PIG && player.tail.type == Tail.PIG && player.lowerBody.type == LowerBody.CLOVEN_HOOFED && (player.face.type !== Face.PIG && player.face.type !== Face.BOAR)) {
				outputText("\n\nYou cry out in pain as the bones in your face begin to break and rearrange. You rub your face furiously in an attempt to ease the pain, but to no avail. As the sensations pass, you examine your face in a nearby puddle. You nearly gasp in shock at the sight of your new pig face!");
				player.face.type = Face.PIG;
				changes++;
			}
			//Gain boar face if you have pig face.
			if (rand(3) === 0 && changes < changeLimit && player.ears.type == Ears.PIG && player.tail.type == Tail.PIG && player.lowerBody.type == LowerBody.CLOVEN_HOOFED && player.face.type == Face.PIG) {
				outputText("\n\nYou cry out in pain as the bones in your face begin to break and rearrange. You rub your face furiously in an attempt to ease the pain, but to no avail. Your bottom teeth ache as well. What’s happening to you? As the sensations pass, you examine your face in a nearby puddle. You nearly gasp in shock at the sight of your new tusky boar face!");
				player.face.type = Face.BOAR;
				changes++;
			}
			//Change skin colour
			if (rand(boar ? 3 : 4) === 0 && changes < changeLimit) {
				var skinToBeChosen:String = randomChoice(boar ? ["dark brown", "brown", "brown"] : ["pink", "tan", "sable"]);
				outputText("\n\nYour skin tingles ever so slightly as you skin’s color changes before your eyes. As the tingling diminishes, you find that your skin has turned " + skinToBeChosen + ".");
				player.skin.tone = skinToBeChosen;
				player.arms.updateClaws(player.arms.claws.type);
				game.rathazul.addMixologyXP(20);
				changes++;
			}
			if (changes == 0) {
				outputText("\n\nOddly, you do not feel any changes. Perhaps you're lucky? Or not.");
			}
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
		}

	}

}


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.GlobalFlags.*;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	/**
	 * @since March 31, 2018
	 * @author Stadler76
	 */
	public class PinkEgg extends Consumable
	{
		public static const SMALL:int = 0;
		public static const LARGE:int = 1;

		private var large:Boolean;

		public function PinkEgg(type:int)
		{
			var id:String;
			var shortName:String;
			var longName:String;
			var description:String;
			var value:int;

			large = type === LARGE;

			switch (type) {
				case SMALL:
					id = "PinkEgg";
					shortName = "PinkEgg";
					longName = "a pink and white mottled egg";
					description = "This is an oblong egg, not much different from a chicken egg in appearance (save for the color)."
					             +" Something tells you it's more than just food.";
					value = ConsumableLib.DEFAULT_VALUE;
					break;

				case LARGE:
					id = "L.PnkEg";
					shortName = "L.PnkEg";
					longName = "a large pink and white mottled egg";
					description = "This is an oblong egg, not much different from an ostrich egg in appearance (save for the color)."
					             +" Something tells you it's more than just food.";
					value = ConsumableLib.DEFAULT_VALUE;
					break;

				default: // Remove this if someone manages to get SonarQQbe to not whine about a missing default ... ~Stadler76
			}

			super(id, shortName, longName, value, description);
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You devour the egg, momentarily sating your hunger.\n\n");
			if (!large) {
				//Remove a dick
				if (player.cocks.length > 0) {
					player.killCocks(1);
					outputText("\n\n");
				}
				//remove balls
				if (player.balls > 0) {
					if (player.ballSize > 15) {
						player.ballSize -= 8;
						outputText("Your scrotum slowly shrinks, settling down at a MUCH smaller size.  Your " + player.ballsDescriptLight() + " are much smaller.\n\n");
					}
					else {
						player.balls = 0;
						player.ballSize = 1;
						outputText("Your scrotum slowly shrinks, eventually disappearing entirely!  You've lost your balls!\n\n");
					}
				}
				//Fertility boost
				if (player.vaginas.length > 0 && player.fertility < 40) {
					outputText("You feel a tingle deep inside your body, just above your " + player.vaginaDescript(0) + ", as if you were becoming more fertile.\n\n");
					player.fertility += 5;
				}
				player.refillHunger(20);
			}
			//LARGE
			else {
				//Remove a dick
				if (player.cocks.length > 0) {
					player.killCocks(-1);
					outputText("\n\n");
				}
				if (player.balls > 0) {
					player.balls = 0;
					player.ballSize = 1;
					outputText("Your scrotum slowly shrinks, eventually disappearing entirely!  You've lost your balls!\n\n");
				}
				//Fertility boost
				if (player.vaginas.length > 0 && player.fertility < 70) {
					outputText("You feel a powerful tingle deep inside your body, just above your " + player.vaginaDescript(0) + ". Instinctively you know you have become more fertile.\n\n");
					player.fertility += 10;
				}
				player.refillHunger(60);
			}
			if (rand(3) === 0) {
				if (large) outputText(player.modFem(100, 8));
				else outputText(player.modFem(95, 3));
			}

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	public class PrincessPucker extends Consumable
	{
		public function PrincessPucker()
		{
			super("PrnsPkr", "P.Pucker", "a vial of pinkish fluid", ConsumableLib.DEFAULT_VALUE, "A vial filled with a viscous pink liquid. A label reads \"Princess Pucker\".");
		}

		override public function useItem():Boolean
		{
			clearOutput();

			outputText("You uncork the bottle, and sniff it experimentally.  The fluid is slightly pink, full of flecks of gold, and smelling vaguely of raspberries.  Princess Gwynn said it was drinkable.\n\n");

			outputText("You down the bottle, hiccuping a bit at the syrupy-sweet raspberry flavor.  Immediately following the sweet is a bite of sour, like sharp lime.  You pucker your lips, and feel your head clear a bit from the intensity of flavor.  You wonder what Gwynn makes this out of.\n\n");

			outputText("Echoing the sensation in your head is an answering tingle in your body.  The sudden shock of citrusy sour has left you slightly less inclined to fuck, a little more focused on your priorities.\n\n");

			if (rand(2) === 0)
			{
				dynStats("lus-", 20, "lib-", 2);
			}
			else
			{
				dynStats("lus-", 20, "sen-", 2);
			}

			if (player.hair.color !== "pink")
			{
				if (rand(5) === 0)
				{
					outputText("A slight tingle across your scalp draws your attention to your hair.  It seems your " + player.hair.color + " is rapidly gaining a distinctly pink hue, growing in from the roots!\n\n");
					player.hair.color = "pink";
				}
			}
			player.refillHunger(15);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	public class PrisonBread extends Consumable
	{

		public function PrisonBread() {
			super("P.Bread", "P.Bread", "a stale loaf of prison bread", ConsumableLib.DEFAULT_VALUE, "An impossibly hard loaf of stale bread.  Despite its age, still quite nutritious.");
		}

		override public function canUse():Boolean {
			return true;
		}

		override public function useItem():Boolean {
			prison.prisonItemBread(false);
			return true;
		}

	}

}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	/**
	 * Honey based alcoholic beverage.
	 */
	public class ProMead extends Consumable
	{
		public function ProMead()
		{
			super("ProMead", "ProMead", "a pint of premium god\'s mead", ConsumableLib.DEFAULT_VALUE, null);
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You take a hearty swig of mead, savoring the honeyed taste on your tongue.  Emboldened by the first drink, you chug the remainder of the horn\'s contents in no time flat.  You wipe your lips, satisfied, and let off a small belch as you toss the empty horn aside.");
			dynStats("lib",1,"cor",-1);
			outputText("\n\nYou feel suddenly invigorated by the potent beverage, like you could take on a whole horde of barbarians or giants and come out victorious!");
			player.HPChange(Math.round(player.maxHP()), false);
			dynStats("lus=", 20 + rand(6));
			if(rand(3) === 0) {
				outputText("\n\nThe alcohol fills your limbs with vigor, making you feel like you could take on the world with just your fists!");
				if(silly()) {
					outputText("  Maybe you should run around shirtless, drink, and fight!  Saxton Hale would be proud.");
				}
				dynStats("str",1);
			}
			else
			{
				outputText("\n\nYou thump your chest and grin - your foes will have a harder time taking you down while you\'re fortified by liquid courage.");
				dynStats("tou",1);
			}

			return false;
		}

		override public function getMaxStackSize():int {
			return 5;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.PerkLib;
	import classes.GlobalFlags.*;

	public class PumpkinSeed extends Consumable
	{
		public function PumpkinSeed()
		{
			super("PumpkinS","PumpkinS", "a huge pumpkin seed", 200,"A huge pumpkin seed. It appears safe enough to eat.");
		}

		override public function useItem():Boolean
		{
			player.slimeFeed();
			clearOutput();
			outputText("You eat the pumpkin seed, shell and all. It's surprisingly tender and sweet, and the taste lingers on your tongue for a while. The sheer size makes it a pretty good snack.");
			flags[kFLAGS.PUMPKIN_SEEDS_EATEN]++;
			if (!(player.hasPerk(PerkLib.FerasBoonAlpha) || player.hasPerk(PerkLib.FerasBoonBreedingBitch) || player.hasPerk(PerkLib.FerasBoonMilkingTwat) || player.hasPerk(PerkLib.FerasBoonSeeder) || player.hasPerk(PerkLib.FerasBoonWideOpen))){
				if (flags[kFLAGS.PUMPKIN_SEEDS_EATEN] == 1){
					outputText("\n\nA very good snack, in fact. You feel amazing! You should find more. Definitely.");
					dynStats("str", 3, "spe", 3, "inte", 3, "tou", 3);
				}
				if (flags[kFLAGS.PUMPKIN_SEEDS_EATEN] == 2){
					outputText("\n\nYou feel woozy for a moment, and your vision blurs. For a moment, your mind is assaulted by a vision of something silly; a giant pumpkin.\n\nThe vision clears almost immediately, so fast that you're left wondering if it happened at all. It doesn't bother you for long; the absolutely divine taste of the seed making a much stronger mark on your mind. You should probably find more.");
					dynStats("str", 2, "spe", 2, "inte", 2, "tou", 2);
				}
				if (flags[kFLAGS.PUMPKIN_SEEDS_EATEN] == 3){
					outputText("\n\nAfter finishing your meal, you're assaulted by the silly vision again. It lasts longer this time, bothering you a bit more. As troubled as you are, though, the taste of these seeds just gets better and better!");
					dynStats("str", 1, "spe", 1, "inte", 1, "tou", 1);
				}
				if (flags[kFLAGS.PUMPKIN_SEEDS_EATEN] == 4){
					outputText("\n\nDarkness encroaches on the edge of your vision, and you faint for a moment. You see the giant pumpkin again, and the strange vision is much clearer.\n\nYou can make out all the details of the scene; the dark, damp forest around the giant gourd, the wet and slimy vines around it, the bushes and dirt patches on the ground. You approach the giant gourd, filled with purpose and desire...");
					outputText("\n\nYou wake up, filled with energy. You spring up from the ground and begin fidgeting, unable to remain still. Every time you close your eyes, the scene of the giant pumpkin assaults your mind again. It's buried inside your mind, and you cannot shake it off. Part of you is bothered about the effects of these seeds, but the need to find the gourd is so primal that you don't have time to care. The idea of such a thing existing is laughable, but you need to search for it.");
				}
			}
			player.changeFatigue(-10);
			player.refillHunger(20);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.PerkLib;
	import classes.Scenes.Inventory;

	public class PurePearl extends Consumable
	{
		private static const ITEM_VALUE:int = 1000;

		public function PurePearl()
		{
			super("P.Pearl","P.Pearl", "a pure pearl", ITEM_VALUE, "Marae gave you this pure pearl as a reward for shutting down the demonic factory.")
		}

		override public function useItem():Boolean {
			clearOutput();
			if (player.findPerk(PerkLib.PurityBlessing) >= 0) {
				outputText("As you're about to cram the pearl into your mouth, your instincts remind you that you shouldn't waste the pearl since you already have the perk. You put it back in your [inv]. ");
				inventory.takeItem(consumables.P_PEARL, inventory.inventoryMenu);
				return false;
			}

			outputText("You cram the pearl in your mouth and swallow it like a giant pill with some difficulty.  Surprisingly there is no discomfort, only a cool calming sensation that springs up from your core.");
			outputText("\n\n<b>Perk Gained: Purity Blessing!</b>");
			dynStats("lib", -5, "lus", -25, "cor", -10);
			player.createPerk(PerkLib.PurityBlessing, 0, 0, 0, 0);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;

	public class PurityPeach extends Consumable
	{
		private static const ITEM_VALUE:int = 10;

		public function PurityPeach()
		{
			super("PurPeac", "PurPeac", "a pure peach", ITEM_VALUE, "This is a peach from Minerva's spring, yellowy-orange with red stripes all over it.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You bite into the sweet, juicy peach, feeling a sensation of energy sweeping through your limbs and your mind.  You feel revitalized, refreshed, and somehow cleansed.  ");
			player.changeFatigue(-15);
			player.HPChange(Math.round(player.maxHP() * 0.25), true);
			player.refillHunger(25);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;

	/**
	 * Reduces corruption.
	 */
	public class PurityPhilter extends Consumable
	{
		private static const ITEM_VALUE:int = 100;

		public function PurityPhilter()
		{
			super("PPhiltr","P.Philter", "a vial of purity philter", ITEM_VALUE, "This silver vial feels cool to the touch. In fact, it feels a bit cold. Given the label, you suspect this will help to erase corruption.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You uncap the small silver vial and place it to your lips. Tilting your head back, you pour the cold tasteless liquid down your throat.\n\n");
			if (player.cor < 20) {
				outputText("You shiver as your body is suffused with a cold, refreshing feeling. You feel much calmer than before.");
			}

			if (player.cor >= 20 && player.cor < 40) {
				outputText("You break out into a cold sweat as the freezing liquid surges through your body. Despite the discomfort, your thoughts do seem clearer.");
			}

			if (player.cor >= 40 && player.cor < 60) {
				outputText("As the freezing liquid hits your stomach, you suddenly feel like you're standing in a blizzard. Your hands and feet go numb, and even though you've never felt colder in your life, you're covered in sweat. Eventually, you begin to feel more normal, and your thoughts definitely seem clearer.");
			}

			if (player.cor >= 60) {
				outputText("As you swallow the liquid, you fall gasping to your knees. It feels like someone shoved an icicle through your middle. You break out in a cold sweat as the sensation spreads, and you feel like your blood is freezing in your veins. Mercifully, you pass out.\n\nLater, when you wake up, the constant haze of lust that usually clouds your thoughts seems a bit thinner.");
			}

			var corLoss:Number = 5 + Math.floor(player.cor / 10);
			dynStats("cor", -corLoss);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.GlobalFlags.*;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	/**
	 * @since March 31, 2018
	 * @author Stadler76
	 */
	public class PurpleEgg extends Consumable
	{
		public static const SMALL:int = 0;
		public static const LARGE:int = 1;

		private var large:Boolean;

		public function PurpleEgg(type:int)
		{
			var id:String;
			var shortName:String;
			var longName:String;
			var description:String;
			var value:int;

			large = type === LARGE;

			switch (type) {
				case SMALL:
					id = "PurplEg";
					shortName = "PurplEg";
					longName = "a purple and white mottled egg";
					description = "This is an oblong egg, not much different from a chicken egg in appearance (save for the color)."
					             +" Something tells you it's more than just food.";
					value = ConsumableLib.DEFAULT_VALUE;
					break;

				case LARGE:
					id = "L.PrpEg";
					shortName = "L.PrpEg";
					longName = "a large purple and white mottled egg";
					description = "This is an oblong egg, not much different from an ostrich egg in appearance (save for the color)."
					             +" Something tells you it's more than just food.";
					value = ConsumableLib.DEFAULT_VALUE;
					break;

				default: // Remove this if someone manages to get SonarQQbe to not whine about a missing default ... ~Stadler76
			}

			super(id, shortName, longName, value, description);
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You devour the egg, momentarily sating your hunger.\n\n");
			if (!large || player.hips.rating > 20) {
				outputText("You stumble as you feel your [hips] widen, altering your gait slightly.");
				player.hips.rating++;
				player.refillHunger(20);
			} else {
				outputText("You stagger wildly as your hips spread apart, widening by inches."
				          +" When the transformation finishes you feel as if you have to learn to walk all over again.");
				player.hips.rating += 2 + rand(2);
				player.refillHunger(60);
			}
			if (rand(3) === 0) {
				if (large)
					outputText(player.modThickness(80, 8));
				else
					outputText(player.modThickness(80, 3));
			}

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;

	/**
	 * A purple fruit from Essrayle.
	 */
	public class PurpleFruit extends Consumable
	{
		public function PurpleFruit()
		{
			super("PrFruit","PrFruit", "a purple fruit", ConsumableLib.DEFAULT_VALUE, "This sweet-smelling produce looks like an eggplant, but feels almost squishy, and rubbery to the touch. Holding it to your ear, you think you can hear some fluid sloshing around inside.");
		}

		override public function useItem():Boolean
		{
			var temp:int = 0;

			player.slimeFeed();
			clearOutput();
			outputText("You bite into the fruit Essrayle gave you with little hesitation.  It's amazingly sweet, with a texture that's rather gummy.  The juice is a candied grape syrup that fills your cheeks and flows down your throat with far more fluid than the size of the plant should allow.  You hastily devour the entire thing, unable to stop yourself once you've started.");
			outputText("\n\nA tingling warmth shifts to a roaring inferno in your veins, your heart-rate spiking abruptly.  The intensity of it almost makes your body feel molten!  But, as quickly as it came, the sensation fades into merely a pleasing warmth that settles in your chest.");
			if (player.averageNipplesPerBreast() < 4) {
				outputText("  At first you think nothing has changed, but a second look confirms that your breasts now sport the same quartet of cow-like nipples the bovine plant-girl bears.");
				if (player.nippleLength < 4) player.nippleLength = 4;
				temp = player.bRows();
				while (temp > 0) {
					temp--;
					player.breastRows[temp].nipplesPerBreast = 4;
				}
			}
			//[Player gains quad nipples, milk production and libido way up]
			dynStats("lib", 5);
			player.boostLactation(3 * player.bRows());
			player.refillHunger(30);

			return false;
		}
	}
}