code:
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.StatusEffects;
	import classes.StatusEffects.KitsuneVision;
	import classes.internals.Utils;
	import classes.GlobalFlags.kGAMECLASS;

	public final class KitsuneGift extends Consumable {

		public function KitsuneGift() {
			super("KitGift", "KitGift", "a kitsune's gift", 0, "A small square package given to you by a forest kitsune.  It is wrapped up in plain white paper and tied with a string.  Who knows what's inside?");
		}

		override public function useItem():Boolean {
			clearOutput();
			outputText("Curiosity gets the best of you, and you decide to open the package.  After all, what's the worst that could happen?\n\n");
			//Opening the gift randomly results in one of the following:
			switch (Utils.rand(14)) {
			//[Fox Jewel]
				case 0:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and to your delight, sitting in the center is a small teardrop-shaped jewel!");
				outputText("\n\nYou've received a shining Fox Jewel from the kitsune's gift!  How generous!  ");
				inventory.takeItem(consumables.FOXJEWL, inventory.inventoryMenu);
				return(true);

			//[Fox Berries]
				case 1:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and to your delight, there is a small cluster of orange-colored berries sitting in the center!");
				outputText("\n\nYou've received a fox berry from the kitsune's gift!  How generous!  ");
				//add Fox Berries to inventory
				inventory.takeItem(consumables.FOXBERY, inventory.inventoryMenu);
				return(true);

			//[Gems]
				case 2:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and to your delight, it is filled to the brim with shining gems!");
				var gems:int = 2 + Utils.rand(20);
				outputText("\n\nYou've received " + Utils.num2Text(gems) + " shining gems from the kitsune's gift!  How generous!");
				player.gems += gems;
				//add X gems to inventory
				statScreenRefresh();
				break;

			//[Kitsune Tea/Scholar's Tea] //Just use Scholar's Tea and drop the "trick" effect if you don't want to throw in another new item.
				case 3:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and to your delight, it contains a small bag of dried tea leaves!");
				outputText("\n\nYou've received a bag of tea from the kitsune's gift!  How thoughtful!  ");
				//add Kitsune Tea/Scholar's Tea to inventory
				inventory.takeItem(consumables.SMART_T, inventory.inventoryMenu);
				return(true);

			//[Hair Dye]
				case 4:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and to your delight, it contains a small vial filled with hair dye!");
				var itype:Consumable = [
					consumables.RED_DYE,
					consumables.BLOND_D,
					consumables.BLACK_D,
					consumables.WHITEDY
				][Utils.rand(4)];

				outputText("\n\nYou've received " + itype.longName + " from the kitsune's gift!  How generous!  ");
				//add <color> Dye to inventory
				inventory.takeItem(itype, inventory.inventoryMenu);
				return(true);

			//[Knowledge Spell]
				case 5:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, but it seems like there's nothing else inside.  As you peer into the box, a glowing circle filled with strange symbols suddenly flashes to life!  Light washes over you, and your mind is suddenly assaulted with new knowledge...  and the urge to use that knowledge for mischief!");

				outputText("\n\nThe kitsune has shared some of its knowledge with you!  But in the process, you've gained some of the kitsune's promiscuous trickster nature...");
				//Increase INT and Libido, +10 LUST
				dynStats("int", 4, "sen", 2, "lus", 10);
				break;

			//[Thief!]
				case 6:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and sitting in the center is an artfully crafted paper doll.  Before your eyes, the doll springs to life, dancing about fancifully.  Without warning, it leaps into your [inv], then hops away and gallivants into the woods, carting off a small fortune in gems.");

				outputText("\n\nThe kitsune's familiar has stolen your gems!");
				// Lose X gems as though losing in battle to a kitsune
				player.gems -= 2 + Utils.rand(15);
				statScreenRefresh();
				break;

			//[Prank]
				case 7:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and sitting in the center is an artfully crafted paper doll.  Before your eyes, the doll springs to life, dancing about fancifully.  Without warning, it pulls a large calligraphy brush from thin air and leaps up into your face, then hops away and gallavants off into the woods.  Touching your face experimentally, you come away with a fresh coat of black ink on your fingertips.");

				outputText("\n\nThe kitsune's familiar has drawn all over your face!  The resilient marks take about an hour to completely scrub off in the nearby stream.  You could swear you heard some mirthful snickering among the trees while you were cleaning yourself off.");
				//Advance time 1 hour, -20 LUST
				dynStats("lus", -20);
				break;

			//[Aphrodisiac]
				case 8:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and sitting in the center is an artfully crafted paper doll.  Before your eyes, the doll springs to life, dancing about fancifully.  Without warning, it tosses a handful of sweet-smelling pink dust into your face, then hops over the rim of the box and gallavants off into the woods.  Before you know what has happened, you feel yourself growing hot and flushed, unable to keep your hands away from your groin.");
				outputText("\n\nOh no!  The kitsune's familiar has hit you with a powerful aphrodisiac!  You are debilitatingly aroused and can think of nothing other than masturbating.");
				//+100 LUST
				dynStats("lus", 100, "scale", false);
				break;

			//[Wither]
				case 9:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, and sitting in the center is an artfully crafted paper doll.  Before your eyes, the doll springs to life, dancing about fancifully.  Without warning, it tosses a handful of sour-smelling orange powder into your face, then hops over the rim of the box and gallavants off into the woods.  Before you know what has happened, you feel the strength draining from your muscles, withering away before your eyes.");
				outputText("\n\nOh no!  The kitsune's familiar has hit you with a strength draining spell!  Hopefully it's only temporary...");
				dynStats("str", -5, "tou", -5);
				break;

			//[Dud]
				case 10:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, but to your disappointment, the only other contents appear to be nothing more than twigs, leaves, and other forest refuse.");
				outputText("\n\nIt seems the kitsune's gift was just a pile of useless junk!  What a ripoff!");
				break;

			//[Dud...  Or is it?]
				case 11:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  The inside of the box is lined with purple velvet, but to your disappointment, the only other contents appear to be nothing more than twigs, leaves, and other forest refuse.  Upon further investigation, though, you find a shard of shiny black chitinous plating mixed in with the other useless junk.");
					outputText("\n\nAt least you managed to salvage a shard of black chitin from it...  ");
				inventory.takeItem(useables.B_CHITN, inventory.inventoryMenu);
				return(true);

				case 12:
				outputText("As the paper falls away, you carefully lift the cover of the box. The inside of the box is lined with purple velvet, yet the contents are a myriad of plain-looking sticks. You nearly toss the junk before noticing one stick is topped with a shiny red orb. Upon further investigation, you realize it's a piece of hard candy!\n\n");
					//outputText("\n\nAt least you managed to get a loli pop...  ");
				inventory.takeItem(consumables.LOLIPOP, inventory.inventoryMenu);
				return(true);
				case 13:
				outputText("As the paper falls away, you carefully lift the cover of the box, your hands trembling nervously.  A thin cloud of blue, glittering smoke wafts from inside the box, and you inadvertedly inhale it. Your stomach sinks, and you expect the worst.");
				outputText("\n\n...But nothing happens. You shrug, somewhat angered that the box had nothing of value. You open your [inv] and, as expected, several kitsunes have made their way into it. You shoo them away, and tell them that you'll touch their fluffy tails after you've gone back to the kitsune in your camp. You then notice that one especially small kitsune has managed to sneak her way into your ear. You try to remove her, but you're not quick enough; she's already deep inside your mind. Damn kitsunes. Maybe the kitsune in your kitsune village will know how to remove mind kitsunes.");
				game.forest.kitsuneScene.saveContent.hadVision = true;
				player.createStatusEffect(StatusEffects.kitsuneVision, 0, 0, 0, 0);
				break;

			}
			return(false); //Any other case does not have a sub-menu.
		}
	}
}


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.StatusEffects;
	import classes.Vagina;

	/**
	 * @since March 31, 2018
	 * @author Stadler76
	 */
	public class LaBova extends Consumable
	{
		public static const STANDARD:int = 0;
		public static const ENHANCED:int = 1;
		public static const PURIFIED:int = 2;

		private var tainted:Boolean = false;
		private var enhanced:Boolean = false;

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

			switch (type) {
				case STANDARD:
					id = "LaBova";
					shortName = "La Bova";
					longName = 'a bottle containing a misty fluid labeled "LaBova"';
					description = "A bottle containing a misty fluid with a grainy texture, it has a long neck and a ball-like base."
					             +" The label has a stylized picture of a well endowed cowgirl nursing two guys while they jerk themselves off.";
					value = ConsumableLib.DEFAULT_VALUE;
					tainted = true;
					enhanced = false;
					break;

				case ENHANCED:
					id = "ProBova";
					shortName = "ProBova";
					longName = 'a bottle containing a misty fluid labeled "ProBova"';
					description = "This cloudy potion has been enhanced by the alchemist Lumi to imbue its drinker with cow-like attributes.";
					value = ConsumableLib.DEFAULT_VALUE;
					tainted = true;
					enhanced = true;
					break;

				case PURIFIED:
					id = "P.LBova";
					shortName = "P.LBova";
					longName = 'a bottle containing a white fluid labeled "Pure LaBova"';
					description = "A bottle containing a misty fluid with a grainy texture; it has a long neck and a ball-like base."
					             +" The label has a stylized picture of a well-endowed cow-girl nursing two guys while they jerk themselves off."
					             +" It has been purified by Rathazul.";
					value = ConsumableLib.DEFAULT_VALUE;
					tainted = false;
					enhanced = false;
					break;

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

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

		public function applyEffect(player:Player):Boolean
		{
			var tfSource:String = "laBova";
			player.slimeFeed();
			mutations.initTransformation([2, 3, 3], enhanced ? 3 : 1);
			//Temporary storage
			var temp:Number = 0;
			var temp2:Number = 0;
			var temp3:Number = 0;
			//LaBova:
			//ItemDesc: "A bottle containing a misty fluid with a grainy texture, it has a long neck and a ball-like base.  The label has a stylized picture of a well endowed cowgirl nursing two guys while they jerk themselves off.  "
			//ItemUseText:
			clearOutput();
			outputText("You drink the ");
			if (enhanced) outputText("Pro Bova");
			else outputText("La Bova");
			outputText(".  The drink has an odd texture, but is very sweet.  It has a slight aftertaste of milk.");
			//Possible Item Effects:
			//STATS
			//Increase player str:
			if (changes < changeLimit && rand(3) === 0) {
				temp = 60 - player.str;
				if (temp <= 0) temp = 0;
				else {
					if (rand(2) === 0) outputText("\n\nThere is a slight pain as you feel your muscles shift somewhat.  Their appearance does not change much, but you feel much stronger.");
					else outputText("\n\nYou feel your muscles tighten and clench as they become slightly more pronounced.");
					dynStats("str", temp / 10);
				}
			}
			//Increase player tou:
			if (changes < changeLimit && rand(3) === 0) {
				temp = 60 - player.tou;
				if (temp <= 0) temp = 0;
				else {
					if (rand(2) === 0) outputText("\n\nYou feel your insides toughening up; it feels like you could stand up to almost any blow.");
					else outputText("\n\nYour bones and joints feel sore for a moment, and before long you realize they've gotten more durable.");
					dynStats("tou", temp / 10);

				}
			}
			//Decrease player spd if it is over 30:
			if (changes < changeLimit && rand(3) === 0) {
				if (player.spe100 > 30) {
					outputText("\n\nThe body mass you've gained is making your movements more sluggish.");
					temp = (player.spe - 30) / 10;
					dynStats("spe", -temp);
				}
			}
			//Increase Corr, up to a max of 50.
			if (tainted) {
				temp = 50 - player.cor;
				if (temp < 0) temp = 0;
				dynStats("cor", temp / 10);
			}
			//Sex bits - Duderiffic
			if (player.cocks.length > 0 && rand(2) === 0 && !flags[kFLAGS.HYPER_HAPPY]) {
				//If the player has at least one dick, decrease the size of each slightly,
				outputText("\n\n");
				temp = 0;
				temp2 = player.cocks.length;
				temp3 = 0;
				//Find biggest cock
				while (temp2 > 0) {
					temp2--;
					if (player.cocks[temp].cockLength <= player.cocks[temp2].cockLength) temp = temp2;
				}
				//Shrink said cock
				if (player.cocks[temp].cockLength < 6 && player.cocks[temp].cockLength >= 2.9) {
					player.cocks[temp].cockLength -= .5;
					temp3 -= .5;
				}
				temp3 += player.increaseCock(temp, (rand(3) + 1) * -1);
				player.lengthChange(temp3, 1);
				if (player.cocks[temp].cockLength < 2) {
					outputText("  ");
					if (player.cockTotal() == 1 && !player.hasVagina()) {
						outputText("Your " + player.cockDescript(0) + " suddenly starts tingling.  It's a familiar feeling, similar to an orgasm.  However, this one seems to start from the top down, instead of gushing up from your loins.  You spend a few seconds frozen to the odd sensation, when it suddenly feels as though your own body starts sucking on the base of your shaft.  Almost instantly, your cock sinks into your crotch with a wet slurp.  The tip gets stuck on the front of your body on the way down, but your glans soon loses all volume to turn into a shiny new clit.");
						if (player.balls > 0) outputText("  At the same time, your " + player.ballsDescriptLight() + " fall victim to the same sensation; eagerly swallowed whole by your crotch.");
						outputText("  Curious, you touch around down there, to find you don't have any exterior organs left.  All of it got swallowed into the gash you now have running between two fleshy folds, like sensitive lips.  It suddenly occurs to you; you now have a vagina!");
						player.balls = 0;
						player.ballSize = 1;
						player.createVagina();
						player.setClitLength(.25);
						player.removeCock(0, 1);
					}
					else {
						player.killCocks(1);
					}
				}
				//if the last of the player's dicks are eliminated this way, they gain a virgin vagina;
				if (player.cocks.length == 0 && !player.hasVagina()) {
					player.createVagina();
					player.vaginas[0].vaginalLooseness = Vagina.LOOSENESS_TIGHT;
					player.vaginas[0].vaginalWetness = Vagina.WETNESS_NORMAL;
					player.vaginas[0].virgin = true;
					player.setClitLength(.25);
					outputText("\n\nAn itching starts in your crotch and spreads vertically.  You reach down and discover an opening.  You have grown a new " + player.vaginaDescript(0) + "!");

					changes++;
					dynStats("lus", 10);
				}
			}
			//Sex bits - girly
			var boobsGrew:Boolean = false;
			//Increase player's breast size, if they are HH or bigger
			//do not increase size, but do the other actions:
			if (((tainted && player.biggestTitSize() <= 11) || (!tainted && player.biggestTitSize() <= 5)) && changes < changeLimit && (rand(3) === 0 || enhanced)) {
				if (rand(2) === 0) outputText("\n\nYour " + player.breastDescript(0) + " tingle for a moment before becoming larger.");
				else outputText("\n\nYou feel a little weight added to your chest as your " + player.breastDescript(0) + " seem to inflate and settle in a larger size.");
				player.growTits(1 + rand(3), 1, false, 3);
				changes++;
				dynStats("sen", .5);
				boobsGrew = true;
			}
			//Remove feathery hair
			mutations.removeFeatheryHair();
			//If breasts are D or bigger and are not lactating, they also start lactating:
			if (player.biggestTitSize() >= 4 && player.breastRows[0].lactationMultiplier < 1 && changes < changeLimit && (rand(3) === 0 || boobsGrew || enhanced)) {
				outputText("\n\nYou gasp as your " + player.breastDescript(0) + " feel like they are filling up with something.  Within moments, a drop of milk leaks from your " + player.breastDescript(0) + ";  you are now lactating.");
				player.breastRows[0].lactationMultiplier = 1.25;
				changes++;
				dynStats("sen", .5);
			}
			//Quad nipples and other 'special enhanced things.
			if (enhanced) {
				//QUAD DAMAGE!
				if (player.breastRows[0].nipplesPerBreast == 1) {
					changes++;
					player.breastRows[0].nipplesPerBreast = 4;
					outputText("\n\nYour " + player.nippleDescript(0) + "s tingle and itch.  You pull back your " + player.armorName + " and watch in shock as they split into four distinct nipples!  You now have four nipples on each side of your chest!");
					if (player.breastRows.length >= 2 && player.breastRows[1].nipplesPerBreast == 1) {
						outputText("A moment later your second row of " + player.breastDescript(1) + " does the same.  You have sixteen nipples now!");
						player.breastRows[1].nipplesPerBreast = 4;
					}
					if (player.breastRows.length >= 3 && player.breastRows[2].nipplesPerBreast == 1) {
						outputText("Finally, your ");
						if (player.bRows() == 3) outputText("third row of " + player.breastDescript(2) + " mutates along with its sisters, sprouting into a wonderland of nipples.");
						else if (player.bRows() >= 4) {
							outputText("everything from the third row down mutates, sprouting into a wonderland of nipples.");
							player.breastRows[3].nipplesPerBreast = 4;
							if (player.bRows() >= 5) player.breastRows[4].nipplesPerBreast = 4;
							if (player.bRows() >= 6) player.breastRows[5].nipplesPerBreast = 4;
							if (player.bRows() >= 7) player.breastRows[6].nipplesPerBreast = 4;
							if (player.bRows() >= 8) player.breastRows[7].nipplesPerBreast = 4;
							if (player.bRows() >= 9) player.breastRows[8].nipplesPerBreast = 4;
						}
						player.breastRows[2].nipplesPerBreast = 4;
						outputText("  You have a total of " + num2Text(player.totalNipples()) + " nipples.");
					}
				}
				//QUAD DAMAGE IF WEIRD SHIT BROKE BEFORE
				else if (player.breastRows.length > 1 && player.breastRows[1].nipplesPerBreast == 1) {
					if (player.breastRows[1].nipplesPerBreast == 1) {
						outputText("\n\nYour second row of " + player.breastDescript(1) + " tingle and itch.  You pull back your " + player.armorName + " and watch in shock as your " + player.nippleDescript(1) + " split into four distinct nipples!  You now have four nipples on each breast in your second row of breasts.");
						player.breastRows[1].nipplesPerBreast = 4;
					}
				}
				else if (player.breastRows.length > 2 && player.breastRows[2].nipplesPerBreast == 1) {
					if (player.breastRows[2].nipplesPerBreast == 1) {
						outputText("\n\nYour third row of " + player.breastDescript(2) + " tingle and itch.  You pull back your " + player.armorName + " and watch in shock as your " + player.nippleDescript(2) + " split into four distinct nipples!  You now have four nipples on each breast in your third row of breasts.");
						player.breastRows[2].nipplesPerBreast = 4;
					}
				}
				else if (player.breastRows.length > 3 && player.breastRows[3].nipplesPerBreast == 1) {
					if (player.breastRows[3].nipplesPerBreast == 1) {
						outputText("\n\nYour fourth row of " + player.breastDescript(3) + " tingle and itch.  You pull back your " + player.armorName + " and watch in shock as your " + player.nippleDescript(3) + " split into four distinct nipples!  You now have four nipples on each breast in your fourth row of breasts.");
						player.breastRows[3].nipplesPerBreast = 4;
					}
				}
				else if (player.biggestLactation() > 1) {
					if (rand(2) === 0) outputText("\n\nA wave of pleasure passes through your chest as your " + player.breastDescript(0) + " start leaking milk from a massive jump in production.");
					else outputText("\n\nSomething shifts inside your " + player.breastDescript(0) + " and they feel MUCH fuller and riper.  You know that you've started producing much more milk.");
					player.boostLactation(2.5);
					if ((player.nippleLength < 1.5 && tainted) || (!tainted && player.nippleLength < 1)) {
						outputText("  Your " + player.nippleDescript(0) + "s swell up, growing larger to accommodate your increased milk flow.");
						player.nippleLength += .25;
						dynStats("sen", .5);
					}
					changes++;
				}
			}
			//If breasts are already lactating and the player is not lactating beyond a reasonable level, they start lactating more:
			else {
				if (tainted && player.breastRows[0].lactationMultiplier > 1 && player.breastRows[0].lactationMultiplier < 5 && changes < changeLimit && (rand(3) === 0 || enhanced)) {
					if (rand(2) === 0) outputText("\n\nA wave of pleasure passes through your chest as your " + player.breastDescript(0) + " start producing more milk.");
					else outputText("\n\nSomething shifts inside your " + player.breastDescript(0) + " and they feel fuller and riper.  You know that you've started producing more milk.");
					player.boostLactation(0.75);
					if ((player.nippleLength < 1.5 && tainted) || (!tainted && player.nippleLength < 1)) {
						outputText("  Your " + player.nippleDescript(0) + "s swell up, growing larger to accommodate your increased milk flow.");
						player.nippleLength += .25;
						dynStats("sen", .5);
					}
					changes++;
				}
				if (!tainted) {
					if (player.breastRows[0].lactationMultiplier > 1 && player.breastRows[0].lactationMultiplier < 3.2 && changes < changeLimit && rand(3) === 0) {
						if (rand(2) === 0) outputText("\n\nA wave of pleasure passes through your chest as your " + player.breastDescript(0) + " start producing more milk.");
						else outputText("\n\nSomething shifts inside your " + player.breastDescript(0) + " and they feel fuller and riper.  You know that you've started producing more milk.");
						player.boostLactation(0.75);
						if ((player.nippleLength < 1.5 && tainted) || (!tainted && player.nippleLength < 1)) {
							outputText("  Your " + player.nippleDescript(0) + "s swell up, growing larger to accommodate your increased milk flow.");
							player.nippleLength += .25;
							dynStats("sen", .5);
						}
						changes++;
					}
					if ((player.breastRows[0].lactationMultiplier > 2 && player.hasStatusEffect(StatusEffects.Feeder)) || player.breastRows[0].lactationMultiplier > 5) {
						if (rand(2) === 0) outputText("\n\nYour breasts suddenly feel less full, it seems you aren't lactating at quite the level you were.");
						else outputText("\n\nThe insides of your breasts suddenly feel bloated.  There is a spray of milk from them, and they settle closer to a more natural level of lactation.");
						changes++;
						dynStats("sen", .5);
						player.boostLactation(-1);
					}
				}
			}
			//If breasts are lactating at a fair level
			//and the player has not received this status,
			//apply an effect where the player really wants
			//to give their milk to other creatures
			//(capable of getting them addicted):
			if (!player.hasStatusEffect(StatusEffects.Feeder) && player.biggestLactation() >= 3 && rand(2) === 0 && player.biggestTitSize() >= 5 && player.isCorruptEnough(35)) {
				outputText("\n\nYou start to feel a strange desire to give your milk to other creatures.  For some reason, you know it will be very satisfying.\n\n(You have gained the 'Feeder' perk!)");
				player.createStatusEffect(StatusEffects.Feeder, 0, 0, 0, 0);
				player.createPerk(PerkLib.Feeder, 0, 0, 0, 0);
				changes++;
			}
			//UNFINISHED
			//If player has addictive quality and drinks pure version, removes addictive quality.
			//if the player has a vagina and it is tight, it loosens.
			if (player.hasVagina()) {
				if (player.vaginas[0].vaginalLooseness < Vagina.LOOSENESS_LOOSE && changes < changeLimit && rand(2) === 0) {
					outputText("\n\nYou feel a relaxing sensation in your groin.  On further inspection you discover your " + player.vaginaDescript(0) + " has somehow relaxed, permanently loosening.");
					player.vaginas[0].vaginalLooseness++;
					player.vaginas[0].resetRecoveryProgress();
					player.vaginas[0].vaginalLooseness++;
					changes++;
					dynStats("lus", 10);
				}
			}
			//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 (tainted && rand(5) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			//General Appearance (Tail -> Ears -> Paws(fur stripper) -> Face -> Horns
			//Give the player a bovine tail, same as the minotaur
			if (tainted && player.tail.type !== Tail.COW && changes < changeLimit && rand(3) === 0) {
				if (player.tail.type == Tail.NONE) outputText("\n\nYou feel the flesh above your " + player.buttDescript() + " knotting and growing.  It twists and writhes around itself before flopping straight down, now shaped into a distinctly bovine form.  You have a cow tail.");
				else {
					if (player.tail.type < Tail.SPIDER_ABDOMEN || player.tail.type > Tail.BEE_ABDOMEN) {
						outputText("\n\nYour tail bunches uncomfortably, twisting and writhing around itself before flopping straight down, now shaped into a distinctly bovine form.  You have a cow tail.");
					}
					//insect
					if (player.tail.type == Tail.SPIDER_ABDOMEN || player.tail.type == Tail.BEE_ABDOMEN) {
						outputText("\n\nYour insect-like abdomen tingles pleasantly as it begins shrinking and softening, chitin morphing and reshaping until it looks exactly like a cow tail.");
					}
				}
				player.tail.type = Tail.COW;
				changes++;
			}
			//Give the player bovine ears, same as the minotaur
			if (tainted && player.ears.type !== Ears.COW && changes < changeLimit && rand(4) === 0 && player.tail.type == Tail.COW) {
				outputText("\n\nYou feel your ears tug on your scalp as they twist shape, becoming oblong and cow-like.  You now have cow ears.");
				player.ears.type = Ears.COW;
				changes++;
			}
			//If the player is under 7 feet in height, increase their height, similar to the minotaur
			if (((enhanced && player.tallness < 96) || player.tallness < 84) && changes < changeLimit && rand(2) === 0) {
				temp = rand(5) + 3;
				//Slow rate of growth near ceiling
				if (player.tallness > 74) temp = Math.floor(temp / 2);
				//Never 0
				if (temp == 0) temp = 1;
				//Flavor texts.  Flavored like 1950's cigarettes. Yum.
				if (temp < 5) outputText("\n\nYou shift uncomfortably as you realize you feel off balance.  Gazing down, you realize you have grown SLIGHTLY taller.");
				if (temp >= 5 && temp < 7) outputText("\n\nYou feel dizzy and slightly off, but quickly realize it's due to a sudden increase in height.");
				if (temp == 7) outputText("\n\nStaggering forwards, you clutch at your head dizzily.  You spend a moment getting your balance, and stand up, feeling noticeably taller.");
				player.tallness += temp;
				changes++;
			}
			//Give the player hoofs, if the player already has hoofs STRIP FUR
			if (tainted && player.lowerBody.type !== LowerBody.HOOFED && player.ears.type == Ears.COW) {
				if (changes < changeLimit && rand(3) === 0) {
					changes++;
					if (player.lowerBody.type == LowerBody.HUMAN) outputText("\n\nYou stagger as your feet change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
					else if (player.lowerBody.type == LowerBody.DOG) outputText("\n\nYou stagger as your paws change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
					else if (player.lowerBody.type == LowerBody.NAGA) outputText("\n\nYou collapse as your sinuous snake-tail tears in half, shifting into legs.  The pain is immense, particularly in your new feet as they curl inward and transform into hooves!");
					//Catch-all
					else if (player.lowerBody.type > LowerBody.NAGA) outputText("\n\nYou stagger as your " + player.feet() + " change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
					outputText("  A coat of beastial fur springs up below your waist, itching as it fills in.  You now have hooves in place of your feet!");
					player.lowerBody.type = LowerBody.HOOFED;
					player.lowerBody.legCount = 2;
					dynStats("cor", 0);
					changes++;
				}
			}
			//If the player's face is non-human, they gain a human face
			if (!enhanced && player.lowerBody.type == LowerBody.HOOFED && player.face.type !== Face.HUMAN && changes < changeLimit && rand(4) === 0) {
				//Remove face before fur!
				outputText("\n\nYour visage twists painfully, returning to a normal human shape.  Your face is human again!");
				player.face.type = Face.HUMAN;
				changes++;
			}
			//enhanced get shitty fur
			if (mutations.tfNoFur() && enhanced && (player.skin.desc !== "fur" || player.skin.furColor !== "black and white spotted")) {
				if (player.skin.desc !== "fur") outputText("\n\nYour " + player.skin.desc + " itches intensely.  You scratch and scratch, but it doesn't bring any relief.  Fur erupts between your fingers, and you watch open-mouthed as it fills in over your whole body.  The fur is patterned in black and white, like that of a cow.  The color of it even spreads to your hair!  You have cow fur!");
				else outputText("\n\nA ripple spreads through your fur as some patches darken and others lighten.  After a few moments you're left with a black and white spotted pattern that goes the whole way up to the hair on your head!  You've got cow fur!");
				player.skin.desc = "fur";
				player.skin.adj = "";
				player.skin.type = Skin.FUR;
				player.hair.color = "black and white spotted";
				player.skin.furColor = player.hair.color;
				player.underBody.restore(); // Restore the underbody for now
			}
			//if enhanced to probova give a shitty cow face
			else if (mutations.tfNoFur() && enhanced && player.face.type !== Face.COW_MINOTAUR) {
				outputText("\n\nYour visage twists painfully, warping and crackling as your bones are molded into a new shape.  Once it finishes, you reach up to touch it, and you discover that your face is like that of a cow!");
				player.face.type = Face.COW_MINOTAUR;
				changes++;
			}
			//Give the player bovine horns, or increase their size, same as the minotaur
			//New horns or expanding mino horns
			if (tainted && changes < changeLimit && rand(3) === 0 && player.face.type == Face.HUMAN) {
				//Get bigger or change horns
				if (player.horns.type == Horns.COW_MINOTAUR || player.horns.type == Horns.NONE) {
					//Get bigger if player has horns
					if (player.horns.type == Horns.COW_MINOTAUR) {
						if (player.horns.value < 5) {
							//Fems horns don't get bigger.
							outputText("\n\nYour small horns get a bit bigger, stopping as medium sized nubs.");
							player.horns.value += 1 + rand(2);
							changes++;
						}
					}
					//If no horns yet..
					if (player.horns.type == Horns.NONE || player.horns.value == 0) {
						outputText("\n\nWith painful pressure, the skin on your forehead splits around two tiny nub-like horns, similar to those you would see on the cattle back in your homeland.");
						player.horns.type = Horns.COW_MINOTAUR;
						player.horns.value = 1;
						changes++;
					}
					//TF other horns
					if (player.horns.type !== Horns.NONE && player.horns.type !== Horns.COW_MINOTAUR && player.horns.value > 0) {
						outputText("\n\nYour horns twist, filling your skull with agonizing pain for a moment as they transform into cow-horns.");
						player.horns.type = Horns.COW_MINOTAUR;
					}
				}
				//Not mino horns, change to cow-horns
				if (player.horns.type == Horns.DEMON || player.horns.type > Horns.COW_MINOTAUR) {
					outputText("\n\nYour horns vibrate and shift as if made of clay, reforming into two small bovine nubs.");
					player.horns.type = Horns.COW_MINOTAUR;
					player.horns.value = 2;
					changes++;
				}
			}
			//Increase the size of the player's hips, if they are not already childbearing or larger
			if (rand(2) === 0 && player.hips.rating < 15 && changes < changeLimit) {
				if (!tainted && player.hips.rating < 8 || tainted) {
					outputText("\n\nYou stumble as you feel the bones in your hips grinding, expanding your hips noticeably.");
					player.hips.rating += 1 + rand(4);
					changes++;
				}
			}
			// Remove gills
			if (rand(4) === 0 && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}

			//Increase the size of the player's ass (less likely then hips), if it is not already somewhat big
			if (rand(2) === 0 && player.butt.rating < 13 && changes < changeLimit) {
				if (!tainted && player.butt.rating < 8 || tainted) {
					outputText("\n\nA sensation of being unbalanced makes it difficult to walk.  You pause, paying careful attention to your new center of gravity before understanding dawns on you - your ass has grown!");
					player.butt.rating += 1 + rand(2);
					changes++;
				}
			}
			//Nipples Turn Back:
			if (player.hasStatusEffect(StatusEffects.BlackNipples) && changes < changeLimit && rand(3) === 0) {
				mutations.removeBlackNipples(tfSource);
			}
			//Debugcunt
			if (changes < changeLimit && rand(3) === 0 && player.vaginaType() == 5 && player.hasVagina()) {
				outputText("\n\nSomething invisible brushes against your sex, making you twinge.  Undoing your clothes, you take a look at your vagina and find that it has turned back to its natural flesh colour.");
				player.vaginaType(0);
				changes++;
			}
			if (rand(3) === 0) outputText(player.modFem(79, 3));
			if (rand(3) === 0) outputText(player.modThickness(70, 4));
			if (rand(5) === 0) outputText(player.modTone(10, 5));
			player.refillHunger(20);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}

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

license: unknown


code:
package classes.Items.Consumables {
	import classes.*;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	/**
	 * Item that boosts lactation.
	 */
	public class Lactaid extends Consumable {
		public function Lactaid() {
			super("Lactaid","Lactaid", "a pink bottle labelled \"Lactaid\"", ConsumableLib.DEFAULT_VALUE, "Judging by the name printed on this bottle, 'Lactaid' probably has an effect on the ability to lactate, and you doubt that effect is a reduction.");
		}
		override public function useItem():Boolean {
			clearOutput();
			player.slimeFeed();
			var i:Number = 0;
			outputText("You gulp down the bottle of lactaid, easily swallowing the creamy liquid.");
			if (player.averageBreastSize() < 8) { //Bump up size!
				outputText("\n\n");
				if (player.breastRows.length === 1) player.growTits((1 + rand(5)), 1, true, 1);
				else player.growTits(1 + rand(2), player.breastRows.length, true, 1);
			}
			if (player.biggestLactation() < 1) { //Player doesn't lactate
				outputText("\n\nYou feel your " + player.nippleDescript(0) + "s become tight and engorged.  A single droplet of milk escapes each, rolling down the curves of your breasts.  <b>You are now lactating!</b>");
				for (i = 0; i < player.breastRows.length; i++)
					player.breastRows[i].lactationMultiplier += 2;
			}
			else { //Boost lactation
				outputText("\n\nMilk leaks from your " + player.nippleDescript(0) + "s in thick streams.  You're lactating even more!");
				for (i = 0; i < player.breastRows.length; i++)
					player.breastRows[i].lactationMultiplier += 1 + rand(10) / 10;
			}
			dynStats("lus", 10);
			if (rand(3) === 0) outputText(player.modFem(95, 1));
			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.GlobalFlags.*;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.PerkLib;
	import classes.Scenes.BimboProgression;
	import classes.Vagina;
	import classes.BaseContent;
	import classes.lists.Age;
	import classes.*;
	import classes.CoC_Settings;
	import classes.Creature;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Items.Weapon;
	import classes.Items.WeaponTags;
	import classes.Player;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.*;
	import classes.internals.Utils;
	import classes.lists.ColorLists;
	import classes.StatusEffects;

	/**
	 * Liddellium, the loli-making potion!
	 *
	 * @since 5/7-18
	 * @author Satan, implemented by Trolololkarln
	 */

	public class Liddellium extends Consumable// implements TimeAwareInterface
	{
		//Tenacity, Google and theoretical knowladge was seemingly enough to get it technically working, if poorly so.
		//Inexperience means insecurity means excessive commenting!

		//var loliVar = 0;
		//flags[kFLAGS.LIDDELLIUM_FLAG] = 0;
		//Time attempted to drink, 1-3. -1 for Apraised

		public function Liddellium(identified:Boolean = false){
			var id:String = "Liddellium";
			var shortName:String;
			var longName:String;
			var description:String;
			var value:int;

			//Different description if unappraised.
			shortName = "Potion";
			longName = "strange potion";
			description = "It\'s a strange glass bottle labeled \"Drink Me\"";
			value = 0;
			/*
			//oterwise below, commented here for convinience
			shortName = "Liddellium";
			longName = "Liddellium";
			description = "A bottle of Liddellium, a carefully distilled concoction that is often used to turn demons into small children.";
			value = 500;
			*/
			//CoC.timeAwareClassAdd(this);//For the perk...Is this fine?

			super(id, shortName, longName, value, description);
		}
		override public function get shortName():String{
			if (flags[kFLAGS.LIDDELLIUM_FLAG] < 0) return "Liddellium";
			else return "Potion";
		}
		override public function get longName():String{
			if (flags[kFLAGS.LIDDELLIUM_FLAG] < 0) return "Liddellium";
			else return "strange potion";
		}
		override public function get value():Number{
			if (flags[kFLAGS.LIDDELLIUM_FLAG] < 0) return 500;
			else return 0;
		}
		override public function get description():String{
			if (flags[kFLAGS.LIDDELLIUM_FLAG] < 0) return "A bottle of Liddellium, a carefully distilled concoction that is often used to turn demons into small children.";
			else return "It\'s a strange glass bottle labeled \"Drink Me\"";
		}

		override public function canUse():Boolean{
			//Can only be use the 3rd time if unidentified, not in combat (not in camp proxy, is it possible to check for in camp?) and not have drank it before (has the perk).

			if (!player.hasPerk(PerkLib.LoliliciousBody) && !game.inCombat) return true;
			if (player.hasPerk(PerkLib.LoliliciousBody) || flags[kFLAGS.LIDDELLIUM_FLAG] == -2){
				outputText("Oh no. No, you're not doing that again.");
				return false;
			}
			return true;
		}
		private var penisRemoved:Boolean = false;
		override public function useItem():Boolean{
			var tfSource:String = "liddellium";

			switch (/*loliVar*/flags[kFLAGS.LIDDELLIUM_FLAG])
			{
				case 0:
					outputText("\"Drink Me\" is a little on the nose. Surely nobody thinks you\'re that naive, right?");
					inventory.returnItemToInventory(this);
					flags[kFLAGS.LIDDELLIUM_FLAG]++;
					return true;
				break;

				case 1:
					outputText("If one were to drink a bottle marked \"poison\" it is certain to disagree with one sooner or later... But it doesn't say poison. Still, maybe show it to an alchemist first?");
					inventory.returnItemToInventory(this);
					flags[kFLAGS.LIDDELLIUM_FLAG]++;
					return true;
				break;

				case 2:
					flags[kFLAGS.LIDDELLIUM_FLAG]++;
					clearOutput();
					outputText("That label makes a very compelling argument. Drink it?");

					//Lack of knowledge/experience with OOP below.
					//Other anons commented to look at Gro+ (still confused and doesn't actually show up.)

					menu();
					addButton(0, "Yes", useItem);
					addButton(1, "No", noUse);
					//Why does this menu refuse to show up?!
					//inventory.returnItemToInventory(this);
					return true;
					break;
				default:
			}
			///*loliVar*/flags[kFLAGS.LIDDELLIUM_FLAG]++;
			//return false;

			//All the changes (that were easy to do)!
			bigChanges();//Moved here to avoid repeating code, leaving virginities and "one-time" things.
			if (player.hasVagina()) player.vaginas[0].virgin = true;
			//Virgin ass
			player.ass.analLooseness = 0;
			//A child is you!
			player.age = Age.AGE_CHILD;
			//Phisically as well
			if (player.str > 10) player.str = 10;
			if (player.tou > 10) player.tou = 10;
			//Exhaustion
			player.createStatusEffect(StatusEffects.GlobalFatigue, 40, 720, 0, 1, false);
			player.changeFatigue(999);
			//Repurpose the loli perk, minimizing the files I have to touch and thus damage I can create.
			player.createPerkIfNotHasPerk(PerkLib.LoliliciousBody);
			player.createPerkIfNotHasPerk(PerkLib.TransformationResistance);
			//Congratualations, you've identified the effects! Actually, no flag for you.
			///*loliVar*/flags[kFLAGS.LIDDELLIUM_FLAG] = -1;

			//And some nice text
			clearOutput();
			outputText("Overcome with curiosity and poor judgment, you decide to drink the potion. It tastes... fascinating. Delicious. A most curious mixture of cherry tart, custard, pineapple, roast turkey, toffee, and hot buttered toast. The bizarrely delectable concoction soothes and warms you to your core before sending you through a dizzying spell. The world seems to shift and turn all around you, twisting in ways you would not expect. You fall to the ground, failing to hold yourself up. The soothing nature of the potion has completely gone away. Weakness takes hold of you, knocking you unconscious.")
			//Time and button should go here, according to Satans wishes
			doNext(wakeUp);
			return true;
		}
		private function bigChanges():Boolean{
			var transformed:Boolean = false;
			//All the changes (that were easy to do)!
			//height
			if (player.tallness > 48){ player.tallness = 48; transformed = true; }
			//Every row of breasts
			if (player.biggestTitSize() > 1){ for (var i:int = 0; player.breastRows.length > i; i++) player.breastRows[i].breastRating = 1; transformed = true; }
			//Hips
			if (player.hips.rating > 2){ player.hips.rating = 2; transformed = true; }
			//Cocks be gone
			if (player.hasCock()){ player.removeCock(0, 10); penisRemoved = true;  transformed = true; }
			//Virgin vagina (can you have more than one? is it referenced if so?)
			if (!player.hasVagina()){ player.createVagina(); transformed = true; }
			//skin stuff here
			if (player.skin.type == Skin.PLAIN && player.skin.desc == "skin"){
				//stolen from foxjewel
				var tone:Array = ColorLists.HUMAN_SKIN;
				if (!inCollection(player.skin.tone, tone)){ player.skin.tone = randomChoice(tone); transformed = true; }
			}
			if (player.skin.adj == ("rubber" || "thick" || "latex" || "rough")){
				var rnd:int = rand(3);
				switch (rnd) {
					case 0:
						player.skin.adj = "smooth";
					break;
					case 1:
						player.skin.adj = "milky";
					break;
					case 2:
						player.skin.adj = "freckled";
					break;
					default:
				}
				transformed = true;
			}
			//Femininity
			if (player.femininity < 60){ player.femininity = 60; transformed = true; }
			//Hair
			if (player.hair.length < 10){ player.hair.length = 10; transformed = true; }
			return transformed;
		}
		private function wakeUp():void{//Well, it fixed the button.
			clearOutput();
			outputText("You come to in a daze. You attempt to get up, yet your limbs refuse to budge. Throbbing pain passes over you as you force your body to move. With great effort, you roll from your back onto your stomach. You look down at your arms - devoid of muscle, as is the rest of you."
						+"\n\n"
						+"Through pacing yourself and holding onto your resolve, you eventually stand up. You're as small, weak, and pathetic as " + (flags[kFLAGS.CODEX_ENTRY_ALICE] > 0 ? "an Alice" : "a sickly child") + ". Indeed, that seems to be the point.");
						if (penisRemoved) outputText(" You've even lost your manhood.");
						outputText(" Nothing but a cutesy little girl with not the strength to be a threat to anyone, nor the assets to seduce with. Blurry vision reminds you just how winded you are from standing. Just how do demons cope with this!? It will take quite some time to retrain your body for combat, and even then this constant feeling of being winded could last gods-know how long."
						+"\n\n"
						+"You stumble over to your water barrel for some kind of sustenance, gazing at your reflection after a drink. Well, at least you're cute.");
						doNext(camp.returnToCampUseOneHour);

		}
		private function noUse():void{//WHY WON'T YOU WORK?!
			outputText("\n\nYou put the potion back where you took it");
			flags[kFLAGS.LIDDELLIUM_FLAG] = 2;
			inventory.returnItemToInventory(this);
		}

		//In case there is someotherplace this could be used:

		/*private var dayChange:Boolean = false;
		public function timeChange():Boolean{
			if (!player.hasPerk(PerkLib.LoliliciousBody)) return false;//Only does something if you have actually drank the potion.
			var severity:int = 3;
			if (!player.statusEffectv4(StatusEffects.GlobalFatigue) == 1) severity--;//If the exhaustion is from Liddellium, do nothing otherwise reduce severity due to the potion being out of the body
			if (player.isAlchemist() && player.hasPerk(PerkLib.TransformationResistance)) severity--;//If the player is an Alchemist (and thus have some knowledge of how to mitigate the effects while enhancing other TFs) AND TF-resist (the body reduces the potion's effect, impossible to get with after drinking it)
			switch (severity) {
				case 3://Most people for a month after drinking Liddellium
					if (bigChanges()){
						outputText("\n\nThe Liddellium in your body resists all changes.\n\n");//Hope this is fine...
						return true;
					}
					else return false;
				break;
				case 2://Forest gown, except all the time and affecting more things.
					if (smallChange()){
						outputText("\n\nThe Liddellium, although less severe than it could be, still affects your body.\n\n");
						return true;
					}
				break;
				case 1://Need to have built purposefully for this, and wait a month. The above, but only once per day.
					if (time.hours == 0)
						dayChange = false;
					if (dayChange) return false;
					else if (smallChange()){
						outputText("\n\nDespite your body's natural resistance and your alchemical expertise, you haven't been able to completely remove the Liddellium's effects.\n\n");
						dayChange = true;//forgot thisone at first...
						return true;
					}
				break;
				default:
			}
			return false;//Compiler's complaining without this...
		}
		private function smallChange():Boolean {//Format stolen from Gown.as
			var changed:Boolean = false;
			var tfChoice:Array = [];
			if (player.tallness > 48) tfChoice.push("tallness");
			if (player.biggestTitSize() > 1) tfChoice.push("tits");
			if (player.hips.rating > 2) tfChoice.push("hips");
			if (player.hasCock()) tfChoice.push("cock");
			if (!player.hasVagina()) tfChoice.push("vagina");
			var tone:Array = ColorLists.HUMAN_SKIN;
			if (player.skin.type == Skin.PLAIN && player.skin.desc == "skin" && !InCollection(player.skin.tone, tone)) tfChoice.push("skinTone");
			if (player.skin.adj == ("rubber" || "thick" || "latex" || "rough")) tfChoice.push("skinAdj");
			if (player.femininity < 60) tfChoice.push("femininity");
			if (player.hair.length < 10) tfChoice.push("hair");
			switch (randomChoice(tfChoice)) {
				case "tallness":
					player.tallness--;
				break;
				case "tits":
					player.shrinkTits(true);
				break;
				case "hips":
					player.hips.rating--;
				break;
				case "cock":
					(new BimboProgression).shrinkCock();
				break;
				case "vagina":
					player.createVagina();
				break;
				case "skinTone":
					player.skin.tone = randomChoice(tone);
				break;
				case "skinAdj":
					var rnd:int = rand(3);
				switch (rnd) {
					case 0:
						player.skin.adj = "smooth";
					break;
					case 1:
						player.skin.adj = "milky";
					break;
					case 2:
						player.skin.adj = "freckled";
					break;
					default:
				}
				break;
				case "femininity":
					player.femininity++;
				break;
				case "hair":
					player.hair.length++;
				break;
				default:
				return false;
			}
			return true;
		}
		public function timeChangeLarge():Boolean{return false; }*/
	}
}


code:
package classes.Items.Consumables
{

	import classes.Appearance;
	import classes.PerkLib;
	import classes.Player;
	import classes.internals.Utils;
	import classes.Items.Consumable;
	import classes.GlobalFlags.kFLAGS;
	import classes.lists.Age;

	public class LoliPop extends Consumable
	{

		public function LoliPop()
		{
			super("Lolipop", "Lolipop", "a shiny red lolipop", 100, "A sweet-smelling hard candy. The scent reminds you of the treats one coveted in childhood.");
		}

		//Reset lolipop counter on de-aging

		override public function useItem():Boolean {
			var tfSource:String = "lolipop";
			mutations.initTransformation([2,2,3,3,3,4,4,4,4]);
			var magnitude:int = 0;
			var lolify:Boolean = false;
			var lolifyChance:int = Math.min(75, 15 * (flags[kFLAGS.LOLIPOP_COUNTER] - 1));

			//Get list of changes to make
			var changesNeeded:Array = [];
			if (player.tallness > 55) changesNeeded.push("shorter");
			if (player.biggestTitSize() > 1) changesNeeded.push("breasts");
			if (player.nippleLength > 0.1) changesNeeded.push("nipples");
			if (player.hips.rating > 0) changesNeeded.push("hips");
			if (player.butt.rating > 1) changesNeeded.push("butt");

			//Start on gender changes only if there are no size changes left
			if (changesNeeded.length == 0) {
				lolifyChance += 10; //Also increase chance of de-aging
				if (player.femininity < 45) changesNeeded.push("feminine");
				if (player.femininity > 55) changesNeeded.push("masculine");
				if (player.hasCock()) changesNeeded.push("cock");
				if (player.balls > 0) changesNeeded.push("balls");
				if (!player.hasVagina()) changesNeeded.push("vagina");
				else if (player.getClitLength() > 0.2) changesNeeded.push("clit");
			}
			//If still no changes, increase chance further
			if (changesNeeded.length == 0) lolifyChance += 15;

			if (!player.isChild() && flags[kFLAGS.LOLIPOP_COUNTER] > 0 && rand(100) < lolifyChance) {
				lolify = true;
				changeLimit *= 2;
			}

			//Divide changeLimit evenly between all the needed changes
			if (changesNeeded.length > 0) magnitude = Math.max(lolify ? 3 : 1, Math.round(changeLimit / changesNeeded.length));

			outputText("You start to lick the shiny lolipop and reminisce about life back in Ingnam. The candy is sweet and somewhat fruity - even better than the treats you may have been able to get back home. As the flavor lathers itself throughout your mouth, you lose yourself in childhood memories.[pg]");

			var n:int;
			var i:int;
			for each (var change:String in changesNeeded) {
				switch (change) {
					case "shorter":
						outputText("The thoughts of how much larger adults were than you sends a dizzying sensation over you. You wince and realize you're now smaller![pg]");
						for (n = magnitude; n > 0; n--) {
							if (player.tallness > 65) player.tallness--;
							if (player.tallness > 55) player.tallness--;
						}
						break;
					case "breasts":
						outputText("Your chest tightens up so rapidly it begins to burn! Your hands dart to grab at your breasts, discovering they've shrunk.[pg]");
						for (i = 0; i < player.breastRows.length; i++) {
							for (n = magnitude; n > 0; n -= 2) {
								if (player.breastRows[i].breastRating > 0) player.breastRows[i].breastRating--;
							}
						}
						break;
					case "nipples":
						outputText("You can feel your nipples shrinking.[pg]");
						for (n = magnitude; n > 0; n--) {
							if (player.nippleLength > 0.1) player.nippleLength -= 0.1;
						}
						break;
					case "hips":
						outputText("A frightening bone-bending creak shakes your body as your hips narrow, granting a smooth transition straight from torso to legs.[pg]");
						for (n = magnitude; n > 0; n -= 2) {
							if (player.hips.rating > 0) player.hips.rating--;
						}
						break;
					case "butt":
						outputText("You feel your butt start to shrink, quickly becoming smaller and tighter.[pg]");
						for (n = magnitude; n > 0; n -= 2) {
							if (player.butt.rating > 1) player.butt.rating--;
						}
						break;
					case "feminine":
						outputText("A wave of numbness rolls through your features, alerting you that a change is happening.  You reach up to your feel your face changing, becoming more androgynous and... younger? You're probably pretty cute now![pg]");
						for (n = magnitude; n > 0; n--) {
							if (player.femininity < 30) player.femininity++;
							if (player.femininity < 50) player.femininity++;
						}
						break;
					case "masculine":
						outputText("A wave of numbness rolls through your features, alerting you that a change is happening.  You reach up to your feel your face changing, becoming more androgynous and... younger? You're probably pretty cute now![pg]");
						for (n = magnitude; n > 0; n--) {
							if (player.femininity > 75) player.femininity--;
							if (player.femininity > 55) player.femininity--;
						}
						break;
					case "cock":
						var tempCocks:int = player.cocks.length;
						outputText("You notice your [cockplural] shrinking, ");
						for (n = magnitude; n > 0; n -= 2) {
							for (i = player.cocks.length - 1; i >= 0; i--) {
								if (player.cocks[i].cockThickness > 0.5) player.cocks[i].cockThickness -= 0.1;
								if (--player.cocks[i].cockLength < 2) player.removeCock(i, 1);
							}
						}
						if (player.cocks.length < tempCocks) {
							if (player.cocks.length == 0) outputText("eventually disappearing entirely![pg]");
							else outputText("some of them disappearing entirely![pg]");
						}
						else outputText("leaving " + (tempCocks > 1 ? "them" : "it") + " smaller and more child-like.[pg]");
						break;
					case "balls":
						outputText("Your scrotum quickly shrinks");
						for (n = magnitude; n > 0; n--) {
							if (player.ballSize > 2) player.ballSize--;
							if (player.ballSize > 0.5) player.ballSize -= 0.2;
							else player.balls = 0;
						}
						if (player.balls == 0) outputText(", eventually disappearing entirely![pg]");
						else outputText("!");
						break;
					case "vagina":
						if (rand(2+magnitude) >= 2) {
							player.createVagina();
							outputText("Your crotch tingles pleasantly as a thin, smooth line appears and puffy lips form around your new virgin pussy.[pg]");
						}
						break;
					case "clit":
						for (i = 0; i < player.vaginas.length; i++) {
							for (n = magnitude; n > 0; n--) {
								if (player.getClitLength(i) > 0.2) player.setClitLength(player.getClitLength(i) - 0.1, i);
							}
						}
						break;
				}
			}

			flags[kFLAGS.LOLIPOP_COUNTER]++;
			if (lolify) {
				switch (player.age) {
					case Age.AGE_ELDER:
						outputText("Your worn and aged features suddenly become more youthful, you feel like you've returned to your prime![pg]");
						outputText("Your age has regressed to adult!");
						player.age = Age.AGE_ADULT;
						break;
					case Age.AGE_ADULT:
						outputText("Your features regain their youthful vigor, until you feel like a teenager again![pg]");
						outputText("Your age has regressed to teen!");
						player.age = Age.AGE_TEEN;
						break;
					case Age.AGE_TEEN:
						outputText("Your features maintain an incredibly youthful vigor, just like in the old days at Ingnam! You even feel as young as you look! Actually, you think you ARE as young as you look now.[pg]");
						outputText("Your age has regressed to child!");
						player.age = Age.AGE_CHILD;
						break;
				}
				flags[kFLAGS.LOLIPOP_COUNTER] = 0;
			}
			else if (!player.isChild() && flags[kFLAGS.LOLIPOP_COUNTER] <= 1) outputText("The effects of the candy seem to make you more child-like. You should probably avoid consuming these in the future if you don't want a much more long-lasting effect.[pg]");
			else outputText("Before you know it, the lolipop has dissolved in your mouth.[pg]");

			return false;
		}
	}
}


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

	/**
	 * @since March 26, 2018
	 * @author Stadler76
	 */
	public class LustDraft extends Consumable
	{
		public static const STANDARD:int = 0;
		public static const ENHANCED:int = 1;

		private var fuck:Boolean;

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

			fuck = type === ENHANCED;

			switch (type) {
				case STANDARD:
					id = "L.Draft";
					shortName = "LustDraft";
					longName = "a vial of roiling bubble-gum pink fluid";
					description = 'This vial of bright pink fluid bubbles constantly inside the glass, as if eager to escape.'
					             +' It smells very sweet, and has "Lust" inscribed on the side of the vial.';
					value = ConsumableLib.DEFAULT_VALUE;
					break;

				case ENHANCED:
					id = "F.Draft";
					shortName = "FuckDraft";
					longName = 'a vial of roiling red fluid labeled "Fuck Draft"';
					description = 'This vial of red fluid bubbles constantly inside the glass, as if eager to escape.'
					             +' It smells very strongly, though its odor is difficult to identify.'
					             +'  The word "Fuck" is inscribed on the side of the vial.';
					value = 20;
					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
		{
			player.slimeFeed();
			clearOutput();
			outputText("You drink the " + (fuck ? "red" : "pink") + " potion, and its unnatural warmth immediately flows to your groin.");
			dynStats("lus", (30 + rand(player.lib / 10)), "scale", false);

			//Heat/Rut for those that can have them if "fuck draft"
			if (fuck) {
				//Try to go into intense heat.
				player.goIntoHeat(true, 2);
				//Males go into rut
				player.goIntoRut(true);
			}
			//ORGAZMO
			if (player.lust >= player.maxLust() && !game.inCombat) {
				outputText("\n\nThe arousal from the potion overwhelms your senses and causes you to spontaneously orgasm."
				          +" You rip off your [armor] and look down as your "
				          +"[if (hasCock)[cocks] erupt[if (cocks == 1)s] in front of you, liberally spraying the ground around you. "
				          + "[if (hasVagina)At the same time your ]" // Had to do this, since parser-weirdness with [if (hasCock && hasVagina)]
				          +"]"
				          +"[if (hasVagina)[vagina] soaks your thighs. ]"
				          +"[if (isGenderless)body begins to quiver with orgasmic bliss. ]"
				          +"Once you've had a chance to calm down, you notice that the explosion of pleasure you just experienced"
				          +" has rocked you to your core. You are a little hornier than you were before.");
				//increase player libido, and maybe sensitivity too?
				player.orgasm('Generic');
				dynStats("lib", 2, "sen", 1);
			}
			if (player.lust > player.maxLust()) player.lust = player.maxLust();
			outputText("\n\n");
			player.refillHunger(5);
			return false;
		}
	}
}


code:
/**
 * Created by aimozg on 11.01.14.
 */
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.PerkLib;
	import classes.Player;
	import classes.StatusEffects;
	import classes.internals.Utils;

	public final class LustStick extends Consumable {

		public function LustStick() {
			super("LustStk", "LustStk", "a tube of golden lipstick", ConsumableLib.DEFAULT_VALUE, "This tube of golden lipstick is used by harpies to keep males aroused.  It has aphrodisiac properties on anyone with male genitalia and is most effective when applied to the lips or groin.");
		}

		override public function canUse():Boolean {
			if (player.hasCock() && player.findPerk(PerkLib.LuststickAdapted) < 0) {
				outputText("You look at the tube of lipstick, but get the idea it would be a pretty bad idea to smear a thick coating of cock-hardening aphrodisiacs over your own lips.  ");
				return false;
			}
			return true;
		}

		override public function useItem():Boolean {
			if (player.hasStatusEffect(StatusEffects.LustStickApplied)) {
				player.addStatusValue(StatusEffects.LustStickApplied, 1, Utils.rand(12) + 12);
				outputText("You carefully open the sweet-smelling tube and smear the lipstick over the coat you already have on your lips.  <b>No doubt another layer will make it last even longer!</b>  ");
				outputText("You finish and pucker your lips, feeling fairly sexy with your new, thicker makeup on.\n\n");
			}
			else {
				player.createStatusEffect(StatusEffects.LustStickApplied, 24, 0, 0, 0);
				outputText("You carefully open the sweet-smelling tube and smear the lipstick over your lips.  ");
				if (player.hasCock()) outputText("It tingles a little, but the drugs have little to no effect on you now.");
				else outputText("Honestly, it amazes you that something as little as a kiss can make a man putty in your hands.");
				outputText("  You finish and pucker your lips, feeling fairly sexy with your new makeup on.\n\n");
			}
			dynStats("lus", 1);
			return(false);
		}
	}
}


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

	/**
	 * Milk with restorative and addictive properties.
	 */
	public class MarbleMilk extends Consumable
	{
		public function MarbleMilk()
		{
			super("M. Milk","M. Milk", "a clear bottle of milk from Marble", ConsumableLib.DEFAULT_VALUE, "A clear bottle of milk from Marble's breasts. It smells delicious.");
		}

		override public function useItem():Boolean
		{
			player.slimeFeed();
			//Bottle of Marble's milk - item
			//Description: "A clear bottle of milk from Marble's breasts.  It smells delicious.  "
			clearOutput();
			//Text for when the player uses the bottle:
			//[before the player is addicted, Addiction < 30]
			if (player.statusEffectv2(StatusEffects.Marble) < 30 && player.statusEffectv3(StatusEffects.Marble) === 0) outputText("You gulp down the bottle's contents; Marble makes some good tasting milk.\n\n");
			//[before the player is addicted, Addiction < 50]
			else if (player.statusEffectv3(StatusEffects.Marble) <= 0) outputText("You gulp down the bottle's contents; Marble makes some really good tasting milk.\n\n");
			else if (player.statusEffectv3(StatusEffects.Marble) > 0) {
				//[player is completely addicted]
				if (player.findPerk(PerkLib.MarblesMilk) >= 0) outputText("You gulp down the bottle's contents; it's no substitute for the real thing, but it's a nice pick me up.\n\n");
				else {
					//[player is no longer addicted]
					if (player.findPerk(PerkLib.MarbleResistant) >= 0) outputText("You gulp down the bottle's contents; you're careful not to get too attached to the taste.\n\n");
					//[player is addicted]
					else outputText("You gulp down the bottle's contents; you really needed that.\n\n");
				}
			}
			//Increases addiction by 5, up to a max of 50 before the player becomes addicted, no max after the player is addicted.
			game.marbleScene.marbleStatusChange(0, 5);
			//Does not apply the 'Marble's Milk' effect
			//Purge withdrawal
			if (player.hasStatusEffect(StatusEffects.MarbleWithdrawl)) {
				player.removeStatusEffect(StatusEffects.MarbleWithdrawl);
				dynStats("tou", 5, "int", 5);
				outputText("You no longer feel the symptoms of withdrawal.\n\n");
			}
			//Heals the player 70-100 health
			player.HPChange(70 + rand(31), true);
			//Restores a portion of fatigue (once implemented)
			player.changeFatigue(-25);
			//If the player is addicted, this item negates the withdrawal effects for a few hours (suggest 6), there will need to be a check here to make sure the withdrawal effect doesn't reactivate while the player is under the effect of 'Marble's Milk'.
			if (player.hasStatusEffect(StatusEffects.BottledMilk)) {
				player.addStatusValue(StatusEffects.BottledMilk, 1, (6 + rand(6)));
			}
			else player.createStatusEffect(StatusEffects.BottledMilk, 12, 0, 0, 0);
			player.refillHunger(20);

			return false;
		}
	}
}


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

	/**
	 * Item that boost milk production.
	 */
	public class MilkPotion extends Consumable
	{
		private static const ITEM_VALUE:int = 120;

		public function MilkPotion()
		{
			super("MilkPtn", "ProLactaid", "a bottle labelled \"Pro Lactaid\"", ITEM_VALUE, "A bottle filled with white liquid which is distilled from Lactaid and LaBovas.  Rathazul mentioned that this potion will greatly improve your lactation. There's the possibility of permanently lactating, even if you're a male.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			player.slimeFeed();
			var i:Number = 0;
			outputText("You drink the milk potion.  It tastes like milk.");
			//Player doesn't lactate
			if (player.biggestLactation() < 1) {
				outputText("\n\n");
				outputText("You feel your " + player.nippleDescript(0) + "s become tight and engorged.  A single droplet of milk escapes each, rolling down the curves of your breasts.  You are now lactating!");
				for (i = 0; i < player.breastRows.length; i++) {
					player.breastRows[i].lactationMultiplier += 5;
				}
			}
			//Boost lactation
			else {
				outputText("\n\n");
				outputText("Milk leaks from your " + player.nippleDescript(0) + "s in thick streams.  You're lactating even more!");
				for (i = 0; i < player.breastRows.length; i++) {
					player.breastRows[i].lactationMultiplier += 2 + rand(30) / 10;
				}
			}
			//Grant perk or rank it up
			if (rand(2) === 0 && player.findPerk(PerkLib.MilkMaid) < 0) {
				outputText("\n\n");
				outputText("You can feel something inside your " + player.chestDesc() + " as they feel more dense. Your entire body tingles with a strange feel. Somehow, you know you won't be able to stop lactating.\n");
				outputText("Gained Perk: Milk Maid! (Your milk production is increased by 200mL and you won't stop lactating.)");
				player.createPerk(PerkLib.MilkMaid, 1, 0, 0, 0);
			}
			else if (rand(player.perkv1(PerkLib.MilkMaid)) === 0 && player.perkv1(PerkLib.MilkMaid) < 10) {
				outputText("\n\n");
				outputText("You can feel something inside your " + player.chestDesc() + " as they feel even more dense. Your entire body tingles with a strange feel. Seems like you're going to lactate more milk.\n");
				outputText("Perk Ranked Up: Milk Maid! (Your milk production is increased by additional 100mL.)");
				player.addPerkValue(PerkLib.MilkMaid, 1, 1);
			}
			else if (player.perkv1(PerkLib.MilkMaid) >= 10) {
				outputText("\n\n");
				outputText("You can feel something tingling inside your " + player.chestDesc() + " but nothing special happens. Maybe you've already maxed out your permanent boost to lactation?\n");
			}

			return false;
		}
	}
}


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

	/**
	 * Minotaur transformative item.
	 */
	public class MinotaurBlood extends Consumable
	{
		public function MinotaurBlood()
		{
			super("MinoBlo","MinoBlo", "a vial of Minotaur blood", ConsumableLib.DEFAULT_VALUE, "You've got a scratched up looking vial full of bright red minotaur blood.  Any time you move it around it seems to froth up, as if eager to escape.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "minotaurBlood";
			player.slimeFeed();
			mutations.initTransformation([2, 3, 3], 1, 2);
			//Temporary storage
			var temp:Number = 0;
			var temp2:Number = 0;
			var temp3:Number = 0;
			//Set up output
			clearOutput();
			outputText("You drink the bubbling red fluid, tasting the tangy iron after-taste.");
			//STATS
			//Strength h
			if (rand(3) === 0 && changes < changeLimit) {
				//weaker characters gain more
				if (player.str100 <= 50) {
					outputText("\n\nPainful aches ripple through your body, flooding you with pain as your muscles flex and bulge, growing much stronger and more well-defined.");
					//very weak players gain more
					if (player.str100 <= 20) dynStats("str", 3);
					else dynStats("str", 2);
				}
				//stronger characters gain less
				else {
					//small growth if over 75
					if (player.str100 >= 75) dynStats("str", .5);
					//faster from 50-75
					else dynStats("str", 1);
					outputText("\n\nYour muscles grow tighter, bulging outwards powerfully as you get even stronger!");
				}
				//Chance of speed drop
				if (rand(2) === 0 && player.str100 > 50) {
					outputText("\n\nYou begin to feel that the size of your muscles is starting to slow you down.");
					dynStats("spe", -1);
				}
			}
			//Toughness (chance of - sensitivity)
			if (rand(3) === 0 && changes < changeLimit) {
				//weaker characters gain more
				if (player.tou100 <= 50) {
					outputText("\n\nYour hide... skin... whatever... you can feel it getting tougher as it thickens perceptibly.");
					//very weak players gain more
					if (player.tou100 <= 20) dynStats("tou", 3);
					else dynStats("tou", 2);
				}
				//stronger characters gain less
				else {
					//small growth if over 75
					if (player.tou100 >= 75) dynStats("tou", .5);
					//faster from 50-75
					else dynStats("tou", 1);
					outputText("\n\nYour tough hide grows slightly thicker.");
				}
				//chance of less sensitivity
				if (rand(2) === 0 && player.sens100 > 10) {
					if (player.tou100 > 75) {
						outputText("\n\nIt becomes much harder to feel anything through your leathery skin.");
						dynStats("sen", -3);
					}
					if (player.tou100 <= 75 && player.tou100 > 50) {
						outputText("\n\nThe level of sensation from your skin diminishes noticeably.");
						dynStats("sen", -2);
					}
					if (player.tou100 <= 50) {
						outputText("\n\nYour sense of touch diminishes due to your tougher hide.");
						dynStats("sen", -3);
					}
				}
			}
			//SEXUAL
			//Boosts ball size MORE than equinum :D:D:D:D:D:D:
			if (changes < changeLimit && rand(2) === 0 && player.ballSize <= 5 && player.countCocksOfType(CockTypesEnum.HORSE) > 0) {
				//Chance of ball growth if not 3" yet
				if (player.balls === 0) {
					player.balls = 2;
					player.ballSize = 1;
					outputText("\n\nA nauseating pressure forms just under the base of your maleness.  With agonizing pain the flesh bulges and distends, pushing out a rounded lump of flesh that you recognize as a testicle!  A moment later relief overwhelms you as the second drops into your newly formed sack.");
					dynStats("lib", 2, "lus", 5);
				}
				else {
					player.ballSize++;
					if (player.ballSize <= 2) 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.simpleBallsDescript() + " have grown larger than a human's.");
					if (player.ballSize > 2) outputText("\n\nA sudden onset of heat envelops your groin, focusing on your " + player.sackDescript() + ".  Walking becomes difficult as you discover your " + player.simpleBallsDescript() + " have enlarged again.");
					dynStats("lib", 1, "lus", 3);
				}
				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);
			}
			//Restore arms to become human arms again
			if (rand(4) === 0) {
				mutations.restoreArms(tfSource);
			}
			//+hooves
			if (player.lowerBody.type !== LowerBody.HOOFED) {
				if (changes < changeLimit && rand(3) === 0) {
					if (player.lowerBody.type === LowerBody.HUMAN) outputText("\n\nYou stagger as your feet change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
					else if (player.lowerBody.type === LowerBody.DOG) outputText("\n\nYou stagger as your paws change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
					else if (player.lowerBody.type === LowerBody.NAGA) outputText("\n\nYou collapse as your sinuous snake-tail tears in half, shifting into legs.  The pain is immense, particularly in your new feet as they curl inward and transform into hooves!");
					//Catch-all
					else if (player.lowerBody.type > LowerBody.NAGA) outputText("\n\nYou stagger as your " + player.feet() + " change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
					else if (!player.hasFur()) outputText("  A fine coat of fur grows out below your waist, itching briefly as it fills in.");
					outputText("  You now have hooves in place of your feet!");
					player.lowerBody.type = LowerBody.HOOFED;
					player.lowerBody.legCount = 2;
					dynStats("spe", 1);
					changes++;
				}
			}
			if (!flags[kFLAGS.HYPER_HAPPY])
			{
				//Kills vagina size (and eventually the whole vagina)
				if (player.vaginas.length > 0) {
					if (player.vaginas[0].vaginalLooseness > Vagina.LOOSENESS_TIGHT) {
						//tighten that bitch up!
						outputText("\n\nYour " + player.vaginaDescript(0) + " clenches up painfully as it tightens up, becoming smaller and tighter.");
						player.vaginas[0].vaginalLooseness--;
					}
					else {
						outputText("\n\nA tightness in your groin is the only warning you get before your " + player.vaginaDescript(0) + " disappears forever!");
						if (player.cocks.length === 0) {
							outputText("  Strangely, your clit seems to have resisted the change, and is growing larger by the moment... shifting into the shape of a small ribbed minotaur-like penis!  You now have a horse-cock!");
							player.createCock();
							player.cocks[0].cockLength = player.getClitLength() + 2;
							player.cocks[0].cockThickness = 1;
							player.cocks[0].cockType = CockTypesEnum.HORSE;
							player.setClitLength(.25);
						}
						//Goodbye womanhood!
						player.removeVagina(0, 1);

					}
					changes++;
				}
				//-Remove extra breast rows
				if (changes < changeLimit && player.bRows() > 1 && rand(3) === 0) {
					mutations.removeExtraBreastRow(tfSource);
				}
				//Shrink boobages till they are normal
				else if (rand(2) === 0 && changes < changeLimit && player.breastRows.length > 0) {
					//Single row
					if (player.breastRows.length === 1) {
						//Shrink if bigger than B cups
						if (player.breastRows[0].breastRating >= 1) {
							temp = 1;
							player.breastRows[0].breastRating--;
							//Shrink again if huuuuge
							if (player.breastRows[0].breastRating > 8) {
								temp++;
								player.breastRows[0].breastRating--;
							}
							//Talk about shrinkage
							if (temp === 1) outputText("\n\nYou feel a weight lifted from you, and realize your " + player.breastDescript(0) + " have shrunk to " + player.breastCup(0) + "s.");
							if (temp === 2) outputText("\n\nYou feel significantly lighter.  Looking down, you realize your breasts are MUCH smaller, down to " + player.breastCup(0) + "s.");
							changes++;
						}

					}
					//multiple
					else {
						//temp2 = amount changed
						//temp3 = counter
						temp = 0;
						temp2 = 0;
						temp3 = 0;
						if (player.biggestTitSize() >= 1) outputText("\n");
						while (temp3 < player.breastRows.length) {
							if (player.breastRows[temp3].breastRating >= 1) {
								player.breastRows[temp3].breastRating--;
								temp2++;
								outputText("\n");
								//If this isn't the first change...
								if (temp2 > 1) outputText("...and y");
								else outputText("Y");
								outputText("our " + player.breastDescript(temp3) + " shrink, dropping to " + player.breastCup(temp3) + "s.");
							}
							temp3++;
						}
						if (temp2 === 2) outputText("\nYou feel so much lighter after the change.");
						if (temp2 === 3) outputText("\nWithout the extra weight you feel particularly limber.");
						if (temp2 >= 4) outputText("\nIt feels as if the weight of the world has been lifted from your shoulders, or in this case, your chest.");
						if (temp2 > 0) changes++;
					}
				}
			}
			//Boosts cock size up to 36"x5".
			if (changes < changeLimit && rand(2) === 0 && player.cocks.length > 0) {
				var selectedCock:int = -1;
				for (var i:int = 0; i < player.cocks.length; i++)
				{
					if (player.cocks[i].cockType === CockTypesEnum.HORSE && (player.cocks[i].cockLength < 36 || player.cocks[i].cockThickness < 5))
					{
						selectedCock = i;
						break;
					}
				}

				//Length first
				if (selectedCock !== -1) {
					//Thickness too if small enough
					if (player.cocks[selectedCock].cockThickness < 5) {
						//Increase by 2 + rand(8), and store the actual amount in temp
						temp = player.increaseCock(selectedCock, 2 + rand(8));
						temp += player.cocks[selectedCock].thickenCock(1);
						//Comment on length changes
						if (temp > 6) outputText("\n\nGasping in sudden pleasure, your " + player.cockDescript(selectedCock) + " surges free of its sheath, emerging with over half a foot of new dick-flesh.");
						if (temp <= 6 && temp >= 3) outputText("\n\nYou pant in delight as a few inches of " + player.cockDescript(selectedCock) + " pop free from your sheath, the thick new horse-flesh still slick and sensitive.");
						if (temp < 3) outputText("\n\nGroaning softly, you feel a pleasurable change in your groin.  Looking down, you see [oneCock] grow slightly longer.");
						//Add a blurb about thickness...
						outputText("  To your delight and surprise, you discover it has grown slightly thicker as well!");
					}
					//Just length...
					else {
						//Increase by 2 + rand(8), and store the actual amount in temp
						temp = player.increaseCock(selectedCock, 2 + rand(8));
						//Comment on length changes
						if (temp > 6) outputText("\n\nGasping in sudden pleasure, your " + player.cockDescript(selectedCock) + " surges free of its sheath, emerging with over half a foot of new dick-flesh.");
						if (temp <= 6 && temp >= 3) outputText("\n\nYou pant in delight as a few inches of " + player.cockDescript(selectedCock) + " pop free from your sheath, the thick new horse-flesh still slick and sensitive.");
						if (temp < 3) outputText("\n\nGroaning softly, you feel a pleasurable change in your groin.  Looking down, you see [oneCock] grow slightly longer.");
					}
					changes++;
				}
			}
			//Morph dick to horsediiiiick
			if (player.cocks.length > 0 && rand(2) === 0 && changes < changeLimit) {
				var selectedCockValue:int = -1; //Changed as selectedCock and i caused duplicate var warnings
				for (var indexI:int = 0; indexI < player.cocks.length; indexI++)
				{
					if (player.cocks[indexI].cockType !== CockTypesEnum.HORSE)
					{
						selectedCockValue = indexI;
						break;
					}
				}

				if (selectedCockValue !== -1) {
					//Text for humandicks or others
					if (player.cocks[selectedCockValue].cockType === CockTypesEnum.HUMAN || player.cocks[selectedCockValue].cockType.Index > 2) outputText("\n\nYour " + player.cockDescript(selectedCockValue) + " begins to feel strange... you pull down your pants to take a look and see it darkening as you feel a tightness near the base where your skin seems to be bunching up.  A sheath begins forming around your cock's base, tightening and pulling your cock inside its depths.  A hot feeling envelops your member as it suddenly grows into a horse penis, dwarfing its old size.  The skin is mottled brown and black and feels more sensitive than normal.  Your hands are irresistibly drawn to it, and you jerk yourself off, splattering cum with intense force.");
					//Text for dogdicks
					if (player.cocks[selectedCockValue].cockType === CockTypesEnum.DOG) outputText("\n\nYour " + Appearance.cockNoun(CockTypesEnum.DOG) + " begins to feel odd...  You pull down your clothes to take a look and see it darkening.  You feel a growing tightness in the tip of your " + Appearance.cockNoun(CockTypesEnum.DOG) + " as it flattens, flaring outwards.  Your cock pushes out of your sheath, inch after inch of animal-flesh growing beyond its traditional size.  You notice your knot vanishing, the extra flesh pushing more fresh horsecock out from your sheath.  Your hands are drawn to the strange new " + Appearance.cockNoun(CockTypesEnum.HORSE) + ", and you jerk yourself off, splattering thick ropes of cum with intense force.");
					player.cocks[selectedCockValue].cockType = CockTypesEnum.HORSE;
					player.increaseCock(selectedCockValue, 4);
					dynStats("lib", 5, "sen", 4, "lus", 35);
					outputText("  You now have a");
					if (player.countCocksOfType(CockTypesEnum.HORSE) > 1) outputText("nother")
					outputText(" horse-penis.");
					changes++;
				}
			}

			//Males go into rut
			if (rand(4) === 0) {
				player.goIntoRut(true);
			}

			//Anti-masturbation status
			if (rand(4) === 0 && changes < changeLimit && !player.hasStatusEffect(StatusEffects.Dysfunction)) {
				if (player.cocks.length > 0) outputText("\n\nYour " + player.cockDescript(0) + " tingles abruptly, then stops.  Worried, you reach down to check it, only to discover that it feels... numb.  It will be very hard to masturbate like this.");
				else if (player.hasVagina()) outputText("\n\nYour " + player.vaginaDescript(0) + " tingles abruptly, then stops.  Worried, you reach down to check it, only to discover that it feels... numb.  It will be very hard to masturbate like this.");
				if (player.cocks.length > 0 || player.hasVagina()) {
					player.createStatusEffect(StatusEffects.Dysfunction, 96, 0, 0, 0);
					changes++;
				}
			}
			//Appearance shit:
			//Tail, Ears, Hooves, Horns, Height (no prereq), Face
			//+height up to 9 foot
			if (changes < changeLimit && rand(1.7) === 0 && player.tallness < 108) {
				temp = rand(5) + 3;
				//Slow rate of growth near ceiling
				if (player.tallness > 90) temp = Math.floor(temp / 2);
				//Never 0
				if (temp === 0) temp = 1;
				//Flavor texts.  Flavored like 1950's cigarettes. Yum.
				if (temp < 5) outputText("\n\nYou shift uncomfortably as you realize you feel off balance.  Gazing down, you realize you have grown SLIGHTLY taller.");
				if (temp >= 5 && temp < 7) outputText("\n\nYou feel dizzy and slightly off, but quickly realize it's due to a sudden increase in height.");
				if (temp === 7) outputText("\n\nStaggering forwards, you clutch at your head dizzily.  You spend a moment getting your balance, and stand up, feeling noticeably taller.");
				player.tallness += temp;
				changes++;
			}
			//Face change, requires Ears + Height + Hooves
			if (mutations.tfNoFur() && player.ears.type === Ears.COW && player.lowerBody.type === LowerBody.HOOFED && player.tallness >= 90
					&& changes < changeLimit && rand(3) === 0) {
				if (player.face.type !== Face.COW_MINOTAUR) {
					outputText("\n\nBones shift and twist painfully as your visage twists and morphs to resemble that of the beast whose blood you now drink.  You now have a minotaur-like face.");
					changes++;
					player.face.type = Face.COW_MINOTAUR;
				}
			}
			//+mino horns require ears/tail
			if (changes < changeLimit && rand(3) === 0 && player.ears.type === Ears.COW && player.tail.type === Tail.COW) {
				temp = 1;
				//New horns or expanding mino horns
				if (player.horns.type === Horns.COW_MINOTAUR || player.horns.type === Horns.NONE) {
					//Get bigger if player has horns
					if (player.horns.type === Horns.COW_MINOTAUR) {
						//Fems horns don't get bigger.
						if (player.vaginas.length > 0) {
							if (player.horns.value > 4) {
								outputText("\n\nYou feel a pressure in your head around your horns, but they don't grow any larger.  ");
								outputText("Your headache clears as lust washes through you unnaturally.  You feel as if you haven't cum in months.");
								player.hoursSinceCum += 200;
								dynStats("lus", 20);
							}
							else {
								outputText("\n\nYour small horns get a bit bigger, stopping as medium sized nubs.");
								player.horns.value += 3;
							}
							changes++;
						}
						//Males horns get 'uge.
						else {
							temp = 1 + rand(3);
							player.horns.value += temp;
							if (temp === 0) changes--;
							if (temp === 1) outputText("\n\nAn aching pressure builds in your temples as you feel your horns push another inch of length from your skull.  ");
							if (temp === 2) outputText("\n\nA powerful headache momentarily doubles you over.  With painful slowness, you feel your horns push another two inches of length out from your brow, gradually thickening as they grow.  ");
							if (temp === 3) outputText("\n\nAgony overwhelms you as a headache of terrifying intensity sweeps through your skull.  You squeeze your eyes shut from the pain, but it does little to help.  The torture intensifies before finally diminishing as you feel an inch or two of new horn force its way out of your forehead.  The headache remains despite this, and desperate for relief, you grab hold of your horns and tug, pulling another inch of new horn free.  At last the pain fades, leaving you with significantly enhanced head-spikes.  ");
							if (player.horns.value < 3) outputText("They are the size of tiny nubs.");
							if (player.horns.value >= 3 && player.horns.value < 6) outputText("They are similar to what you would see on a young bull.");
							if (player.horns.value >= 6 && player.horns.value < 12) outputText("They look like the horns on a grown bull, big enough and dangerous enough to do some damage.");
							if (player.horns.value >= 12 && player.horns.value < 20) outputText("They are large and wicked looking.");
							if (player.horns.value >= 20) outputText("They are huge, heavy, and tipped with dangerous points.");
							//boys get a cum refill sometimes
							if (rand(2) === 0 && changes < changeLimit) {
								outputText("  Your headache clears as lust washes through you unnaturally.  You feel as if you haven't cum in months.");
								player.hoursSinceCum += 200;
								dynStats("lus", 20);
							}
							changes++;
						}
					}
					//If no horns yet..
					else {
						outputText("\n\nWith painful pressure, the skin on your forehead splits around two tiny nub-like horns, similar to those you would see on the cattle back in your homeland.");
						player.horns.type = Horns.COW_MINOTAUR;
						player.horns.value = 2;
						changes++;
					}
				}
				//Not mino horns, change to cow-horns
				if (player.horns.type === Horns.DEMON || player.horns.type > Horns.COW_MINOTAUR) {
					outputText("\n\nYour horns vibrate and shift as if made of clay, reforming into two horns with a bovine-like shape.");
					player.horns.type = Horns.COW_MINOTAUR;
					changes++;
				}
			}
			//+cow ears	- requires tail
			if (player.ears.type !== Ears.COW && changes < changeLimit && player.tail.type === Tail.COW && rand(2) === 0) {
				outputText("\n\nYou feel your ears tug on your scalp as they twist shape, becoming oblong and cow-like.  You now have cow ears.");
				player.ears.type = Ears.COW;
				changes++;
			}
			//+cow tail
			if (changes < changeLimit && rand(2) === 0 && player.tail.type !== Tail.COW) {
				if (player.tail.type === Tail.NONE) outputText("\n\nYou feel the flesh above your " + player.buttDescript() + " knotting and growing.  It twists and writhes around itself before flopping straight down, now shaped into a distinctly bovine form.  You have a cow tail.");
				else {
					if (player.tail.type < Tail.SPIDER_ABDOMEN || player.tail.type > Tail.BEE_ABDOMEN) {
						outputText("\n\nYour tail bunches uncomfortably, twisting and writhing around itself before flopping straight down, now shaped into a distinctly bovine form.  You have a cow tail.");
					}
					//insect
					if (player.tail.type === Tail.SPIDER_ABDOMEN || player.tail.type === Tail.BEE_ABDOMEN) {
						outputText("\n\nYour insect-like abdomen tingles pleasantly as it begins shrinking and softening, chitin morphing and reshaping until it looks exactly like a cow tail.");
					}
				}
				player.tail.type = Tail.COW;
				changes++;
			}
			// Remove gills
			if (rand(4) === 0 && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}

			if (changes < changeLimit && rand(4) === 0 && ((player.ass.analWetness > 0 && player.findPerk(PerkLib.MaraesGiftButtslut) < 0) || player.ass.analWetness > 1)) {
				outputText("\n\nYou feel a tightening up in your colon and your [asshole] sucks into itself.  You feel sharp pain at first but that thankfully fades.  Your ass seems to have dried and tightened up.");
				player.ass.analWetness--;
				if (player.ass.analLooseness > 1) player.ass.analLooseness--;
				changes++;
			}
			//Give you that mino build!
			if (rand(4) === 0) outputText(player.modFem(5, 10));
			if (rand(4) === 0) outputText(player.modTone(85, 3));
			if (rand(4) === 0) outputText(player.modThickness(70, 4));
			//Default
			if (changes === 0) {
				outputText("\n\nMinotaur-like vitality surges through your body, invigorating and arousing you!\n");
				if (player.balls > 0) {
					outputText("Your balls feel as if they've grown heavier with the weight of more sperm.\n");
					player.hoursSinceCum += 200;
				}
				player.HPChange(50, true);
				dynStats("lus", 50);
			}
			player.refillHunger(25);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}
}


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

	/**
	 * @since March 30, 2018
	 * @author Stadler76
	 */
	public class MinotaurCum extends Consumable
	{
		public static const STANDARD:int = 0;
		public static const PURIFIED:int = 1;

		private var purified:Boolean;

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

			purified = type === PURIFIED;

			switch (type) {
				case STANDARD:
					id = "MinoCum";
					shortName = "MinoCum";
					longName = "a sealed bottle of minotaur cum";
					description = "This bottle of minotaur cum looks thick and viscous."
					             +" You know it has narcotic properties, but aside from that its effects are relatively unknown.";
					value = 60;
					break;

				case PURIFIED:
					id = "P.M.Cum";
					shortName = "P.MinoCum";
					longName = "a sealed bottle of purified minotaur cum";
					description = "This bottle of minotaur cum looks thick and viscous."
					             +" You know it has narcotic properties, but aside from that its effects are relatively unknown."
					             +" This bottle of cum has been purified to prevent corruption and addiction.";
					value = 30;
					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
		{
			player.slimeFeed();
			clearOutput();
			//Minotaur cum addiction
			if (!purified) player.minoCumAddiction(7);
			else player.minoCumAddiction(-2);
			outputText("As soon as you crack the seal on the bottled white fluid, a ");
			if (flags[kFLAGS.MINOTAUR_CUM_ADDICTION_STATE] == 0 && !player.hasPerk(PerkLib.MinotaurCumResistance)) outputText("potent musk washes over you.");
			else outputText("heavenly scent fills your nostrils.");
			if (!purified) {
				if (flags[kFLAGS.MINOTAUR_CUM_ADDICTION_TRACKER] < 50) outputText("  It makes you feel dizzy, ditzy, and placid.");
				else outputText("  It makes you feel euphoric, happy, and willing to do ANYTHING to keep feeling this way.");
			}
			else outputText("  You know that the bottle is purified and you're positive you won't get any addiction from this bottle.");
			outputText("  Unbidden, your hand brings the bottle to your lips, and the heady taste fills your mouth as you convulsively swallow the entire bottle.");
			//-Raises lust by 10.
			//-Raises sensitivity
			dynStats("sen", 1, "lus", 10);
			//-Raises corruption by 1 to 50, then by .5 to 75, then by .25 to 100.
			if (!purified) {
				if (player.cor < 50) dynStats("cor", 1);
 				else if (player.cor < 75) dynStats("cor", .5);
				else dynStats("cor", .25);
			}
			outputText("\n\nIntermittent waves of numbness wash through your body, turning into a warm tingling that makes you feel sensitive all over.  The warmth flows through you, converging in your loins and bubbling up into lust.");
			if (player.cocks.length > 0) {
				outputText("  ");
				if (player.cockTotal() == 1) outputText("Y");
				else outputText("Each of y");
				outputText("our " + player.multiCockDescriptLight() + " aches, flooding with blood until it's bloating and trembling.");
			}
			if (player.hasVagina()) {
				outputText("  Your " + player.clitDescript() + " engorges, ");
				if (player.getClitLength() < 3) outputText("parting your lips.");
				else outputText("bursting free of your lips and bobbing under its own weight.");
				if (player.vaginas[0].vaginalWetness <= Vagina.WETNESS_NORMAL) outputText("  Wetness builds inside you as your " + player.vaginaDescript(0) + " tingles and aches to be filled.");
				else if (player.vaginas[0].vaginalWetness <= Vagina.WETNESS_SLICK) outputText("  A trickle of wetness escapes your " + player.vaginaDescript(0) + " as your body reacts to the desire burning inside you.");
				else if (player.vaginas[0].vaginalWetness <= Vagina.WETNESS_DROOLING) outputText("  Wet fluids leak down your thighs as your body reacts to this new stimulus.");
				else outputText("  Slick fluids soak your thighs as your body reacts to this new stimulus.");
			}
			//(Minotaur fantasy)
			if (!game.inCombat && rand(10) == 1 && (!purified && !player.hasPerk(PerkLib.MinotaurCumResistance))) {
				outputText("\n\nYour eyes flutter closed for a second as a fantasy violates your mind.  You're on your knees, prostrate before a minotaur.  Its narcotic scent fills the air around you, and you're swaying back and forth with your belly already sloshing and full of spunk.  Its equine-like member is rubbing over your face, and you submit to the beast, stretching your jaw wide to take its sweaty, glistening girth inside you.  Your tongue quivers happily as you begin sucking and slurping, swallowing each drop of pre-cum you entice from the beastly erection.  Gurgling happily, you give yourself to your inhuman master for a chance to swallow into unthinking bliss.");
				dynStats("lib", 1, "lus", rand(5) + player.cor / 20 + flags[kFLAGS.MINOTAUR_CUM_ADDICTION_TRACKER] / 5);
			}
			//(Healing – if hurt and uber-addicted (hasperk))
			if (player.HP < player.maxHP() && player.hasPerk(PerkLib.MinotaurCumAddict)) {
				outputText("\n\nThe fire of your arousal consumes your body, leaving vitality in its wake.  You feel much better!");
				player.HPChange(int(player.maxHP() / 4), false);
			}
			//Uber-addicted status!
			if (player.hasPerk(PerkLib.MinotaurCumAddict) && flags[kFLAGS.MINOTAUR_CUM_REALLY_ADDICTED_STATE] <= 0 && !purified) {
				flags[kFLAGS.MINOTAUR_CUM_REALLY_ADDICTED_STATE] = 3 + rand(2);
				outputText("\n\nYour body feels so amazing and sensitive.  Experimentally you pinch yourself and discover that even pain is turning you on!");
			}
			//Clear mind a bit
			if (purified && (player.hasPerk(PerkLib.MinotaurCumAddict) || flags[kFLAGS.MINOTAUR_CUM_ADDICTION_TRACKER] >= 40)) {
				outputText("\n\nYour mind feels a bit clearer just from drinking the purified minotaur cum. Maybe if you drink more of these, you'll be able to rid yourself of your addiction?");
				if (player.hasPerk(PerkLib.MinotaurCumAddict) && flags[kFLAGS.MINOTAUR_CUM_ADDICTION_TRACKER] <= 50) {
					outputText("  Suddenly, you black out and images flash in your mind about getting abducted by minotaurs and the abandonment of your quest that eventually leads to Lethice's success in taking over Mareth. No, it cannot be! You wake up and recover from the blackout, horrified to find out what would really happen if you spend the rest of your life with the Minotaurs! You shake your head and realize that you're no longer dependent on the cum.  ");
					outputText("\n(Lost Perk: Minotaur Cum Addict!)");
					player.removePerk(PerkLib.MinotaurCumAddict);
				}

			}
			player.refillHunger(25);

			return false;
		}
	}
}