code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.CockTypesEnum;
	import classes.GlobalFlags.kFLAGS;
	import classes.Items.Consumable;
	import classes.PerkLib;
	import classes.StatusEffects;
	import classes.lists.BreastCup;
	import classes.lists.ColorLists;

	/**
	 * @since  30.11.2017
	 * @author Coalsack
	 * @author Stadler76
	 */
	public class RedRiverRoot extends Consumable
	{
		public function RedRiverRoot()
		{
			super(
				"RdRRoot",
				"R.R.Root",
				"a red river root",
				14,
				"A long, odd shaped root. It smells spicy but surprisingly tasty. Eating it would supposedly alter your body in unknown ways."
			);
		}

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

			clearOutput();
			outputText("Having bought that odd-looking root on the bakery, you give it a try, only to face the mildly spicy taste"
			          +" of the transformative. Still, it has a rich flavour and texture, but soon that becomes secondary,"
			          +" as you realize that the foreign rhizome is changing your body!");

			if (player.spe < player.ngPlus(100) && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nAfter a momentaneous dizziness, you recover your stance,"
				          +" and find your muscles becoming more nimble and prompt to run.");
				//+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);
			}

			// ------------- Sexual changes -------------
			//-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.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.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.");
					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 (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 -> Red Panda Cock
				if (player.hasCock() && player.cocks[0].cockType !== CockTypesEnum.RED_PANDA && rand(3) === 0 && changes < changeLimit) {
					outputText("\n\nThe skin surrounding your penis folds, encapsulating it and turning itself into a protective sheath."
					          +" You now have a red-panda cock!");
					player.cocks[0].cockType = CockTypesEnum.RED_PANDA;
					changes++;
				}
				//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++;
				}
			}

			//Remove additional cocks
			if (player.cocks.length > 1 && rand(3) === 0 && changes < changeLimit) {
				player.removeCock(1, 1);
				outputText("\n\nYou have a strange feeling as your crotch tingles.  Opening your [armor],"
				          +" you realize that one of your cocks have vanished completely!");
				changes++;
			}

			//Remove additional balls/remove uniball
			if ((player.balls > 0 || player.hasStatusEffect(StatusEffects.Uniball)) && rand(3) === 0 && changes < changeLimit) {
				if (player.ballSize > 2) {
					if (player.ballSize > 5) player.ballSize -= 1 + rand(3);
					player.ballSize -= 1;
					outputText("\n\nYour scrotum slowly shrinks, settling down at a smaller size. Your " + player.ballsDescriptLight() + " ");
					if (player.balls === 1 || player.hasStatusEffect(StatusEffects.Uniball)) outputText("is smaller now.");
					else outputText("are smaller now.");
					changes++;
				}
				else if (player.balls > 2) {
					player.balls = 2;
					//I have no idea if Uniball status effect sets balls to 1 or not so here's a just in case.
					if (player.hasStatusEffect(StatusEffects.Uniball)) player.removeStatusEffect(StatusEffects.Uniball);
					outputText("\n\nYour scrotum slowly shrinks until they seem to have reached a normal size. You can feel as if your extra balls fused together, leaving you with a pair of balls.");
					changes++;
				}
				else if (player.balls === 1 || player.hasStatusEffect(StatusEffects.Uniball)) {
					player.balls = 2;
					if (player.hasStatusEffect(StatusEffects.Uniball)) player.removeStatusEffect(StatusEffects.Uniball);
					outputText("\n\nYour scrotum slowly shrinks, and you feel a great pressure release in your groin. Your uniball has split apart, leaving you with a pair of balls.");
					changes++;
				}
			}

			//Ovi perk loss
			if (rand(5) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}

			// ------------- Physical changes -------------
			// Ears
			if (player.ears.type !== Ears.RED_PANDA && changes < changeLimit && rand(3) === 0) {
				outputText("\n\n[if (bakeryTalkedRoot)The warned dizziness|A sudden dizziness] seems to overcome your head. Your ears tingle,"
				          +" and you’re sure you can feel the flesh on them shifting, as you gradually have trouble hearing. A couple of minutes"
				          +" later the feeling stops. Curious of what has changed you go to check yourself on the stream, only to find"
				          +" that they’ve changed into cute, triangular ears, covered with white fur. You’ve got red-panda ears!");
				player.ears.type = Ears.RED_PANDA;
				changes++;
			}

			// Remove non-cockatrice antennae
			if (player.hasNonCockatriceAntennae() && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nThe pair of antennae atop your head start losing the ability of ‘feel’ your surroundings as the root takes"
				          +" effect on them. Soon they recede on your head, and in a matter of seconds, it looks like they never were there.");
				player.antennae.type = Antennae.NONE;
				changes++;
			}

			// Restore eyes, if more than two
			if (player.eyes.count > 2 && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nYou lose your vision for a moment, staying where you are to prevent tripping and hurting yourself. Thankfully,"
				          +" your sight returns shortly after, only that something feels... different. After checking your visage, you notice that"
				          +" you now have the normal set of two human-looking eyes!");
				player.eyes.restore();
				changes++;
			}

			// Hair
			// store current states first
			var hasPandaHairColor:Boolean = ColorLists.RED_PANDA_HAIR.indexOf(player.hair.color) !== -1;
			var hasNormalHair:Boolean = player.hair.type === Hair.NORMAL;
			var oldHairType:Number = player.hair.type;
			if ((!hasNormalHair || player.hair.length === 0 || !hasPandaHairColor) && changes < changeLimit && rand(3) === 0) {
				player.hair.type = Hair.NORMAL;
				if (!hasPandaHairColor)
					player.hair.color = randomChoice(ColorLists.RED_PANDA_HAIR);

				if (player.hair.length === 0) { // player is bald
					player.hair.length = 1;
					outputText("\n\nThe familiar sensation of hair returns to your head. After looking yourself on the stream, you confirm that your"
					          +" once bald head now has normal, short [hairColor] hair.");
				} else if (hasNormalHair && !hasPandaHairColor) { // 'wrong' hair color
					outputText("\n\nA mild tingling on your scalp makes your check yourself on the stream. Seems like the root is changing"
					          +" your hair this time, turning it into [hair].");
				} else { // player.hair.type !== Hair.NORMAL
					switch (oldHairType) {
						case Hair.FEATHER:
							outputText("\n\nShortly after their taste fades, the roots seem to have effect. Your scalp itches and as you scratch you"
							          +" see your feathered hair begin to shed, downy feathers falling from your head until you are bald."
							          +" Alarmed by this sudden change you quickly go to examine yourself in the nearby river, relief soon washing"
							          +" over you as new [hairColor] hair begins to rapidly grow. You now have [hair]!");
							break;

						/* [INTERMOD: xianxia]
						case Hair.GORGON:
							player.hair.length = 1;
							outputText("\n\nAs you finish the root, the scaled critters on your head shake wildly in displeasure. Then, a sudden heat"
							          +" envelopes your scalp. The transformative effects of your spicy meal make themselves notorious, as the"
							          +" writhing mess of snakes start hissing uncontrollably. Many of them go rigid, any kind of life that they"
							          +" could had taken away by the root effects. Soon all the snakes that made your hair are limp and lifeless.");
							outputText("\n\nTheir dead bodies are separated from you head by a scorching sensation, and start falling to the ground,"
							          +" turning to dust in a matter of seconds. Examining your head on the stream, you realize that you have"
							          +" a normal, healthy scalp, though devoid of any kind of hair.");
							outputText("\n\nThe effects don’t end here, though as the familiar sensation of hair returns to your head a moment later."
							          +" After looking yourself on the stream again, you confirm that"
							          +" your once bald head now has normal, short [hairColor] hair.");
							break;
						*/

						case Hair.GOO:
							player.hair.length = 1;
							outputText("\n\nAfter having consumed the root, a lock of gooey hair falls over your forehead. When you try to"
							          +" examine it, the bunch of goo falls to the ground and evaporates. As you tilt your head to see what happened,"
							          +" more and more patches of goo start falling from your head, disappearing on the ground with the same speed."
							          +" Soon, your scalp is devoid of any kind of goo, albeit entirely bald.");
							outputText("\n\nNot for long, it seems, as the familiar sensation of hair returns to your head a moment later."
							          +" After looking yourself on the stream, you confirm that"
							          +" your once bald head now has normal, short [hairColor] hair.");
							break;

						default:
							outputText("\n\nA mild tingling on your scalp makes your check yourself on the stream. Seems like the root is changing"
							          +" your hair this time, turning it into [hair].");
					}
				}
				flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] = 0;
				changes++;
			}

			// Face
			if (mutations.tfNoFur() && player.face.type !== Face.RED_PANDA && player.ears.type === Ears.RED_PANDA && player.hasFur() && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nNumbness comes to your cheekbones and jaw, while the rest of your head is overwhelmed by a tingling sensation."
				          +" Every muscle on your face tenses and shifts, while the bones and tissue rearrange, radically changing the shape"
				          +" of your head. You have troubles breathing as the changes reach your nose, but you manage to see as it changes into an"
				          +" animalistic muzzle. You jaw joins it and your teeth sharpen a little, not to the point of being true menacing,"
				          +" but gaining unequivocally the shape of those belonging on a little carnivore.");
				outputText("\n\nOnce you’re face and jaw has reshaped, fur covers the whole of your head. The soft sensation is quite pleasant."
				          +" It has a russet-red coloration, that turns to white on your muzzle and cheeks."
				          +" Small, rounded patches of white cover the area where your eyebrows were. You now have a red-panda head!");
				player.face.type = Face.RED_PANDA;
				changes++;
			}

			// Arms
			if (player.arms.type !== Arms.RED_PANDA && player.ears.type === Ears.RED_PANDA && player.tail.type === Tail.RED_PANDA && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nWeakness overcomes your arms, and no matter what you do, you can’t muster the strength to raise or move them."
				          +" Sighing you attribute this to the consumption of that strange root. Sitting on the ground, you wait for the limpness to"
				          +" end. As you do so, you realize that the bones at your hands are changing, as well as the muscles on your arms."
				          +" They’re soon covered, from the shoulders to the tip of your digits, on a layer of soft, fluffy black-brown fur."
				          +" Your hands gain pink, padded paws where your palms were once, and your nails become short claws,"
				          +" not sharp enough to tear flesh, but nimble enough to make climbing and exploring much easier."
				          +" Your arms have become like those of  a red-panda!");
				player.arms.setType(Arms.RED_PANDA, Claws.RED_PANDA);
			}

			// Legs
			if (player.lowerBody.type !== LowerBody.RED_PANDA && player.arms.type === Arms.RED_PANDA && changes < changeLimit && rand(4) === 0) {
				if (player.isTaur()) {
					outputText("\n\nYou legs tremble, forcing you to lie on the ground, as they don't seems to answer you anymore."
					          +" A burning sensation in them is the last thing you remember before briefly blacking out. When it subsides and you"
					          +" finally awaken, you look at them again, only to see that you’ve left with a single set of digitigrade legs,"
					          +" and a much more humanoid backside. Soon enough, the feeling returns to your reformed legs, only to come with an"
					          +" itching sensation. A thick black-brown coat of fur sprouts from them. It’s soft and fluffy to the touch."
					          +" Cute pink paw pads complete the transformation. Seems like you’ve gained a set of red-panda paws!");
				} else if (player.isNaga()) {
					outputText("\n\nA strange feeling in your tail makes you have to lay on the ground. Then, the feeling becomes stronger, as you"
					          +" feel an increasing pain in the middle of your coils. You gaze at them for a second, only to realize that they’re"
					          +" dividing! In a matter of seconds, they’ve reformed into a more traditional set of legs, with the peculiarity being"
					          +" that they’re fully digitigrade in shape. Soon, every scale on them falls off to leave soft [skin] behind."
					          +" That doesn’t last long, because soon a thick coat of black-brown fur covers them. It feels soft and fluffy to the"
					          +" touch. Cute pink paw pads complete the transformation. Seems like you’ve gained a set of red-panda paws!");
				} else if (player.isGoo()) {
					outputText("\n\nThe blob that forms your lower body becomes suddenly rigid under the rhizome effects, forcing you to stay still"
					          +" until the transformation ends. Amazingly, what was once goo turns into flesh and skill in mere seconds, thus leaving"
					          +" you with a very human-like set of legs and feet.");
					outputText("\n\nIt doesn’t stop here as a feeling of unease forces you to sit on a nearby rock, as you feel something within your"
					          +" newly regained feet is changing. Numbness overcomes them, as muscles and bones change, softly shifting,"
					          +" melding and rearranging themselves. For a second you feel that they’re becoming goo again, but after a couple of"
					          +" minutes, they leave you with a set of digitigrade legs with pink pawpads, ending in short black claws and covered"
					          +" in a thick layer of black-brown fur. It feels quite soft and fluffy. You’ve gained a set of red-panda paws!");
				} else {
					outputText("\n\nA feeling of unease forces your to sit on a nearby rock, as you feel something within your [feet] is changing."
					          +" Numbness overcomes them, as muscles and bones change, softly shifting, melding and rearranging themselves."
					          +" After a couple of minutes, they leave you with a set of digitigrade legs with pink pawpads,"
					          +" ending in short black claws and covered in a thick layer of black-brown fur. It feels quite soft and fluffy."
					          +" You’ve gained a set of red-panda paws!");
				}
				player.lowerBody.type = LowerBody.RED_PANDA;
				player.lowerBody.legCount = 2;
				changes++;
			}

			// Tail
			if (player.tail.type !== Tail.RED_PANDA && changes < changeLimit && rand(4) === 0) {
				if (player.hasMultiTails()) {
					outputText("\n\nYour tails seem to move on their own, tangling together in a single mass. Before you can ever feel it happening,"
					          +" you realize that they’re merging! An increased sensation of heat, not unlike the flavor of the roots,"
					          +" rushes through your body, and once that it fades, you realize that you now have a single tail.");
					outputText("\n\nThe process doesn’t stop here though, as the feel of that spicy root returns, but now the heat is felt only in"
					          +" your tail, as it shakes wildly while it elongates and becomes more bushy. Soon it has become almost as long as you."
					          +" A very thick mass of soft, fluffy furs covers it in a matter of seconds. It acquires a lovely ringed pattern of"
					          +" red-russet and copperish-orange.");
					outputText("\n\nWhen the effects finally subside, you decide to test the tail, making it coil around your body,"
					          +" realizing soon that you can control its movements with ease, and that its fur feels wonderful to the touch."
					          +" Anyways, you now have a long, bushy, red-panda tail!");
				} else if (player.tail.type === Tail.NONE) {
					outputText("\n\nFeeling an uncomfortable sensation on your butt, you stretch yourself, attributing it to having sat on a"
					          +" rough surface. A burning sensation runs through your body, similar to the one that you had after eating the root."
					          +" When it migrates to your back, your attention goes to a mass of fluff that has erupted from your backside."
					          +" Before you can check it properly, it seems to move on its own, following the heated sensation that now pulsates"
					          +" through your body, and when the heated pulses  seem to have stopped, it has become a long, fluffy tube");
					outputText("\n\nShortly after, the feel of that spicy root returns, but now the heat is felt only in your tail,"
					          +" which shakes wildly while it elongates and becomes more bushy. Soon it has become almost as long as you."
					          +" A very thick mass of soft, fluffy furs covers it in a matter of seconds. It acquires a lovely ringed pattern"
					          +" of red-russet and copperish-orange.");
					outputText("\n\nWhen the effects finally subside, you decide to test the tail, making it coil around your body,"
					          +" realizing soon that you can control its movements with ease, and that its fur feels wonderful at the touch."
					          +" Anyways, you now have a long, bushy, red-panda tail!");
				} else if ([Tail.BEE_ABDOMEN, Tail.SPIDER_ABDOMEN].indexOf(player.tail.type) !== -1) {
					outputText("\n\nYour insectile backside seems affected by the root properties, as your venom production suddenly stops."
					          +" The flesh within the abdomen retracts into your backside, the chiting covering falling, leaving exposed a layer"
					          +" of soft, bare skin. When the abdomen disappears, your left with a comically sized butt,"
					          +" that soon reverts to its usual size.");
					outputText("\n\nThe root keeps doing its thing, as you feel an uncomfortable sensation on your butt. A burning sensation runs"
					          +" through your body, similar to the one that you had after eating the root. When it migrates to your back,"
					          +" your attention goes to a mass of fluff that has erupted from your backside. Before you can check it properly,"
					          +" it seems to move on its own, following the heated sensation that now pulsates through your body,"
					          +" and when the heated pulses  seem to have stopped, it has become a long, fluffy tube,"
					          +" quite different from your former abdomen.");
					outputText("\n\nShortly after, the feel of that spicy root returns, but now the heat is felt only in your tail,"
					          +" which shakes wildly while it elongates and becomes more bushy. Soon it has become almost as long as you."
					          +" A very thick mass of soft, fluffy furs covers it in a matter of seconds."
					          +" It acquires a lovely ringed pattern of red-russet and copperish-orange.");
					outputText("\n\nWhen the effects finally subside, you decide to test the tail, making it coil around your body,"
					          +" realizing soon that you can control its movements with ease, and that its fur feels wonderful at the touch."
					          +" Anyways, you now have a long, bushy, red-panda tail!");
				} else {
					outputText("\n\nThe feel of that spicy root returns, but now the heat is felt on your tail, that shakes wildly while it elongates"
					          +" and becomes more bushy. Soon it has become almost as long as you. A very thick mass of soft, fluffy furs covers it"
					          +" in a matter of seconds. It acquires a lovely ringed pattern of red-russet and copperish-orange.");
					outputText("\n\nWhen the effects finally subside, you decide to test the tail, making it coil around your body,"
					          +" realizing soon that you can control their moves with easy, and that its fur feels wonderful at the touch."
					          +" Anyways, you now have a long, bushy, red-panda tail!");
				}
				player.tail.setAllProps({type: Tail.RED_PANDA});
				changes++;
			}

			// SKin
			function setFurrySkin():void
			{
				player.skin.type = Skin.FUR;
				player.skin.adj = "";
				player.skin.desc = "fur";
				player.skin.furColor = "russet";
				player.underBody.type = UnderBody.FURRY;
				player.copySkinToUnderBody({furColor: "black"});
				changes++;
			}

			// Fix the underBody, if the skin is already furred
			if (player.skin.type === Skin.FUR && player.underBody.type !== UnderBody.FURRY && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nLooks, like the root has changed your fur colors."
				          +" You’re now covered from head to toe with russet-red fur with black fur on your underside!");
				setFurrySkin();
			}

			if (mutations.tfNoFur() && player.skin.type !== Skin.FUR && player.arms.type === Arms.RED_PANDA && player.lowerBody.type === LowerBody.RED_PANDA && changes < changeLimit && rand(4) === 0) {
				if (player.hasPlainSkin()) {
					if (["latex", "rubber"].indexOf(player.skin.adj) === -1) {
						outputText("\n\nYou start to scratch your [skin], as an uncomfortable itching overcomes you. It’s quite annoying,"
						          +" like the aftermath of being bitten by a bug, only that it’s all over at the same time.");
					} else { // if rubbery
						outputText("\n\nYour usually oily and rubbery skin suddenly feels a bit dry. Thinking that maybe the reason could be the dry"
						          +" weather in the wastelands, you rush to the stream, washing your skin in the refreshing water.");
						outputText("\n\nIt has the opposite effect of the one you intended, and you watch as a layer of [skinTone] colored goopy"
						          +" rubber falls from your arm. Soon all the rubber on your arm melts off, leaving behind a layer of healthy,"
						          +" normal skin. The process continues over the rest of your body, and before you can react your body is covered"
						          +" in a layer of fresh new [skinTone] skin, the odd sensation fading.");
						outputText("\n\nNot for long however, as an uncomfortable itching overcomes you. It’s quite annoying, like the aftermath"
						          +" of being bitten for a bug, only all over your body at the same time.");
					}
				}

				if (player.hasScales()) {
					outputText("\n\nThe layer of scales covering your body feels weird for a second, almost looking like they’re moving on they own,"
					          +" and that is when you realize that they changing!");
					outputText("\n\nThe feeling is quite odd, a bit of an itching from the place where they join your skin, that quickly becomes more"
					          +" intense as their transformation advances. Then a bunch of [skinTone] scales  fall from your arm. Soon all the scales"
					          +" on your arm fall off, leaving behind a layer of healthy, normal skin. The process continues overs the rest of"
					          +" your body, and before long you are covered in a layer of [skinTone] skin.");
					outputText("\n\nNot for long though, as an uncomfortable itching overcomes you. It’s quite annoying, like the aftermath of being"
					          +" bitten for a bug, only all over your body at the same time.");
				}

				if (player.hasGooSkin()) {
					outputText("\n\nYour usually wet and gooey skin suddenly a bit dry. Thinking that maybe the reason could be the dry weather"
					          +" in the wastelands, you rush to the stream, washing your skin on the refreshing water.");
					outputText("\n\nIt has the opposite effect of the one you intended, and you watch as a layer of [skinTone] colored slime falls"
					          +" from your arm. Alarmed, you try to put it back, but to no avail. Soon all the goo on your arm slides offleaving"
					          +" behind a layer of healthy, normal skin. The process continues over the rest of your body, and before you can react"
					          +" your body is covered in a layer of fresh new [skinTone] skin, the odd sensation fading as your core is expelled"
					          +" from your now perfectly solid body.");
					outputText("\n\nThis doesn’t last long though, as an uncomfortable itching overcomes you. It’s quite annoying,"
					          +" like the aftermath of being bitten for a bug, only all over your body  at the same time.");
				}

				outputText("\n\nSoon you realize that the sensation is coming from under your skin. After rubbing one of your arms in annoyance,"
				          +" you feel something different, and when you lay your eyes on it, you realize that a patch of fur is growing over"
				          +" your skin. Then you spot similar patches over your legs, chest and back. Fur grows over your body,"
				          +" patches joining and closing over your skin, and in a matter of seconds, your entire body is covered with"
				          +" a lovely coat of thick fur. The soft and fluffy sensation is quite pleasant to the touch.");
				outputText("\nSeems like you’re now covered from head to toe with russet-red fur with black fur on your underside!");
				setFurrySkin();
			}

			//FAILSAFE CHANGE
			if (changes === 0) {
				if (rand(100) === 0) {
					outputText("\n\nSeems like nothing else happened. Maybe the root lost its effect?");
				} else {
					outputText("\n\nDespite how spicy it was, the root was nevertheless nutritious, as you can confirm by feeling how your body feels"
					          +" now much more invigorated.\n");
					player.HPChange(250, true);
					dynStats("lus", 3);
				}
			}

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


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

	public final class Reducto extends Consumable {

		public function Reducto() {
			super("Reducto", "Reducto", "a salve marked as 'Reducto'", 30, "This container full of paste can be used to shrink a body part down by a significant amount.");
		}

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

//		override public function hasSubMenu():Boolean { return true; } //Only GroPlus and Reducto use this.

		override public function useItem():Boolean {
			var rdtBalls:Function	= (player.balls > 0 && player.ballSize > 1 ? reductoBalls : null);
			var rdtBreasts:Function	= (player.breastRows.length > 0 && player.biggestTitSize() > 0 ? reductoBreasts : null);
			var rdtButt:Function	= (player.butt.rating > 1 ? reductoButt : null);
			var rdtClit:Function	= (player.vaginas.length > 0 && player.getClitLength() > 0.25 ? reductoClit : null);
			var rdtCock:Function	= (player.cockTotal() > 0 && player.biggestCockArea() > 6 ? reductoCock : null);
			var rdtHips:Function	= (player.hips.rating > 2 ? reductoHips : null);
			var rdtNipples:Function	= (player.nippleLength > 0.25 ? reductoNipples : null);
			var rdtHorns:Function	= (player.horns.value > 2 ? shrinkHorns : null);
			clearOutput();
			outputText("You ponder the paste in your hand and wonder what part of your body you would like to shrink.  What will you use it on?");
			menu();
			addButton(0, "Balls", rdtBalls);
			addButton(1, "Breasts", rdtBreasts);
			addButton(2, "Butt", rdtButt);
			addButton(3, "Clit", rdtClit);
			addButton(4, "Cock", rdtCock);
			addButton(5, "Hips", rdtHips);
			addButton(6, "Nipples", rdtNipples);
			addButton(7, "Horns", rdtHorns);
			addButton(14, "Nevermind", reductoCancel);
			return(true);
		}

		private function reductoBalls():void {
			clearOutput();
			outputText("You smear the foul-smelling paste onto your " + player.sackDescript() + ".  It feels cool at first but rapidly warms to an uncomfortable level of heat.\n\n");
			player.ballSize -= Utils.rand(4) + 2;
			if (player.ballSize < 1) player.ballSize = 1;
			outputText("You feel your scrotum shift, shrinking down along with your " + player.ballsDescriptLight() + ".  Within a few seconds the paste has been totally absorbed and the shrinking stops.");
			dynStats("lib", -2, "lus", -10);
			inventory.itemGoNext();
		}

		private function reductoBreasts():void {
			clearOutput();
			outputText("You smear the foul-smelling ointment all over your " + player.allBreastsDescript() + ", covering them entirely as the paste begins to get absorbed into your " + player.skin.desc + ".\n");
			player.shrinkTits(true);
			if (Utils.rand(2) == 0 && player.biggestTitSize() >= 1) {
				outputText("\nThe effects of the paste continue to manifest themselves, and your body begins to change again...");
				player.shrinkTits(true);
			}
			outputText("\nThe last of it wicks away into your skin, completing the changes.");
			dynStats("sen", -2, "lus", -5);
			inventory.itemGoNext();
		}

		private function reductoButt():void {
			clearOutput();
			outputText("You smear the foul-smelling paste onto your " + player.buttDescript() + ".  It feels cool at first but rapidly warms to an uncomfortable level of heat.\n\n");
			if (player.butt.rating >= 15) {
				player.butt.rating -= (3 + int(player.butt.rating / 3));
				outputText("Within seconds you feel noticeably lighter, and a quick glance shows your ass is significantly smaller.");
			}
			else if (player.butt.rating >= 10) {
				player.butt.rating -= 3;
				outputText("You feel much lighter as your " + player.buttDescript() + " jiggles slightly, adjusting to its smaller size.");
			}
			else {
				player.butt.rating -= Utils.rand(3) + 1;
				if (player.butt.rating < 1) player.butt.rating = 1;
				outputText("After a few seconds your " + player.buttDescript() + " has shrunk to a much smaller size!");
			}
			dynStats("lib", -2, "lus", -10);
			inventory.itemGoNext();
		}

		private function reductoClit():void {
			clearOutput();
			outputText("You carefully apply the paste to your " + player.clitDescript() + ", being very careful to avoid getting it on your " + player.vaginaDescript(0) + ".  It burns with heat as it begins to make its effects known...\n\n");
			player.setClitLength(player.getClitLength() / 1.7);
			//Set clitlength down to 2 digits in length
			player.setClitLength(int(player.getClitLength() * 100) / 100);
			outputText("Your " + player.clitDescript() + " shrinks rapidly, dwindling down to almost half its old size before it finishes absorbing the paste.");
			dynStats("sen", -2, "lus", -10);
			inventory.itemGoNext();
		}

		private function reductoCock():void {
			clearOutput();
			if (player.cocks[0].cockType == CockTypesEnum.BEE) {
				outputText("The gel produces an odd effect when you rub it into your " + player.cockDescript(0) + ".  It actually seems to calm the need that usually fills you.  In fact, as your " + player.cockDescript(0) + " shrinks, its skin tone changes to be more in line with yours and the bee hair that covered it falls out.  <b>You now have a human cock!</b>");
				player.cocks[0].cockType = CockTypesEnum.HUMAN;
			}
			else {
				outputText("You smear the repulsive smelling paste over your " + player.multiCockDescriptLight() + ".  It immediately begins to grow warm, almost uncomfortably so, as your " + player.multiCockDescriptLight() + " begins to shrink.\n\n");
				if (player.cocks.length == 1) {
					outputText("Your " + player.cockDescript(0) + " twitches as it shrinks, disappearing steadily into your " + (player.hasSheath() ? "sheath" : "crotch") + " until it has lost about a third of its old size.");
					player.cocks[0].cockLength *= 2 / 3;
					player.cocks[0].cockThickness *= 2 / 3;
				}
				else { //MULTI
					outputText("Your " + player.multiCockDescriptLight() + " twitch and shrink, each member steadily disappearing into your " + (player.hasSheath() ? "sheath" : "crotch") + " until they've lost about a third of their old size.");
					for (var i:int = 0; i < player.cocks.length; i++) {
						player.cocks[i].cockLength		*= 2 / 3;
						player.cocks[i].cockThickness	*= 2 / 3;
					}
				}
			}
			dynStats("sen", -2, "lus", -10);
			inventory.itemGoNext();
		}

		private function reductoHips():void {
			clearOutput();
			outputText("You smear the foul-smelling paste onto your [hips].  It feels cool at first but rapidly warms to an uncomfortable level of heat.\n\n");
			if (player.hips.rating >= 15) {
				player.hips.rating -= (3 + int(player.hips.rating / 3));
				outputText("Within seconds you feel noticeably lighter, and a quick glance at your hips shows they've gotten significantly narrower.");
			}
			else if (player.hips.rating >= 10) {
				player.hips.rating -= 3;
				outputText("You feel much lighter as your [hips] shift slightly, adjusting to their smaller size.");
			}
			else {
				player.hips.rating -= Utils.rand(3) + 1;
				if (player.hips.rating < 1) player.hips.rating = 1;
				outputText("After a few seconds your [hips] have shrunk to a much smaller size!");
			}
			dynStats("lib", -2, "lus", -10);
			inventory.itemGoNext();
		}

		private function reductoNipples():void {
			clearOutput();
			outputText("You rub the paste evenly over your " + player.nippleDescript(0) + "s, being sure to cover them completely.\n\n");
			//Shrink
			if (player.nippleLength / 2 < 0.25) {
				outputText("Your nipples continue to shrink down until they stop at 1/4\" long.");
				player.nippleLength = 0.25;
			}
			else {
				outputText("Your " + player.nippleDescript(0) + "s get smaller and smaller, stopping when they are roughly half their previous size.");
				player.nippleLength /= 2;
			}
			dynStats("sen", -5, "lus", -5);
			inventory.itemGoNext();
		}

		public function shrinkHorns():void {
			outputText("You doubt if the reducto is going to work but you apply the foul-smelling paste all over your horns anyways.\n\n");
			outputText("Incredibly, it works and you can feel your horns receding by an inch.")
			player.horns.value -= 1;
			inventory.itemGoNext();
		}

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

license: unknown


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.CockTypesEnum;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Items.Consumable;
	import classes.PerkLib;
	import classes.StatusEffects;
	import classes.lists.ColorLists;

	/**
	 * Human transformative item.
	 */
	public class RegularHummus extends Consumable
	{
		private static const ITEM_VALUE:int = 100;

		public function RegularHummus()
		{
			super("Hummus ","Hummanus", "a jar of cheesy-looking hummus", ITEM_VALUE, "This small clay jar contains a substance known as hummus. Given the label, it's probably going to help you regain lost humanity.");
		}

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

			mutations.initTransformation([2, 2]);
			clearOutput();
			outputText("You crack open the small clay jar to reveal a lightly colored paste that smells surprisingly delicious. You begin eating it with your fingers, wishing all the while for some crackers...");
			player.refillHunger(10);
			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?");
			}
			//-----------------------
			// MAJOR TRANSFORMATIONS
			//-----------------------
			//1st priority: Change lower body to bipedal.
			if (rand(4) === 0 && changes < changeLimit) {
				mutations.restoreLegs(tfSource);
			}
			//Remove Oviposition Perk
			if (rand(5) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			//Remove Incorporeality Perk, if not permanent
			if (player.hasPerk(PerkLib.Incorporeality) && player.perkv4(PerkLib.Incorporeality) === 0 && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nYour body somehow feels more solid, more substantial than it did a moment ago. You concentrate for a few seconds, trying to push yourself back into an incorporeal state, but you just can't seem to do it anymore.\n(Perk Lost: Incorporeality!)");
				player.removePerk(PerkLib.Incorporeality);
				player.lowerBody.incorporeal = false;
				changes++;
			}
			//Remove ghost legs
			if (player.lowerBody.incorporeal && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nYou feel a strange sensation in your [legs] as they start to feel more solid. They become more opaque until finally, you can no longer see through your [legs].");
				player.lowerBody.incorporeal = false;
				changes++;
			}
			//Restore neck
			if (player.neck.type != Neck.NORMAL && changes < changeLimit && rand(5) == 0)
				mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && rand(5) == 0) mutations.restoreRearBody(tfSource);
			//-Skin color change – light, fair, olive, dark, ebony, mahogany, russet
			if (ColorLists.HUMAN_SKIN.indexOf(player.skin.tone) === -1 && changes < changeLimit && rand(5) === 0) {
				changes++;
				outputText("\n\nIt takes a while for you to notice, but ");
				if (player.hasFur()) outputText("the skin under your " + player.skin.furColor + " " + player.skin.desc);
				else outputText("your " + player.skin.desc);
				outputText(" has changed to become ");
				player.skin.tone = randomChoice(ColorLists.HUMAN_SKIN);
				outputText(player.skin.tone + " colored.");
				player.underBody.skin.tone = player.skin.tone;
				player.arms.updateClaws(player.arms.claws.type);
			}
			//Change skin to normal
			if (!player.hasPlainSkin() && (player.ears.type === Ears.HUMAN || player.ears.type === Ears.ELFIN) && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nA slowly-building itch spreads over your whole body, and as you idly scratch yourself, you find that your " + player.skinFurScales() + " ");
				if (player.hasScales()) outputText("are");
				else outputText("is");
				outputText(" falling to the ground, revealing flawless skin below.  You now have normal skin.");

				player.skin.restore();
				player.underBody.restore();
				changes++;
			}
			//Restore arms to become human arms again
			if (rand(4) === 0) {
				mutations.restoreArms(tfSource);
			}
			//-----------------------
			// MINOR TRANSFORMATIONS
			//-----------------------
			//-Human face
			if (player.face.type !== Face.HUMAN && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nSudden agony sweeps over your " + player.faceDescript() + ", your visage turning hideous as bones twist and your jawline shifts. The pain slowly vanishes, leaving you weeping into your fingers. When you pull your hands away you realize you've been left with a completely normal, human face.");
				player.face.type = Face.HUMAN;
				changes++;
			}
			//-Human tongue
			if (player.tongue.type !== Tongue.HUMAN && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nYou feel something strange inside your face as your tongue shrinks and recedes until it feels smooth and rounded.  You realize your tongue has changed back into human tongue!");
				player.tongue.type = Tongue.HUMAN;
				changes++;
			}
			//Remove odd eyes
			if (changes < changeLimit && rand(5) === 0 && player.eyes.type !== Eyes.HUMAN) {
				if (player.eyes.type === Eyes.BLACK_EYES_SAND_TRAP) {
					outputText("\n\nYou feel a twinge in your eyes and you blink. It feels like black cataracts have just fallen away from you, and you know without needing to see your reflection that your eyes have gone back to looking human.");
				}
				else {
					outputText("\n\nYou blink and stumble, a wave of vertigo threatening to pull your " + player.feet() + " from under you. As you steady and open your eyes, you realize something seems different. Your vision is changed somehow.");
					if (player.eyes.type === Eyes.FOUR_SPIDER_EYES || player.eyes.type === Eyes.SPIDER) outputText(" Your arachnid eyes are gone!");
					outputText(" You have normal, humanoid eyes again.");
				}
				player.eyes.type = Eyes.HUMAN;
				player.eyes.count = 2;
				changes++;
			}
			//-Gain human ears (If you have human face)
			if ((player.ears.type !== Ears.HUMAN && player.face.type === Face.HUMAN) && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nOuch, your head aches! It feels like your ears are being yanked out of your head, and when you reach up to hold your aching noggin, you find they've vanished! Swooning and wobbling with little sense of balance, you nearly fall a half-dozen times before a pair of normal, human ears sprout from the sides of your head. You had almost forgotten what human ears felt like!");
				player.ears.type = Ears.HUMAN;
				changes++;
			}
			//Removes gills
			if (rand(4) === 0 && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}
			//Nipples Turn Back:
			if (player.hasStatusEffect(StatusEffects.BlackNipples) && changes < changeLimit && rand(3) === 0) {
				mutations.removeBlackNipples(tfSource);
			}
			//Hair turns normal
			if (changes < changeLimit && player.hair.type !== Hair.NORMAL && rand(3) === 0) {
				outputText("\n\nYou run a hand along the top of your head as you feel your scalp tingle, and feel something weird. You pull your hand away and look at the nearest reflective surface. Your hair is normal again!");
				player.hair.type = Hair.NORMAL;
				if (flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] !== 0) flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] = 0;
				changes++;
			}
			//Restart hair growth, if hair's normal but growth isn't on. Or just over turning hair normal. The power of rng.
			if (flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] !== 0 && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nYou feel an itching sensation in your scalp as you realize the change. Your hair is growing normally again!");
				//Turn hair growth on.
				flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] = 0;
				player.hair.type = Hair.NORMAL;
				changes++;
			}
			//-----------------------
			// EXTRA PARTS REMOVAL
			//-----------------------
			//Removes antennae
			if (player.antennae.type !== Antennae.NONE && rand(3) === 0 && changes < changeLimit) {
				mutations.removeAntennae();
			}
			//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++;
			}
			//Removes wings
			if ((player.wings.type !== Wings.NONE || player.rearBody.type == RearBody.SHARK_FIN) && rand(5) === 0 && changes < changeLimit) {
				mutations.removeWings(tfSource);
			}
			//Removes tail
			if (player.tail.type !== Tail.NONE && rand(5) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel something shifting in your backside. Then something detaches from your backside and it falls onto the ground.  You no longer have a tail!");
				player.tail.type = Tail.NONE;
				player.tail.venom = 0;
				player.tail.recharge = 5;
				changes++;
			}
			//Increase height up to 4ft 10in.
			if (rand(2) === 0 && changes < changeLimit && player.tallness < 58) {
				temp = rand(5) + 3;
				//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++;
			}
			//Decrease height down to a maximum of 6ft 2in.
			if (rand(2) === 0 && changes < changeLimit && player.tallness > 74) {
				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!\n");
				player.tallness -= 3 + rand(5);
				changes++;
			}
			//-----------------------
			// SEXUAL TRANSFORMATIONS
			//-----------------------
			//Remove additional cocks
			if (player.totalCocks() > 1 && rand(3) === 0 && changes < changeLimit) {
				player.killCocks(1);
				outputText("\n\nYou have a strange feeling as your crotch tingles.  Opening your " + player.armorName + ", you realize that one of your cocks have vanished completely!");
				changes++;
			}
			//Remove additional balls/remove uniball
			if ((player.balls > 0 || player.hasStatusEffect(StatusEffects.Uniball)) && rand(3) === 0 && changes < changeLimit) {
				if (player.ballSize > 2) {
					if (player.ballSize > 5) player.ballSize -= 1 + rand(3);
					player.ballSize -= 1;
					outputText("\n\nYour scrotum slowly shrinks, settling down at a smaller size. Your " + player.ballsDescriptLight() + " ");
					if (player.balls === 1 || player.hasStatusEffect(StatusEffects.Uniball)) outputText("is smaller now.");
					else outputText("are smaller now.");
					changes++;
				}
				else if (player.balls > 2) {
					player.balls = 2;
					//I have no idea if Uniball status effect sets balls to 1 or not so here's a just in case.
					if (player.hasStatusEffect(StatusEffects.Uniball)) player.removeStatusEffect(StatusEffects.Uniball);
					outputText("\n\nYour scrotum slowly shrinks until they seem to have reached a normal size. You can feel as if your extra balls fused together, leaving you with a pair of balls.");
					changes++;
				}
				else if (player.balls === 1 || player.hasStatusEffect(StatusEffects.Uniball)) {
					player.balls = 2;
					if (player.hasStatusEffect(StatusEffects.Uniball)) player.removeStatusEffect(StatusEffects.Uniball);
					outputText("\n\nYour scrotum slowly shrinks, and you feel a great pressure release in your groin. Your uniball has split apart, leaving you with a pair of balls.");
					changes++;
				}
				else game.doNothing(); //Basically, you rolled this because you have ball/s, but don't fit any of the above. Failsafe for weirdness.
			}
			//Change cock back to normal
			if (player.hasCock() && changes < changeLimit) {
				var temp2:Number = 0;
				var temp3:Number = 0;
				//Select first non-human cock
				temp = player.cocks.length;
				while (temp > 0 && temp2 === 0) {
					temp--;
					//Store cock index if not a human cock and exit loop
					if (player.cocks[temp].cockType !== CockTypesEnum.HUMAN) {
						temp3 = temp;
						//Kicking out of the while loop
						temp2 = 1000;
					}
				}
				if (rand(3) === 0 && player.cocks[temp3].cockType !== CockTypesEnum.HUMAN) {
					outputText("\n\nA strange tingling begins behind your " + player.cockDescript(temp3) + ", slowly crawling up across its entire length.  While neither particularly arousing nor uncomfortable, you do shift nervously as the feeling intensifies.  You resist the urge to undo your " + player.armorName + " to check, but by the feel of it, your penis is shifting form.  Eventually the transformative sensation fades, leaving you with a completely human penis.");
					player.cocks[temp3].cockType = CockTypesEnum.HUMAN;
					changes++;
				}
				else game.doNothing(); //If you entered but all your dicks are human
			}
			//Shrink oversized cocks
			if (player.hasCock() && player.biggestCockLength() > 7 && rand(3) === 0 && changes < changeLimit) {
				var idx:int = player.biggestCockIndex();
				if (player.cocks.length === 1) outputText("\n\nYou feel a tingling sensation as your cock shrinks to a smaller size!");
				else outputText("\n\nYou feel a tingling sensation as the largest of your cocks shrinks to a smaller size!");
				player.cocks[idx].cockLength -= (rand(10) + 2) / 10;
				if (player.cocks[idx].cockThickness > 1) {
					outputText(" Your " + player.cockDescript(idx) + " definitely got a bit thinner as well.");
					player.cocks[idx].cockThickness -= (rand(4) + 1) / 10;
				}
				changes++;
			}
			//Remove additional breasts
			if (changes < changeLimit && player.breastRows.length > 1 && rand(3) === 0) {
				mutations.removeExtraBreastRow(tfSource);
			}
			//Remove extra nipples
			if (player.averageNipplesPerBreast() > 1 && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nA tightness arises in your nipples as three out of four on each breast recede completely, the leftover nipples migrating to the middle of your breasts.  You are left with only one nipple on each breast.");
				for(var x:int = 0; x < player.bRows(); x++)
				{
					player.breastRows[x].nipplesPerBreast = 1;
				}
				changes++;
			}
			//Shrink tits!
			if (changes < changeLimit && rand(3) === 0 && player.biggestTitSize() > 4) {
				player.shrinkTits();
				changes++;
			}
			//Change vagina back to normal
			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++;
			}
			//Reduce wetness down to a minimum of 2
			if (changes < changeLimit && rand(3) === 0 && player.hasVagina() && player.vaginas[0].vaginalWetness > 2) {
				outputText("\n\nThe constant flow of fluids that sluice from your " + player.vaginaDescript(0) + " slow down, leaving you feeling a bit less like a sexual slip-'n-slide.");
				player.vaginas[0].vaginalWetness--;
				changes++;
			}
			//Fertility Decrease:
			if (player.hasVagina() && player.fertility > 10 && rand(3) === 0 && changes < changeLimit) {
				//High fertility:
				if (player.fertility >= 30) outputText("\n\nIt feels like your overcharged reproductive organs have simmered down a bit.");
				//Average fertility:
				else outputText("\n\nYou feel like you have dried up a bit inside; you are left feeling oddly tranquil.");
				player.fertility -= 1 + rand(3);
				if (player.fertility < 10) player.fertility = 10;
				changes++;
			}
			//Cum Multiplier Decrease:
			if (player.hasCock() && player.cumMultiplier > 5 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel a strange tingling sensation in your ");
				if (player.balls > 0) outputText("balls");
				else outputText("groin");
				outputText(" as you can feel the density reducing. You have a feeling you're going to produce less cum now.");
				player.cumMultiplier -= (1 + (rand(20) / 10));
				if (player.cumMultiplier < 1) player.cumMultiplier = 1; //How would this even happen o_O
				changes++;
			}
			//Anal wetness decrease
			if (player.ass.analWetness > 0 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nAn uncomfortable, suction-esque feeling suddenly starts in your [ass], and leaves things feeling drier than before. Your asshole is slightly less wet.");
				player.ass.analWetness--;
				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.GlobalFlags.kGAMECLASS;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.PerkLib;
	import classes.StatusEffects;

	/**
	 * Reptile transformativ item.
	 */
	public class Reptilum extends Consumable
	{
		public function Reptilum()
		{
			super("Reptlum","Reptilum", "a vial of Reptilum", ConsumableLib.DEFAULT_VALUE, "This is a rounded bottle with a small label that reads, \"Reptilum\".  It is likely this potion is tied to reptiles in some way.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "reptilum";
			if (player.hasDragonWingsAndFire())
				tfSource += player.isBasilisk() ? "-dracolisk" : "-dragonewt";
			else
				tfSource += player.isBasilisk() ? "-basilisk"  : "-lizan";
			//if (player.isTaur()) tfSource += "-taur";
			player.slimeFeed();
			//init variables
			var temp2:Number = 0;
			mutations.initTransformation([2, 2, 3, 4]);
			//clear screen
			clearOutput();
			outputText("You uncork the vial of fluid and drink it down.  The taste is sour, like a dry wine with an aftertaste not entirely dissimilar to alcohol.  Instead of the warmth you'd expect, it leaves your throat feeling cold and a little numb.");

			//Statistical changes:
			//-Reduces speed down to 50.
			if (player.spe > player.ngPlus(50) && changes < changeLimit && rand(4) === 0) {
				outputText("\n\nYou start to feel sluggish and cold.  Lying down to bask in the sun might make you feel better.");
				dynStats("spe", -1);
			}
			//-Reduces sensitivity.
			if (player.sens100 > 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.lib100 < 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 !== 3 || rand(2) === 0)) {
					outputText("filling ");
					if (player.cocks.length > 1) outputText("each of ");
					outputText("your " + player.multiCockDescriptLight() + " 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 " + player.vaginaDescript(0) + ".  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 " + player.assDescript() + ".  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.lib100 < 50) dynStats("lib", 1);
				//+2 lib if less than 75
				if (player.lib100 < 75) dynStats("lib", 1);
				//+1 if above 75.
				dynStats("lib", 1);
			}
			//-Raises toughness to 70
			//(+3 to 40, +2 to 55, +1 to 70)
			if (player.tou < player.ngPlus(70) && changes < changeLimit && rand(3) === 0) {
				//(+3)
				if (player.tou < player.ngPlus(40)) {
					outputText("\n\nYour body and skin both thicken noticeably.  You pinch your " + player.skin.desc + " experimentally and marvel at how much tougher your hide has gotten.");
					dynStats("tou", 3);
				}
				//(+2)
				else if (player.tou < player.ngPlus(55)) {
					outputText("\n\nYou grin as you feel your form getting a little more solid.  It seems like your whole body is toughening up quite nicely, and by the time the sensation goes away, you feel ready to take a hit.");
					dynStats("tou", 2);
				}
				//(+1)
				else {
					outputText("\n\nYou snarl happily as you feel yourself getting even tougher.  It's a barely discernible difference, but you can feel your " + player.skin.desc + " getting tough enough to make you feel invincible.");
					dynStats("tou", 1);
				}
			}

			//Sexual Changes:
			//-Lizard dick - first one
			if (player.countCocksOfType(CockTypesEnum.LIZARD) === 0 && player.cockTotal() > 0 && changes < changeLimit && tfChance(2, 4)) {
				//Find the first non-lizzy dick
				temp2 = player.findFirstCockNotOfType(CockTypesEnum.LIZARD);
				outputText("\n\nA slow tingle warms your groin.  Before it can progress any further, you yank back your " + player.armorName + " to investigate.  Your " + player.cockDescript(temp2) + " is changing!  It ripples loosely from ");
				if (player.hasSheath()) outputText("sheath ");
				else outputText("base ");
				outputText("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[temp2].cockType = CockTypesEnum.LIZARD;
					if (!player.hasSheath()) outputText("\n\nYour sheath tightens and starts to smooth out, revealing ever greater amounts of your " + player.cockDescript(temp2) + "'s lower portions.  After a few moments your groin is no longer so animalistic – the sheath is gone.");
				}
				else player.cocks[temp2].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.hasCockNotOfType(CockTypesEnum.LIZARD) && tfChance(2, 4) && changes < changeLimit) {
				outputText("\n\nA familiar tingle starts in your crotch, and before you can miss the show, you pull open your " + player.armorName + ".  As if operating on a cue, ");
				temp2 = player.findFirstCockNotOfType(CockTypesEnum.LIZARD);
				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[temp2].cockType = CockTypesEnum.LIZARD;
					if (!player.hasSheath()) outputText("\n\nYour sheath tightens and starts to smooth out, revealing ever greater amounts of your " + player.cockDescript(temp2) + "'s lower portions.  After a few moments your groin is no longer so animalistic – the sheath is gone.");
				}
				else player.cocks[temp2].cockType = CockTypesEnum.LIZARD;
				changes++;
				dynStats("lib", 3, "lus", 10);
			}
			//-Grows second lizard dick if only 1 dick
			if (player.countCocksOfType(CockTypesEnum.LIZARD) === 1 && player.cocks.length === 1 && tfChance(2, 4) && changes < changeLimit) {
				outputText("\n\nA knot of pressure forms in your groin, forcing you off your " + player.feet() + " as you try to endure it.  You examine the affected area and see a lump starting to bulge under your " + player.skin.desc + ", adjacent to your " + player.cockDescript(0) + ".  The flesh darkens, turning purple");
				if (player.isFurryOrScaley())
					outputText(" and shedding " + player.skin.desc);
				outputText(" as the bulge lengthens, pushing out from your body.  Too surprised to react, you can only pant in pain and watch as the fleshy lump starts to take on a penis-like appearance.  You're growing a second lizard-cock!  It doesn't stop growing until it's just as long as its brother and the same shade of shiny purple.  A dribble of cum oozes from its tip, and you feel relief at last.");

				player.createCock();
				player.cocks[1].cockType = CockTypesEnum.LIZARD;
				player.cocks[1].cockLength = player.cocks[0].cockLength;
				player.cocks[1].cockThickness = player.cocks[0].cockThickness;
				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++;
			}
			//-Breasts vanish to 0 rating if male
			if (player.biggestTitSize() >= 1 && player.gender === 1 && changes < changeLimit && tfChance(2, 3)) {
				//(HUEG)
				if (player.biggestTitSize() > 8) {
					outputText("\n\nThe flesh on your chest tightens up, losing nearly half its mass in the span of a few seconds.  With your center of balance shifted so suddenly, you stagger about trying not to fall on your ass.  You catch yourself and marvel at the massive change in breast size.");
					//Half tit size
				}
				//(NOT HUEG < 4)
				else outputText("\n\nIn an instant, your chest compacts in on itself, consuming every ounce of breast-flesh.  You're left with a  smooth, masculine torso, though your nipples remain.");
				//(BOTH – no new PG)
				outputText("  With the change in weight and gravity, you find it's gotten much easier to move about.");
				//Loop through behind the scenes and adjust all tits.
				for (temp2 = 0; temp2 < player.breastRows.length; temp2++) {
					if (player.breastRows[temp2].breastRating > 8) player.breastRows[temp2].breastRating /= 2;
					else player.breastRows[temp2].breastRating = 0;
				}
				//(+2 speed)
				dynStats("lib", 2);
				changes++;
			}
			//-Lactation stoppage.
			if (player.biggestLactation() >= 1 && changes < changeLimit && tfChance(2, 4)) {
				if (player.totalNipples() === 2) outputText("\n\nBoth of your");
				else outputText("\n\nAll of your many");
				outputText(" 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 (player.hasFuckableNipples()) outputText("but sexual fluid ");
				outputText("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 (temp2 = 0; temp2 < player.breastRows.length; temp2++) {
					player.breastRows[temp2].lactationMultiplier = 0;
				}
			}
			//-Nipples reduction to 1 per tit.
			if (player.averageNipplesPerBreast() > 1 && changes < changeLimit && tfChance(2, 4)) {
				outputText("\n\nA chill runs over your " + player.allBreastsDescript() + " and vanishes.  You stick a hand under your " + player.armorName + " and discover that your extra nipples are missing!  You're down to just one per ");
				if (player.biggestTitSize() < 1) outputText("'breast'.");
				else outputText("breast.");
				changes++;
				//Loop through and reset nipples
				for (temp2 = 0; temp2 < player.breastRows.length; temp2++) {
					player.breastRows[temp2].nipplesPerBreast = 1;
				}
			}
			//-Remove extra breast rows
			if (changes < changeLimit && player.breastRows.length > 1 && tfChance(2, 3) && !flags[kFLAGS.HYPER_HAPPY]) {
				mutations.removeExtraBreastRow(tfSource);
			}
			//-VAGs
			if (player.hasVagina() && tfChance(3, 5) && player.lizardScore() > 3) {
				mutations.updateOvipositionPerk(tfSource); // does all the magic, nuff said!
			}

			//Physical changes:
			//-Existing horns become draconic, max of 4, max length of 1'
			if (!player.hasDragonHorns(true) && changes < changeLimit && tfChance(3, 5)) {
				mutations.gainDraconicHorns(tfSource);
			}

			//Neck restore
			if (player.neck.type != Neck.NORMAL && changes < changeLimit && tfChance(2, 4)) mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && tfChance(3, 5)) mutations.restoreRearBody(tfSource);
			//-Hair changes
			if (changes < changeLimit && tfChance(2, 4)) {
				mutations.lizardHairChange(tfSource);
			}
			//Remove beard!
			if (player.hasBeard() && changes < changeLimit && tfChance(2, 3)) {
				outputText("\n\nYour " + player.beardDescript() + " feels looser and looser until finally, your beard falls out.  ");
				outputText("(You no longer have a beard!)");
				player.beard.length = 0;
				player.beard.style = 0;
			}
			//Big physical changes:
			//-Legs – Draconic, clawed feet
			if (player.lowerBody.type !== LowerBody.LIZARD && changes < changeLimit && tfChance(3, 5)) {
				//Hooves -
				if (player.lowerBody.type === LowerBody.HOOFED) outputText("\n\nYou scream in agony as you feel your hooves crack and break apart, beginning to rearrange.  Your legs change to a digitigrade shape while your feet grow claws and shift to have three toes on the front and a smaller toe on the heel.");
				//TAURS -
				else if (player.isTaur()) outputText("\n\nYour lower body is wracked by pain!  Once it passes, you discover that you're standing on digitigrade legs with lizard-like claws.");
				//feet types -
				else if (player.lowerBody.type === LowerBody.HUMAN || player.lowerBody.type === LowerBody.DOG || player.lowerBody.type === LowerBody.DEMONIC_HIGH_HEELS || player.lowerBody.type === LowerBody.DEMONIC_CLAWS || player.lowerBody.type === LowerBody.BEE || player.lowerBody.type === LowerBody.CAT || player.lowerBody.type === LowerBody.LIZARD) outputText("\n\nYou scream in agony as you feel the bones in your legs break and begin to rearrange. They change to a digitigrade shape while your feet grow claws and shift to have three toes on the front and a smaller toe on the heel.");
				//Else –
				else outputText("\n\nPain rips through your " + player.legs() + ", morphing and twisting them until the bones rearrange into a digitigrade configuration.  The strange legs have three-toed, clawed feet, complete with a small vestigial claw-toe on the back for added grip.");
				outputText("  You have reptilian legs and claws!");
				player.lowerBody.type = LowerBody.LIZARD;
				player.lowerBody.legCount = 2;
				changes++;
			}
			// <mod name="Predator arms" author="Stadler76">
			//Gain predator arms
			if (player.arms.type !== Arms.LIZARD && player.hasReptileScales() && player.lowerBody.type === LowerBody.LIZARD && changes < changeLimit && tfChance(2, 3)) {
				player.arms.setType(Arms.LIZARD, Claws.LIZARD);
				outputText("\n\nYou scratch your biceps absentmindedly, but no matter how much you scratch, you can't get rid of the itch.  After a longer moment of ignoring it you finally glance down in irritation, only to discover that your arms former appearance has changed into those of some reptilian killer with " + player.skinFurScales() + " and short " + player.arms.claws.tone + " claws replacing your fingernails.");
				outputText("\nYou now have reptilian arms.");
				changes++
			}
			//Claw transition
			if (player.arms.type === Arms.LIZARD && player.hasLizardScales() && player.arms.claws.type !== Claws.LIZARD && changes < changeLimit && tfChance(2, 3)) {
				outputText("\n\nYour [claws] change a little to become reptilian.");
				player.arms.updateClaws(Claws.LIZARD);
				outputText(" You now have [claws].");
				changes++
			}
			// </mod>
			//-Tail – sinuous lizard tail
			if (player.tail.type !== Tail.LIZARD && player.lowerBody.type === LowerBody.LIZARD && changes < changeLimit && tfChance(3, 5)) {
				//No tail
				if (player.tail.type === Tail.NONE) outputText("\n\nYou drop onto the ground as your spine twists and grows, forcing the flesh above your " + player.assDescript() + " to bulge out.  New bones form, one after another, building a tapered, prehensile tail onto the back of your body.  You now have a reptilian tail!");
				//Yes tail
				else outputText("\n\nYou drop to the ground as your tail twists and grows, changing its shape in order to gradually taper to a point.  It flicks back and forth, prehensile and totally under your control.  You now have a reptilian tail.");
				player.tail.type = Tail.LIZARD;
				changes++;
			}
			//Remove odd eyes
			if (changes < changeLimit && tfChance(3, 5) && player.eyes.type !== Eyes.HUMAN && !player.hasReptileEyes()) {
				if (player.eyes.type === Eyes.BLACK_EYES_SAND_TRAP) {
					outputText("\n\nYou feel a twinge in your eyes and you blink.  It feels like black cataracts have just fallen away from you, and you know without needing to see your reflection that your eyes have gone back to looking human.");
				}
				else {
					outputText("\n\nYou blink and stumble, a wave of vertigo threatening to pull your " + player.feet() + " from under you.  As you steady and open your eyes, you realize something seems different.  Your vision is changed somehow.");
					if (player.eyes.type === Eyes.FOUR_SPIDER_EYES || player.eyes.type === Eyes.SPIDER) outputText(" Your arachnid eyes are gone!");
					outputText(" You have normal, humanoid eyes again.");
				}
				player.eyes.type = Eyes.HUMAN;
				player.eyes.count = 2;
				changes++;
			}
			//-Ears become smaller nub-like openings?
			if (player.ears.type !== Ears.LIZARD && player.tail.type === Tail.LIZARD && player.lowerBody.type === LowerBody.LIZARD && changes < changeLimit && tfChance(3, 5)) {
				outputText("\n\nTightness centers on your scalp, pulling your ears down from their normal, fleshy shape into small, scaley bumps with holes in their centers.  You have reptilian ears!");
				player.ears.type = Ears.LIZARD;
				changes++;
			}
			//-Scales – color changes to red, green, white, blue, or black.  Rarely: purple or silver.
			if (mutations.tfNoFur() && !player.hasLizardScales() && player.ears.type === Ears.LIZARD && player.tail.type === Tail.LIZARD && player.lowerBody.type === LowerBody.LIZARD && changes < changeLimit && tfChance(3, 5)) {
				//(fur)
				var newSkinTones:Array = mutations.newLizardSkinTone();
				if (player.hasFur()) {
					player.skin.tone = newSkinTones[0];
					player.arms.updateClaws(player.arms.claws.type);
					outputText("\n\nYou scratch yourself, and come away with a large clump of " + player.skin.furColor + " fur.  Panicked, you look down"
					          +" and realize that your fur is falling out in huge clumps.  It itches like mad, and you scratch your body"
					          +" relentlessly, shedding the remaining fur with alarming speed.  Underneath the fur your skin feels incredibly"
					          +" smooth, and as more and more of the stuff comes off, you discover a seamless layer of " + player.skin.tone
					          +" scales covering most of your body.  The rest of the fur is easy to remove.");
				}
				else if (player.hasNonLizardScales()) {
					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; and when you look at your hands you notice"
					          +" small fragments of your " + player.skinFurScales() + " hanging from your fingers.  Nevertheless you continue to"
					          +" scratch yourself, and when you're finally done, you look yourself over. New scales have grown to replace your"
					          +" peeled off [skinFurScales].");
					player.skin.tone = newSkinTones[0];
					player.arms.updateClaws(player.arms.claws.type);
				}
				//(no fur)
				else {
					outputText("\n\nYou idly reach back to scratch yourself and nearly jump out of your " + player.armorName + " when you hit"
					          +" something hard.  A quick glance down reveals that scales are growing out of your " + player.skin.tone + " skin with"
					          +" alarming speed.  As you watch, the surface of your skin is covered in smooth scales.  They interlink together so"
					          +" well that they may as well be seamless.  You peel back your " + player.armorName + " and the transformation has"
					          +" already finished on the rest of your body.");
					player.skin.tone = newSkinTones[0];
					player.arms.updateClaws(player.arms.claws.type);
				}
				player.skin.setProps({
					type: Skin.LIZARD_SCALES,
					adj: "",
					desc: "scales"
				});
				player.underBody.type = UnderBody.REPTILE;
				player.copySkinToUnderBody({ // copy the main skin props to the underBody skin ...
					desc: "ventral scales",  // ... and only override the desc
					tone: newSkinTones[1]    // ... and the color (tone)
				});
				outputText("\n\nYou're covered from head to toe in shiny " + player.skin.tone + " scales with [underBody.skinFurScales] on your underside.");
				game.rathazul.addMixologyXP(20);
				changes++;
			}
			//-Lizard-like face.
			if (mutations.tfNoFur() && player.face.type !== Face.LIZARD && player.hasReptileScales() && player.ears.type === Ears.LIZARD && player.tail.type === Tail.LIZARD && player.lowerBody.type === LowerBody.LIZARD && changes < changeLimit && tfChance(3, 5)) {
				outputText("\n\nTerrible agony wracks your " + player.faceDescript() + " as bones crack and shift.  Your jawbone rearranges while your cranium shortens.  The changes seem to last forever; once they've finished, no time seems to have passed.  Your fingers brush against your toothy snout as you get used to your new face.  It seems you have a toothy, reptilian visage now.");
				player.face.type = Face.LIZARD;
			}
			//-Lizard tongue
			if (player.tongue.type === Tongue.SNAKE && changes < changeLimit && rand(10) < 6) {
				// Higher (60%) chance to be 'fixed' if old variant
				mutations.gainLizardTongue();
			}

			if ([Tongue.LIZARD, Tongue.SNAKE].indexOf(player.tongue.type) === -1 && player.hasReptileFace() && changes < changeLimit && tfChance(2, 3)) {
				mutations.gainLizardTongue();
			}
			//-Remove Gills
			if (tfChance(2, 4) && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}
			//<mod name="Reptile eyes" author="Stadler76">
			//-Lizard eyes
			if (!player.hasLizardEyes() && player.face.type === Face.LIZARD && player.hasReptileScales() && player.ears.type === Ears.LIZARD && changes < changeLimit && tfChance(2, 4)) {
				if (player.hasReptileEyes())
					outputText("\n\nYour eyes change slightly in their appearance.  ");
				else
				{
					outputText("\n\nYou feel a sudden surge of pain in your eyes as they begin to reshape. Your pupils begin to elongate becoming vertically slitted and your irises change their color, too.");
					outputText("\nAs the pain passes, you examine your eyes in a nearby puddle. You look into your new eyes with vertically slitted pupils surrounded by green-yellowish irises. With a few tears remaining, the look is a bit blurry. Wanting to get a clearer look at them, you blink your remaining tears away and suddenly you realize, that you just did that with your second set of eyelids.\n");
				}
				outputText("You now have lizard eyes.");
				player.eyes.type = Eyes.LIZARD;
				changes++;
			}
			//</mod>
			//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;
		}
	}
}