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

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

		override public function useItem():Boolean {
			var tfSource:String = "equinum";
			player.slimeFeed();
			//Temporary storage
			var temp:Number = 0;
			var temp2:Number = 0;
			var temp3:Number = 0;
			//Store location of cock to be changed
			var old:Number = 0;
			mutations.initTransformation([2, 3]);

			//Set up output
			clearOutput();
			outputText("You down the potion, grimacing at the strong taste.");
			//CHANCE OF BAD END - 20% if face/tail/skin/cock are appropriate.
			if (player.hasFur() && player.face.type === Face.HORSE && player.tail.type === Tail.HORSE && player.lowerBody.type === LowerBody.HOOFED) {
				//WARNINGS
				//Repeat warnings
				if (player.hasStatusEffect(StatusEffects.HorseWarning) && rand(3) === 0) {
					if (player.statusEffectv1(StatusEffects.HorseWarning) === 0) outputText("\n\nYou feel a creeping chill down your back as your entire body shivers, as if rejecting something foreign.  Maybe you ought to cut back on the horse potions.");
					if (player.statusEffectv1(StatusEffects.HorseWarning) > 0) outputText("\n\nYou wonder how many more of these you can drink before you become a horse...");
					player.addStatusValue(StatusEffects.HorseWarning,1,1);
				}
				//First warning
				if (!player.hasStatusEffect(StatusEffects.HorseWarning)) {
					outputText("\n\nWhile you drink the tasty potion, you realize how horse-like you already are, and wonder what else the potion could possibly change...");
					player.createStatusEffect(StatusEffects.HorseWarning, 0, 0, 0, 0);
				}
				//Bad End
				if (rand(4) === 0 && player.hasStatusEffect(StatusEffects.HorseWarning) && !player.isTFResistant()) {
					//Must have been warned first...
					if (player.statusEffectv1(StatusEffects.HorseWarning) > 0) {
						//If player has dicks check for horsedicks
						if (player.cockTotal() > 0) {
							//If player has horsedicks
							if (player.countCocksOfType(CockTypesEnum.HORSE) > 0) {
								outputText("\n\nSoon after you drink the Equinum, a burning sensation fills your chest. You have consumed too much of the potion, and the overdose starts to provoke dramatic changes in your body.  You collapse suddenly, twitching in pain as all the bones and muscles in your body break and reform. Eventually, you pass out from the strain you are put through.\n\nYou wake up after a few minutes. Once you get up on your legs, doubt fills your mind. You rush to a nearby pond and look down, nearly jumping when the reflection of a ");
								if (player.gender === 0 || player.gender === 3) outputText("horse ");
								if (player.gender === 1) outputText("stallion ");
								if (player.gender === 2) outputText("mare ");
								outputText(" with beautiful " + player.hair.color + " " + player.skin.desc + " covering its body gazes back up at you.  That's you, and yet the doubt in your mind remains. Strange images fill your mind, and you feel as if you have not always been a horse, but some kind of funny fur-less creature standing on two legs. Your equine mind rapidly dismisses that doubt as a daydream however, and you trot away, oblivious to who you once were.\n\n");
								outputText("One year later...\n\nAs you graze upon the small plants that coat the open plains of your home, you hear a noise on your right side. As you raise your head to check where the noise comes from, preparing to run from a potential predator, you see a strange creature. It stands on its two feet, its furless pink skin appearing beneath its clothes.  With a start, you realize you can identify the strange creatures gender.  ");
								if (player.gender === 0 || player.gender === 1) outputText("He is clearly a male, but you are somewhat confused as you can see not one but three bulges where his manhood would be.\n\n");
								if (player.gender === 2) outputText("She is clearly a female, as you can see her six breasts jiggle as she walks towards you, small stains appearing on her shirt where her nipples are.\n\n");
								if (player.gender === 3) outputText("You are somewhat confused as you can see a bulge near her thighs but also huge boobs jiggling as she walks, and you can't say if she's a male or female.\n\n");
								outputText("As soon as you lay eyes on the creature, a wave of nostalgia overtakes you. Somehow, looking at that creature makes you sad, as if you forgot something important.\n\n\"How strange to see a horse here all alone,\" the creature muses, \"In any case, you're still the least bizarre creature I've met here.  Not to mention the only one that hasn't tried to rape me,\" it says with a sigh.\n\nYou answer with an interrogative whinny.\n\n\"Hey, I've got an idea. I'll take you back to the camp. I'll feed you and in return you can help me complete my quest. What do you say?\"\n\nInstinctively, you utter a happy and approving whinny.\n\nYou failed in your quest, losing your focus and more importantly, losing yourself.  But, even so, you found a new meaning to your life, and have a new chance to succeed where you once failed.");
								game.gameOver();
								return false;
							}
						}
						//If player has no cocks
						else {
							outputText("\n\nSoon after you drink the Equinum, a burning sensation fills your chest. You have consumed too much of the drink, and the overdose starts to provoke dramatic changes in your body.  You collapse suddenly, twitching in pain as all the bones and all the muscles in your body break and reform. Eventually, you pass out from the strain you are put through.\n\nYou wake up after a few minutes. Once you get up on your legs, doubt fills your mind. You rush to a nearby pond and look down, nearly jumping when the reflection of a ");
							if (player.gender === 0 || player.gender === 3) outputText("horse ");
							if (player.gender === 1) outputText("stallion ");
							if (player.gender === 2) outputText("mare ");
							outputText("with beautiful " + player.hair.color + " " + player.skin.desc + " covering its body looks back at you.  That's you, and yet the doubt in your mind remains. Strange mental images fill your mind.  You feel as if you have not always been a horse, but some kind of funny fur-less creature standing on two legs. But your equine mind rapidly dismisses that doubt as a daydream, and you trot away, oblivious to who you once were.\n\n");
							outputText("One year after...\n\nAs you graze small plants in the open plains that became your home, you hear a noise on your right side. As you raise your head to check where the noise comes from, preparing to run from a potential predator, you see a strange creature. It stands on two feet, its furless pink skin appearing beneath its clothes.  ");
							if (player.gender === 0 || player.gender === 1) outputText("He is clearly a male, but you are somewhat confused as you can see not one but three bulges where his manhood would be.\n\n");
							if (player.gender === 2) outputText("She is clearly a female, as you can see her six breasts jiggle as she walks towards you, small stains appearing on her shirt where her nipples are.\n\n");
							if (player.gender === 3) outputText("You are somewhat confused as you can see a bulge near her thighs but also huge boobs jiggling as she walks, and you can't say if she's a male or female.\n\n");
							outputText("As soon as you lay eyes on the creature, a wave of nostalgia overtakes you. Somehow, looking at that creature makes you sad, as if you forgot something important.\n\n\"How strange to see a horse here all alone,\" the creature muses, \"In any case, you're still the least bizarre creature I've met here.  Not to mention the only one that hasn't tried to rape me,\" it says with a sigh.\n\nYou answer with an interrogative whinny.\n\n\"Hey, I've got an idea. I'll take you back to the camp. I'll feed you and in return you can help me to complete my quest. What do you say?\"\n\nInstictively, you utter a happy and approving whinny.\n\nYou failed in your quest, losing you focus and more importantly, losing yourself.  But, even so, you found a new meaning to your life, and have a new chance to achieve what you once failed.");
							game.gameOver();
							return false;
						}
					}
				}

			}
			//Stat changes first
			//STRENGTH
			if (rand(2) === 0) {
				//Maxxed
				if (player.str100 >= 60) {
					outputText("\n\nYou feel strong enough to single-handedly pull a fully-loaded wagon.");
				}
				//NOT MAXXED
				else {
					dynStats("str", 1);
					outputText("\n\nYour muscles clench and surge, making you feel as strong as a horse.");
				}
			}
			//TOUGHNESS
			if (rand(2) === 0) {
				//MAXXED ALREADY
				if (player.tou100 >= 75) {
					outputText("\n\nYour body is as tough and solid as a ");
					if (player.gender === 1 || player.gender === 3) outputText("stallion's.");
					else outputText("mare's.");
				}
				//NOT MAXXED
				else {
					dynStats("tou", 1.25);
					outputText("\n\nYour body suddenly feels tougher and more resilient.");
				}
			}
			//INTELLECT
			if (rand(3) === 0) {
				if (player.inte100 <= 5) {
					outputText("\n\nYou let out a throaty \"Neiiiigh\" as your animalistic instincts take over.");
				}
				if (player.inte100 < 10 && player.inte100 > 5) {
					dynStats("int", -1);
					outputText("\n\nYou smile vacantly as you drink the potion, knowing you're just a big dumb animal who loves to fuck.");
				}
				if (player.inte100 <= 20 && player.inte100 >= 10) {
					dynStats("int", -2);
					outputText("\n\nYou find yourself looking down at the empty bottle in your hand and realize you haven't thought ANYTHING since your first sip.");
				}
				if (player.inte100 <= 30 && player.inte100 > 20) {
					dynStats("int", -3);
					outputText("\n\nYou smile broadly as your cares seem to melt away.  A small part of you worries that you're getting dumber.");
				}
				if (player.inte100 <= 50 && player.inte100 > 30) {
					dynStats("int", -4);
					outputText("\n\nIt becomes harder to keep your mind focused as your intellect diminishes.");
				}
				if (player.inte100 > 50) {
					dynStats("int", -5);
					outputText("\n\nYour usually intelligent mind feels much more sluggish.");
				}
			}
			//Neck restore
			if (player.neck.type != Neck.NORMAL && changes < changeLimit && rand(4) == 0) mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && rand(5) == 0) mutations.restoreRearBody(tfSource);
			//Ovi perk loss
			if (rand(5) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			//Restore arms to become human arms again
			if (rand(4) === 0) {
				mutations.restoreArms(tfSource);
			}
			//Remove feathery hair
			mutations.removeFeatheryHair();
			//
			//SEXUAL CHARACTERISTICS
			//
			//MALENESS.
			if ((player.gender === 1 || player.gender === 3) && rand(1.5) === 0 && changes < changeLimit) {
				//If cocks that aren't horsified!
				if ((player.countCocksOfType(CockTypesEnum.HORSE) + player.countCocksOfType(CockTypesEnum.DEMON)) < player.cocks.length) {
					//Transform a cock and store it's index value to talk about it.
					//Single cock
					if (player.cocks.length === 1) {
						temp = 0;
						//Use temp3 to track whether or not anything is changed.
						temp3 = 0;
						if (player.cocks[0].cockType === CockTypesEnum.HUMAN) {
							outputText("\n\nYour " + player.cockDescript(0) + " begins to feel strange... you pull down your pants to take a look and see it darkening as you feel a tightness near the base where your skin seems to be bunching up.  A sheath begins forming around your cock's base, tightening and pulling your cock inside its depths.  A hot feeling envelops your member as it suddenly grows into a horse penis, dwarfing its old size.  The skin is mottled brown and black and feels more sensitive than normal.  Your hands are irresistibly drawn to it, and you jerk yourself off, splattering cum with intense force.");
							temp = player.addHorseCock();
							temp2 = player.increaseCock(temp, rand(4) + 4);
							temp3 = 1;
							dynStats("lib", 5, "sen", 4, "lus", 35);
						}
						if (player.cocks[0].cockType === CockTypesEnum.DOG) {
							temp = player.addHorseCock();
							outputText("\n\nYour " + Appearance.cockNoun(CockTypesEnum.DOG) + " begins to feel odd... you pull down your clothes to take a look and see it darkening.  You feel a growing tightness in the tip of your " + Appearance.cockNoun(CockTypesEnum.DOG) + " as it flattens, flaring outwards.  Your cock pushes out of your sheath, inch after inch of animal-flesh growing beyond it's traditional size.  You notice your knot vanishing, the extra flesh pushing more horsecock out from your sheath.  Your hands are drawn to the strange new " + Appearance.cockNoun(CockTypesEnum.HORSE) + ", and you jerk yourself off, splattering thick ropes of cum with intense force.");
							temp2 = player.increaseCock(temp, rand(4) + 4);
							temp3 = 1;
							dynStats("lib", 5, "sen", 4, "lus", 35);
						}
						if (player.cocks[0].cockType === CockTypesEnum.TENTACLE) {
							temp = player.addHorseCock();
							outputText("\n\nYour " + player.cockDescript(0) + " begins to feel odd... you pull down your clothes to take a look and see it darkening.  You feel a growing tightness in the tip of your " + player.cockDescript(0) + " as it flattens, flaring outwards.  Your skin folds and bunches around the base, forming an animalistic sheath.  The slick inhuman texture you recently had fades, taking on a more leathery texture.  Your hands are drawn to the strange new " + Appearance.cockNoun(CockTypesEnum.HORSE) + ", and you jerk yourself off, splattering thick ropes of cum with intense force.");
							temp2 = player.increaseCock(temp, rand(4) + 4);
							temp3 = 1;
							dynStats("lib", 5, "sen", 4, "lus", 35);
						}
						if (player.cocks[0].cockType.Index > 4) {
							outputText("\n\nYour " + player.cockDescript(0) + " begins to feel odd... you pull down your clothes to take a look and see it darkening.  You feel a growing tightness in the tip of your " + player.cockDescript(0) + " as it flattens, flaring outwards.  Your skin folds and bunches around the base, forming an animalistic sheath.  The slick inhuman texture you recently had fades, taking on a more leathery texture.  Your hands are drawn to the strange new " + Appearance.cockNoun(CockTypesEnum.HORSE) + ", and you jerk yourself off, splattering thick ropes of cum with intense force.");
							temp = player.addHorseCock();
							temp2 = player.increaseCock(temp, rand(4) + 4);
							temp3 = 1;
							dynStats("lib", 5, "sen", 4, "lus", 35);
						}
						if (temp3 === 1) outputText("  Your penis has transformed into a horse's!");
					}
					//MULTICOCK
					else {
						dynStats("lib", 5, "sen", 4, "lus", 35);
						temp = player.addHorseCock();
						outputText("\n\nOne of your penises begins to feel strange.  You pull down your clothes to take a look and see the skin of your " + player.cockDescript(temp) + " darkening to a mottled brown and black pattern.");
						if (temp === -1) {
							CoC_Settings.error("");
							clearOutput();
							outputText("FUKKKK ERROR NO COCK XFORMED");
						}
						//Already have a sheath
						if (player.countCocksOfType(CockTypesEnum.HORSE) > 1 || player.dogCocks() > 0) outputText("  Your sheath tingles and begins growing larger as the cock's base shifts to lie inside it.");
						else outputText("  You feel a tightness near the base where your skin seems to be bunching up.  A sheath begins forming around your " + player.cockDescript(temp) + "'s root, tightening and pulling your " + player.cockDescript(temp) + " inside its depths.");
						temp2 = player.increaseCock(temp, rand(4) + 4);
						outputText("  The shaft suddenly explodes with movement, growing longer and developing a thick flared head leaking steady stream of animal-cum.");
						outputText("  You now have a horse-cock.");
					}
					//Make cock thicker if not thick already!
					if (player.cocks[temp].cockThickness <= 2) player.cocks[temp].thickenCock(1);
					changes++;
				}
				//Players cocks are all horse-type - increase size!
				else {
					//single cock
					if (player.cocks.length === 1) {
						temp2 = player.increaseCock(0, rand(3) + 1);
						temp = 0;
						dynStats("sen", 1, "lus", 10);
					}
					//Multicock
					else {
						//Find smallest cock
						//Temp2 = smallness size
						//temp = current smallest
						temp3 = player.cocks.length;
						temp = 0;
						while (temp3 > 0) {
							temp3--;
							//If current cock is smaller than saved, switch values.
							if (player.cocks[temp].cockLength > player.cocks[temp3].cockLength) {
								temp2 = player.cocks[temp3].cockLength;
								temp = temp3;
							}
						}
						//Grow smallest cock!
						//temp2 changes to growth amount
						temp2 = player.increaseCock(temp, rand(4) + 1);
						dynStats("sen", 1, "lus", 10);
					}
					outputText("\n\n");
					if (temp2 > 2) outputText("Your " + player.cockDescript(temp) + " tightens painfully, inches of taut horse-flesh pouring out from your sheath as it grows longer.  Thick animal-pre forms at the flared tip, drawn out from the pleasure of the change.");
					if (temp2 > 1 && temp2 <= 2) outputText("Aching pressure builds within your sheath, suddenly releasing as an inch or more of extra dick flesh spills out.  A dollop of pre beads on the head of your enlarged " + player.cockDescript(temp) + " from the pleasure of the growth.");
					if (temp2 <= 1) outputText("A slight pressure builds and releases as your " + player.cockDescript(temp) + " pushes a bit further out of your sheath.");
					changes++;
				}
				//Chance of thickness + daydream
				if (rand(2) === 0 && changes < changeLimit && player.countCocksOfType(CockTypesEnum.HORSE) > 0) {
					temp3 = 0;
					temp2 = player.cocks.length;
					while (temp2 > 0) {
						temp2--;
						if (player.cocks[temp2].cockThickness <= player.cocks[temp3].cockThickness) {
							temp3 = temp2;
						}
					}
					temp = temp3;
					player.cocks[temp].thickenCock(.5);
					outputText("\n\nYour " + Appearance.cockNoun(CockTypesEnum.HORSE) + " thickens inside its sheath, growing larger and fatter as your veins thicken, becoming more noticeable.  It feels right");
					if (player.cor + player.lib < 50) outputText(" to have such a splendid tool.  You idly daydream about cunts and pussies, your " + Appearance.cockNoun(CockTypesEnum.HORSE) + " plowing them relentlessly, stuffing them pregnant with cum");
					if (player.cor + player.lib >= 50 && player.cor + player.lib < 80) outputText(" to be this way... You breathe in the powerful animalistic scent and fantasize about fucking" +
							" centaurs night and day until their bellies slosh with your cum");
					if (player.cor + player.lib >= 75 && player.cor + player.lib <= 125) outputText(" to be a rutting stud.  You ache to find a mare or centaur to breed with.  Longing to spend your evenings plunging a " + Appearance.cockNoun(CockTypesEnum.HORSE) + " deep into their musky passages, dumping load after load of your thick animal-cum into them.  You'd be happy just fucking horsecunts morning, noon, and night.  Maybe somewhere there is a farm needing a breeder..");
					if (player.cor + player.lib > 125) outputText(" to whinny loudly like a rutting stallion.  Your " + Appearance.cockNoun(CockTypesEnum.HORSE) + " is perfect for fucking centaurs and mares.  You imagine the feel of plowing an equine pussy deeply, bottoming out and unloading sticky jets of horse-jizz into its fertile womb.  Your hand strokes your horsecock of its own accord, musky pre dripping from the flared tip with each stroke.  Your mind wanders to the thought of you with a harem of pregnant centaurs.");
					outputText(".");
					if (player.cor < 30) outputText("  You shudder in revulsion at the strange thoughts and vow to control yourself better.");
					if (player.cor >= 30 && player.cor < 60) outputText("  You wonder why you thought such odd things, but they have a certain appeal.");
					if (player.cor >= 60 && player.cor < 90) outputText("  You relish your twisted fantasies, hoping to dream of them again.");
					if (player.cor >= 90) outputText("  You flush hotly and give a twisted smile, resolving to find a fitting subject to rape and relive your fantasies.");
					dynStats("lib", .5, "lus", 10);
				}
				//Chance of ball growth if not 3" yet
				if (rand(2) === 0 && changes < changeLimit && player.ballSize <= 3 && player.countCocksOfType(CockTypesEnum.HORSE) > 0) {
					if (player.balls === 0) {
						player.balls = 2;
						player.ballSize = 1;
						outputText("\n\nA nauseating pressure forms just under the base of your maleness.  With agonizing pain the flesh bulges and distends, pushing out a rounded lump of flesh that you recognize as a testicle!  A moment later relief overwhelms you as the second drops into your newly formed sack.");
						dynStats("lib", 2, "lus", 5);
					}
					else {
						player.ballSize++;
						if (player.ballSize <= 2) outputText("\n\nA flash of warmth passes through you and a sudden weight develops in your groin.  You pause to examine the changes and your roving fingers discover your " + player.simpleBallsDescript() + " have grown larger than a human's.");
						if (player.ballSize > 2) outputText("\n\nA sudden onset of heat envelops your groin, focusing on your " + player.sackDescript() + ".  Walking becomes difficult as you discover your " + player.simpleBallsDescript() + " have enlarged again.");
						dynStats("lib", 1, "lus", 3);
					}
					changes++;
				}
			}
			//FEMALE
			if (player.gender === 2 || player.gender === 3) {
				//Single vag
				if (player.vaginas.length === 1) {
					if (player.vaginas[0].vaginalLooseness <= Vagina.LOOSENESS_GAPING && changes < changeLimit && rand(2) === 0) {
						outputText("\n\nYou grip your gut in pain as you feel your organs shift slightly.  When the pressure passes, you realize your " + player.vaginaDescript(0) + " has grown larger, in depth AND size.");
						player.vaginas[0].vaginalLooseness++;
						changes++;
					}
					if (player.vaginas[0].vaginalWetness <= Vagina.WETNESS_NORMAL && changes < changeLimit && rand(2) === 0) {
						outputText("\n\nYour " + player.vaginaDescript(0) + " moistens perceptably, giving off an animalistic scent.");
						player.vaginas[0].vaginalWetness++;
						changes++;
					}
				}
				//Multicooch
				else {
					//determine least wet
					//temp - least wet
					//temp2 - saved wetness
					//temp3 - counter
					temp = 0;
					temp2 = player.vaginas[temp].vaginalWetness;
					temp3 = player.vaginas.length;
					while (temp3 > 0) {
						temp3--;
						if (temp2 > player.vaginas[temp3].vaginalWetness) {
							temp = temp3;
							temp2 = player.vaginas[temp].vaginalWetness;
						}
					}
					if (player.vaginas[temp].vaginalWetness <= Vagina.WETNESS_NORMAL && changes < changeLimit && rand(2) === 0) {
						outputText("\n\nOne of your " + player.vaginaDescript(temp) + " moistens perceptably, giving off an animalistic scent.");
						player.vaginas[temp].vaginalWetness++;
						changes++;
					}
					//determine smallest
					//temp - least big
					//temp2 - saved looseness
					//temp3 - counter
					temp = 0;
					temp2 = player.vaginas[temp].vaginalLooseness;
					temp3 = player.vaginas.length;
					while (temp3 > 0) {
						temp3--;
						if (temp2 > player.vaginas[temp3].vaginalLooseness) {
							temp = temp3;
							temp2 = player.vaginas[temp].vaginalLooseness;
						}
					}
					if (player.vaginas[0].vaginalLooseness <= Vagina.LOOSENESS_GAPING && changes < changeLimit && rand(2) === 0) {
						outputText("\n\nYou grip your gut in pain as you feel your organs shift slightly.  When the pressure passes, you realize one of your " + player.vaginaDescript(temp) + " has grown larger, in depth AND size.");
						player.vaginas[temp].vaginalLooseness++;
						changes++;
					}
				}
				if (player.statusEffectv2(StatusEffects.Heat) < 30 && rand(2) === 0 && changes < changeLimit) {
					if (player.goIntoHeat(true)) {
						changes++;
					}
				}

				if (!flags[kFLAGS.HYPER_HAPPY])
				{
					if (rand(2) === 0 && changes < changeLimit) {
						//Shrink B's!
						//Single row
						if (player.breastRows.length === 1) {
							//Shrink if bigger than B cups
							if (player.breastRows[0].breastRating > 3) {
								temp = 1;
								player.breastRows[0].breastRating--;
								//Shrink again if huuuuge
								if (player.breastRows[0].breastRating > 8) {
									temp++;
									player.breastRows[0].breastRating--;
								}
								//Talk about shrinkage
								if (temp === 1) outputText("\n\nYou feel a weight lifted from you, and realize your " + player.breastDescript(0) + " have shrunk to a " + player.breastCup(0) + ".");
								if (temp === 2) outputText("\n\nYou feel significantly lighter.  Looking down, you realize your breasts are MUCH smaller, down to " + player.breastCup(0) + "s.");
								changes++;
							}

						}
						//multiple
						else {
							//temp2 = amount changed
							//temp3 = counter
							temp2 = 0;
							temp3 = player.breastRows.length;
							if (player.biggestTitSize() > 3) outputText("\n");
							while (temp3 > 0) {
								temp3--;
								if (player.breastRows[temp3].breastRating > 3) {
									player.breastRows[temp3].breastRating--;
									temp2++;
									outputText("\n");
									if (temp3 < player.breastRows.length - 1) outputText("...and y");
									else outputText("Y");
									outputText("our " + player.breastDescript(temp3) + " shrink, dropping to " + player.breastCup(temp3) + "s.");
								}
							}
							if (temp2 === 2) outputText("\nYou feel so much lighter after the change.");
							if (temp2 === 3) outputText("\nWithout the extra weight you feel particularly limber.");
							if (temp2 >= 4) outputText("\nIt feels as if the weight of the world has been lifted from your shoulders, or in this case, your chest.");
							if (temp2 > 0) changes++;
						}
					}
				}
			}
			//NON - GENDER SPECIFIC CHANGES
			//Tail -> Ears -> Fur -> Face
			//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++;
			}
			//HorseFace - Req's Fur && Ears
			if (mutations.tfNoFur() && player.face.type !== Face.HORSE && player.hasFur() && changes < changeLimit && rand(5) === 0 && player.ears.type === Ears.HORSE) {
				if (player.face.type === Face.DOG) outputText("\n\nMind-numbing pain shatters through you as you feel your facial bones rearranging.  You clutch at your face in agony as your skin crawls and shifts, your visage reshaping to replace your dog-like characteristics with those of a horse.  You now have a horse's face.");
				else outputText("\n\nMind-numbing pain shatters through you as you feel your facial bones breaking and shifting.  You clutch at yourself in agony as you feel your skin crawl and elongate under your fingers.  Eventually the pain subsides, leaving you with a face that seamlessly blends human and equine features.  You have a very equine-looking face.");
				changes++;
				player.face.type = Face.HORSE;
			}
			//Fur - if has horse tail && ears and not at changelimit
			if (mutations.tfNoFur() && !player.hasFur() && changes < changeLimit && rand(4) === 0 && player.tail.type === Tail.HORSE) {
				player.setFurColor(ColorLists.HORSE_FUR);
				if (player.hasPlainSkin()) outputText("\n\nAn itchy feeling springs up over every inch of your skin.  As you scratch yourself madly, you feel fur grow out of your skin until you have a fine coat of " + player.skin.furColor + "-colored fur.");
				if (player.hasScales()) {
					player.skin.desc = "fur";
					outputText("\n\nYour " + player.skin.tone + " scales begin to itch insufferably.  You reflexively scratch yourself, setting off an avalanche of discarded scales.  The itching intensifies as you madly scratch and tear at yourself, revealing a coat of " + player.skin.furColor + " " + player.skin.desc + ".  At last the itching stops as you brush a few more loose scales from your new coat of " + player.skin.furColor + "-colored fur.");
				}
				changes++;
				player.skin.type = Skin.FUR;
				player.skin.desc = "fur";
				player.underBody.restore(); // Restore the underbody for now
			}
			// Hooves - Tail
			if (player.lowerBody.type !== LowerBody.HOOFED && player.tail.type === Tail.HORSE && changes < changeLimit && rand(5) === 0) {
				changes++;
				if (player.lowerBody.type === LowerBody.HUMAN) outputText("\n\nYou stagger as your feet change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
				else if (player.lowerBody.type === LowerBody.DOG) outputText("\n\nYou stagger as your paws change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
				else if (player.lowerBody.type === LowerBody.NAGA) outputText("\n\nYou collapse as your sinuous snake-tail tears in half, shifting into legs.  The pain is immense, particularly in your new feet as they curl inward and transform into hooves!");
				//Catch-all
				else if (player.lowerBody.type > LowerBody.NAGA) outputText("\n\nYou stagger as your " + player.feet() + " change, curling up into painful angry lumps of flesh.  They get tighter and tighter, harder and harder, until at last they solidify into hooves!");
				else if (!player.hasFur()) outputText("  A fine coat of fur grows out below your waist, itching briefly as it fills in.");
				outputText("  You now have hooves in place of your feet!");
				player.lowerBody.type = LowerBody.HOOFED;
				player.lowerBody.legCount = 2;
				dynStats("spe", 1);
				changes++;
			}
			//Ears - requires tail
			if (player.ears.type !== Ears.HORSE && player.tail.type === Tail.HORSE && changes < changeLimit && rand(3) === 0) {
				if (player.ears.type === -1) outputText("\n\nTwo painful lumps sprout on the top of your head, forming into tear-drop shaped ears, covered with short fur.  ");
				if (player.ears.type === Ears.HUMAN) outputText("\n\nYour ears tug painfully on your face as they begin shifting, moving upwards to the top of your head and transforming into an upright animalistic ears.  ");
				if (player.ears.type === Ears.DOG) outputText("\n\nYour ears change shape, morphing into from their doglike shape into equine-like ears!  ");
				if (player.ears.type > Ears.DOG) outputText("\n\nYour ears change shape, morphing into teardrop-shaped horse ears!  ");
				player.ears.type = Ears.HORSE;
				player.ears.value = 0;
				outputText("You now have horse ears.");
				changes++;
			}
			//Tail - no-prereq
			if (player.tail.type !== Tail.HORSE && rand(2) === 0 && changes < changeLimit) {
				//no tail
				if (player.tail.type === 0) {
					outputText("\n\nThere is a sudden tickling on your ass, and you notice you have sprouted a long shiny horsetail of the same " + player.hair.color + " color as your hair.");
				}
				//if other animal tail
				if (player.tail.type > Tail.HORSE && player.tail.type <= Tail.COW) {
					outputText("\n\nPain lances up your " + player.assholeDescript() + " as your tail shifts and morphs disgustingly.  With one last wave of pain, it splits into hundreds of tiny filaments, transforming into a horsetail.");
				}
				//if bee/spider-butt.
				if ((player.tail.type > Tail.COW && player.tail.type < Tail.SHARK)) {
					outputText("\n\nYour insect-like abdomen bunches up as it begins shrinking, exoskeleton flaking off like a snake sheds its skin.  It bunches up until it is as small as a tennis ball, then explodes outwards, growing into an animalistic tail shape.  Moments later, it explodes into filaments of pain, dividing into hundreds of strands and turning into a shiny horsetail.");
				}
				if (player.tail.type >= Tail.SHARK) {
					outputText("\n\nPain lances up your " + player.assholeDescript() + " as your tail shifts and morphs disgustingly.  With one last wave of pain, it splits into hundreds of tiny filaments, transforming into a horsetail.");
				}
				outputText("  You now have a horse-tail.");
				player.tail.type = Tail.HORSE;
				player.tail.venom = 0;
				player.tail.recharge = 0;
				changes++;
			}
			// Remove gills
			if (rand(4) === 0 && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}

			if (rand(3) === 0) outputText(player.modTone(60, 1));
			//FAILSAFE CHANGE
			if (changes === 0) {
				outputText("\n\nInhuman vitality spreads through your body, invigorating you!\n");
				player.HPChange(20, true);
				dynStats("lus", 3);
			}
			player.refillHunger(15);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	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.ColorLists;

	/**
	 * Ferret transformative item.
	 */
	public class FerretFruit extends Consumable
	{
		public function FerretFruit()
		{
			super("Frrtfrt","FerretFrt","a ferret fruit", ConsumableLib.DEFAULT_VALUE, "This fruit is curved oddly, just like the tree it came from.  The skin is fuzzy and brown, like the skin of a peach.");
		}

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

			mutations.initTransformation([2, 2, 3]);
			clearOutput();
			outputText("Feeling parched, you gobble down the fruit without much hesitation. Despite the skin being fuzzy like a peach, the inside is relatively hard, and its taste reminds you of that of an apple.  It even has a core like an apple. Finished, you toss the core aside.");

			if (rand(100) === 0)
			{
				outputText("\n\nSeems like nothing else happened. Was the fruit spoiled?");
				return false;
			}

			//BAD END:
			if (
				player.face.type === Face.FERRET &&
				player.ears.type === Ears.FERRET &&
				player.tail.type === Tail.FERRET &&
				player.lowerBody.type === LowerBody.FERRET &&
				player.hasFur() &&
				!player.isTFResistant()
			) {
				//Get warned!
				if (flags[kFLAGS.FERRET_BAD_END_WARNING] === 0) {
					outputText("\n\nYou find yourself staring off into the distance, dreaming idly of chasing rabbits through a warren.  You shake your head, returning to reality.  Perhaps you should cut back on all the Ferret Fruit?");
					player.inte -= 5 + rand(3);
					if (player.inte < 5) player.inte = 5;
					flags[kFLAGS.FERRET_BAD_END_WARNING] = 1;
				}
				//BEEN WARNED! BAD END! DUN DUN DUN
				else if (rand(3) === 0)
				{
					//-If you fail to heed the warning, it’s game over:
					outputText("\n\nAs you down the fruit, you begin to feel all warm and fuzzy inside.  You flop over on your back, eagerly removing your clothes.  You laugh giddily, wanting nothing more than to roll about happily in the grass.  Finally finished, you attempt to get up, but something feels...  different.  Try as you may, you find yourself completely unable to stand upright for a long period of time.  You only manage to move about comfortably on all fours.  Your body now resembles that of a regular ferret.  That can’t be good!  As you attempt to comprehend your situation, you find yourself less and less able to focus on the problem.  Your attention eventually drifts to a rabbit in the distance.  You lick your lips. Nevermind that, you have warrens to raid!");
					game.gameOver();
					return false;
				}
			}
			//Reset the warning if ferret score drops.
			else
			{
				flags[kFLAGS.FERRET_BAD_END_WARNING] = 0;
			}

			//Ferret Fruit Effects
			//- + Thin:
			if (player.thickness > 15 && changes < changeLimit && rand(3) === 0)
			{
				outputText("\n\nEach movement feels a tiny bit easier than the last.  Did you just lose a little weight!? (+2 thin)");
				player.thickness -=2;
				changes++;
			}
			//- If speed is < 100, increase speed:
			if (player.spe100 < 100 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYour muscles begin to twitch rapidly under the fruit effects, but the feeling is not entirely unpleasant."
				          +" In fact, you have the feeling that running will be now much easier.");
				dynStats("spe", 2 + rand(2));
			}
			//- If male with a hip rating >4 or a female/herm with a hip rating >6:
			if ((player.hips.rating > (player.isFemaleOrHerm() ? 6 : 4)) && rand(3) === 0 && changes < changeLimit)
			{
				outputText("\n\nA warm, tingling sensation arises in your [hips]. Immediately, you reach down to them, concerned."
				          +" You can feel a small portion of your [hips] dwindling away under your hands. Seem like more voluptuous assets would be"
				          +" cumbersome for you now streamlined frame.");
				player.hips.rating--;
				if (player.hips.rating > 10) player.hips.rating--;
				if (player.hips.rating > 15) player.hips.rating--;
				if (player.hips.rating > 20) player.hips.rating--;
				if (player.hips.rating > 23) player.hips.rating--;
				changes++;
			}
			//- If butt rating is greater than “petite”:
			if (player.butt.rating > 6 && rand(3) === 0 && changes < changeLimit)
			{
				outputText("\n\nYou cringe as your [butt] begins to feel uncomfortably tight.  Once the sensation passes,"
				          +" you look over your shoulder, inspecting yourself. It would appear that your ass has become smaller."
				          +" While a bit of a disappointment, at least the loss of extra mass will make you light and faster.");
				player.butt.rating--;
				if (player.butt.rating > 10) player.butt.rating--;
				if (player.butt.rating > 15) player.butt.rating--;
				if (player.butt.rating > 20) player.butt.rating--;
				if (player.butt.rating > 23) player.butt.rating--;
				changes++;
			}

			//-If male with breasts or female/herm with breasts > B cup:
			if (!flags[kFLAGS.HYPER_HAPPY] && (player.biggestTitSize() > 2 || (player.hasCock() && player.biggestTitSize() >= 1)) && rand(2) === 0 && changes < changeLimit)
			{
				outputText("\n\nYou cup your tits as they begin to tingle strangely.  You can actually feel them getting smaller in your hands!");
				for(x = 0; x < player.bRows(); x++)
				{
					if (player.breastRows[x].breastRating > 2 || (player.hasCock() && player.breastRows[x].breastRating >= 1))
					{
						player.breastRows[x].breastRating--;
					}
				}
				changes++;
				//(this will occur incrementally until they become flat, manly breasts for males, or until they are A or B cups for females/herms)
			}

			//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++;
				}
			}

			//-If penis size is > 6 inches:
			if (player.hasCock())
			{
				//Find longest cock
				temp = -1;
				for(x = 0; x < player.cockTotal(); x++)
				{
					if (temp === -1 || player.cocks[x].cockLength > player.cocks[temp].cockLength) temp = x;
				}
				if (temp >= 0 && rand(2) === 0 && changes < changeLimit)
				{
					if (player.cocks[temp].cockLength > 6 && !flags[kFLAGS.HYPER_HAPPY])
					{
						outputText("\n\nA pinching sensation racks the entire length of your " + player.cockDescript(temp) + ".  Within moments, the sensation is gone, but it appears to have become smaller.");
						player.cocks[temp].cockLength--;
						if (rand(2) === 0) player.cocks[temp].cockLength--;
						if (player.cocks[temp].cockLength >= 9) player.cocks[temp].cockLength -= rand(3) + 1;
						if (player.cocks[temp].cockLength/6 >= player.cocks[temp].cockThickness)
						{
							outputText("  Luckily, it doesn’t seem to have lost its previous thickness.");
						}
						else
						{
							player.cocks[temp].cockThickness = player.cocks[temp].cockLength/6;
						}
						changes++;
					}
				}
			}
			//Cock -> Ferret cock
			if (player.hasCock() && player.cocks[0].cockType !== CockTypesEnum.FERRET && 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 ferret cock!");
				player.cocks[0].cockType = CockTypesEnum.FERRET;
				changes++;
			}

			//-If the PC has quad 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. It seems like the mustelid strain on the fruit isn’t"
				          +" compatible with such an amount of them, so you are left with only one nipple on each breast.");
				for(x = 0; x < player.bRows(); x++)
				{
					player.breastRows[x].nipplesPerBreast = 1;
				}
				changes++;
			}
			//If the PC has gills:
			if (player.hasGills() && rand(4) === 0 && changes < changeLimit) {
				mutations.updateGills();
			}
			//Hair
			var oldHairType:Number = player.hair.type;
			var hasFerretHairColor:Boolean = ColorLists.FERRET_HAIR.indexOf(player.hair.color) !== -1;
			if ((player.hair.type !== Hair.NORMAL || !hasFerretHairColor || player.hair.length <= 0) && rand(4) === 0 && changes < changeLimit)
			{
				if (!hasFerretHairColor)
					player.hair.color = randomChoice(ColorLists.FERRET_HAIR);

				flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] = 0;
				player.hair.type = Hair.NORMAL;

				if (player.hair.length <= 0) {
					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 (oldHairType === Hair.NORMAL && !hasFerretHairColor) {
					outputText("\n\nA mild tingling on your scalp makes your check yourself on the stream. Seems like the fruit is changing your"
					          +" hair this time, turning it into [hair].");
				} else {
					switch (oldHairType) {
						case Hair.FEATHER:
							outputText("\n\nWith the taste of the fruit still lingering, you start feeling an odd itch on your scalp."
							          +" When you scratch it, you see how your feathered hair has begin to shed, downy feathers falling from your"
							          +" head until you’re left bald. It doesn’t last long, fortunately, as you feel hairs sprouting from your scalp."
							          +" Checking the changes on the nearby river, you get a glimpse of how your new [hairColor] hair begins to"
							          +" rapidly grow. You now have [hair]!");
							break;

						case Hair.GOO:
							player.hair.length = 1;
							outputText("\n\nAfter having gulped down the fruit last bit, 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;

						/* [INTERMOD: xianxia]
						case Hair.GORGON:
							player.hair.length = 1;
							outputText("\n\nAs the fruit last juices run through your mouth, the scaled critters on your head shake wildly in pained"
							          +" displeasure. Then, a sudden heat envelopes your scalp. The transformative effects of the sweet fruit 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 of 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;
						*/

						default:
							outputText("\n\nA mild tingling on your scalp makes your check yourself on the stream. Seems like the fruit is changing"
							          +" your hair this time, turning it into [hair].");
					}
				}
				changes++;
			}
			//If the PC has four eyes:
			if ((player.eyes.type === Eyes.FOUR_SPIDER_EYES || player.eyes.count > 2) && rand(3) === 0 && changes < changeLimit)
			{
				outputText("\n\nYou vision turns black, forcing you to freeze where you are as the sudden blindness put you in danger of hitting"
				          +" something dangerous. Thank Marae, it doesn’t take long to your sight to return as usual, only with a little change."
				          +" As your vision filed feels oddly changed, you check the changes in your visage, noting that the number of eyes in your"
				          +" head has dropped to the average pair! You have normal human eyes again!");
				player.eyes.type = Eyes.HUMAN;
				player.eyes.count = 2;
				changes++;
			}
			//Go into heat
			if (rand(3) === 0 && changes < changeLimit) {
				if (player.goIntoHeat(true)) {
						changes++;
				}
			}
			//Neck restore
			if (player.neck.type != Neck.NORMAL && changes < changeLimit && rand(4) == 0) mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && rand(5) == 0) mutations.restoreRearBody(tfSource);
			//Ovi perk loss
			if (rand(5) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			//Turn ferret mask to full furface.
			if (mutations.tfNoFur() && player.face.type === Face.FERRET_MASK && player.hasFur() && player.ears.type === Ears.FERRET && player.tail.type === Tail.FERRET && player.lowerBody.type === LowerBody.FERRET && rand(4) === 0 && changes < changeLimit)
			{
				outputText("\n\nNumbness overcomes your lower face, while the rest of your head is caught 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. At its top, your nose acquire a triangular shape, proper of a ferret and an adorable pink color."
				          +" You jaw joins it and your teeth sharpen, reshaping in the way of belonging on a little carnivore,"
				          +" albeit without looking menacing or intimidating.");
				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 [furColor] coloration, turning into white at your muzzle, cheeks and ears. The darkened skin around your eyes"
				          +" also changes, turning into a mask of equally soft fur colored in a darker shade of [furColor]."
				          +" Well, seems like you now have an animalistic, ferret face!");
				player.face.type = Face.FERRET;
				changes++;
			}
			//If face is human:
			if (player.face.type === Face.HUMAN && rand(3) === 0 && changes < changeLimit)
			{
				outputText("\n\nA sudden itching begins to encompass the area around your eyes. Grunting in annoyance, you rub furiously at the"
				          +" afflicted area. Once the feeling passes, you make your way to the nearest reflective surface to see if anything"
				          +" has changed. There, your suspicions are confirmed. The [skinFurScales] around your eyes has darkened."
				          +" You now have a ferret mask!");
				player.face.type = Face.FERRET_MASK;
				changes++;
			}
			//If face is not ferret, has ferret ears, tail, and legs:
			if ([Face.HUMAN, Face.FERRET_MASK, Face.FERRET].indexOf(player.face.type) === -1 && rand(3) === 0 && changes < changeLimit)
			{
				outputText("\n\nYou groan uncomfortably as the bones in your [face] begin to rearrange.  You grab your head with both hands,"
				          +" rubbing at your temples in an attempt to ease the pain.  As the shifting stops, you frantically feel at your face."
				          +" The familiar feeling is unmistakable. Your face is human again!");
				player.face.type = Face.HUMAN;
				changes++;
			}
			//Skin
			function setFurrySkin():void
			{
				var newFurColors:Array = randomChoice(ColorLists.FERRET_FUR);
				player.skin.type = Skin.FUR;
				player.skin.adj = "";
				player.skin.desc = "fur";
				player.skin.furColor = newFurColors[0];
				player.underBody.type = UnderBody.FURRY;
				player.copySkinToUnderBody({furColor: newFurColors[1]});
				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) {
				setFurrySkin();
				outputText("\n\nLooks, like the fruit has changed your fur colors."
				          +" You’re now covered from head to toe with [furColor] fur with [underBody.furColor] fur on your underside!");
			}
			//No fur, has ferret ears, tail, and legs:
			if (mutations.tfNoFur() && !player.hasFur() && player.ears.type === Ears.FERRET && player.tail.type === Tail.FERRET && player.lowerBody.type === LowerBody.FERRET && rand(4) === 0 && changes < changeLimit)
			{
				var oldSkinType:Number = player.skin.type;
				if (["latex", "rubber"].indexOf(player.skin.adj) !== -1)
					oldSkinType = -99; // Pseudo-skintype for rubbery skin
				setFurrySkin();
				switch (oldSkinType) {
					case Skin.DRAGON_SCALES:
					case Skin.FISH_SCALES:
					case Skin.LIZARD_SCALES:
						outputText("\n\nThe layer of scales covering your body feels weird for a second, almost looking like they’re moving"
						          +" on their 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 [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.");
						break;

					case Skin.GOO:
						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 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 [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.");
						break;

					case Skin.FEATHERED:
						outputText("\n\nYou start to scratch your plumage, 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,"
						          +" and instead of coming from your skin, it originates from your feathers.");
						break;

					case Skin.WOOL:
						outputText("\n\nYou start to scratch your wooly fur, 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,"
						          +" and instead of coming from your skin, it originates from your wool.");
						break;

					/* [INTERMOD: Revamp Dryad]
					case Skin.BARK:
						outputText("\n\nYour usually fresh and solid bark 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 barked 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 bark falls"
						          +" from your arm. Soon all the barked surface on your arm melts off, leaving behind a layer of healthy, normal,"
						          +" [skin] covered by a thin layer of sweet smelling resin, that it’s quickly washed off by the stream."
						          +" The process continues over the rest of your body, and before you can react your body is covered"
						          +" in a layer of fresh new [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.");
						break;
					*/

					case -99:
						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 [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.");
						break;

					case Skin.PLAIN:
					default:
						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.");

				}
				switch (oldSkinType) {
					case Skin.FEATHERED:
						outputText("\n\nRubbing on of your arms to ease the itching, you’re somewhat alarmed at seeing some of the feathers falling,"
						          +" but are soon relieved at discovering that they’re only changing, as they leave behind a patch of [furColor] fur."
						          +" Similar changes happen over your legs, chest and back, not leaving an inch of your plumage unaffected. Fur grows"
						          +" over your body as the feathers fall, the lone patches joining and closing as the layer of plumage disappears,"
						          +" 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."
						          +"\nSeems like you’re now covered from head to toe with [furColor] fur"
						          +" with [underBody.furColor] fur on your underside!");
						break;

					case Skin.WOOL:
						outputText("\n\nRubbing on of your arms to ease the itching, you’re somewhat alarmed at seeing some of the wool falling,"
						          +" but are soon relieved at discovering that they’re only changing, as they leave behind a patch of [furColor] fur,"
						          +" much more shorter, but still quite fuzzy. Similar changes happen over your legs, chest and back, not leaving an"
						          +" inch of your wool unaffected. Fur grows over your body as the strands of wool fall, the lone patches joining and"
						          +" closing as the layer of wooly fur disappear, and in a matter of seconds, your entire body is covered with a"
						          +" lovely coat of standard, fuzzy fur. The soft and fluffy sensation is quite pleasant to the touch."
						          +"\nSeems like you’re now covered from head to toe with [furColor] fur"
						          +" with [underBody.furColor] fur on your underside!");
						break;

					default:
						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."
						          +"\nSeems like you’re now covered from head to toe with [furColor] fur"
						          +" with [underBody.furColor] fur on your underside!");
				}
			}
			//Tail TFs!
			if (player.tail.type !== Tail.FERRET && player.ears.type === Ears.FERRET && rand(3) === 0 && changes < changeLimit)
			{
				switch (player.tail.type) {
					case Tail.NONE:
						outputText("\n\nFeeling an uncomfortable sensation on your butt, you stretch yourself, attributing it to having sat on a"
						          +" rough surface. An annoying feeling runs troughs your body, forcing you to sit down. 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 odd feeling that now pulsates through your spine,"
						          +" and once its twisting sensations have stopped, the appendage itself has become a long, fluffy tube."
						          +" [if (hasArmor)Luckily, the transformative outburst doesn’t seem to have damaged your [armor].]");
						outputText("\n\nShortly after, the lingering effects of the fruit return, the changes now focused on your tail proper,"
						          +" 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 fur covers it in a matter of seconds. It seems that you unconsciously make it"
						          +" move excitedly or nervously when you feel the same, not unlike a ferret would do.");
						break;

					case Tail.BEE_ABDOMEN:
					case Tail.SPIDER_ABDOMEN:
						outputText("\n\nYour rounded abdomen feels oddly hot at the touch. In a matter of second, the hat withing propagates to the"
						          +" rest of your body, and you ponder for a bit if you haven’t caught a fever. Weakened from a sudden, you have to"
						          +" lean your overheated body against a nearby rock. But, as soon as it came, the heat goes away.");
						outputText("\n\nIt didn't went away alone, it seems, because when you glimpse at your backside you notice that where once"
						          +" there was a large, insectile abdomen[if (hasOvipositor) and an ovipositor], there only is a normal, human set of"
						          +" normal-looking buttcheeks, covered in [skinfurScales].");
						outputText("\n\nThen, a second later, an annoying feeling runs troughs your body, forcing you to sit down. 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 odd feeling that now pulsates through your spine,"
						          +" and once its twisting sensations have stopped, the appendage itself has become a long, fluffy tube.");
						outputText("\n\nShortly after, the lingering effects of the fruit return, the changes now focused on your tail proper,"
						          +" 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 fur covers it in a matter of seconds. It seems that you unconsciously make it"
						          +" move excitedly or nervously when you feel the same, not unlike a ferret would do.");
						break;

					default:
						if (player.tail.type === Tail.FOX && player.tail.venom > 1) {// multi-tail
							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 odd feeling, between a mild nausea and plain dizziness,"
							          +" 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 lingering effects of the fruit return, the changes"
							          +" now focused on your tail proper, 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 fur covers it in a matter of"
							          +" seconds. It seems that you unconsciously make it move excitedly or nervously when you feel the same,"
							          +" not unlike a ferret would do.");
							break;
						}

						// Other tails
						outputText("\n\nThe lingering effects of the fruit return, the changes now focused on your tail proper, 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 fur covers it in a matter of seconds. It seems that you unconsciously make it move excitedly or nervously"
						          +" when you feel the same, not unlike a ferret would do.");
				}
				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 have now a long, bushy, ferret tail!");
				player.tail.setAllProps({type: Tail.FERRET});
				changes++;
			}
			//If legs are not ferret, has ferret ears and tail
			if (player.lowerBody.type !== LowerBody.FERRET && player.ears.type === Ears.FERRET && player.tail.type === Tail.FERRET && rand(4) === 0 && changes < changeLimit)
			{
				//-If centaur, has ferret ears and tail:
				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 [if (hasFurryUnderBody)[underBody.furColor]|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 ferret paws!");
				} else {
					switch (player.lowerBody.type) {
						case LowerBody.NAGA:
							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"
							          +" [if (hasFurryUnderBody)[underBody.furColor]|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 ferret paws!");
							break;

						case LowerBody.GOO:
							outputText("\n\nYour usually fluid gooey appendage becomes strangely rigid, forcing you to stay still as you are."
							          +" Then, in front of your eyes, you see how the goo on it concentrates and shapes into the usual shape of two"
							          +" legs. Faster than you can would’ve imagined, the fluid turns into solid bones, that are instantly enveloped"
							          +" by tissues, nerves and muscles, only to be finally covered in a layer of soft, human-looking skin."
							          +" You test your re-gained feet, smiling when discovering"
							          +" that you can use them as before without major issue.");
							outputText("\n\nThen, a feeling of unease forces you 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"
							          +"  fur. It feels quite soft and fluffy."
							          +" You’ve gained a set of ferret paws!");
							break;

						case LowerBody.DRIDER:
							outputText("\n\nYou eight spider-like legs tremble, forcing you to lie on the ground, as they doesn't seem 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. Soon enough, the feeling returns to your reformed legs, only to come with an"
							          +" itching sensation. A thick [if (hasFurryUnderBody)[underBody.furColor]|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 ferret paws!");
							break;

						case LowerBody.HUMAN:
						case LowerBody.HOOFED:
						case LowerBody.CLOVEN_HOOFED:
						case LowerBody.DEMONIC_CLAWS:
						case LowerBody.DEMONIC_HIGH_HEELS:
						default:
							outputText("\n\nA feeling of unease forces you 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"
							          +" [if (hasFurryUnderBody)[underBody.furColor]|black-brown] fur. It feels quite soft and fluffy."
							          +" You’ve gained a set of ferret paws!");
					}
				}
				changes++;
				player.lowerBody.type = LowerBody.FERRET;
				player.lowerBody.legCount = 2;
			}
			//Arms
			if (player.arms.type !== Arms.FERRET && player.tail.type === Tail.FERRET && player.lowerBody.type === LowerBody.FERRET && rand(4) === 0 && changes < changeLimit)
			{
				outputText("\n\nWeakness overcomes your arms, and no matter what you do, you can’t muster the strength to raise or move them."
				          +" Did the fruit had some drug-like effects? 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 [if (hasFurryUnderBody)[underBody.furColor]|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 ferret!");
				player.arms.setType(Arms.FERRET);
				changes++;
			}
			//If ears are not ferret:
			if (player.ears.type !== Ears.FERRET && rand(4) === 0 && changes < changeLimit)
			{
				outputText("\n\nYour ears twitch under the fruit transformative effects, and your hearing is diminished for a while when they change."
				          +" As uncomfortable as it is, the process, luckily, doesn’t take too much time. The flesh on your ears shift and merges"
				          +" into a couple of small, round ones. Then, [furColor] fur sprouts over them, as they locate themselves at the sides of"
				          +" your head, ready to detect any nearby sound. At the end, you’re left with a pair of ferret ears, quite animalistic on"
				          +" their shape and looks. You’ve got ferret ears!");
				player.ears.type = Ears.FERRET;
				changes++;
			}
			//Remove antennae, if insectile
			if (player.hasInsectAntennae() && rand(4) === 0 && changes < changeLimit)
			{
				outputText("\n\nThe antennae parting your hair become suddenly numb, no doubt due the fruit effects, and they become thinner"
				          +" and thinner. When they’re almost hair-width, the remaining flesh on them reabsorbs itself on your head."
				          +" Seems like your antennae are gone.");
				player.antennae.type = Antennae.NONE;
				changes++;
			}
			//If no other effect occurred, fatigue decreases:
			if (changes === 0)
			{
				outputText("\n\nYour eyes widen.  With the consumption of the fruit, you feel much more energetic.  You’re wide awake now!");
				player.changeFatigue(-20);
			}
			player.refillHunger(20);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}
	}
}

license: unknown


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

	public class FishFillet extends Consumable
	{
		public function FishFillet()
		{
			super("FishFil", "FishFil", "a fish fillet", ConsumableLib.DEFAULT_VALUE, "A perfectly cooked piece of fish.  You're not sure what type of fish is, since you're fairly certain \"delicious\" is not a valid species.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			if (!game.inCombat) outputText("You sit down and unwrap your fish fillet. It's perfectly flaky, allowing you to break it off in bite-sized chunks.  The salty meal disappears quickly," +
					" and your stomach gives an appreciative gurgle. ");
			//(In combat?)
			else outputText("You produce the fish fillet from your bag.  Rather than unwrap it and savor the taste as you normally would, you take a large bite out of it, leaf wrapping and all.  In no time your salty meal is gone, your stomach giving an appreciative gurgle. ");

			//Increase HP by quite a bit!)
			//(Slight chance at increasing Toughness?)
			//(If lake has been tainted, +1 Corruption?)
			if (flags[kFLAGS.FACTORY_SHUTDOWN] == 2) dynStats("cor", 0.5);
			if (flags[kFLAGS.FACTORY_SHUTDOWN] == 1) dynStats("cor", -0.1);
			dynStats("cor", 0.1);
			player.HPChange(Math.round(player.maxHP() * .25), true);
			player.refillHunger(30);

			return false;
		}
	}
}