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

	/**
	 * Skin oils, courtesy of Foxxling.
	 * @author Kitteh6660
	 */
	public class SkinOil extends Consumable
	{
		private var _color:String;

		public function SkinOil(id:String, color:String)
		{
			this._color = color.toLowerCase();
			var shortName:String = color + " Oil";
			var longName:String = "a bottle of " + this._color + " oil"
			var value:int = ConsumableLib.DEFAULT_VALUE;
			var description:String = "A small glass bottle filled with a smooth clear liquid. A label across the front says, \"" + color + " Skin Oil.\""
			super(id, shortName, longName, value, description);
		}

		override public function useItem():Boolean {
			if (!player.hasUnderBody() && !player.wings.canOil()) {
				oilSkin();
				return true;
			}

			clearOutput();
			if (player.hasUnderBody()) {
				outputText("The skin on your underbody is different from the rest. ");
			}
			outputText("Where do you want to apply the " + _color + " skin oil?");

			menu();
			addButton(0, "Body", oilSkin);
			if (player.hasUnderBody()) {
				addButton(1, "Underbody", oilUnderBodySkin);
			} else {
				addButtonDisabled(1, "Underbody", "You have no special underbody!");
			}
			if (player.wings.type === Wings.NONE) {
				outputText("\n\nYou have no wings.");
				addButtonDisabled(2, "Wings", "You have no wings.");
			} else if (player.wings.canOil()) {
				outputText("\n\nYour wings have [wingColor] [wingColorDesc].");
				if (!player.wings.hasOilColor(_color))
					addButton(2, "Wings", oilWings).hint("Apply oil to your wings' " + player.wings.getColorDesc(BaseBodyPart.COLOR_ID_MAIN) + ".");
				else
					addButtonDisabled(2, "Wings", "Your wings' " + player.wings.getColorDesc(BaseBodyPart.COLOR_ID_MAIN) + " already are " + _color + " colored!");
			} else {
				outputText("\n\nYour wings can't be oiled.");
				addButtonDisabled(2, "Wings", "Your wings can't be oiled!");
			}
			if (player.wings.type === Wings.NONE) {
				outputText("\n\nYou have no wings.");
				addButtonDisabled(3, "Wings 2", "You have no wings.");
			} else if (player.wings.canOil2()) {
				outputText("\n\nYour wings have [wingColor2] [wingColor2Desc].");
				if (!player.wings.hasOil2Color(_color))
					addButton(3, "Wings 2", oil2Wings).hint("Apply oil to your wings' " + player.wings.getColorDesc(BaseBodyPart.COLOR_ID_2ND) + ".");
				else
					addButtonDisabled(3, "Wings 2", "Your wings' " + player.wings.getColorDesc(BaseBodyPart.COLOR_ID_2ND) + " already are " + _color + " colored!");
			} else {
				addButtonDisabled(3, "Wings 2", "Your wings have no secondary color to apply skin oil to!");
			}
			addButton(4, "Nevermind", oilCancel);
			return true;
		}

		public function oilSkin():void {
			if (player.skin.tone == _color) {
				outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your body. Once you’ve finished you feel rejuvenated.");
				player.changeFatigue(-10);
			}
			else {
				if (!player.hasGooSkin()) {
					player.skin.tone = _color;
					player.arms.updateClaws(player.arms.claws.type);
				}
				switch (player.skin.type) {
					case Skin.PLAIN: //Plain
						outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your body. Even before you’ve covered your arms and [chest] your skin begins to tingle pleasantly all over. After your skin darkens a little, it begins to change until you have " + _color + " skin.");
						break;
					case Skin.FUR: //Fur
						outputText("" + player.clothedOrNaked("Once you’ve disrobed you take the oil and", "You take the oil and") + " begin massaging it into your skin despite yourself being covered with fur. Once you’ve finished... nothing happens. Then your skin begins to tingle and soon you part your fur to reveal " + _color + " skin.");
						break;
					case Skin.LIZARD_SCALES: //Lizard scales
					case Skin.DRAGON_SCALES: //Dragon scales
					case Skin.FISH_SCALES:   //Fish scales
						outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your body. Even before you’ve covered your arms and [chest] your scaly skin begins to tingle pleasantly all over. After your skin darkens a little, it begins to change until you have " + _color + " skin.");
						break;
					case Skin.GOO: //Goo
						outputText("You take the oil and pour the contents into your skin. The clear liquid dissolves, leaving your gooey skin unchanged. You do feel a little less thirsty though.");
						player.slimeFeed();
						break;
					default:
						outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your body. Even before you’ve covered your arms and [chest] your skin begins to tingle pleasantly all over. After your skin darkens a little, it begins to change until you have " + _color + " skin.");
				}
			}
			inventory.itemGoNext();
		}

		public function oilUnderBodySkin():void {
			if (player.underBody.skin.tone == _color) {
				outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your underbody. Once you’ve finished you feel rejuvenated.");
				player.changeFatigue(-10);
			}
			else {
				if (!player.hasGooSkin()) {
					player.underBody.skin.tone = _color;
				}
				switch (player.underBody.skin.type) {
					case Skin.PLAIN: //Plain
						outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your underbody. Even before you’ve covered your [chest] your skin begins to tingle pleasantly all over. After your skin darkens a little, it begins to change until you have " + _color + " skin on your underbody.");
						break;
					case Skin.FUR: //Fur
						outputText("" + player.clothedOrNaked("Once you’ve disrobed you take the oil and", "You take the oil and") + " begin massaging it into the skin on your underbody despite yourself being covered with fur. Once you’ve finished... nothing happens. Then your skin begins to tingle and soon you part your fur on your [chest] to reveal " + _color + " skin.");
						break;
					case Skin.LIZARD_SCALES: //Lizard scales
					case Skin.DRAGON_SCALES: //Dragon scales
					case Skin.FISH_SCALES:   //Fish scales
						outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your underbody. Even before you’ve covered your [chest] your scaly skin begins to tingle pleasantly all over. After your skin darkens a little, it begins to change until you have " + _color + " skin on your underbody.");
						break;
					case Skin.GOO: //Goo
						outputText("You take the oil and pour the contents into your skin. The clear liquid dissolves, leaving your gooey skin unchanged. You do feel a little less thirsty though.");
						player.slimeFeed();
						break;
					default:
						outputText("You " + player.clothedOrNaked("take a second to disrobe before uncorking the bottle of oil and rubbing", "uncork the bottle of oil and rub") + " the smooth liquid across your underbody. Even before you’ve covered your [chest] your skin begins to tingle pleasantly all over. After your skin darkens a little, it begins to change until you have " + _color + " skin on your underbody.");
				}
			}
			inventory.itemGoNext();
		}

		private function oilWings():void
		{
			clearOutput();
			outputText("You rub the oil into the [wingColorDesc] of your [wings].  ");
			player.wings.applyOil(_color);
			outputText("Your wings now have [wingColor] [wingColorDesc].");
			inventory.itemGoNext();
		}

		private function oil2Wings():void
		{
			clearOutput();
			outputText("You rub the oil into the [wingColor2Desc] of your [wings].  ");
			player.wings.applyOil2(_color);
			outputText("Your wings now have [wingColor2] [wingColor2Desc].");
			inventory.itemGoNext();
		}

		private function oilCancel():void {
			clearOutput();
			outputText("You put the skin oil away.\n\n");
			inventory.returnItemToInventory(this);
		}
	}
}


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

		/*Effects:
	  Boosts Speed stat
	  Ass reduction
	  Testicles return inside your body (could be reverted by the use of succubi delight)
	  Can change penis into reptilian form  (since there's a lot of commentary here not knowing where to go, let me lay it out.)
	 the change will select one cock (randomly if you have multiple)
	 said cock will become two reptilian cocks
	 these can then be affected separately, so if someone wants to go through the effort of removing one and leaving themselves with one reptile penis, they have the ability to do that
	 This also means that someone who's already reached the maximum numbers of dicks cannot get a reptilian penis unless they remove one first
	 "Your reptilian penis is X.X inches long and X.X inches thick.  The sheath extends halfway up the shaft, thick and veiny, while the smooth shaft extends out of the sheath coming to a pointed tip at the head. "
	  Grow poisonous fangs (grants Poison Bite ability to player, incompatible with the sting ability, as it uses the same poison-meter)
	  Causes your tongue to fork
	  Legs fuse together and dissolve into snake tail  (grants Constrict ability to player, said tail can only be covered in scales, independently from the rest of the body)
	  If snake tail exists:
		Make it longer, possibly larger (tail length is considered independently of your height, so it doesn't enable you to use the axe, for instance.
		Change tail's color according to location
		  [Smooth] Beige and Tan (Desert), [Rough] Brown and Rust (Mountains), [Lush]  Forest Green and Yellow (Forest), [Cold] Blue and White (ice land?), [Fresh] Meadow Green [#57D53B - #7FFF00] and Dark Teal [#008080] (lake) , [Menacing] Black and Red (Demon realm, outside encounters), [Distinguished] Ivory (#FFFFF0) and Royal Purple/Amethyst (#702963) (Factory), [Mossy] Emerald and Chestnut (Swamp), [Arid] Orange and Olive pattern (Tel' Adre)

	 9a) Item Description
	 "A vial the size of your fist made of dark brown glass. It contains what appears to be an oily, yellowish liquid. The odor is abominable."
	 */

	/**
	 * Snake transformative item.
	 */
	public class SnakeOil extends Consumable
	{
		public function SnakeOil()
		{
			super("SnakOil", "SnakOil", "a vial of snake oil", ConsumableLib.DEFAULT_VALUE, "A vial the size of your fist made of dark brown glass. It contains what appears to be an oily, yellowish liquid. The odor is abominable.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "snakeOil";
			player.slimeFeed();
			mutations.initTransformation([2, 2]);
			clearOutput();
			//b) Description while used
			outputText("Pinching your nose, you quickly uncork the vial and bring it to your mouth, determined to see what effects it might have on your body. Pouring in as much as you can take, you painfully swallow before going for another shot, emptying the bottle.");
			//(if outside combat)
			if (!game.inCombat) outputText("  Minutes pass as you start wishing you had water with you, to get rid of the aftertaste.");
			//+ speed to 70!
			if (player.spe100 < 70 && rand(2) === 0) {
				dynStats("spe", (2 - (player.spe / 10 / 5)));
				outputText("\n\nYour muscles quiver, feeling ready to strike as fast as a snake!");
				if (player.spe100 < 40) outputText("  Of course, you're nowhere near as fast as that.");
			}
			//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);
			}
			//-Remove extra breast rows
			if (changes < changeLimit && player.breastRows.length > 1 && rand(3) == 0 && !flags[kFLAGS.HYPER_HAPPY]) {
				mutations.removeExtraBreastRow(tfSource);
			}
			//Removes wings and shark fin
			if ((player.wings.type != Wings.NONE || player.rearBody.type === RearBody.SHARK_FIN) && rand(3) === 0 && changes < changeLimit) {
				if (player.rearBody.type === RearBody.SHARK_FIN) {
					outputText("\n\nA wave of tightness spreads through your back, and it feels as if someone is stabbing a dagger into your spine."
					          +" After a moment the pain passes, though your fin is gone!");
					player.rearBody.restore();
				} else {
					outputText("\n\nA wave of tightness spreads through your back, and it feels as if someone is stabbing a dagger into each of your"
					          +" shoulder-blades.  After a moment the pain passes, though your wings are gone!");
				}
				player.wings.type = Wings.NONE;
				changes++;
			}
			//Removes antennae
			if (player.antennae.type != Antennae.NONE && rand(3) === 0 && changes < changeLimit) {
				mutations.removeAntennae();
			}
			//9c) II The tongue (sensitivity bonus, stored as a perk?)
			if (changes === 0 && rand(3) === 0) {
				mutations.gainSnakeTongue();
			}
			//9c) III The fangs
			if (changes === 0 && player.tongue.type === Tongue.SNAKE && player.face.type !== Face.SNAKE_FANGS && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nWithout warning, you feel your canine teeth jump almost an inch in size, clashing on your gums, cutting yourself quite badly. As you attempt to find a new way to close your mouth without dislocating your jaw, you notice that they are dripping with a bitter, khaki liquid.  Watch out, and try not to bite your tongue with your poisonous fangs!");
				if (player.face.type !== Face.HUMAN && player.face.type !== Face.SHARK_TEETH && player.face.type !== Face.BUNNY && player.face.type !== Face.SPIDER_FANGS) {
					outputText("  As the change progresses, your " + player.faceDescript() + " reshapes.  The sensation is far more pleasant than teeth cutting into gums, and as the tingling transformation completes, you've gained with a normal-looking, human visage.");
				}
				player.face.type = Face.SNAKE_FANGS;
				changes++;
			}
			//9c) I The tail ( http://tvtropes.org/pmwiki/pmwiki.php/Main/TransformationIsAFreeAction ) (Shouldn't we try to avert this? -Ace)
			//Should the enemy "kill" you during the transformation, it skips the scene and immediately goes to tthe rape scene. (Now that I'm thinking about it, we should add some sort of appendix where the player realizes how much he's/she's changed. -Ace)
			if (changes === 0 && player.face.type === Face.SNAKE_FANGS && player.lowerBody.type !== LowerBody.NAGA && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou find it increasingly harder to keep standing as your legs start feeling weak.  You swiftly collapse, unable to maintain your own weight.");
				//(If used in combat, you lose a turn here. Half-corrupted Jojo and the Naga won't attack you during that period, but other monsters will)
				//FUCK NO
				outputText("\n\nTrying to get back up, you realize that the skin on the inner sides of your thighs is merging together like it was being sewn by an invisible needle.");
				outputText("  The process continues through the length of your " + player.legs() + ", eventually reaching your " + player.feet() + ".  Just when you think that the transformation is over, you find yourself pinned to the ground by an overwhelming sensation of pain. You hear the horrible sound of your bones snapping, fusing together and changing into something else while you contort in unthinkable agony.  Sometime later you feel the pain begin to ease and you lay on the ground, spent by the terrible experience. Once you feel you've recovered, you try to stand, but to your amazement you discover that you no longer have " + player.legs() + ": the bottom half of your body is like that of a snake's.");
				outputText("\n\nWondering what happened to your sex, you pass your hand down the front of your body until you find a large, horizontal slit around your pelvic area, which contains all of your sexual organs.");
				if (player.balls > 0 && player.ballSize > 10) outputText("  You're happy not to have to drag those testicles around with you anymore.");
				outputText("  But then, scales start to form on the surface of your skin, slowly becoming visible, recoloring all of your body from the waist down in a snake-like pattern. The feeling is... not that bad actually, kind of like callous, except on your whole lower body. The transformation complete, you get up, standing on your newly formed snake tail. You can't help feeling proud of this majestic new body of yours.");
				player.lowerBody.type = LowerBody.NAGA;
				player.lowerBody.legCount = 1;

				// Naga lower body plus a tail may look awkward, so silently discard it (Stadler76)
				player.tail.type = Tail.NONE;
				player.tail.venom = 0;
				player.tail.recharge = 0;

				if (player.hasReptileUnderBody()) {
					player.skin.tone = "green";
					player.underBody.skin.tone = "light green";
				} else {
					player.underBody.setProps({
						type: UnderBody.NAGA,
						skin: {
							type: Skin.LIZARD_SCALES,
							tone: "green",
							adj:  "",
							desc: "scales"
						}
					});
				}

				player.arms.updateClaws(player.arms.claws.type); // Just auto-fix the clawTone
				changes++;
			}
			// Remove gills
			if (rand(4) === 0 && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}

			//Default change - blah
			if (changes === 0) outputText("\n\nRemakarbly, the snake-oil has no effect.  Should you really be surprised at snake-oil NOT doing anything?");
			player.refillHunger(5);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}
}

license: unknown


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

	public class SpringWater extends Consumable
	{
		public function SpringWater()
		{
			super("S.Water", "SpringWtr", "a waterskin filled with spring water", ConsumableLib.DEFAULT_VALUE, "A waterskin full of purified water from Minerva's spring.  It's clean and clear, with a faint sweet scent to it.  You're sure it would be a very refreshing drink.");
		}

		override public function useItem():Boolean
		{
			player.slimeFeed();
			clearOutput();
			outputText("The water is cool and sweet to the taste, and every swallow makes you feel calmer, cleaner, and refreshed.  You drink until your thirst is quenched, feeling purer in both mind and body. ");
			//-30 fatigue, -2 libido, -10 lust]
			player.changeFatigue(-10);
			dynStats("lus", -25, "cor", (-3 - rand(2)), "scale", false);
			player.HPChange(20 + (5 * player.level) + rand(5 * player.level), true);
			player.refillHunger(10);
 			if (player.cor > 50) dynStats("cor", -1);
 			if (player.cor > 75) dynStats("cor", -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.Vagina;

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

		private var tainted:Boolean;

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

			tainted = type === TAINTED;

			switch (type) {
				case TAINTED:
					id = "SucMilk";
					shortName = "SucMilk";
					longName = "a bottle of Succubi milk";
					description = 'This milk-bottle is filled to the brim with a creamy white milk of dubious origin.'
					             +' A pink label proudly labels it as "Succubi Milk".'
					             +' In small text at the bottom of the label it reads: "To bring out the succubus in YOU!"';
					value = ConsumableLib.DEFAULT_VALUE;
					break;

				case PURIFIED:
					id = "P.S.Mlk";
					shortName = "P.S.Mlk";
					longName = "";
					description = 'This milk-bottle is filled to the brim with a creamy white milk of dubious origin.'
					             +' A pink label proudly labels it as "Succubi Milk".'
					             +' In small text at the bottom of the label it reads: "To bring out the succubus in YOU!"'
					             +' Purified by Rathazul to prevent corruption.';
					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
		{
			var tfSource:String = "succubiMilk";
			if (!tainted) tfSource += "-purified";
			var temp:int;
			player.slimeFeed();
			var temp2:Number = 0;
			var temp3:Number = 0;
			var rando:Number = rand(100);
			if (player.isAlchemist())rando += 10;
			if (player.isTFResistant()) rando -= 10;
			clearOutput();
			if (player.cor < 35) outputText("You wonder why in the gods' names you would drink such a thing, but you have to admit, it is the best thing you have ever tasted.");
			if (player.cor >= 35 && player.cor < 70) {
				outputText("You savor the incredible flavor as you greedily gulp it down.");
				if (player.gender == 2 || player.gender == 3) {
					outputText("  The taste alone makes your " + player.vaginaDescript(0) + " feel ");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_DRY) outputText("tingly.");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_NORMAL) outputText("wet.");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_WET) outputText("sloppy and wet.");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_SLICK) outputText("sopping and juicy.");
					if (player.vaginas[0].vaginalWetness >= Vagina.WETNESS_DROOLING) outputText("dripping wet.");
				}
				else if (player.hasCock()) outputText("  You feel a building arousal, but it doesn't affect your cock.");
			}
			if (player.cor >= 70) {
				outputText("You pour the milk down your throat, chugging the stuff as fast as you can.  You want more.");
				if (player.gender == 2 || player.gender == 3) {
					outputText("  Your " + player.vaginaDescript(0));
					if (player.vaginas.length > 1) outputText(" quiver in orgasm, ");
					if (player.vaginas.length == 1) outputText(" quivers in orgasm, ");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_DRY) outputText("becoming slightly sticky.");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_NORMAL) outputText("leaving your undergarments sticky.");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_WET) outputText("wet with girlcum.");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_SLICK) outputText("staining your undergarments with cum.");
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_DROOLING) outputText("leaving cunt-juice trickling down your leg.");
					if (player.vaginas[0].vaginalWetness >= Vagina.WETNESS_SLAVERING) outputText("spraying your undergarments liberally with slick girl-cum.");
					player.orgasm('Vaginal');
				}
				else if (player.gender !== 0) {
					if (player.cocks.length == 1) outputText("  You feel a strange sexual pleasure, but your " + player.multiCockDescript() + " remains unaffected.");
					else outputText("  You feel a strange sexual pleasure, but your " + player.multiCockDescript() + " remain unaffected.");
				}
			}
			if (tainted) dynStats("spe", 1, "lus", 3, "cor", 1);
			else dynStats("spe", 1, "lus", 3);
			//Breast growth (maybe cock reduction!)
			if (rando <= 75) {
				//Temp stores the level of growth...
				temp = 1 + rand(3);
				if (player.breastRows.length > 0) {
					if (player.breastRows[0].breastRating < 2 && rand(3) === 0) temp++;
					if (player.breastRows[0].breastRating < 5 && rand(4) === 0) temp++;
					if (player.breastRows[0].breastRating < 6 && rand(5) === 0) temp++;
				}
				outputText("\n\n");
				player.growTits(temp, player.breastRows.length, true, 3);
				if (player.breastRows.length == 0) {
					outputText("A perfect pair of B cup breasts, complete with tiny nipples, form on your chest.");
					player.createBreastRow();
					player.breastRows[0].breasts = 2;
					player.breastRows[0].nipplesPerBreast = 1;
					player.breastRows[0].breastRating = 2;
					outputText("\n");
				}
				if (!flags[kFLAGS.HYPER_HAPPY])
				{
					// Shrink cocks if you have them.
					if (player.cocks.length > 0) {
						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;
							if (player.cocks[temp].cockThickness * 6 > player.cocks[temp].cockLength) player.cocks[temp].cockThickness -= .2;
							if (player.cocks[temp].cockThickness * 8 > player.cocks[temp].cockLength) player.cocks[temp].cockThickness -= .2;
							if (player.cocks[temp].cockThickness < .5) player.cocks[temp].cockThickness = .5;
						}
						temp3 += player.increaseCock(temp, (rand(3) + 1) * -1);
						outputText("\n\n");
						player.lengthChange(temp3, 1);
						if (player.cocks[temp].cockLength < 2) {
							outputText("  ");
							player.killCocks(1);
						}
					}
				}
			}
			if (player.vaginas.length == 0 && (rand(3) === 0 || (rando > 75 && rando < 90))) {
				player.createVagina();
				player.vaginas[0].vaginalLooseness = Vagina.LOOSENESS_TIGHT;
				player.vaginas[0].vaginalWetness = Vagina.WETNESS_NORMAL;
				player.vaginas[0].virgin = true;
				player.setClitLength(.25);
				if (player.fertility <= 5) player.fertility = 6;
				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) + "!");
			}
			//Increase pussy wetness or grow one!!
			else if (rando > 75 && rando < 90) {
				//Shrink cawk
				if (player.cocks.length > 0 && !flags[kFLAGS.HYPER_HAPPY]) {
					outputText("\n\n");
					temp = 0;
					temp2 = player.cocks.length;
					//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 = player.increaseCock(temp, -1 * (rand(3) + 1));
					player.lengthChange(temp3, 1);
					if (player.cocks[temp].cockLength < 3) {
						outputText("  ");
						player.killCocks(1);
					}
				}
				if (player.vaginas.length > 0) {
					outputText("\n\n");
					//0 = dry, 1 = wet, 2 = extra wet, 3 = always slick, 4 = drools constantly, 5 = female ejaculator
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_SLAVERING) {
						if (player.vaginas.length == 1) outputText("Your " + player.vaginaDescript(0) + " gushes fluids down your leg as you spontaneously orgasm.");
						else outputText("Your " + player.vaginaDescript(0) + "s gush fluids down your legs as you spontaneously orgasm, leaving a thick puddle of pussy-juice on the ground.  It is rapidly absorbed by the earth.");
						player.orgasm('Vaginal');
						if (tainted) dynStats("cor", 1);
					}
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_DROOLING) {
						if (player.vaginas.length == 1) outputText("Your pussy feels hot and juicy, aroused and tender.  You cannot resist as your hands dive into your " + player.vaginaDescript(0) + ".  You quickly orgasm, squirting fluids everywhere.  You are now a squirter.");
						if (player.vaginas.length > 1) outputText("Your pussies feel hot and juicy, aroused and tender.  You cannot resist plunging your hands inside your " + player.vaginaDescript(0) + "s.  You quiver around your fingers, squirting copious fluids over yourself and the ground.  The fluids quickly disappear into the dirt.");
						player.orgasm('Vaginal');
						if (tainted) dynStats("cor", 1);
					}
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_SLICK) {
						if (player.vaginas.length == 1) outputText("You feel a sudden trickle of fluid down your leg.  You smell it and realize it's your pussy-juice.  Your " + player.vaginaDescript(0) + " now drools lubricant constantly down your leg.");
						if (player.vaginas.length > 1) outputText("You feel sudden trickles of fluids down your leg.  You smell the stuff and realize it's your pussies-juices.  They seem to drool lubricant constantly down your legs.");
					}
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_WET) {
						outputText("You flush in sexual arousal as you realize how moist your cunt-lips have become.  Once you've calmed down a bit you realize they're still slick and ready to fuck, and always will be.");
					}
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_NORMAL) {
						if (player.vaginas.length == 1) outputText("A feeling of intense arousal passes through you, causing you to masturbate furiously.  You realize afterwards that your " + player.vaginaDescript(0) + " felt much wetter than normal.");
						else outputText("A feeling of intense arousal passes through you, causing you to masturbate furiously.  You realize afterwards that your " + player.vaginaDescript(0) + " were much wetter than normal.");
					}
					if (player.vaginas[0].vaginalWetness == Vagina.WETNESS_DRY) {
						outputText("You feel a tingling in your crotch, but cannot identify it.");
					}
					temp = player.vaginas.length;
					while (temp > 0) {
						temp--;
						if (player.vaginas[temp].vaginalWetness < Vagina.WETNESS_SLAVERING) player.vaginas[temp].vaginalWetness++;
					}
				}
			}
			if (rando >= 90) {
				if (!tainted || player.skin.tone == "blue" || player.skin.tone == "purple" || player.skin.tone == "indigo" || player.skin.tone == "shiny black") {
					if (player.vaginas.length > 0) {
						outputText("\n\nYour heart begins beating harder and harder as heat floods to your groin.  You feel your clit peeking out from under its hood, growing larger and longer as it takes in more and more blood.");
						if (player.getClitLength() > 3 && !player.hasPerk(PerkLib.BigClit)) outputText("  After some time it shrinks, returning to its normal aroused size.  You guess it can't get any bigger.");
						if (player.getClitLength() > 5 && player.hasPerk(PerkLib.BigClit)) outputText("  Eventually it shrinks back down to its normal (but still HUGE) size.  You guess it can't get any bigger.");
						if (((player.hasPerk(PerkLib.BigClit)) && player.getClitLength() < 6)
							|| player.getClitLength() < 3) {
							temp = 2; // minimum growth
							if (player.hasPerk(PerkLib.BigClit)) temp += 2;
							player.changeClitLength((rand(4) + temp) / 10);
						}
						dynStats("sen", 3, "lus", 8);
					}
					else {
						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) + "!");
					}
				}
				else {
					temp = rand(10);
					if (temp == 0) player.skin.tone = "shiny black";
					if (temp == 1 || temp == 2) player.skin.tone = "indigo";
					if (temp == 3 || temp == 4 || temp == 5) player.skin.tone = "purple";
					if (temp > 5) player.skin.tone = "blue";
					outputText("\n\nA tingling sensation runs across your skin in waves, growing stronger as your skin's tone slowly shifts, darkening to become " + player.skin.tone + " in color.");
					player.arms.updateClaws(player.arms.claws.type);
					if (tainted) dynStats("cor", 1);
					else dynStats("cor", 0);
					game.rathazul.addMixologyXP(20);
				}
			}
			//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);
			}
			//Demonic changes - higher chance with higher corruption.
			if (rand(40) + player.cor / 3 > 35 && tainted) {
				mutations.demonChanges(tfSource);
			}
			if (tainted) {
				outputText(player.modFem(100, 2));
				if (rand(3) === 0) outputText(player.modTone(15, 2));
			}
			else {
				outputText(player.modFem(90, 1));
				if (rand(3) === 0) outputText(player.modTone(20, 2));
			}
			player.refillHunger(20);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}
	}
}


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

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

		private var tainted:Boolean;

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

			tainted = type === TAINTED;

			switch (type) {
				case TAINTED:
					id = "SDelite";
					shortName = "S.Delite";
					longName = 'a bottle of "Succubi\'s Delight"';
					description = "This precious fluid is often given to men a succubus intends to play with for a long time.";
					value = ConsumableLib.DEFAULT_VALUE;
					break;

				case PURIFIED:
					id = "PSDelit";
					shortName = "PSDelit";
					longName = 'an untainted bottle of "Succubi\'s Delight"';
					description = "This precious fluid is often given to men a succubus intends to play with for a long time."
					             +" It has been partially purified by Rathazul to prevent corruption.";
					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();
			var crit:Number = 1;
			//Determine crit multiplier (x2 or x3)
			if (rand(4) === 0) crit += rand(2) + 1;
			mutations.initTransformation([2, 2]);
			//Generic drinking text
			clearOutput();
			outputText("You uncork the bottle and drink down the strange substance, struggling to down the thick liquid.");
			//low corruption thoughts
			if (player.cor < 33) outputText("  This stuff is gross, why are you drinking it?");
			//high corruption
			if (player.cor >= 66) outputText("  You lick your lips, marvelling at how thick and sticky it is.");
			//Corruption increase
			if ((player.cor < 50 || rand(2)) && tainted) {
				outputText("\n\nThe drink makes you feel... dirty.");
				var temp:Number = 1;
				//Corrupts the uncorrupted faster
 				if (player.cor < 50) temp++;
 				if (player.cor < 40) temp++;
 				if (player.cor < 30) temp++;
				//Corrupts the very corrupt slower
				if (player.cor >= 90) temp = .5;
				if (tainted) dynStats("cor", temp);
				else dynStats("cor", 0);
				changes++;
			}
			//Makes your balls biggah! (Or cummultiplier higher if futa!)
			if (rand(1.5) === 0 && changes < changeLimit && player.balls > 0) {
				player.ballSize++;
				//They grow slower as they get bigger...
				if (player.ballSize > 10) player.ballSize -= .5;
				//Texts
				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++;
			}
			//Grow new balls!
			if (player.balls < 2 && changes < changeLimit && rand(4) === 0) {
				if (player.balls == 0) {
					player.balls = 2;
					outputText("\n\nIncredible pain scythes through your crotch, doubling you over.  You stagger around, struggling to pull open your " + player.armorName + ".  In shock, you barely register the sight before your eyes: <b>You have balls!</b>");
					player.ballSize = 1;
				}
				changes++;
			}
			//Boost cum multiplier
			if (changes < changeLimit && rand(2) === 0 && player.cocks.length > 0) {
				if (player.cumMultiplier < 6 && rand(2) === 0 && changes < changeLimit) {
					//Temp is the max it can be raised to
					temp = 3;
					//Lots of cum raises cum multiplier cap to 6 instead of 3
					if (player.hasPerk(PerkLib.MessyOrgasms)) temp = 6;
					if (temp < player.cumMultiplier + .4 * crit) {
						changes--;
					}
					else {
						player.cumMultiplier += .4 * crit;
						//Flavor text
						if (player.balls == 0) outputText("\n\nYou feel a churning inside your body as something inside you changes.");
						if (player.balls > 0) outputText("\n\nYou feel a churning in your " + player.ballsDescriptLight() + ".  It quickly settles, leaving them feeling somewhat more dense.");
						if (crit > 1) outputText("  A bit of milky pre dribbles from your " + player.multiCockDescriptLight() + ", pushed out by the change.");
						dynStats("lib", 1);
					}
					changes++;
				}
			}
			//Fail-safe
			if (changes == 0) {
				outputText("\n\nYour groin tingles, making it feel as if you haven't cum in a long time.");
				player.hoursSinceCum += 100;
			}
			if (player.balls > 0 && rand(3) === 0) {
				outputText(player.modFem(12, 3));
			}
			player.refillHunger(10);

			return false;
		}
	}
}


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

	/**
	 * Balls and cum transformation item.
	 */
	public class SuccubisDream extends Consumable
	{

		public function SuccubisDream()
		{
			super("S.Dream","S.Dream", "a bottle of 'Succubus' Dream'", ConsumableLib.DEFAULT_VALUE, "This precious fluid is often given to men a succubus intends to play with for a long time, though this batch has been enhanced by Lumi to have even greater potency.");
		}

		override public function useItem():Boolean {
			player.slimeFeed();

			var temp:int = 0;
			var crit:Number = 1;
			//Determine crit multiplier (x2 or x3)
			crit += rand(2) + 1;
			mutations.initTransformation([2, 2]);
			//Generic drinking text
			clearOutput();
			outputText("You uncork the bottle and drink down the strange substance, struggling to down the thick liquid.");
			//low corruption thoughts
			if (player.cor < 33) outputText("  This stuff is gross, why are you drinking it?");
			//high corruption
			if (player.cor >= 66) outputText("  You lick your lips, marvelling at how thick and sticky it is.");
			//Corruption increase
			if (player.cor < 50 || rand(2)) {
				outputText("\n\nThe drink makes you feel... dirty.");
				temp = 1;
  				//Corrupts the uncorrupted faster
 				if (player.cor < 50) temp++;
 				if (player.cor < 40) temp++;
 				if (player.cor < 30) temp++;
  				//Corrupts the very corrupt slower
 				if (player.cor >= 90) temp = .5;
				dynStats("cor", temp + 2);
				changes++;
			}
			//NEW BALLZ
			if (player.balls < 4) {
				if (player.balls > 0) {
					player.balls = 4;
					outputText("\n\nIncredible pain scythes through your crotch, doubling you over.  You stagger around, struggling to pull open your " + player.armorName + ".  In shock, you barely register the sight before your eyes: You have four balls.");
				}
				if (player.balls === 0) {
					player.balls = 2;
					outputText("\n\nIncredible pain scythes through your crotch, doubling you over.  You stagger around, struggling to pull open your " + player.armorName + ".  In shock, you barely register the sight before your eyes: You have balls!");
					player.ballSize = 1;
				}
				changes++;
			}
			//Makes your balls biggah! (Or cummultiplier higher if futa!)
			if (rand(1.5) === 0 && changes < changeLimit && player.balls > 0 && player.cocks.length > 0) {
				player.ballSize++;
				//They grow slower as they get bigger...
				if (player.ballSize > 10) player.ballSize -= .5;
				//Texts
				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);
			}
			//Boost cum multiplier
			if (changes < changeLimit && rand(2) === 0 && player.cocks.length > 0) {
				if (player.cumMultiplier < 6 && rand(2) === 0 && changes < changeLimit) {
					//Temp is the max it can be raised to
					temp = 3;
					//Lots of cum raises cum multiplier cap to 6 instead of 3
					if (player.findPerk(PerkLib.MessyOrgasms) >= 0) temp = 6;
					if (temp < player.cumMultiplier + .4 * crit) {
						changes--;
					}
					else {
						player.cumMultiplier += .4 * crit;
						//Flavor text
						if (player.balls === 0) outputText("\n\nYou feel a churning inside your body as something inside you changes.");
						if (player.balls > 0) outputText("\n\nYou feel a churning in your " + player.ballsDescriptLight() + ".  It quickly settles, leaving them feeling somewhat more dense.");
						if (crit > 1) outputText("  A bit of milky pre dribbles from your " + player.multiCockDescriptLight() + ", pushed out by the change.");
						dynStats("lib", 1);
					}
					changes++;
				}
			}
			//Fail-safe
			if (changes === 0) {
				outputText("\n\nYour groin tingles, making it feel as if you haven't cum in a long time.");
				player.hoursSinceCum += 100;
				changes++;
			}
			if (player.balls > 0 && rand(3) === 0) {
				outputText(player.modFem(12, 5));
			}
			player.refillHunger(15);

			return false;
		}
	}
}


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

	/**
	 * Reset player character.
	 */
	public class SuperHummus extends Consumable
	{
		public function SuperHummus()
		{
			super("Hummus2","S.Hummus", "a blob of cheesy-looking super hummus", ConsumableLib.DEFAULT_VALUE, "This pile of hummus doesn't look that clean, and you really don't remember where you got it from.  It looks bland.  So bland that you feel blander just by looking at it.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "superHummus";
			clearOutput();
			if (debug) {
				outputText("You're about to eat the humus when you see it has bugs in it. Not wanting to eat bugged humus or try to debug it you throw it into the portal and find something else to eat.");
				var consumables:ConsumableLib = consumables;
				player.destroyItems(consumables.HUMMUS2, 1);
				return false;
			}
			outputText("You shovel the stuff into your face, not sure WHY you're eating it, but once you start, you just can't stop.  It tastes incredibly bland, and with a slight hint of cheese.");
			player.refillHunger(100);
			player.str = 30;
			player.spe = 30;
			player.tou = 30;
			player.inte = 30;
			player.sens = 20;
			player.lib = 25;
			player.cor = 5;
			player.lust = 10;
			player.hair.type = Hair.NORMAL;
			if (player.humanScore() > 4) {
				outputText("\n\nYou blink and the world twists around you.  You feel more like yourself than you have in a while, but exactly how isn't immediately apparent.  Maybe you should take a look at yourself?");
			}
			else {
				outputText("\n\nYou cry out as the world spins around you.  You're aware of your entire body sliding and slipping, changing and morphing, but in the sea of sensation you have no idea exactly what's changing.  You nearly black out, and then it's over.  Maybe you had best have a look at yourself and see what changed?");
			}
			player.arms.restore();
			player.eyes.type = Eyes.HUMAN;
			player.antennae.type = Antennae.NONE;
			player.face.type = Face.HUMAN;
			player.lowerBody.type = LowerBody.HUMAN;
			player.lowerBody.legCount = 2;
			player.wings.type = Wings.NONE;
			player.tail.type = Tail.NONE;
			player.tongue.type = Tongue.HUMAN;
			player.tail.recharge = 0;
			player.horns.value = 0;
			player.horns.type = Horns.NONE;
			player.ears.type = Ears.HUMAN;
			player.skin.type = Skin.PLAIN;
			player.skin.desc = "skin";
			player.skin.adj = "";
			player.underBody.restore();
			player.neck.restore();
			player.rearBody.restore();
			player.tongue.type = Tongue.HUMAN;
			player.eyes.type = Eyes.HUMAN;
			if (player.fertility > 15) player.fertility = 15;
			if (player.cumMultiplier > 50) player.cumMultiplier = 50;
			var virgin:Boolean = false;
			//Clear cocks
			while (player.cocks.length > 0) {
				player.removeCock(0, 1);
			}
			//Reset dongs!
			if (player.gender === 1 || player.gender === 3) {
				player.createCock();
				player.cocks[0].cockLength = 6;
				player.cocks[0].cockThickness = 1;
				player.ballSize = 2;
				if (player.balls > 2) player.balls = 2;
			}
			//Non duders lose any nuts
			else {
				player.balls = 0;
				player.ballSize = 2;
			}
			//Clear vaginas
			while (player.vaginas.length > 0) {
				virgin = player.vaginas[0].virgin;
				player.removeVagina(0, 1);
			}
			//Reset vaginal virginity to correct state
			if (player.gender >= 2) {
				player.createVagina();
				player.vaginas[0].virgin = virgin;
			}
			player.setClitLength(.25);
			//Tighten butt!
			player.butt.rating = 2;
			player.hips.rating = 2;
			if (player.ass.analLooseness > 1) player.ass.analLooseness = 1;
			if (player.ass.analWetness > 1) player.ass.analWetness = 1;
			//Clear breasts
			player.breastRows = new Vector.<BreastRow>();
			player.createBreastRow();
			player.nippleLength = .25;
			//Girls and herms get bewbs back
			if (player.gender > 2) {

				player.breastRows[0].breastRating = 2;
			}
			else player.breastRows[0].breastRating = 0;
			player.gills.type = Gills.NONE;
			player.removeStatusEffect(StatusEffects.Uniball);
			player.removeStatusEffect(StatusEffects.BlackNipples);
			player.vaginaType(0);
			mutations.updateOvipositionPerk(tfSource);

			return false;
		}
	}
}


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

	/**
	 * Taur transforamtive item?
	 */
	public class Taurinum extends Consumable
	{
		public function Taurinum()
		{
			super("Taurico","Taurinum", "a vial of Taurinum", ConsumableLib.DEFAULT_VALUE, "This is a long flared vial with a small label that reads, \"Taurinum\".  It is likely this potion is tied to centaurs in some way.");
		}

		override public function useItem():Boolean
		{
			mutations.initTransformation([3]);
			player.slimeFeed();
			clearOutput();
			outputText("You down the potion, grimacing at the strong taste.");
			if (changes < changeLimit && rand(2) === 0 && player.spe100 < 80) {
				outputText("\n\nAfter drinking the potion, you feel a bit faster.");
				dynStats("spe", 1);
			}
			//classic horse-taur version
			if (changes < changeLimit && rand(2) === 0 && player.lowerBody.type === LowerBody.HOOFED && !player.isTaur()) {
				changes++;
				outputText("\n\nImmense pain overtakes you as you feel your backbone snap.  The agony doesn't stop, blacking you out as your spine lengthens, growing with new flesh from your backside as the bones of your legs flex and twist.  Muscle groups shift and rearrange themselves as the change completes, the pain dying away as your consciousness returns.  You now have the lower body of a centaur.");
				if (player.gender > 0) {
					outputText("  After taking a moment to get used to your new body, you notice that your genitals now reside between the back legs on your centaur body.");
				}
				dynStats("spe", 3);
				player.lowerBody.type = LowerBody.HOOFED;
				player.lowerBody.legCount = 4;
			}
			//generic version
			if (player.lowerBody.type !== LowerBody.HOOFED && !player.isTaur()) {
				if (changes < changeLimit && rand(3) === 0) {
					changes++;
					//else if (player.lowerBodyPart.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!");
					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!");
						player.lowerBody.type = LowerBody.HOOFED;
					}
					//Catch-all
					else {
						if (player.lowerBody.type === LowerBody.HUMAN)
							player.lowerBody.type = LowerBody.HOOFED;
						outputText("\n\nImmense pain overtakes you as you feel your backbone snap.  The agony doesn't stop, blacking you out as your spine lengthens, growing with new flesh from your backside as the bones of your legs flex and twist.  Muscle groups shift and rearrange themselves as the change completes, the pain dying away as your consciousness returns.  You now have the lower body of a feral beast!");
					}
					if (player.gender > 0)
						outputText("  After taking a moment to get used to your new body, you notice that your genitals now reside between the hind legs of your body.");
					dynStats("spe", 3);
					//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.legCount = 4;
					//dynStats("cor", 0);
					changes++;
				}
			}
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			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.lists.BreastCup;
	import classes.lists.Gender;

	/**
	 * @since  26.05.2017
	 * @author Stadler76
	 */
	public class TonOTrice extends Consumable
	{

		public function TonOTrice()
		{
			super(
				"ToTrice",
				"Ton o' Trice",
				"a ton o' trice",
				ConsumableLib.DEFAULT_VALUE,
				"It’s a small bottle of thick turquoise liquid labelled ‘Ton o’ Trice’. The label shows an avian creature with a thick reptilian"+
				" tail and bright coloured plumage playfully flying around the text."
			);
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "TonOTrice";
			var i:int;
			player.slimeFeed();
			mutations.initTransformation([2, 2, 3, 4]);

			clearOutput();
			outputText("You drink the slimy concoction, grimacing as it reaches your tongue. At first you’re shocked you don’t gag but once you taste"
			          +" the mixture you realise it's not so bad, almost having a hint of almond behind that thick texture.");

			if (player.spe < player.ngPlus(100) && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nYou stumble as you shift position, surprised by how quickly you move. After a moment or two of disorientation,"
				          +" you adjust. You’re certain that you can run faster now.");
				//+3 spe if less than 50
				if (player.spe < player.ngPlus(50)) dynStats("spe", 1);
				//+2 spe if less than 75
				if (player.spe < player.ngPlus(75)) dynStats("spe", 1);
				//+1 if above 75.
				dynStats("spe", 1);
			}

			if (player.tou > player.ngPlus(80) && changes < changeLimit && rand(4) == 0) {
				outputText("\n\nYou feel yourself become a little more delicate, as though you can’t handle quite so strong hits anymore. Then again,"
				          +" who needs to withstand a blow when you can just move with the speed of the wind and dodge it?");
				dynStats("tou", -1);

			}

			//-Reduces sensitivity.
			if (player.sens > 20 && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nThe sensation of prickly pins and needles moves over your body, leaving your senses a little dulled in its wake.");
				dynStats("sen", -1);
			}

			//Raises libido greatly to 50, then somewhat to 75, then slowly to 100.
			if (player.lib < 100 && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nA knot of fire in your gut doubles you over but passes after a few moments. As you straighten you can feel the heat"
				          +" seeping into you, ");
				//(DICK)
				if (player.cocks.length > 0 && (player.gender != Gender.HERM || rand(2) == 0)) {
					outputText("filling [if (cocks > 1)each of] your [cocks] with the desire to breed. You get a bit hornier when you realize your"
					          +" sex-drive has gotten a boost.");
				}
				//(COOCH)
				else if (player.hasVagina()) {
					outputText("puddling in your [vagina]. An instinctive desire to mate and lay eggs spreads through you, increasing your lust and"
					          +" boosting your sex-drive.");
				}
				//(TARDS)
				else {
					outputText("puddling in your featureless crotch for a split-second before it slides into your [ass].  You want to be fucked,"
					          +" filled, and perhaps even gain a proper gender again.  Through the lust you realize your sex-drive has been"
					          +" permanently increased.");
				}
				//+3 lib if less than 50
				if (player.lib < 50) dynStats("lib", 1);
				//+2 lib if less than 75
				if (player.lib < 75) dynStats("lib", 1);
				//+1 if above 75.
				dynStats("lib", 1);
			}

			//Sexual changes

			//-Lactation stoppage.
			if (player.biggestLactation() >= 1 && changes < changeLimit && rand(4) == 0) {
				outputText("\n\n[if (totalNipples == 2)Both of your|All of your many] nipples relax. It's a strange feeling, and you pull back your"
				          +" top to touch one. It feels fine, though there doesn't seem to be any milk leaking out.  You give it a squeeze and marvel"
				          +" when nothing [if (hasNippleCunts)but sexual fluid] escapes it. You are no longer lactating. That makes sense,"
				          +" only mammals lactate!  Smiling, you muse at how much time this will save you when cleaning your gear.");
				if (player.findPerk(PerkLib.Feeder) >= 0 || player.hasStatusEffect(StatusEffects.Feeder)) {
					outputText("\n\n(Feeder perk lost!)");
					player.removePerk(PerkLib.Feeder);
					player.removeStatusEffect(StatusEffects.Feeder);
				}
				changes++;
				//Loop through and reset lactation
				for (i = 0; i < player.breastRows.length; i++) {
					player.breastRows[i].lactationMultiplier = 0;
				}
			}

			//-Nipples reduction to 1 per tit.
			if (player.averageNipplesPerBreast() > 1 && changes < changeLimit && rand(4) == 0) {
				outputText("\n\nA chill runs over your [allBreasts] and vanishes. You stick a hand under your [armor] and discover that your extra"
				          +" nipples are missing! You're down to just one per [if (biggestTitSize < 1)'breast'|breast].");
				changes++;
				//Loop through and reset nipples
				for (i = 0; i < player.breastRows.length; i++) {
					player.breastRows[i].nipplesPerBreast = 1;
				}
			}

			//-Remove extra breast rows
			if (changes < changeLimit && player.breastRows.length > 1 && rand(3) == 0 && !flags[kFLAGS.HYPER_HAPPY]) {
				mutations.removeExtraBreastRow(tfSource);
			}

			//-Butt > 5 - decrease butt size
			if (player.butt.rating > 5 && changes < changeLimit && rand(4) == 0) {
				changes++;
				player.butt.rating--;
				outputText("\n\nA feeling of tightness starts in your [butt], increasing gradually. The sensation grows and grows, but as it does"
				          +" your center of balance shifts. You reach back to feel yourself, and sure enough your [butt] is shrinking into a"
				          +" more manageable size.");
			}

			if (player.isFemaleOrHerm()) {
				//Breasts > D cup - Decrease breast size by up to 3 cups
				if (player.isFemaleOrHerm() && player.biggestTitSize() > BreastCup.D && changes < changeLimit && rand(3) == 0) {
					for (i = 0; i < player.breastRows.length; i++) {
						if (player.breastRows[i].breastRating > BreastCup.D)
							player.breastRows[i].breastRating -= 1 + rand(3);
					}
					outputText("\n\nYour breasts feel tight[if (hasArmor), your [armor] feeling looser around your chest]. You watch in shock as your"
					          +" breast flesh rapidly diminishes, shrinking into your chest. They finally stop when they reach [breastcup] size."
					          +" You feel a little lighter.");
					dynStats("spe", 1);
					changes++;
				}

				//Breasts < B cup - Increase breast size by 1 cup
				if (player.isFemaleOrHerm() && player.smallestTitSize() < BreastCup.B && changes < changeLimit && rand(3) == 0) {
					for (i = 0; i < player.breastRows.length; i++) {
						if (player.breastRows[i].breastRating < BreastCup.B)
							player.breastRows[i].breastRating++;
					}
					outputText("\n\nYour breasts feel constrained and painful against your top as they grow larger by the moment, finally stopping as"
					          +" they reach [breastcup] size. You rub the tender orbs as you get used to your larger breast flesh.");
					dynStats("lib", 1);
					changes++;
				}

				//Hips > 12 - decrease hip size by 1-3 sizes
				if (player.hips.rating > 12 && changes < changeLimit && rand(3) == 0) {
					outputText("\n\nYou stumble a bit as the bones in your pelvis rearrange themselves painfully. Your hips have narrowed.");
					player.hips.rating -= 1 + rand(3);
					changes++;
				}

				//Hips < 6 - increase hip size by 1-3 sizes
				if (player.hips.rating < 6 && changes < changeLimit && rand(3) == 0) {
					outputText("\n\nYou stumble as you feel the bones in your hips grinding, expanding your hips noticeably.");
					player.hips.rating += 1 + rand(3);
					changes++;
				}

				if (player.nippleLength > 1 && changes < changeLimit && rand(3) == 0) {
					outputText("\n\nWith a sudden pinch your [nipples] get smaller and smaller,"
					          +" stopping when they are roughly half their previous size");
					player.nippleLength /= 2;
				}

				if (player.hasVagina() && player.vaginas[0].vaginalWetness < 3 && changes < changeLimit && rand(4) == 0) {
					outputText("\n\nYour [cunt]'s internal walls feel a tingly wave of strange tightness which then transitions into a long"
					          +" stretching sensation, like you were made of putty. Experimentally, you slip a couple of fingers inside to find"
					          +" you've become looser and more pliable, ready to take those monster cocks. Or better yet, to lay eggs.");
					player.vaginas[0].vaginalWetness++
					changes++;
				}

				//Increase tone (up to 65)
				if (player.tone < 65 && rand(3) == 0) {
					outputText(player.modTone(65, 2));
				}

				//Decrease thickness (down to 35)
				if (player.thickness > 35 && rand(3) == 0) {
					outputText(player.modThickness(35, 5));
				}

				if (rand(5) == 0 && player.cockatriceScore() > 3) {
					mutations.updateOvipositionPerk(tfSource); // does all the magic, nuff said!
				}
			}

			if (player.isMale()) {
				//Breasts > B cup - decrease by 1 cup size
				if (player.biggestTitSize() > BreastCup.B && changes < changeLimit && rand(3) == 0) {
					for (i = 0; i < player.breastRows.length; i++) {
						if (player.breastRows[i].breastRating > BreastCup.B)
							player.breastRows[i].breastRating--;
					}
					outputText("\n\nYour breasts feel tight[if (hasArmor), your [armor] feeling looser around your chest]. You watch in shock as your"
					          +" breast flesh rapidly diminishes, shrinking into your chest. They finally stop when they reach [breastcup] size."
					          +" You feel a little lighter.");
					dynStats("spe", 1);
					changes++;
				}

				if (player.nippleLength > 1 && changes < changeLimit && rand(3) == 0) {
					outputText("\n\nWith a sudden pinch your [nipples] get smaller and smaller,"
					          +" stopping when they are roughly half their previous size");
					player.nippleLength /= 2;
				}

				//Hips > 10 - decrease hip size by 1-3 sizes
				if (player.hips.rating > 10 && changes < changeLimit && rand(3) == 0) {
					outputText("\n\nYou stumble a bit as the bones in your pelvis rearrange themselves painfully. Your hips have narrowed.");
					player.hips.rating -= 1 + rand(3);
					changes++;
				}

				//Hips < 2 - increase hip size by 1-3 sizes
				if (player.hips.rating < 2 && changes < changeLimit && rand(3) == 0) {
					outputText("\n\nYou stumble as you feel the bones in your hips grinding, expanding your hips noticeably.");
					player.hips.rating += 1 + rand(3);
					changes++;
				}

				//Increase tone (up to 70)
				if (player.tone < 70 && rand(3) == 0) {
					outputText(player.modTone(65, 2));
				}

				//Decrease thickness (down to 35)
				if (player.thickness > 35 && rand(3) == 0) {
					outputText(player.modThickness(35, 5));
				}
			}

			if (player.isMaleOrHerm()) {
				//Cock < 6 inches - increase by 1-2 inches
				if (player.shortestCockLength() < 6 && rand(3) == 0 && changes < changeLimit) {
					var increment:Number = player.increaseCock(player.shortestCockIndex(), 1 + rand(2));
					outputText("Your [if (cocks > 1)shortest] cock fills to its normal size, but doesn’t just stop there. Your cock feels incredibly"
					          +" tight as a few more inches of length seem to pour out from your crotch."
					          +" Your cock has gained "+ increment + " inches.");
					changes++;
				}

				//Shrink oversized cocks
				if (player.biggestCockLength() > 16 && rand(3) == 0 && changes < changeLimit) {
					var idx:int = player.biggestCockIndex();
						outputText("\n\nYou feel a tightness in your groin like someone tugging on your shaft from behind you. Once the sensation"
						          +" fades you check [if (hasLowerGarment)inside your [lowergarment]|your [multicock]] and see that your"
						          +" [if (cocks > 1)largest] [cock] has shrunk to a slightly shorter length.");
					player.cocks[idx].cockLength -= (rand(10) + 5) / 10;
					if (player.cocks[idx].cockThickness > 3) {
						outputText(" Your " + player.cockDescript(idx) + " definitely got a bit thinner as well.");
						player.cocks[idx].cockThickness -= (rand(4) + 1) / 10;
					}
					changes++;
				}

				//Cock thickness <2 - Increase cock thickness
				if (player.smallestCockArea() < 10 && rand(3) == 0 && changes < changeLimit) {
					outputText("[if (cocks > 1) One of your cocks|Your cock] feels swollen and heavy. With a firm, but gentle, squeeze, you confirm"
					          +" your suspicions. It is definitely thicker.");
					player.cocks[player.thinnestCockIndex()].thickenCock(1.5);
					changes++;
				}
			}

			//-Lizard dick - first one
			if (player.countCocksOfType(CockTypesEnum.LIZARD) == 0 && player.cockTotal() > 0 && changes < changeLimit && rand(4) == 0) {
				//Find the first non-lizzy dick
				for (i = 0; i < player.cocks.length; i++) {
					//Stop loopahn when dick be found
					if (player.cocks[i].cockType !== CockTypesEnum.LIZARD) break;
				}
				outputText("\n\nA slow tingle warms your groin.  Before it can progress any further, you yank back your [armor] to investigate."
				          +"  Your " + player.cockDescript(i) + " is changing!  It ripples loosely from [if (hasSheath)sheath|base] to tip,"
				          +" undulating and convulsing as its color lightens, darkens, and finally settles on a purplish hue."
				          +"  Your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " resolves itself into a bulbous form, with a slightly pointed tip."
				          +"  The 'bulbs' throughout its shape look like they would provide an interesting ride for your sexual partners,"
				          +" but the perverse, alien pecker ");
				if (player.cor < 33) outputText("horrifies you.");
				else if (player.cor < 66) outputText("is a little strange for your tastes.");
				else {
					outputText("looks like it might be more fun to receive than use on others.  ");
					if (player.hasVagina()) outputText("Maybe you could find someone else with one to ride?");
					else outputText("Maybe you should test it out on someone and ask them exactly how it feels?");
				}
				outputText("  You now have a bulbous, lizard-like cock.");
				//Actually xform it nau
				if (player.hasSheath()) {
					player.cocks[i].cockType = CockTypesEnum.LIZARD;
					if (!player.hasSheath())
						outputText("\n\nYour sheath tightens and starts to smooth out, revealing ever greater amounts of your "
						          + player.cockDescript(i) + "'s lower portions.  After a few moments"
						          +" your groin is no longer so animalistic – the sheath is gone.");
				}
				else player.cocks[i].cockType = CockTypesEnum.LIZARD;
				changes++;
				dynStats("lib", 3, "lus", 10);
			}
			//(CHANGE OTHER DICK)
			//Requires 1 lizard cock, multiple cocks
			if (player.cockTotal() > 1 && player.countCocksOfType(CockTypesEnum.LIZARD) > 0 && player.cockTotal() > player.countCocksOfType(CockTypesEnum.LIZARD) && rand(4) == 0 && changes < changeLimit) {
				outputText("\n\nA familiar tingle starts in your crotch, and before you can miss the show, you pull open your [armor]."
				          +"  As if operating on a cue, ");
				for (i = 0; i < player.cocks.length; i++) {
					//Stop loopahn when dick be found
					if (player.cocks[i].cockType !== CockTypesEnum.LIZARD) break;
				}
				if (player.cockTotal() == 2) outputText("your other dick");
				else outputText("another one of your dicks");
				outputText(" starts to change into the strange reptilian shape you've grown familiar with.  It warps visibly, trembling and radiating"
				          +" pleasurable feelings back to you as the transformation progresses.  ");
				if (player.cumQ() < 50) outputText("Pre-cum oozes from the tip");
				else if (player.cumQ() < 700) outputText("Thick pre-cum rains from the tip");
				else outputText("A wave of pre-cum splatters on the ground");
				outputText(" from the pleasure of the change.  In moments you have a bulbous, lizard-like cock.");
				//(REMOVE SHEATH IF NECESSARY)
				if (player.hasSheath()) {
					player.cocks[i].cockType = CockTypesEnum.LIZARD;
					if (!player.hasSheath())
						outputText("\n\nYour sheath tightens and starts to smooth out, revealing ever greater amounts of your "
						          + player.cockDescript(i) + "'s lower portions.  After a few moments"
						          +" your groin is no longer so animalistic – the sheath is gone.");
				}
				else player.cocks[i].cockType = CockTypesEnum.LIZARD;
				changes++;
				dynStats("lib", 3, "lus", 10);
			}

			//--Worms leave if 100% lizard dicks?
			//Require mammals?
			if (player.countCocksOfType(CockTypesEnum.LIZARD) == player.cockTotal() && changes < changeLimit && player.hasStatusEffect(StatusEffects.Infested)) {
				outputText("\n\nLike rats from a sinking ship, worms escape from your body in a steady stream.  Surprisingly, the sensation is"
				          +" remarkably pleasant, similar to the pleasure of sexual release in a way.  Though they seem inexhaustible, the tiny,"
				          +" cum-slimed invertebrates slow to a trickle.  The larger worm-kin inside you stirs as if disturbed from a nap, coming"
				          +" loose from whatever moorings it had attached itself to in the interior of your form.  It slowly works its way up your"
				          +" urethra, stretching to an almost painful degree with every lurching motion. Your dick bloats out around the base,"
				          +" stretched like the ovipositor on a bee-girl in order to handle the parasitic creature,"
				          +" but thankfully, the ordeal is a brief one.");
				if (player.balls > 1)
					outputText("  The remaining " + num2Text(player.balls - 1) + " slither out the pre-stretched holes with ease,"
					          +" though the last one hangs from your tip for a moment before dropping to the ground.");
				outputText("  The white creature joins its kin on the ground and slowly slithers away.  Perhaps they prefer mammals? In any event,"
				          +" you are no longer infected with worms.");
				player.removeStatusEffect(StatusEffects.Infested);
				changes++;
			}

			//Increase height up to 5ft 7in.
			if (player.tallness < 67 && changes < changeLimit && rand(5) == 0) {
				outputText("\n\nYou shift uncomfortably as you realize you feel off balance."
				          +" Gazing down, you realize you have grown SLIGHTLY taller.");
				player.tallness += rand(3) + 1;
				changes++;
			}

			//Decrease height down to a maximum of 6ft 8in.
			if (player.tallness > 80 && changes < changeLimit && rand(5) == 0) {
				outputText("\n\nYour skin crawls, making you close your eyes and shiver. When you open them again the world seems... different."
				          +" After a bit of investigation, you realize you've become shorter!");
				player.tallness -= rand(3) + 1;
				changes++;
			}

			//Physical changes:
			//Removes other antennae
			if (player.hasNonCockatriceAntennae() && rand(3) == 0 && changes < changeLimit) {
				mutations.removeAntennae();
			}
			//Gain antennae like feathers
			if (player.antennae.type == Antennae.NONE && player.face.type == Face.COCKATRICE && player.ears.type == Ears.COCKATRICE && rand(3) == 0 && changes < changeLimit) {
				// Other antennae types are handled above! (Stadler76)
				outputText("\n\nYour forehead suddenly itches, making you run your fingers through your hairline as you try to scratch. Under your"
				          +" roving fingertips you feel your pores stretch as the shaft of one of your feathers gets thicker and sturdier. A sudden"
				          +" pressure builds and then fades, making you groan as you hold your head tight. You tentatively run your fingers over the"
				          +" two spots where the feeling originated, only to feel the body of a long, soft and extravagant quill like feather on each"
				          +" side. While sturdy enough to support themselves these " + player.hair.color + " feathers flop daintily as you move."
				          +" They seem to move with your eyebrows, helping convey your expressions.");
				outputText("\nYou’ve got antennae like eyebrow feathers!");
				player.antennae.type = Antennae.COCKATRICE;
				changes++;
			}
			//Removes horns
			if (changes < changeLimit && (player.horns.type != Horns.NONE || player.horns.value != 0) && rand(5) == 0) {
				outputText("\n\nYour ");
				if (player.horns.type == Horns.UNICORN || player.horns.type == Horns.RHINO) outputText("horn");
				else outputText("horns");
				outputText(" crumble, falling apart in large chunks until they flake away to nothing.");
				player.horns.value = 0;
				player.horns.type = Horns.NONE;
				changes++;
			}

			//Face TF
			if (mutations.tfNoFur() && player.face.type != Face.COCKATRICE && player.arms.type == Arms.COCKATRICE && player.lowerBody.type == LowerBody.COCKATRICE && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nYour head is suddenly wracked with pain. You throw back your head and scream in agony as you feel your skull’s"
				          +" structure shifting, reforming into something... different. Your lower face elongates, your nose and lips fusing into the"
				          +" new upper half of your mouth while your jaw soon catches it up as they both harden. Your larger upper lip curves over"
				          +" your lower, ending in a pointed tip as it changes colour to a shade of yellow. Small feathers rapidly sprout from your"
				          +" skin, covering it in " + (player.hasCockatriceSkin() ? player.skin.furColor : player.hair.color) + " feathers. Once your face"
				          +" stops it’s rapid transformation you run your hands over your face. You have a beak like muzzle,"
				          +" though instead of sharp edges, the lips are firm and rubbery, allowing you the same amount of facial expression as"
				          +" before while being solid enough to crack open seeds and nuts like that of a bird.");
				outputText("\nYou have a cockatrice face!");
				player.face.type = Face.COCKATRICE;
				changes++;
			}
			//Hair TF
			if (player.hair.type != Hair.FEATHER && changes < changeLimit && rand(4) == 0) {
				outputText("\n\nA tingling starts in your scalp, getting worse and worse until you're itching like mad, the feathery strands of your"
				          +" hair tickling your fingertips while you scratch like a dog itching a flea. When you pull back your hand, you're treated"
				          +" to the sight of downy fluff trailing from your [claws]. A realization dawns on you - you have feathers for hair,"
				          +" just like a harpy!");
				player.hair.type = Hair.FEATHER;
				changes++;
			}
			//Eye TF
			if (player.eyes.type != Eyes.COCKATRICE && player.face.type == Face.COCKATRICE && player.underBody.type == UnderBody.COCKATRICE && player.ears.type == Ears.COCKATRICE && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nYour eyes suddenly burn, tears streaming down your cheeks. Your irises grow, taking up your entire eye as a spiderweb"
				          +" of light blue crawls across your now vibrant blue eyes, looking like lightning strikes. Your pupils rapidly grow to"
				          +" match, elongating into slit like shapes, similar to that of a feline. When your eyes stop watering you finally get a"
				          +" look at yourself. Your eyes are now the same as that of the cockatrice you met in the mountains! Your excitement over"
				          +" this causes your pupils to widen into large circles, giving you a cute and excited look. Seems you won’t be able to have"
				          +" much of a poker face anymore.");
				outputText("\nYou now have cockatrice eyes!");
				player.eyes.type = Eyes.COCKATRICE;
				player.eyes.count = 2;
			}
			//Lizard tongue TF
			if (player.tongue.type != Tongue.LIZARD && player.face.type == Face.COCKATRICE && changes < changeLimit && rand(3) == 0) {
				mutations.gainLizardTongue();
			}
			//Ears TF
			if (player.ears.type != Ears.COCKATRICE && player.face.type == Face.COCKATRICE && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nA prickling sensation suddenly fills your ears; unpleasant, but hardly painful. It grows and grows until you can't"
				          +" stand it any more, and reach up to scratch at them. To your surprise, you find them melting away like overheated"
				          +" candles. You panic as they fade into nothingness, leaving you momentarily deaf and dazed, stumbling around in confusion."
				          +" Then, all of a sudden, hearing returns to you.  Gratefully investigating, you find you now have a pair of avian"
				          +" ear-holes, one on either side of your head. A sudden pain strikes your temples, and you feel long feathers sprout from"
				          +" the side you your head, the longest being vertical while the 3 shorter ones come out at a 1 o'clock, 2 o'clock and"
				          +" 3 o'clock angle. With a little patience, you begin to adjust these feathers just like ears to aid your hearing.");
				outputText("\nYou now have cockatrice ears!");
				player.ears.type = Ears.COCKATRICE;
				changes++;
			}
			//Arm TF
			if (player.arms.type != Arms.COCKATRICE && changes < changeLimit && rand(4) == 0) {
				outputText("\n\nPrickling discomfort suddenly erupts all over your body, like every last inch of your skin has suddenly developed"
				          +" pins and needles. You scratch yourself, hoping for relief; but soon notice lumps forming under the skin as your lower"
				          +" arm begins to shed. A coat of " + (player.hasCockatriceSkin() ? player.skin.furColor : player.hair.color) + " feathers sprouts"
				          +" from your skin, covering your upper arm and shoulder entirely, ending at your elbow in a fluffy cuff."
				          +" A few long feathers decorate your elbows like vestigial wings. Your lower arm however as grown a layer thick leathery"
				          +" scales and dangerous looking talons tip your fingers. As suddenly as the itching came it fades, leaving you to marvel"
				          +" over your new arms.");
				outputText("\nYou now have cockatrice arms!");
				player.arms.setType(Arms.COCKATRICE, Claws.COCKATRICE);
				changes++;
			}
			//Neck loss, if not cockatrice neck
			if (player.neck.type != Neck.COCKATRICE && changes < changeLimit && rand(4) == 0)
				mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.rearBody.type != RearBody.NONE && changes < changeLimit && rand(5) == 0) mutations.restoreRearBody(tfSource);
			//Body TF
			if (!player.hasCockatriceSkin() && player.face.type == Face.COCKATRICE && changes < changeLimit && rand(3) == 0) {
				mutations.restoreNeck(tfSource + "-forceRestoreNeck");
				var colorChoice:Array = mutations.newCockatriceColors();
				outputText("\n\nYour body feels hot and your skin feels tight, making you fall to your knees in a bout of lightheadedness."
				          +" You kneel there panting as the pressure increases, sweat dripping from your brow. You don’t know how long you can take"
				          +" this and soon you drift into unconsciousness.");
				outputText("\nWhen you awaken you check yourself to see what has changed now that the overwhelming pressure has left your body."
				          +" The first thing you notice is feathers, lots and lots of feathers that now cover your body in a downy layer."
				          +" Around your neck a ruff of soft fluffy feathers has formed like that of an exotic bird. As you look down to your [chest]"
				          +" you see that from your chest to your groin you are covered in a layer of " + colorChoice[2] + " scales.");
				outputText("\nYour body is now covered in scales and feathers!");

				player.skin.setAllProps({
					type:     Skin.LIZARD_SCALES,
					furColor: colorChoice[0], // Primary feather color
					tone:     colorChoice[2],
					desc:     "scales"
				});
				player.underBody.setAllProps({
					type: UnderBody.COCKATRICE,
					skin: {
						type:     Skin.FEATHERED,
						furColor: colorChoice[1], // Secondary feather color
						tone:     colorChoice[2],
						desc:     "feathers"
					}
				});
				player.neck.setAllProps({
					type: Neck.COCKATRICE,
					color: colorChoice[1]
				});
				changes++;
			}
			//Neck TF, if not already TFed from Body TF above
			if (player.neck.type != Neck.COCKATRICE && player.hasCockatriceSkin() && player.face.type == Face.COCKATRICE && changes < changeLimit && rand(3) == 0) {
				mutations.restoreNeck(tfSource);
				outputText("\n\nYour neck starts to tingle and [secondary furcolor] feathers begin to grow out of it one after another until a ruff"
				          +" of soft fluffy feathers has formed like that of an exotic bird.");
				outputText("\nYou now have a cockatrice neck!");
				player.neck.setAllProps({
					type: Neck.COCKATRICE,
					color: colorChoice[1]
				});
				changes++;
			}
			//Leg TF
			if (player.lowerBody.type != LowerBody.COCKATRICE && changes < changeLimit && rand(4) == 0) {
				outputText("\n\nYou scream in agony as you feel the bones in your feet suddenly break and restructure themselves,"
				          +" becoming digitigrade. These strange new legs have three-toed, clawed feet, complete with a small vestigial claw-toe on"
				          +" the back for added grip, yet from hip to knee are covered with a layer of "
				          + (player.hasCockatriceSkin() ? player.skin.furColor : player.hair.color) + " feathers that end in a cuff.");
				outputText("\nYou have cockatrice legs!");
				player.lowerBody.type = LowerBody.COCKATRICE;
				player.lowerBody.legCount = 2;
				changes++;
			}
			//Tail TF
			if (player.tail.type != Tail.COCKATRICE && changes < changeLimit && rand(4) == 0) {
				outputText("\n\nA sudden dull, throbbing pain in your [butt] forces your hands to it; you can feel an ominous lump over your tail"
				          +" bone, swelling bigger and bigger with every heartbeat.  All of a sudden, it seems to explode, jutting out and around"
				          +" until it hovers near your ankles. The skin beneath your fingers is covered in feathers but terminates about an inch"
				          +" later in a 'v'shape, giving way to " + player.skin.tone + " scales.");
				outputText("\nYou now have a cockatrice tail!");
				player.tail.type = Tail.COCKATRICE;
				player.tail.recharge = 5;
				player.tail.venom = 0;
				changes++;
			}
			//Wings TF
			if (player.wings.type != Wings.FEATHERED_LARGE && player.arms.type == Arms.COCKATRICE && changes < changeLimit && rand(4) == 0) {
				outputText("\n");
				if (player.wings.type != Wings.NONE) {
					outputText("\nSensation fades from your [wings] slowly but surely, leaving them dried out husks that break off to fall on the"
					          +" ground. Your back closes up to conceal the loss, as smooth and unbroken as the day you entered the portal.");
				}
				player.wings.setProps({
					type:  Wings.FEATHERED_LARGE,
					color: player.isFluffy() || player.hasCockatriceSkin() ? player.skin.furColor : player.hair.color
				});
				outputText("\nPain lances through your back, the muscles knotting oddly and pressing up to bulge your skin. It hurts, oh gods does"
				          +" it hurt, but you can’t get a good angle to feel at the source of your agony. A loud crack splits the air, and then your"
				          +" body is forcing a pair of narrow limbs through a gap in your comfortable clothes. Blood pumps through the new"
				          +" appendages, easing the pain as they fill out and grow. Tentatively, you find yourself flexing muscles you didn’t know"
				          +" you had, and you’re able to curve the new growths far enough around to behold your brand new, "
				          + player.wings.color + " wings.");
				changes++;
			}

			//FAILSAFE CHANGE
			if (changes == 0) {
				outputText("\n\nInhuman vitality spreads through your body, invigorating you!\n");
				player.HPChange(50, true);
				dynStats("lus", 3);
			}

			player.refillHunger(20);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}
}


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

	/**
	 * Nuts for berries.
	 */
	public class TrailMix extends Consumable
	{
		private static const ITEM_VALUE:int = 20;
		public function TrailMix()
		{
			super("TrailMx", "Trail Mix", "a pack of trail mix", ITEM_VALUE, "This mix of nuts, dried fruits and berries is lightweight, easy to store and very nutritious.");
		}

		override public function useItem():Boolean
		{
			outputText("You eat the trail mix. You got energy boost from it!");
			player.refillHunger(30);
			player.changeFatigue(-20);
			player.HPChange(Math.round(player.maxHP() * 0.1), true);

			return false;
		}
	}
}