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

	/**
	 * Antlion? transformative item.
	 */
	public class TrapOil extends Consumable
	{
		public function TrapOil()
		{
			super("TrapOil","TrapOil", "a vial of trap oil", ConsumableLib.DEFAULT_VALUE, "A round, opaque glass vial filled with a clear, viscous fluid.  It has a symbol inscribed on it, a circle with a cross and arrow pointing out of it in opposite directions.  It looks and smells entirely innocuous.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "trapOil";
			var temp:int = 0;
			mutations.initTransformation([2, 3, 3]);
			clearOutput();
			outputText("You pour some of the oil onto your hands and ");
			if (player.cor < 30) outputText("hesitantly ");
			else if (player.cor > 70) outputText("eagerly ");
			outputText("rub it into your arms and chest.  The substance is warm, coating and ever so slightly numbing; it quickly sinks into your skin, leaving you feeling smooth and sleek.");

			//Speed Increase:
			if (player.spe100 < 100 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel fleet and lighter on your toes; you sense you could dodge, dart or skip away from anything.");
				dynStats("spe", 1);
			}
			//Strength Loss:
			else if (player.str100 > 40 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nA sense of helplessness settles upon you as your limbs lose mass, leaving you feeling weaker and punier.");
				dynStats("str", -1);
			}
			//Sensitivity Increase:
			if (player.sens100 < 70 && player.hasCock() && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nA light breeze brushes over you and your skin tingles.  You have become more sensitive to physical sensation.");
				dynStats("sen", 5);
			}
			//Libido Increase:
			if (player.lib100 < 70 && player.hasVagina() && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel your blood quicken and rise, and a desire to... hunt builds within you.");
				dynStats("lib", 2);
				if (player.lib100 < 30) dynStats("lib", 2);
			}
			//Body Mass Loss:
			if (player.thickness > 40 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel an odd tightening sensation in your midriff, as if you were becoming narrower and lither.  You frown downwards, and then turn your arms around, examining them closely.  Is it just you or have you lost weight?");
				player.modThickness(40, 3);
				changes++;
			}

			//Thigh Loss: (towards “girly”)
			if (player.hips.rating >= 10 && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou touch your thighs speculatively.  It's not just your imagination; you've lost a bit of weight around your waist.");
				player.hips.rating--;
				if (player.hips.rating > 15) player.hips.rating -= 2 + rand(3);
				changes++;
			}
			//Thigh Gain: (towards “girly”)
			if (player.hips.rating < 6 && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou touch your thighs speculatively.  You think you may have gained a little weight around your waist.");
				player.hips.rating++;
				changes++;
			}
			//Breast Loss: (towards A cup)
			if (player.biggestTitSize() > 1 && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou gasp as you feel a compressing sensation in your chest and around your [fullChest].  The feeling quickly fades however, leaving you feeling like you have lost a considerable amount of weight from your upper body.");
				temp = 0;
				while (temp < player.bRows()) {
					if (player.breastRows[temp].breastRating > 70) player.breastRows[temp].breastRating -= rand(3) + 15;
					else if (player.breastRows[temp].breastRating > 50) player.breastRows[temp].breastRating -= rand(3) + 10;
					else if (player.breastRows[temp].breastRating > 30) player.breastRows[temp].breastRating -= rand(3) + 7;
					else if (player.breastRows[temp].breastRating > 15) player.breastRows[temp].breastRating -= rand(3) + 4;
					else player.breastRows[temp].breastRating -= 2 + rand(2);
					if (player.breastRows[temp].breastRating < 1) player.breastRows[temp].breastRating = 1;
					temp++;
				}
				changes++;
			}
			//Breast Gain: (towards A cup)
			if (player.biggestTitSize() < 1 || player.breastRows[0].breastRating < 1 && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel a vague swelling sensation in your [fullChest], and you frown downwards.  You seem to have gained a little weight on your chest.  Not enough to stand out, but- you cup yourself carefully- certainly giving you the faintest suggestion of boobs.");
				player.breastRows[0].breastRating = 1;
				if (player.bRows() > 1) {
					temp = 1;
					while (temp < player.bRows()) {
						if (player.breastRows[temp].breastRating < 1) player.breastRows[temp].breastRating = 1;
						temp++;
					}
				}
				changes++;
			}
			//Penis Reduction towards 3.5 Inches:
			if (player.longestCockLength() >= 3.5 && player.hasCock() && rand(2) === 0 && changes < changeLimit) {
				outputText("\n\nYou flinch and gasp as your " + player.multiCockDescriptLight() + " suddenly become");
				if (player.cockTotal() === 1) outputText("s");
				outputText(" incredibly sensitive and retract into your body.  Anxiously you pull down your underclothes to examine your nether regions.  To your relief ");
				if (player.cockTotal() === 1) outputText("it is");
				else outputText("they are");
				outputText(" still present, and as you touch ");
				if (player.cockTotal() === 1) outputText("it");
				else outputText("them");
				outputText(", the sensitivity fades, however - a blush comes to your cheeks - ");
				if (player.cockTotal() === 1) outputText("it seems");
				else outputText("they seem");
				outputText(" to have become smaller.");
				temp = 0;
				while (temp < player.cockTotal()) {
					if (player.cocks[temp].cockLength >= 3.5) {
						//Shrink said cock
						if (player.cocks[temp].cockLength < 6 && player.cocks[temp].cockLength >= 2.9) {
							player.cocks[temp].cockLength -= .5;
							if (player.cocks[temp].cockThickness * 6 > player.cocks[temp].cockLength) player.cocks[temp].cockThickness -= .2;
							if (player.cocks[temp].cockThickness * 8 > player.cocks[temp].cockLength) player.cocks[temp].cockThickness -= .2;
							if (player.cocks[temp].cockThickness < .5) player.cocks[temp].cockThickness = .5;
						}
						player.cocks[temp].cockLength -= 0.5;
						player.increaseCock(temp, Math.round(player.cocks[temp].cockLength * 0.33) * -1);
					}
					temp++;
				}
				changes++;
			}
			//Testicle Reduction:
			if (player.balls > 0 && player.hasCock() && (player.ballSize > 1 || !player.hasStatusEffect(StatusEffects.Uniball)) && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel a delicate tightening sensation around your [balls].  The sensation upon this most sensitive part of your anatomy isn't painful, but the feeling of your balls getting smaller is intense enough that you stifle anything more than a sharp intake of breath only with difficulty.");
				player.ballSize--;
				if (player.ballSize > 8) player.ballSize--;
				if (player.ballSize > 10) player.ballSize--;
				if (player.ballSize > 12) player.ballSize--;
				if (player.ballSize > 15) player.ballSize--;
				if (player.ballSize > 20) player.ballSize--;
				//Testicle Reduction final:
				if (player.ballSize < 1 && !player.hasStatusEffect(StatusEffects.Uniball)) {
					outputText("  You whimper as once again, your balls tighten and shrink.  Your eyes widen when you feel the gentle weight of your testicles pushing against the top of your [hips], and a few hesitant swings of your rear confirm what you can feel--you've tightened your balls up so much they no longer hang beneath your " + player.multiCockDescriptLight() + ", but press perkily upwards.  Heat ringing your ears, you explore your new sack with a careful hand.  You discover that though you still have " + num2Text(player.balls) + ", your balls now look and feel like one: one cute, tight little sissy parcel, its warm, insistent pressure upwards upon the joining of your thighs a never-ending reminder of it.");
					//[Note: Balls description should no longer say “swings heavily beneath”.  For simplicity's sake sex scenes should continue to assume two balls]
					player.createStatusEffect(StatusEffects.Uniball, 0, 0, 0, 0);
				}
				if (player.ballSize < 0.5) player.ballSize = 0.5;
				changes++;
			}
			//Anal Wetness Increase:
			if (player.ass.analWetness < 5 && rand(4) === 0 && changes < changeLimit) {
				if (player.ass.analWetness < 4) outputText("\n\nYour eyes widen in shock as you feel oily moisture bead out of your [asshole].  Your asshole has become wetter and more pliable.");
				//Anal Wetness Increase Final (always loose):
				else outputText("\n\nYou moan as clear, odorless oil dribbles out of your [asshole], this time in enough quantity to stain your [armor].  Your back passage feels incredibly sensitive, wet and accommodating.  Your ass is ready to be plowed by anything, and always will be.");
				player.ass.analWetness++;
				//buttChange(30,false,false,false);
				if (player.ass.analLooseness < 3) player.ass.analLooseness++;
				changes++;
				dynStats("sen", 2);
			}
			//Fertility Decrease:
			if (player.hasVagina() && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nThe vague numbness in your skin sinks slowly downwards, and you put a hand on your lower stomach as the sensation centers itself there.  ");
				dynStats("sen", -2);
				//High fertility:
				if (player.fertility >= 30) outputText("It feels like your overcharged reproductive organs have simmered down a bit.");
				//Average fertility:
				else if (player.fertility >= 5) outputText("You feel like you have dried up a bit inside; you are left feeling oddly tranquil.");
				//[Low/No fertility:
				else {
					outputText("Although the numbness makes you feel serene, the trap oil has no effect upon your ");
					if (player.fertility > 0) outputText("mostly ");
					outputText("sterile system.");
					//[Low/No fertility + Trap/Corruption  >70:
					if (player.isCorruptEnough(70)) outputText("  For some reason the fact that you cannot function as nature intended makes you feel helpless and submissive.  Perhaps the only way to be a useful creature now is to find a dominant, fertile being willing to plow you full of eggs? You shake the alien, yet oddly alluring thought away.");
				}
				player.fertility -= 1 + rand(3);
				if (player.fertility < 4) player.fertility = 4;
				changes++;
			}
			//Male Effects
			if (player.gender === 1) {
				//Femininity Increase Final (max femininity allowed increased by +10):
				if (rand(4) === 0 && changes < changeLimit) {
					if (player.femininity < 70 && player.femininity >= 60) {
						outputText("\n\nYou laugh as you feel your features once again soften, before stopping abruptly.  Your laugh sounded more like a girly giggle than anything else.  Feeling slightly more sober, you touch the soft flesh of your face prospectively.  The trap oil has changed you profoundly, making your innate maleness... difficult to discern, to say the least.  You suspect you could make yourself look even more like a girl now if you wanted to.");
						if (player.findPerk(PerkLib.Androgyny) < 0) {
							player.createPerk(PerkLib.Androgyny, 0, 0, 0, 0);
							outputText("\n\n(Perk Gained: Androgyny)");
						}
						player.femininity += 10;
						if (player.femininity > 70) player.femininity = 70;
						changes++;
					}
					//Femininity Increase:
					else {
						outputText("\n\nYour face softens as your features become more feminine.");
						player.femininity += 10;
						changes++;
					}
				}
				//Muscle tone reduction:
				if (player.tone > 20 && rand(4) === 0 && changes < changeLimit) {
					outputText("\n\nYou sink a finger into your arm inquiringly.  You seem to have lost some of your muscle definition, leaving you looking softer.");
					player.tone -= 10;
					changes++;
				}
			}
			//Female Effects
			else if (player.gender === 2) {
				//Masculinity Increase:
				if (player.femininity > 30 && rand(4) === 0 && changes < changeLimit) {
					player.femininity -= 10;
					if (player.femininity < 30) {
						player.femininity = 30;
						//Masculinity Increase Final (max masculinity allowed increased by +10):
						outputText("\n\nYou laugh as you feel your features once again soften, before stopping abruptly.  Your laugh sounded more like a boyish crow than anything else.  Feeling slightly more sober, you touch the defined lines of your face prospectively.  The trap oil has changed you profoundly, making your innate femaleness... difficult to discern, to say the least.  You suspect you could make yourself look even more like a boy now if you wanted to.");
						if (player.findPerk(PerkLib.Androgyny) < 0) {
							player.createPerk(PerkLib.Androgyny, 0, 0, 0, 0);
							outputText("\n\n(Perk Gained: Androgyny)");
						}
					}
					else {
						outputText("\n\nYour face becomes more set and defined as your features turn more masculine.");
					}
					changes++;
				}
				//Muscle tone gain:
				if (player.tone < 80 && rand(4) === 0 && changes < changeLimit) {
					outputText("\n\nYou flex your arm in interest.  Although you have become thinner, your muscles seem to have become more defined.");
					player.tone += 10;
					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);
			}
			//Nipples Turn Black:
			if (!player.hasStatusEffect(StatusEffects.BlackNipples) && rand(6) === 0 && changes < changeLimit) {
				outputText("\n\nA tickling sensation plucks at your nipples and you cringe, trying not to giggle.  Looking down you are in time to see the last spot of flesh tone disappear from your [nipples].  They have turned an onyx black!");
				player.createStatusEffect(StatusEffects.BlackNipples, 0, 0, 0, 0);
				changes++;
			}
			//Remove odd eyes
			if ((player.eyes.type === Eyes.FOUR_SPIDER_EYES || player.eyes.type == Eyes.SPIDER) && rand(2) === 0 && changes < changeLimit) {
				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. Your arachnid eyes are gone! You have normal, humanoid eyes again.");
				player.eyes.type = Eyes.HUMAN;
				player.eyes.count = 2;
				changes++;
			}
			//PC Trap Effects
			if (player.eyes.type !== Eyes.BLACK_EYES_SAND_TRAP && rand(4) === 0 && changes < changeLimit) {
				player.eyes.type = Eyes.BLACK_EYES_SAND_TRAP;
				//Eyes Turn Black:
				outputText("\n\nYou blink, and then blink again.  It feels like something is irritating your eyes.  Panic sets in as black suddenly blooms in the corner of your left eye and then your right, as if drops of ink were falling into them.  You calm yourself down with the thought that rubbing at your eyes will certainly make whatever is happening to them worse; through force of will you hold your hands behind your back and wait for the strange affliction to run its course.  The strange inky substance pools over your entire vision before slowly fading, thankfully taking the irritation with it.  As soon as it goes you stride quickly over to the stream and stare at your reflection.  Your pupils, your irises, your entire eye has turned a liquid black, leaving you looking vaguely like the many half insect creatures which inhabit these lands.  You find you are merely grateful the change apparently hasn't affected your vision.");
				changes++;
			}
			//Vagina Turns Black:
			if (player.hasVagina() && player.vaginaType() !== 5 && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYour [vagina] feels... odd.  You undo your clothes and gingerly inspect your nether regions.  The tender pink color of your sex has disappeared, replaced with smooth, marble blackness starting at your lips and working inwards.");
				//(Wet:
				if (player.wetness() >= 3) outputText("  Your natural lubrication makes it gleam invitingly.");
				//(Corruption <50:
				if (player.cor < 50) outputText("  After a few cautious touches you decide it doesn't feel any different- it does certainly look odd, though.");
				else outputText("  After a few cautious touches you decide it doesn't feel any different - the sheer bizarreness of it is a big turn on though, and you feel it beginning to shine with anticipation at the thought of using it.");
				outputText("  Your vagina is now ebony in color.");
				dynStats("sen", 2, "lus", 10);
				player.vaginaType(5);
				changes++;
			}
			//Dragonfly Wings:
			if (player.wings.type !== Wings.GIANT_DRAGONFLY && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou scream and fall to your knees as incredible pain snags at your shoulders, as if needle like hooks were being sunk into your flesh just below your shoulder blades.  After about five seconds of white hot, keening agony it is with almost sexual relief that something splits out of your upper back.  You clench the dirt as you slide what feel like giant leaves of paper into the open air.  Eventually the sensation passes and you groggily get to your feet.  You can barely believe what you can see by craning your neck behind you - you've grown a set of four giant dragonfly wings, thinner, longer and more pointed than the ones you've seen upon the forest bee girls, but no less diaphanous and beautiful.  You cautiously flex the new muscle groups in your shoulder blades and gasp as your new wings whirr and lift you several inches off the ground.  What fun this is going to be!");
				//Wings Fall Out: You feel a sharp pinching sensation in your shoulders and you cringe slightly.  Your former dragonfly wings make soft, papery sounds as they fall into the dirt behind you.
				changes++;
				player.wings.type = Wings.GIANT_DRAGONFLY;
			}
			if (changes === 0) {
				outputText("\n\nWell... that didn't amount to much.");
			}
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}
	}
}


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

	public class UnlabeledBrownMilkBottle extends Consumable
	{
		public function UnlabeledBrownMilkBottle()
		{
			super("UBMBottle", "UBM Bottle", "Unlabled Brown Milk Bottle", 1000, "");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			if (!player.udder.hasUdder) {
				if (player.isMale()) {
					outputText("You're staggered briefly as the area above your genitals swells, quickly ballooning up into a singular hefty sac.  Your skin tingles as matching rows of teats sprout from it, leaving you with a perfectly good udder.");
				}
				if (player.isFemale()) {
					outputText("You're staggered briefly as the patch of skin between your legs swells, quickly ballooning up into a singular hefty sac.  Your skin tingles as matching rows of teats sprout from it, leaving you with a perfectly good udder.");
				}
				player.udder.hasUdder = true;
			} else {
				if (player.udder.fullness >= 1000) {
					outputText("You feel your udder empty itself because it cant hold anymore milk.");
					player.udder.fullness = 0;
				} else {
					outputText("You feel your udder lightly gurgle and fill with a small amount of milk.");
					player.udder.fullness += 10;
				}
			}
			return false;
		}
	}
}

license: unknown


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

	public class UrtaCum extends Consumable
	{
		private static const ITEM_VALUE:int = 15;

		public function UrtaCum()
		{
			super("UrtaCum", "UrtaCum", "a sealed bottle of Urta's cum", ITEM_VALUE, "This bottle of Urta's cum looks thick and viscous.  It's quite delicious.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You uncork the bottle and drink the vulpine cum; it tastes great. Urta definitely produces good-tasting cum!");
			dynStats("sens", 1, "lus", 5 + (player.cor / 5));
			player.HPChange(Math.round(player.maxHP() * .25), true);
			player.slimeFeed();
			player.refillHunger(25);
			player.orgasm('Lips',false);

			return false;
		}
	}
}


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

	/**
	 * Item that increases STR and/or VIT
	 */
	public class VitalityTincture extends Consumable
	{
		private static const ITEM_VALUE:int = 15;

		public function VitalityTincture()
		{
			super("Vital T", "Vitality T.", "a vitality tincture", ITEM_VALUE, "This potent tea is supposedly good for strengthening the body.");
		}

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

			player.slimeFeed();
			clearOutput();
			outputText("You down the contents of the bottle. The liquid is thick and tastes remarkably like cherries. Within moments, you feel much more fit and healthy.");
			//str change
			temp = rand(3);
			dynStats("str", temp);
			//Garunteed toughness if no str
			if (temp === 0) {
				temp = rand(3);
				if (temp === 0) {
					temp = 1;
				}
			}
			else
			{
				temp = rand(3);
			}
			//tou change
			dynStats("tou", temp);
			//Chance of fitness change
			if (player.HPChange(50, false)) {
				outputText("  Any aches, pains and bruises you have suffered no longer hurt and you feel much better.");
			}

			if (rand(3) === 0) {
				outputText(player.modTone(95, 3));
			}
			player.refillHunger(10);

			return false;
		}
	}
}


code:
package classes.Items.Consumables
{
	import classes.BodyParts.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.Items.Consumable;
	import classes.Items.ConsumableLib;
	import classes.StatusEffects;
	import classes.Vagina;
	import classes.internals.WeightedChoice;
	import classes.lists.ColorLists;
	import classes.Items.ArmorLib;

	/**
	 * Goo transformative item.
	 */
	public class WetCloth extends Consumable
	{
		public function WetCloth()
		{
			super("WetClth", "WetClth", "a wet cloth dripping with slippery slime", ConsumableLib.DEFAULT_VALUE, "Dripping with a viscous slime, you've no doubt rubbing this cloth on your body would have some kind of strange effect.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			var tfSource:String = "gooGasmic";
			if (player.armor.id == armors.VINARMR.id) {
				if (armors.VINARMR.saveContent.clothUsed) {
					outputText("Again sliding the rag over your [skindesc], you provoke a reaction out of the vines. The slippery slime gives you a warm, tingling sensation, and to your shock, the vines slip down your body. The organic outfit, now lacking a host, shrivels and dies at your [feet].");
					if (flags[kFLAGS.HOLLI_SUBMISSIVE] == 1 && (game.swamp.alrauneScene.saveContent.questAsked & game.swamp.alrauneScene.ASKEDHO)) outputText("\n\nThat bitch. All the other crap was just pointless errands!");
					player.setArmor(ArmorLib.NOTHING);
					armors.VINARMR.reset();
				} else {
					outputText("You take the wet cloth in hand and rub it on your body, smearing the strange slime over your " + player.skin.desc + " slowly. The vines tremble and shake, and you feel a tad strange overall.");
					armors.VINARMR.saveContent.clothUsed = true;
				}
				player.consumeItem(this, 1);
				return false;
			} else outputText("You take the wet cloth in hand and rub it on your body, smearing the strange slime over your " + player.skin.desc + " slowly.");
			//Stat changes
			//libido up to 80
			if (player.lib100 < 80) {
				dynStats("lib", (.5 + (90 - player.lib) / 10), "lus", player.lib / 2);
				outputText("\n\nBlushing and feeling horny, you make sure to rub it over your chest and erect nipples, letting the strange slimy fluid soak into you.");
			}
			//sensitivity moves towards 50
			if (player.sens100 < 50) {
				outputText("\n\nThe slippery slime soaks into your " + player.skin.desc + ", making it tingle with warmth, sensitive to every touch.");
				dynStats("sen", 1);
			}
			else if (player.sens100 > 50) {
				outputText("\n\nThe slippery slime numbs your " + player.skin.desc + " slightly, leaving behind only gentle warmth.");
				dynStats("sen", -1);
			}

			//Cosmetic changes based on 'goopyness'
			//Neck restore
			if (player.neck.type != Neck.NORMAL && changes < changeLimit && rand(4) == 0) mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.hasNonSharkRearBody() && changes < changeLimit && rand(5) == 0) mutations.restoreRearBody(tfSource);
			//Ovi perk loss
			if (rand(5) === 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			//Remove wings and shark fin
			if (player.wings.type != Wings.NONE || player.rearBody.type == RearBody.SHARK_FIN) {
				if (player.rearBody.type == RearBody.SHARK_FIN) {
					outputText("\n\nYou sigh, feeling a hot wet tingling down your back.  It tickles slightly as you feel your fin slowly turn to"
					          +" sludge, dripping to the ground as your body becomes more goo-like.");
					player.rearBody.restore();
				} else {
					outputText("\n\nYou sigh, feeling a hot wet tingling down your back.  It tickles slightly as you feel your wings slowly turn to"
					          +" sludge, dripping to the ground as your body becomes more goo-like.");
				}
				player.wings.restore();
				return false;
			}
			var colorChoice:WeightedChoice = new WeightedChoice()
				.add("green",    30)  // = ColorLists.GOO_MORPH[0]
				.add("purple",   20)  // = ColorLists.GOO_MORPH[1]
				.add("blue",     20)  // = ColorLists.GOO_MORPH[2]
				.add("cerulean", 20)  // = ColorLists.GOO_MORPH[3]
				.add("emerald",  10); // = ColorLists.GOO_MORPH[4]
			//Goopy hair
			if (player.hair.type !== Hair.GOO) {
				player.hair.type = Hair.GOO;
				//if bald
				if (player.hair.length <= 0) {
					outputText("\n\nYour head buzzes pleasantly, feeling suddenly hot and wet.  You instinctively reach up to feel the source of your wetness, and discover you've grown some kind of gooey hair.  From time to time it drips, running down your back to the crack of your " + player.buttDescript() + ".");
					player.hair.length = 5;
				}
				else {
					//if hair isnt rubbery or latexy
					if (player.hair.color.indexOf("rubbery") === -1 && player.hair.color.indexOf("latex-textured") === -1) {
						outputText("\n\nYour head buzzes pleasantly, feeling suddenly hot and wet.  You instinctively reach up to feel the source of your wetness, and discover your hair has become a slippery, gooey mess.  From time to time it drips, running down your back to the crack of your " + player.buttDescript() + ".");
					}
					//Latexy stuff
					else {
						outputText("\n\nYour oddly inorganic hair shifts, becoming partly molten as rivulets of liquid material roll down your back.  How strange.");
					}
				}
				if (ColorLists.GOO_MORPH.indexOf(player.hair.color) === -1) {
					outputText("  Stranger still, the hue of your semi-liquid hair changes to ");
					player.hair.color = colorChoice.choose();
					outputText(player.hair.color + ".");
				}
				dynStats("lus", 10);
				return false;
			}
			//1.Goopy skin
			if (mutations.tfNoFur(2) && player.hair.type === Hair.GOO && (player.skin.type !== Skin.GOO || player.skin.desc !== "skin" || player.skin.adj !== "slimy")) {
				if (player.hasPlainSkin()) outputText("\n\nYou sigh, feeling your " + player.armorName + " sink into you as your skin becomes less solid, gooey even.  You realize your entire body has become semi-solid and partly liquid!");
				else if (player.hasFur()) outputText("\n\nYou sigh, suddenly feeling your fur become hot and wet.  You look down as your " + player.armorName + " sinks partway into you.  With a start you realize your fur has melted away, melding into the slime-like coating that now serves as your skin.  You've become partly liquid and incredibly gooey!");
				else if (player.hasScales()) outputText("\n\nYou sigh, feeling slippery wetness over your scales.  You reach to scratch it and come away with a slippery wet coating.  Your scales have transformed into a slimy goop!  Looking closer, you realize your entire body has become far more liquid in nature, and is semi-solid.  Your " + player.armorName + " has even sunk partway into you.");
				player.skin.type = Skin.GOO;
				player.skin.desc = "skin";
				player.skin.adj = "slimy";
				player.underBody.restore();
				if (ColorLists.GOO_MORPH.indexOf(player.skin.tone) === -1) {
					outputText("  Stranger still, your skintone changes to ");
					player.skin.tone = colorChoice.choose();
					outputText(player.skin.tone + "!");
					if (player.arms.type !== Arms.HUMAN || player.arms.claws.type !== Claws.NORMAL) {
						mutations.restoreArms(tfSource);
					}
				}
				return false;
			}
			////1a.Make alterations to dick/vaginal/nippular descriptors to match
			//DONE EXCEPT FOR TITS & MULTIDICKS (UNFINISHED KINDA)
			//2.Goo legs
			if (player.skin.type === Skin.GOO && player.skin.adj === "slimy" && player.skin.desc === "skin" && player.lowerBody.type !== LowerBody.GOO) {
				outputText("\n\nYour viewpoint rapidly drops as everything below your " + player.buttDescript() + " and groin melts together into an amorphous blob.  Thankfully, you discover you can still roll about on your new slimey undercarriage, but it's still a whole new level of strange.");
				player.tallness -= 3 + rand(2);
				if (player.tallness < 36) {
					player.tallness = 36;
					outputText("  The goo firms up and you return to your previous height.  It would truly be hard to get any shorter than you already are!");
				}
				player.lowerBody.type = LowerBody.GOO;
				player.lowerBody.legCount = 1;
				return false;
			}
			//3a. Grow vagina if none
			if (!player.hasVagina()) {
				outputText("\n\nA wet warmth spreads through your slimey groin as a narrow gash appears on the surface of your groin.  You have grown a vagina.");
				player.createVagina();
				player.vaginas[0].vaginalWetness = Vagina.WETNESS_DROOLING;
				player.vaginas[0].vaginalLooseness = Vagina.LOOSENESS_GAPING;
				player.setClitLength(.4);
				return false;
			}
			//3b.Infinite Vagina
			if (player.vaginalCapacity() < 9000) {
				if (!player.hasStatusEffect(StatusEffects.BonusVCapacity)) player.createStatusEffect(StatusEffects.BonusVCapacity, 9000, 0, 0, 0);
				else player.addStatusValue(StatusEffects.BonusVCapacity, 1, 9000);
				outputText("\n\nYour " + player.vaginaDescript(0) + "'s internal walls feel a tingly wave of strange tightness.  Experimentally, you slip a few fingers, then your hand, then most of your forearm inside yourself.  It seems you're now able to accommodate just about ANYTHING inside your sex.");
				return false;
			}
			else if (player.tallness < 100 && rand(3) <= 1) {
				outputText("\n\nYour gel-like body swells up from the intake of additional slime.  If you had to guess, you'd bet you were about two inches taller.");
				player.tallness += 2;
				dynStats("str", 1, "tou", 1);
			}
			//Big slime girl
			else {
				if (!player.hasStatusEffect(StatusEffects.SlimeCraving)) {
					outputText("\n\nYou feel a growing gnawing in your gut.  You feel... hungry, but not for food.  No, you need something wet and goopy pumped into you.  You NEED it.  You can feel it in your bones.  If you don't feed that need... you'll get weaker and maybe die.");
					player.createStatusEffect(StatusEffects.SlimeCraving, 0, 0, 0, 1); //Value four indicates this tracks strength and speed separately
				}
				else {
					outputText("\n\nYou feel full for a moment, but you know it's just a temporary respite from your constant need to be 'injected' with fluid.");
					player.changeStatusValue(StatusEffects.SlimeCraving, 1, 0);
				}
			}
			if (rand(2) === 0) outputText(player.modFem(85, 3));
			if (rand(2) === 0) outputText(player.modThickness(20, 3));
			if (rand(2) === 0) outputText(player.modTone(15, 5));
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}
}


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

	/**
	 * Feline transformative item.
	 */
	public class WhiskerFruit extends Consumable
	{
		public function WhiskerFruit()
		{
			super("W.Fruit","W.Fruit", "a piece of whisker-fruit", ConsumableLib.DEFAULT_VALUE, "This small, peach-sized fruit has tiny whisker-like protrusions growing from the sides.");
		}

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

			if (player.hasReptileScales() && player.hasDragonWings() && player.tongue.type === Tongue.DRACONIC)
				tfSource = "catTransformation-dragonne";
			var temp2:Number = 0;
			var temp3:Number = 0;
			mutations.initTransformation([2, 2, 3]);
			//Text go!
			clearOutput();
			outputText("You take a bite of the fruit and gulp it down. It's thick and juicy and has an almost overpowering sweetness. Nevertheless, it is delicious and you certainly could use a meal.  You devour the fruit, stopping only when the hard, nubby pit is left; which you toss aside.");
			//Speed raises up to 75
			if (player.spe100 < 75 && rand(3) === 0 && changes < changeLimit) {
				//low speed
				if (player.spe100 <= 30) {
					outputText("\n\nYou feel... more balanced, sure of step. You're certain that you've become just a little bit faster.");
					dynStats("spe", 2);
				}
				//medium speed
				else if (player.spe100 <= 60) {
					outputText("\n\nYou stumble as you shift position, surprised by how quickly you move. After a moment or two of disorientation, you adjust. You're certain that you can run faster now.");
					dynStats("spe", 1);
				}
				//high speed
				else {
					outputText("\n\nYou pause mid-step and crouch. Your leg muscles have cramped up like crazy. After a few moments, the pain passes and you feel like you could chase anything down.");
					dynStats("spe", .5);
				}
			}
			//Strength raises to 40
			if (player.str100 < 40 && rand(3) === 0 && changes < changeLimit) {
				if (rand(2) === 0) outputText("\n\nYour muscles feel taut, like a coiled spring, and a bit more on edge.");
				else outputText("\n\nYou arch your back as your muscles clench painfully.  The cramp passes swiftly, leaving you feeling like you've gotten a bit stronger.");
				dynStats("str", 1);
			}
			//Strength ALWAYS drops if over 60
			//Does not add to change total
			else if (player.str100 > 60 && rand(2) === 0) {
				outputText("\n\nShivers run from your head to your toes, leaving you feeling weak.  Looking yourself over, your muscles seemed to have lost some bulk.");
				dynStats("str", -2);
			}
			//Toughness drops if over 50
			//Does not add to change total
			if (player.tou100 > 50 && rand(2) === 0) {
				outputText("\n\nYour body seems to compress momentarily, becoming leaner and noticeably less tough.");
				dynStats("tou", -2);
			}
			//Intelliloss
			if (rand(4) === 0 && changes < changeLimit) {
				//low intelligence
				if (player.inte100 < 15) outputText("\n\nYou feel like something is slipping away from you but can't figure out exactly what's happening.  You scrunch up your " + player.faceDescript() + ", trying to understand the situation.  Before you can reach any kind of conclusion, something glitters in the distance, distracting your feeble mind long enough for you to forget the problem entirely.");
				//medium intelligence
				else if (player.inte100 < 50) {
					outputText("\n\nYour mind feels somewhat sluggish, and you wonder if you should just lie down ");
					if (rand(2) === 0) {
						outputText("somewhere and ");
						temp = rand(3);
						if (temp === 0) outputText("toss a ball around or something");
						else if (temp === 1) outputText("play with some yarn");
						else if (temp === 2) outputText("take a nap and stop worrying");
					}
					else outputText("in the sun and let your troubles slip away");
					outputText(".");
				}
				//High intelligence
				else outputText("\n\nYou start to feel a bit dizzy, but the sensation quickly passes.  Thinking hard on it, you mentally brush away the fuzziness that seems to permeate your brain and determine that this fruit may have actually made you dumber.  It would be best not to eat too much of it.");
				dynStats("int", -1);
			}
			//Libido gain
			if (player.lib100 < 80 && changes < changeLimit && rand(4) === 0) {
				//Cat dicked folks
				if (player.countCocksOfType(CockTypesEnum.CAT) > 0) {
					temp = player.findFirstCockType(CockTypesEnum.CAT);
					outputText("\n\nYou feel your " + player.cockDescript(temp) + " growing hard, the barbs becoming more sensitive. You gently run your hands down them and imagine the feeling of raking the insides of a cunt as you pull.  The fantasy continues, and after ejaculating and hearing the female yowl with pleasure, you shake your head and try to drive off the image.  ");
					if (player.cor < 33) outputText("You need to control yourself better.");
					else if (player.cor < 66) outputText("You're not sure how you feel about the fantasy.");
					else outputText("You hope to find a willing partner to make this a reality.");
				}
				//Else –
				else {
					outputText("\n\nA rush of tingling warmth spreads through your body as it digests the fruit.  You can feel your blood pumping through your extremities, making them feel sensitive and surprisingly sensual.  It's going to be hard to resist getting ");
					if (player.lust100 > 60) outputText("even more ");
					outputText("turned on.");
				}
				dynStats("lib", 1, "sen", .25);
			}

			//Sexual changes would go here if I wasn't a tard.
			//Heat
			if (rand(4) === 0 && changes < changeLimit)
			{
				var intensified:Boolean = player.inHeat;

				if (player.goIntoHeat(false))
				{
					if (intensified)
					{
						if (rand(2) === 0) outputText("\n\nThe itch inside your " + player.vaginaDescript(0) + " is growing stronger, and you desperately want to find a nice cock to massage the inside.");
						else outputText("\n\nThe need inside your " + player.vaginaDescript(0) + " grows even stronger.  You desperately need to find a mate to 'scratch your itch' and fill your womb with kittens.  It's difficult NOT to think about a cock slipping inside your moist fuck-tunnel, and at this point you'll have a hard time resisting ANY male who approaches.");
					}
					else
					{
						outputText("\n\nThe interior of your " + player.vaginaDescript(0) + " clenches tightly, squeezing with reflexive, aching need.  Your skin flushes hot ");
						if (player.hasFur()) outputText("underneath your fur ");
						outputText("as images and fantasies ");
						if (player.cor < 50) outputText("assault ");
						else outputText("fill ");
						outputText(" your mind.  Lithe cat-boys with their perfect, spine-covered cocks line up behind you, and you bend over to present your needy pussy to them.  You tremble with the desire to feel the exotic texture of their soft barbs rubbing your inner walls, smearing your " + player.vaginaDescript(0) + " with their cum as you're impregnated.  Shivering, you recover from the fantasy and pull your fingers from your aroused sex.  It would seem you've gone into heat!");
					}
					changes++;
				}
			}

			//Shrink the boobalies down to A for men or C for girls.
			if (changes < changeLimit && rand(4) === 0 && !flags[kFLAGS.HYPER_HAPPY]) {
				temp2 = 0;
				temp3 = 0;
				//Determine if shrinkage is required
				//and set temp2 to threshold
				if (!player.hasVagina() && player.biggestTitSize() > 2) temp2 = 2;
				else if (player.biggestTitSize() > 4) temp2 = 4;
				//IT IS!
				if (temp2 > 0) {
					//temp3 stores how many rows are changed
					temp3 = 0;
					for (var k:Number = 0; k < player.breastRows.length; k++) {
						//If this row is over threshhold
						if (player.breastRows[k].breastRating > temp2) {
							//Big change
							if (player.breastRows[k].breastRating > 10) {
								player.breastRows[k].breastRating -= 2 + rand(3);
								if (temp3 === 0) outputText("\n\nThe " + player.breastDescript(0) + " on your chest wobble for a second, then tighten up, losing several cup-sizes in the process!");
								else outputText("  The change moves down to your " + num2Text2(k + 1) + " row of " + player.breastDescript(0) + ". They shrink greatly, losing a couple cup-sizes.");
							}
							//Small change
							else {
								player.breastRows[k].breastRating -= 1;
								if (temp3 === 0) outputText("\n\nAll at once, your sense of gravity shifts.  Your back feels a sense of relief, and it takes you a moment to realize your " + player.breastDescript(k) + " have shrunk!");
								else outputText("  Your " + num2Text2(k + 1) + " row of " + player.breastDescript(k) + " gives a tiny jiggle as it shrinks, losing some off its mass.");
							}
							//Increment changed rows
							temp3++;
						}
					}
				}
				//Count that tits were shrunk
				if (temp3 > 0) changes++;
			}
			//Cat dangly-doo.
			if (player.cockTotal() > 0 && player.countCocksOfType(CockTypesEnum.CAT) < player.cockTotal() && (player.ears.type === Ears.CAT || rand(3) > 0) && (player.tail.type === Tail.CAT || rand(3) > 0) && changes < changeLimit && rand(4) === 0) {
				//loop through and find a non-cat wang.
				for (var i:Number = 0; i < (player.cockTotal()) && player.cocks[i].cockType === CockTypesEnum.CAT; i++) { }
				outputText("\n\nYour " + player.cockDescript(i) + " swells up with near-painful arousal and begins to transform.  It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra.  Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum.  ");
				if (!player.hasSheath()) {
					outputText("Then, it begins to shrink and sucks itself inside your body.  Within a few moments, a fleshy sheath is formed.");
					if (player.balls > 0) outputText("  Thankfully, your balls appear untouched.");
				}
				else outputText("Then, it disappears back into your sheath.");
				player.cocks[i].cockType = CockTypesEnum.CAT;
				changes++;
			}
			//Cat penorz shrink
			if (player.countCocksOfType(CockTypesEnum.CAT) > 0 && rand(3) === 0 && changes < changeLimit && !flags[kFLAGS.HYPER_HAPPY]) {
				//loop through and find a cat wang.
				temp = 0;
				for (var j:Number = 0; j < (player.cockTotal()); j++) {
					if (player.cocks[j].cockType === CockTypesEnum.CAT && player.cocks[j].cockLength > 6) {
						temp = 1;
						break;
					}
				}
				if (temp === 1) {
					//lose 33% size until under 10, then lose 2" at a time
					if (player.cocks[j].cockLength > 16) {
						outputText("\n\nYour " + player.cockDescript(j) + " tingles, making your sheath feel a little less tight.  It dwindles in size, losing a full third of its length and a bit of girth before the change finally stops.");
						player.cocks[j].cockLength *= .66;
					}
					else if (player.cocks[j].cockLength > 6) {
						outputText("\n\nYour " + player.cockDescript(j) + " tingles and withdraws further into your sheath.  If you had to guess, you'd say you've lost about two inches of total length and perhaps some girth.");
						player.cocks[j].cockLength -= 2;
					}
					if (player.cocks[j].cockLength / 5 < player.cocks[j].cockThickness && player.cocks[j].cockThickness > 1.25) player.cocks[j].cockThickness = player.cocks[j].cockLength / 6;
					//Check for any more!
					temp2 = 0;
					j++;
					for (j; j < player.cocks.length; j++) {
						//Found another cat wang!
						if (player.cocks[j].cockType === CockTypesEnum.CAT) {
							//Long enough - change it
							if (player.cocks[j].cockLength > 6) {
								if (player.cocks[j].cockLength > 16)
									player.cocks[j].cockLength *= .66;
								else if (player.cocks[j].cockLength > 6)
									player.cocks[j].cockLength -= 2;
								//Thickness adjustments
								if (player.cocks[j].cockLength / 5 < player.cocks[j].cockThickness && player.cocks[j].cockThickness > 1.25) player.cocks[j].cockThickness = player.cocks[j].cockLength / 6;
								temp2 = 1;
							}
						}
					}
					//(big sensitivity boost)
					outputText("  Although the package is smaller, it feels even more sensitive – as if it retained all sensation of its larger size in its smaller form.");
					dynStats("sen", 5);
					//Make note of other dicks changing
					if (temp2 === 1) outputText("  Upon further inspection, all your " + Appearance.cockNoun(CockTypesEnum.CAT) + "s have shrunk!");
					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);
			}
			//Body type changes.  Teh rarest of the rare.
			// Catgirl-face -> cat-morph-face
			if (mutations.tfNoFur() &&
				player.face.type === Face.CATGIRL &&
				player.tongue.type === Tongue.CAT &&
				player.ears.type === Ears.CAT &&
				player.tail.type === Tail.CAT &&
				player.lowerBody.type === LowerBody.CAT &&
				player.arms.type === Arms.CAT &&
				(player.hasFur() || (player.hasReptileScales() && player.dragonneScore() >= 4)) &&
				rand(5) === 0 && changes < changeLimit
			) {
				outputText("\n\nMind-numbing pain courses 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 facial"
				          +" characteristics with those of a feline along with a muzzle, a cute cat-nose and whiskers.");
				outputText("\nYou now have a cat-face.");
				player.face.type = Face.CAT;
				changes++;
			}
			//DA EARZ
			if (player.ears.type !== Ears.CAT && rand(5) === 0 && changes < changeLimit) {
				//human to cat:
				if (player.ears.type === Ears.HUMAN) {
					if (rand(2) === 0) outputText("\n\nThe skin on the sides of your face stretches painfully as your ears migrate upwards, towards the top of your head. They shift and elongate a little, fur growing on them as they become feline in nature. You now have cat ears.");
					else outputText("\n\nYour ears begin to tingle. You reach up with one hand and gently rub them. They appear to be growing fur. Within a few moments, they've migrated up to the top of your head and increased in size. The tingling stops and you find yourself hearing noises in a whole new way. You now have cat ears.");
				}
				//non human to cat:
				else {
					if (rand(2) === 0) outputText("\n\nYour ears change shape, morphing into pointed, feline ears!  They swivel about reflexively as you adjust to them.  You now have cat ears.");
					else outputText("\n\nYour ears tingle and begin to change shape. Within a few moments, they've become long and feline.  Thanks to the new fuzzy organs, you find yourself able to hear things that eluded your notice up until now. You now have cat ears.");
				}
				player.ears.type = Ears.CAT;
				changes++;
			}
			//DA TAIL (IF ALREADY HAZ URZ)
			if (player.tail.type !== Tail.CAT && player.ears.type === Ears.CAT && rand(5) === 0 && changes < changeLimit) {
				if (player.tail.type === Tail.NONE) {
					temp = rand(3);
					if (temp === 0) outputText("\n\nA pressure builds in your backside. You feel under your " + player.armorName + " and discover an odd bump that seems to be growing larger by the moment. In seconds it passes between your fingers, bursts out the back of your clothes and grows most of the way to the ground. A thick coat of fur springs up to cover your new tail. You instinctively keep adjusting it to improve your balance. You now have a cat-tail.");
					if (temp === 1) outputText("\n\nYou feel your backside shift and change, flesh molding and displacing into a long, flexible tail! You now have a cat tail.");
					if (temp === 2) outputText("\n\nYou feel an odd tingling in your spine and your tail bone starts to throb and then swell. Within a few moments it begins to grow, adding new bones to your spine. Before you know it, you have a tail. Just before you think it's over, the tail begins to sprout soft, glossy " + player.skin.furColor + " fur. You now have a cat tail.");
				}
				else outputText("\n\nYou pause and tilt your head... something feels different.  Ah, that's what it is; you turn around and look down at your tail as it starts to change shape, narrowing and sprouting glossy fur. You now have a cat tail.");
				player.tail.type = Tail.CAT;
				changes++;
			}
			//Da paws (if already haz ears & tail)
			if (player.tail.type === Tail.CAT && player.ears.type === Ears.CAT && rand(5) === 0 && changes < changeLimit && player.lowerBody.type !== LowerBody.CAT) {
				//hoof to cat:
				if (player.lowerBody.type === LowerBody.HOOFED) {
					outputText("\n\nYou feel your hooves suddenly splinter, growing into five unique digits. Their flesh softens as your hooves reshape into furred cat paws. You now have cat paws.");
					if (player.isTaur()) outputText("  You feel woozy and collapse on your side.  When you wake, you're no longer a centaur and your body has returned to a humanoid shape.");
				}
				//Goo to cat
				else if (player.lowerBody.type === LowerBody.GOO) {
					outputText("\n\nYour lower body rushes inward, molding into two leg-like shapes that gradually stiffen up.  In moments they solidify into digitigrade legs, complete with soft, padded cat-paws.  You now have cat-paws!");
				}
				//non hoof to cat:
				else outputText("\n\nYou scream in agony as you feel the bones in your " + player.feet() + " break and begin to rearrange. When the pain fades, you feel surprisingly well-balanced. You now have cat paws.");
				player.lowerBody.type = LowerBody.CAT;
				player.lowerBody.legCount = 2;
				changes++;
			}
			//TURN INTO A FURRAH!  OH SHIT
			if (mutations.tfNoFur() && player.tail.type === Tail.CAT && player.ears.type === Ears.CAT && rand(5) === 0 && changes < changeLimit && player.lowerBody.type === LowerBody.CAT && !player.hasFur()) {
				outputText("\n\nYour " + player.skin.desc + " begins to tingle, then itch. ");
				player.skin.type = Skin.FUR;
				player.skin.desc = "fur";
				player.setFurColor(ColorLists.CAT_FUR, {type: UnderBody.FURRY}, true);
				outputText("You reach down to scratch your arm absent-mindedly and pull your fingers away to find strands of " + player.skin.furColor + " fur. Wait, fur?  What just happened?! You spend a moment examining yourself and discover that you are now covered in glossy, soft fur.");
				changes++;
			}
			// Fix old cat faces without cat-eyes.
			if (player.hasCatFace() && !player.hasCatEyes() && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nFor a moment your sight shifts as the ambient light suddenly turns extremely bright, almost blinding you."
				          +" You walk around disoriented until the luminosity fades back to normal."
				          +" You run to a puddle of water to check your reflection and quickly notice your pupils have become cat-like.");
				outputText("\nYou now have cat-eyes!");
				player.eyes.setType(Eyes.CAT);
				changes++;
			}
			//CAT-FACE!  FULL ON FURRY!  RAGE AWAY NEKOZ
			if (mutations.tfNoFur() && player.tail.type === Tail.CAT && player.ears.type === Ears.CAT && player.lowerBody.type === LowerBody.CAT && !player.hasCatFace() && rand(5) === 0 && changes < changeLimit) {
				//Gain cat face, replace old face
				outputText("\n\nYou feel your canines changing, elongating into sharp dagger-like teeth capable of causing severe injuries."
				          +" Funnily, your face remained relatively human even after the change. You purr at the change, giving you a cute look."
				          +"[if (hasCatEyes == false)\nFor a moment your sight shifts as the ambient light suddenly turns extremely bright,"
				          +" almost blinding you. You walk around disoriented until the luminosity fades back to normal."
				          +" You run to a puddle of water to check your reflection and quickly notice your pupils have become cat-like.]");
				outputText("\nYou now have the face of a cat-" + player.mf("boy", "girl") + "!");
				player.face.setType(Face.CATGIRL);
				changes++;
			}
			// Cat-tongue
			if (player.hasCatFace() && player.tongue.type !== Tongue.CAT && rand(5) === 0 && changes < changeLimit) {
				outputText("\n\nYour tongue suddenly feel weird. You try to stick it out to see whats going on and discover it changed to look"
				          +" similar to the tongue of a cat. At least you will be able to groom yourself properly with your new cat tongue.");
				player.tongue.type = Tongue.CAT;
				changes++;
			}
			//Arms
			if (player.arms.type !== Arms.CAT && player.isFurry() && player.tail.type === Tail.CAT && player.lowerBody.type === LowerBody.CAT && 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 have 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]|[furColor]] fur. Your hands gain pink,"
				          +" padded paws where your palms were once, and your nails become long, thin, curved claws,"
				          +" sharp enough to tear flesh and nimble enough to make climbing and exploring easier."
				          +" Your arms have become like those of a cat!");
				player.arms.setType(Arms.CAT);
				changes++;
			}
			// Remove gills
			if (rand(4) === 0 && player.hasGills() && changes < changeLimit) {
				mutations.updateGills();
			}
			//FAILSAFE CHANGE
			if (changes === 0) {
				outputText("\n\nInhuman vitality spreads through your body, invigorating you!\n");
				player.HPChange(50, true);
				dynStats("lus", 3);
			}
			if (changes < changeLimit) {
				if (rand(2) === 0) outputText(player.modThickness(5, 2));
				if (rand(2) === 0) outputText(player.modTone(76, 2));
				if (player.gender < 2) if (rand(2) === 0) outputText(player.modFem(65, 1));
				else outputText(player.modFem(85, 2));
			}
			player.refillHunger(20);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}
	}
}


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

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

		private var large:Boolean;

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

			large = type === LARGE;

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

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

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

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

		override public function useItem():Boolean
		{
			clearOutput();
			var temp:int; // game.temp was a great idea ... *cough, cough* ~Stadler76
			var temp2:Number = 0;
			outputText("You devour the egg, momentarily sating your hunger.");
			if (!large) {
				//Grow nipples
				if (player.nippleLength < 3 && player.biggestTitSize() > 0) {
					outputText("\n\nYour nipples engorge, prodding hard against the inside of your [armor]."
					          +" Abruptly you realize they've gotten almost a quarter inch longer.");
					player.nippleLength += .2;
					dynStats("lus", 15);
				}
				player.refillHunger(20);
			}
			//LARGE
			else {
				//Grow nipples
				if (player.nippleLength < 3 && player.biggestTitSize() > 0) {
					outputText("\n\nYour nipples engorge, prodding hard against the inside of your [armor]."
					          +" Abruptly you realize they've grown more than an additional quarter-inch.");
					player.nippleLength += (rand(2) + 3) / 10;
					dynStats("lus", 15);
				}
				//NIPPLECUNTZZZ
				temp = player.breastRows.length;
				//Set nipplecunts on every row.
				while (temp > 0) {
					temp--;
					if (!player.breastRows[temp].fuckable && player.nippleLength >= 2) {
						player.breastRows[temp].fuckable = true;
						//Keep track of changes.
						temp2++;
					}
				}
				//Talk about if anything was changed.
				if (temp2 > 0) {
					outputText("\n\nYour [allbreasts] tingle with warmth that slowly migrates to your nipples, filling them with warmth."
					          +" You pant and moan, rubbing them with your fingers."
					          +" A trickle of wetness suddenly coats your finger as it slips inside the nipple.  Shocked, you pull the finger free."
					          +" <b>You now have fuckable nipples!</b>");
				}
				player.refillHunger(60);
			}

			return false;
		}
	}
}


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

	/**
	 * A spellbook that teaches the player one the following spells: 'Charge Weapon', 'Blind' or 'Whitefire'.
	 * May also raise int.
	 */
	public class WhiteSpellBook extends Consumable
	{
		private static const ITEM_VALUE:int = 40;

		public function WhiteSpellBook()
		{
			super("W. Book","W. Book", "a small book with a pristine white cover", ITEM_VALUE, "This white book is totally unmarked, and the cover is devoid of any lettering or title.  A shiny brass clasp keeps the covers closed until you are ready to read it.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You open the white tome, and discover it to be an instructional book on the use of white magic.  Most of it is filled with generic information about white magic - how it is drawn for mental focus, is difficult to use when tired or aroused, and can be used to create and control energy.  In no time at all you've read the whole thing, but it disappears into thin air before you can put it away.");
			if (player.inte100 < 30) {
				outputText("\n\nYou feel greatly enlightened by your time spent reading.");
				dynStats("int", 4);
			}
			else if (player.inte100 < 60) {
				outputText("\n\nSpending some time reading was probably good for you, and you definitely feel smarter for it.");
				dynStats("int", 2);
			}
			else if (player.inte100 < 80) {
				outputText("\n\nAfter reading the small tome your already quick mind feels invigorated.");
				dynStats("int", 1);
			}
			else {
				outputText("\n\nThe contents of the book did little for your already considerable intellect.");
				dynStats("int", .6);
			}
			//Smart enough for arouse and doesnt have it
			if (player.inte100 >= 25 && !player.hasStatusEffect(StatusEffects.KnowsCharge)) {
				outputText("\n\nYou blink in surprise, assaulted by the knowledge of a new spell: Charge Weapon.");
				player.createStatusEffect(StatusEffects.KnowsCharge, 0, 0, 0, 0);
				return false;
			}
			//Smart enough for arouse and doesnt have it
			if (player.inte100 >= 30 && !player.hasStatusEffect(StatusEffects.KnowsBlind)) {
				outputText("\n\nYou blink in surprise, assaulted by the knowledge of a new spell: Blind.");
				player.createStatusEffect(StatusEffects.KnowsBlind, 0, 0, 0, 0);
				return false;
			}
			//Smart enough for arouse and doesnt have it
			if (player.inte100 >= 40 && !player.hasStatusEffect(StatusEffects.KnowsWhitefire)) {
				outputText("\n\nYou blink in surprise, assaulted by the knowledge of a new spell: Whitefire.");
				player.createStatusEffect(StatusEffects.KnowsWhitefire, 0, 0, 0, 0);
			}

			return false;
		}
	}
}


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

	public final class WingStick extends Consumable {

		public function WingStick() {
			super("W.Stick", "Wingstick", "a wingstick", 16, "A tri-bladed throwing weapon.  Though good for only a single use, it's guaranteed to do high damage if it hits.  Inflicts 40 to 100 base damage, affected by strength.");
		}

		override public function canUse():Boolean {
			if (game.inCombat) return true;
			outputText("There's no one to throw it at!");
			return false;
		}

		override public function useItem():Boolean {
			clearOutput();
			outputText("You toss a wingstick at your foe!  It flies straight and true, almost as if it has a mind of its own as it arcs towards " + monster.a + monster.short + "!\n");
			if (!combat.combatAvoidDamage({attacker:player,defender:monster,doDodge:true,doParry:false,doBlock:false,toHitChance:monster.standardDodgeFunc(player,10)}).failed) { //1% dodge for each point of speed over 80
				outputText("Somehow " + monster.a + monster.short + "'");
				if (!monster.plural) outputText("s");
				outputText(" incredible speed allows " + monster.pronoun2 + " to avoid the spinning blades!  The deadly device shatters when it impacts something in the distance.");
			}
			else { //Not dodged
				game.combat.damageType = combat.DAMAGE_PHYSICAL_RANGED;
				var damage:Number = monster.reduceDamageCombat(50 + Utils.rand(61) + (player.str * 2));
				outputText(monster.capitalA + monster.short + " is hit with the wingstick!  It breaks apart as it lacerates " + monster.pronoun2);
				damage = game.combat.doDamage(damage, true, true);
			}
			return(false);
		}

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


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

	/**
	 * Holiday festive item that might give you antlers.
	 */
	public class WinterPudding extends Consumable
	{

		public function WinterPudding()
		{
			super("W.Pddng", "W.Pudding", "a slice of winter pudding", 35, "A slice of delicious Winter Pudding. It smells delicious. \n\nNote: Eating this might cause antlers to grow from your head.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "winterPudding";
			changes = 0;
			changeLimit = 2;
			outputText("You stuff the stodgy pudding down your mouth, the taste of brandy cream sauce and bitter black treacle sugar combining in your mouth.  You can tell by its thick spongy texture that it's far from good for you, so its exclusivity is more than likely for the best.");
			player.refillHunger(30);
			if (player.thickness < 100 || player.tone > 0) {
				//outputText("\n\nYou feel your waist protrude slightly.  Did you just put on a little weight?  It sure looks like it.");
				outputText(player.modTone(0,2));
				outputText(player.modThickness(100,2));
			}
			outputText("\n\nYou lick your lips clean, savoring the taste of the Winter Pudding.  You feel kinda antsy...");
			//[Decrease player tone by 5, Increase Lust by 20, Destroy item.]
			dynStats("lus", (10+player.lib/10), "scale", false);

			//[Optional, give the player antlers! (30% chance) Show this description if the player doesn't have horns already.]
			if (player.horns.value == 0 && rand(2) === 0) {
				outputText("\n\nYou hear the sound of cracking branches erupting from the tip of your skull.  Small bulges on either side of your head advance outwards in a straight line, eventually spreading out in multiple directions like a miniature tree.  Investigating the exotic additions sprouting from your head, the situation becomes clear.  You've grown antlers!");
				//[Player horn type changed to Antlers.]
				player.horns.type = Horns.ANTLERS;
				player.horns.value = 4 + rand(12);
				changes++;
			}
			//[Show this description instead if the player already had horns when the transformation occurred.]
			else if (player.horns.value > 0 && player.horns.type !== Horns.ANTLERS && rand(2) === 0) {
				outputText("\n\nYou hear the sound of cracking branches erupting from the tip of your skull.  The horns on your head begin to twist and turn fanatically, their texture and size morphing considerably until they resemble something more like trees than anything else.  Branching out rebelliously, you've come to the conclusion that you've somehow gained antlers!");
				//[Player horn type changed to Antlers.]
				player.horns.type = Horns.ANTLERS;
				player.horns.value = 4 + rand(12);
				changes++;
			}
			if (rand(5) === 0) mutations.updateOvipositionPerk(tfSource); // I doubt, that winterPudding will ever be affected, but well ... just in case
			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;

	/**
	 * Wolf transformative item.
	 *
	 * @author Foxwells
	 */
	public class WolfPepper extends Consumable
	{
		public function WolfPepper()
		{
			super("Wolf Pp","Wolf Pp", "a Wolf Pepper", ConsumableLib.DEFAULT_VALUE, "The pepper is shiny and black, bulbous at the base but long and narrow at the tip. It has a fuzzy feel to it and it smells spicy. Somehow, you know it's different from the usual Canine Peppers you see.")
		}

		// Fuck yo dog shit we full-on wolf bitches now -Foxwells
		override public function useItem():Boolean
		{
			var tfSource:String = "wolfPepper";
			var temp:int = 0; // best variable name ever!
			var temp2:Number = 0;
			var temp3:Number = 0;
			var crit:Number = 1;
			mutations.initTransformation([2, 2]);
			clearOutput();
			outputText("The pepper has an uncomfortable texture to it, being covered in soft fuzz like it's a peach but somewhat crunchy like any other pepper. Its spiciness makes you nearly spit it out, and you're left sniffling after.");
			if (rand(100) < 15) {
				crit = int(Math.random() * 20) / 10 + 2;
				outputText(" Maybe it was a bit too spicy... The pepper seemed far more ripe than what you'd expect.");
			}
			//STAT CHANGES - TOU SPE INT RANDOM CHANCE, LIB LUST COR ALWAYS UPPED
			dynStats("lib", 1 + rand(2), "lus", 5 + rand(10), "cor", 1 + rand(5));
			outputText("\n\nYou lick your lips after you finish. That spiciness hit you in more ways than one.");
			if (player.tou100 < 70 && rand(3) === 0 && changes < changeLimit) {
				dynStats("tou", (1 * crit));
				if (crit > 1) outputText("\n\nYou roll your shoulders and tense your arms experimentally. You feel more durable, and your blood seems to run through you more clearly. You know you have more endurance.");
				else outputText("\n\nYour muscles feel denser and more durable. Not so much that feel stronger, but you feel like you can take more hits.");
			}
			if (player.spe100 > 30 && rand(7) === 0 && changes < changeLimit) {
				dynStats("spe", (-1 * crit));
				if (crit > 1) outputText("\n\nThe pepper's strong taste makes you take a couple steps back and lean against the nearest solid object. You don't feel like you'll be moving very fast anymore.");
				else outputText("\n\nYou stumble forward, but manage to catch yourself. Still, though, you feel somewhat slower.");
			}
			if (player.inte100 < 60 && rand(7) === 0 && changes < changeLimit) {
				dynStats("int", (1 * crit));
				outputText("\n\nThe spiciness makes your head twirl, but you manage to gather yourself. A strange sense of clarity comes over you in the aftermath, and you feel ");
				if (crit > 1) outputText("a lot ");
				outputText("smarter somehow.");
			}
			//MUTATIONZZZZZ
			//PRE-CHANGES: become biped, remove horns, remove wings, give human tongue, remove claws, remove antennea
			//no claws
			if (rand(4) === 0) {
				player.arms.claws.restore();
			}
			//remove antennae
			if (player.antennae.type !== Antennae.NONE && rand(3) === 0 && changes < changeLimit) {
				mutations.removeAntennae();
			}
			//remove horns
			if ((player.horns.type !== Horns.NONE || player.horns.value > 0) && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel your horns crumble, falling apart in large chunks until they flake away into nothing.");
				player.horns.value = 0;
				player.horns.type = Horns.NONE;
				changes++;
			}
			//remove wings
			if ((player.wings.type !== Wings.NONE || player.rearBody.type == RearBody.SHARK_FIN) && rand(3) === 0 && changes < changeLimit) {
				if (player.rearBody.type == RearBody.SHARK_FIN) {
					outputText("\n\nA wave of tightness spreads through your back, and it feels as if someone is stabbing a dagger into your spine."
					          +" After a moment the pain passes, though your fin is gone!");
					player.rearBody.restore();
				} else {
					outputText("\n\nA wave of tightness spreads through your back, and it feels as if someone is stabbing a dagger into each of your"
					          +" shoulder-blades. After a moment the pain passes, though your wings are gone!");
				}
				player.wings.restore();
				changes++;
			}
			//give human tongue
			if (player.tongue.type !== Tongue.HUMAN && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou lick the roof of your mouth, noticing that your tongue feels different. It then hits you-- You have a human tongue!");
				player.tongue.type === Tongue.HUMAN;
				changes++;
			}
			//remove non-wolf eyes
			if (changes < changeLimit && rand(3) === 0 && player.eyes.type !== Eyes.HUMAN && player.eyes.type !== Eyes.WOLF) {
				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, human eyes.");
				}
				player.eyes.type = Eyes.HUMAN;
				player.eyes.count = 2;
				changes++;
			}
			//normal legs
			if (player.lowerBody.type !== LowerBody.WOLF && rand(4) === 0) {
				mutations.restoreLegs(tfSource);
			}
			//normal arms
			if (rand(4) === 0) {
				mutations.restoreArms(tfSource);
			}
			//remove feather hair
			if (rand(4) === 0) {
				mutations.removeFeatheryHair();
			}
			//remove basilisk hair
			if (rand(4) === 0) {
				mutations.removeBassyHair();
			}
			//MUTATIONZ AT ANY TIME: wolf dick, add/decrease breasts, decrease breast size if above D
			//get a wolf dick
			//if ya genderless we give ya a dick cuz we nice like that
			if (player.gender === 0 && player.cocks.length === 0 && changes < changeLimit) {
				outputText("\n\nYou double over as a pain fills your groin, and you take off your " + player.armorName + " just in time to watch a bulge push out of your body. The skin folds back and bunches up into a sheath, revealing a red, knotted wolf cock drooling pre-cum underneath it. You take a shuddering breath as the pain dies down, leaving you with only a vague sense of lust and quiet admiration for your new endowment. You now have a wolf cock.");
				player.createCock();
				player.cocks[0].cockLength = rand(4) + 4;
				player.cocks[0].cockThickness = rand(2);
				player.cocks[0].knotMultiplier = 1.5;
				player.cocks[0].cockType = CockTypesEnum.WOLF;
				dynStats("lib", 3, "sen", 2, "lus", 25);
				changes++;
			}
			//if ya got a dick that's ok too we'll change it to wolf
			if (player.hasCock()) { //shamelessly copy/pasted from dog cock
				if (player.wolfCocks() < player.cocks.length && changes < changeLimit && rand(2) === 0) {
					//Select first non-wolf cock
					temp = player.cocks.length;
					temp2 = 0;
					while (temp > 0 && temp2 === 0) {
						temp--;
						//Store cock index if not a wolfCock and exit loop
						if (player.cocks[temp].cockType !== CockTypesEnum.WOLF) {
							temp3 = temp;
							//kicking out of the loop
							temp2 = 1000;
						}
					}
					//Using generic description because what's even the point of multiple descriptions--
					if (player.cocks[temp3].cockType.Index > 4) {
						outputText("\n\nYour " + player.cockDescript(temp3) + " trembles, resizing and reshaping itself into a shining, red wolf cock with a fat knot at the base. You now have a wolf cock.");
						dynStats("sen", 3, "lus", 5 * crit);
						if (player.cocks[temp3].cockType === CockTypesEnum.HORSE) { //horses get changes
							if (player.cocks[temp3].cockLength > 6) player.cocks[temp3].cockLength -= 2;
							else player.cocks[temp3].cockLength -= .5;
							player.cocks[temp3].thickenCock(.5);
						}
					}
					player.cocks[temp3].cockType = CockTypesEnum.WOLF;
					player.cocks[temp3].knotMultiplier = 1.5;
					player.cocks[temp3].thickenCock(2);
					changes++;
				}
			}
			//titties for those who got titties
			//wolfs have 8 nips so, 4 rows max. fen has no power here I'm making a wolf not a dog.
			//tbh also shamelessly copy/pasted from dog and adjusted according
			if (player.breastRows.length > 0 && player.breastRows.length <= 4) {
				if (player.breastRows[0].breastRating > 0) {
					if (player.breastRows.length < 4 && rand(2) === 0 && changes < changeLimit) {
						player.createBreastRow();
						//Store temp to the index of the newest row
						temp = player.breastRows.length - 1;
						//Breasts are too small to grow a new row, so they get bigger first
						if (player.breastRows[0].breastRating <= player.breastRows.length) {
							outputText("\n\nYour " + player.breastDescript(0) + " feel constrained and painful against your top as they grow larger by the moment, finally stopping as they reach ");
							player.breastRows[0].breastRating += 1;
							outputText(player.breastCup(0) + " size.");
							changes++;
						}
						//Had 1 row to start
						if (player.breastRows.length === 2 && changes < changeLimit) {
							//1 size below primary breast row
							player.breastRows[temp].breastRating = player.breastRows[0].breastRating - 1;
							if (player.breastRows[0].breastRating - 1 === 0) outputText("\n\nA second set of breasts forms under your current pair, stopping while they are still fairly flat and masculine looking.");
							else outputText("\n\nA second set of breasts bulges forth under your current pair, stopping as they reach " + player.breastCup(temp) + "s.");
							outputText(" A sensitive nub grows on the summit of each new tit, becoming a new nipple.");
							dynStats("sen", 2, "lus", 5);
							changes++;
						}
						//Many breast Rows - requires larger primary tits
						if (player.breastRows.length > 2 && player.breastRows[0].breastRating > player.breastRows.length && changes < changeLimit) {
							dynStats("sen", 2, "lus", 5);
							//New row's size = the size of the row above -1
							player.breastRows[temp].breastRating = player.breastRows[temp - 1].breastRating - 1;
							//If second row are super small but primary row is huge it could go negative.
							//This corrects that problem.
							if (player.breastRows[temp].breastRating < 0) player.breastRows[temp].breastRating = 0;
							if (player.breastRows[temp - 1].breastRating < 0) player.breastRows[temp - 1].breastRating = 0;
							if (player.breastRows[temp].breastRating === 0) outputText("\n\nYour abdomen tingles and twitches as a new row of breasts sprouts below the others. Your new breasts stay flat and masculine, not growing any larger.");
							else outputText("\n\nYour abdomen tingles and twitches as a new row of " + player.breastCup(temp) + " " + player.breastDescript(temp) + " sprouts below your others.");
							outputText(" A sensitive nub grows on the summit of each new tit, becoming a new nipple.");
							changes++;
						}
						//Extra sensitive if crit
						if (crit > 1) {
							if (crit > 2) {
								outputText(" You heft your new chest experimentally, exploring the new flesh with tender touches. Your eyes nearly roll back in your head from the intense feelings.");
								dynStats("sen", 8, "lus", 15)
							} else {
								outputText(" You touch your new nipples with a mixture of awe and desire, the experience arousing beyond measure. You squeal in delight, nearly orgasming, but in time finding the willpower to stop yourself.");
								dynStats("sen", 4, "lus", 10);
							}
						}

					}
					//If already has max breasts
					else if (rand(2) === 0) {
						//Check for size mismatches, and move closer to spec
						temp = player.breastRows.length;
						temp2 = 0;
						var evened: Boolean = false;
						//Check each row, and if the row above or below it is
						while (temp > 1 && temp2 === 0) {
							temp--;
							if (player.breastRows[temp].breastRating + 1 < player.breastRows[temp - 1].breastRating) {
								if (!evened) {
									evened = true;
									outputText("\n");
								}
								outputText("\nYour ");
								if (temp === 0) outputText("first ");
								if (temp === 1) outputText("second ");
								if (temp === 2) outputText("third ");
								if (temp === 3) outputText("fourth ");
								if (temp > 3) outputText("");
								outputText("row of " + player.breastDescript(temp) + " grows larger, as if jealous of the jiggling flesh above.");
								temp2 = (player.breastRows[temp - 1].breastRating) - player.breastRows[temp].breastRating - 1;
								if (temp2 > 4) temp2 = 4;
								if (temp2 < 1) temp2 = 1;
								player.breastRows[temp].breastRating += temp2;
							}
						}
					}
				}
			}
			//Remove breast rows if over 4
			if (changes < changeLimit && player.bRows() > 4 && rand(3) === 0) {
				mutations.removeExtraBreastRow(tfSource);
			}
			//Grow breasts if has vagina and has no breasts/nips
			else if (player.hasVagina() && player.bRows() === 0 && player.breastRows[0].breastRating === 0 && player.nippleLength === 0 && rand(2) === 0 && changes < changeLimit) {
				outputText("\n\nYour chest tingles uncomfortably as your center of balance shifts. You now have a pair of D-cup breasts.");
				outputText(" A sensitive nub grows on the summit of each tit, becoming a new nipple.");
				player.createBreastRow();
				player.breastRows[0].breastRating = 4;
				player.breastRows[0].breasts = 2;
			player.nippleLength = 0.25;
				dynStats("sen", 4, "lus", 6);
				changes++;
			}
			//Shrink breasts if over D-cup
			if (changes < changeLimit && rand(3) === 0 && !flags[kFLAGS.HYPER_HAPPY]) {
				temp2 = 0;
				temp3 = 0;
				//Determine if shrinking is required
				if (player.biggestTitSize() > 4) temp2 = 4;
				if (temp2 > 0) {
					//temp3 stores how many rows are changed
					temp3 = 0;
					for (var k: Number = 0; k < player.breastRows.length; k++) {
						//If this row is over threshhold
						if (player.breastRows[k].breastRating > temp2) {
							//Big change
							if (player.breastRows[k].breastRating > 10) {
								player.breastRows[k].breastRating -= 2 + rand(3);
								if (temp3 === 0) outputText("\n\nThe " + player.breastDescript(0) + " on your chest wobble for a second, then tighten up, losing several cup-sizes in the process!");
								else outputText(" The change moves down to your " + num2Text2(k + 1) + " row of " + player.breastDescript(0) + ". They shrink greatly, losing a couple cup-sizes.");
							}
							//Small change
							else {
								player.breastRows[k].breastRating -= 1;
								if (temp3 === 0) outputText("\n\nAll at once, your sense of gravity shifts. Your back feels a sense of relief, and it takes you a moment to realize your " + player.breastDescript(k) + " have shrunk!");
								else outputText(" Your " + num2Text2(k + 1) + " row of " + player.breastDescript(k) + " gives a tiny jiggle as it shrinks, losing some off its mass.");
							}
							//Increment changed rows
							temp3++;
						}
					}
				}
				//Count shrinking
				if (temp3 > 0) changes++;
			}
			//MUTATIONZ LEVEL 1: fur, stop hair growth, ears, tail
			//Gain fur
			if (mutations.tfNoFur() && rand(5) === 0 && changes < changeLimit && !player.hasFur()) {
				var wolfFurColors: Array = [
					"white",
					"gray",
					"dark gray",
					"light gray",
					"black",
					"light brown",
					"sandy brown",
					"golden",
					"silver",
					"brown",
					"auburn",
					["black", "gray"],
					["black", "brown"],
					["black", "silver"],
					["black", "auburn"],
					["white", "gray"],
					["white", "silver"],
					["white", "golden"],
				];
				outputText("\n\nYour " + player.skin.desc + " begins to tingle, then itch. ");
				player.skin.type = Skin.FUR;
				player.skin.desc = "fur";
				player.setFurColor(wolfFurColors, {
					type: UnderBody.FURRY
				}, true);
				outputText("You reach down to scratch your arm absent-mindedly and pull your fingers away to find strands of " + player.skin.furColor + " fur. You stare at it. Fur. Wait, you just grew fur?! What happened?! Your mind reeling, you do know one thing for sure: you now have fur!");
				changes++;
			}
			//Ears time
			if (rand(3) === 0 && player.ears.type !== Ears.WOLF && changes < changeLimit) {
				if (player.ears.type === -1) outputText("\n\nTwo painful nubs begin sprouting from your head, growing and opening into canine ears. ");
				if (player.ears.type === Ears.HUMAN) outputText("\n\nThe skin on the sides of your face stretches painfully as your ears migrate upwards, towards the top of your head. They shift and elongate, becoming canine in nature. ");
				if (player.ears.type === Ears.HORSE) outputText("\n\nYour equine ears twist as they transform into canine versions. ");
				if (player.ears.type === Ears.DOG) outputText("\n\nYour dog ears widen out, curving and becoming more aware of your surroundings. ");
				if (player.ears.type > Ears.WOLF) outputText("\n\nYour ears transform, becoming more canine in appearance. ");
				player.ears.type = Ears.WOLF;
				player.ears.value = 2;
				outputText("You now have wolf ears.");
				changes++;
			}
			//Wolf tail
			if (rand(3) === 0 && changes < changeLimit && player.tail.type !== Tail.WOLF) {
				if (player.tail.type === Tail.NONE) outputText("\n\nA pressure builds on your backside. You feel under your clothes and discover an odd, thick bump that seems to be growing larger by the moment. In seconds it passes between your fingers, bursts out the back of your clothes, and grows most of the way to the ground. A nushy coat of fur springs up to cover your new tail.  ");
				if (player.tail.type === Tail.HORSE) outputText("\n\nYou feel a tightness in your rump, matched by the tightness with which the strands of your tail clump together. In seconds they fuse into a single, thick tail, rapidly sprouting bushy fur. ");
				if (player.tail.type === Tail.DEMONIC) outputText("\n\nThe tip of your tail feels strange. As you pull it around to check on it, the spaded tip disappears, quickly replaced by a bushy coat of fur over the entire surface of your tail. Your tail thickens with it. ");
				if (player.tail.type >= Tail.COW) outputText("\n\nYou feel your backside shift and change, flesh molding and displacing into a thick, bushy tail. ");
				changes++;
				player.tail.type = Tail.WOLF;
				outputText("You now have a wolf tail!");
			}
			//Sets hair normal
			if (player.hair.type !== Hair.NORMAL && changes < changeLimit && rand(3) === 0) {
				outputText("\n\nYou reach up and feel the top of your head as it begins to tingle. You put a hand on the top of your head and slowly pull it down. Chunks of your " + player.hairDescript() + " come with, replaced by a set of normal, human hair.");
				player.hair.type = Hair.NORMAL;
				changes++;
			}
			//MUTATIONZ LEVEL 2: fur->arms fur+tail+ears->face stophair->nohair fur+tail->legs
			//gain wolf face
			if (mutations.tfNoFur() && player.face.type !== Face.WOLF && player.ears.type === Ears.WOLF && player.tail.type === Tail.WOLF && player.hasFur() && rand(5) === 0 && changes < changeLimit) {
				outputText("\n\nYou screech in pain as the bones of your face begin to rearrange themselves. Your [skinFurScales] practically melts off you, dropping onto the ground with heavy streams of blood. You put your hands to your face, writhing, blackness covering your vision as pain overwhelms you. But as quickly as it came, it stops, and you pull your shaking hands from your face. You scramble to the nearest reflective surface. You have a wolf's face!");
				player.face.type = Face.WOLF;
				changes++;
			}
			//legz
			if (player.lowerBody.legCount === 2 && player.lowerBody.type !== LowerBody.WOLF && player.tail.type === Tail.WOLF && player.skin.type === Skin.FUR && rand(4) === 0 && changes < changeLimit) {
				//Hooman feets
				if (player.lowerBody.type === LowerBody.HUMAN) outputText("\n\nYou stumble and fall, howling in pain as your legs and feet break apart and reform into wolf-like legs and paws. The worst of the pain eventually passes, but you're still left whimpering for a while. You now have paws!");
				//Hooves -> Paws
				else if (player.lowerBody.type === LowerBody.HOOFED) outputText("\n\nYou feel your hooves suddenly splinter, growing into five unique digits. Their flesh softens as your hooves reshape into furred paws. You now have paws!");
				else outputText("\n\nYour lower body is suddenly wracked by pain, causing you to collapse onto the ground in agony. Once it passes, you discover that you're standing on fur-covered paws. You now have paws!");
				player.lowerBody.type = LowerBody.WOLF;
				changes++;
			}
			//MUTATIONZ LEVEL 3: face->eyes
			if (player.eyes.type !== Eyes.WOLF && player.face.type === Face.WOLF && rand(4) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel a sudden surge of pain in your face as your eyes begin to change. You close them and feel something wet slide under your eyelids. You jump in surprise. The feeling's gone, but now the distance is a blurred view, and greens seem to be mixed with yellows.");
				outputText("\n\nYou turn to a nearby reflective surface to investigate. Your eyes have massive amber irises and are dipped into your face, hiding any sign of your sclera. Blackness surrounds them and emphasise the wolfish shape of your face. You blink a few times as you stare at your reflection. You now have wolf eyes! Your peripherals and night vision has probably improved, too.");
				player.eyes.type = Eyes.WOLF;
				changes++;
			}
            if (player.face.type === Face.WOLF && rand(4) === 0 && changes < changeLimit && !player.hasPerk(PerkLib.Bloodhound)) {
                outputText("\n\nA strong smell hits you suddenly, confusing you momentarily. The scent of sweat, earth, dew, leather and steel attacks" +
						" your nostrils, with an intensity you've never felt before.\n" +
						"You look around for the source, but you find nothing out of the ordinary.\nIt suddenly dawns on you; the smell was always there," +
						" your olfaction was just not keen enough!\n\n" +
						"After getting used to these new sensations, one smell stands out above all the others: blood. As faint as it is, the smell of blood" +
						" triggers a primal hunting instinct within you. If you could trigger this during a fight, you'd be a fearsome foe,for sure!");
				player.createPerk(PerkLib.Bloodhound);
				outputText("\nPerk added: Bloodhound - Extra accuracy, critical and movement chance against bleeding targets.");
                changes++;
            }
			//MISC CRAP
			//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);
			}
			if (rand(3) === 0) {
				outputText(player.modTone(100, 4));
			}
			if (rand(3) === 0) {
				outputText(player.modThickness(75, 3));
			}
			player.refillHunger(10);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}
}


code:
package classes.Items.Jewelries
{
	import classes.ItemType;
	import classes.Items.Jewelry;
	import classes.Player;

	public class Nothing extends Jewelry
	{
		public function Nothing()
		{
			super("nojewel", "nojewel", "nothing", "nothing", 0, 0, 0, "no jewelry", "ring");
		}

		override public function playerRemove():Jewelry {
			return null; //There is nothing!
		}
	}
}


code:
package classes.Items.Jewelries {
import classes.GlobalFlags.kGAMECLASS;
import classes.Items.Jewelry;
import classes.PerkLib;

public class RingOfPatience extends Jewelry{
    public function RingOfPatience() {
        super("PatienceRing", "Ring of Patience", "Ring of Patience", "a silver ring shaped like overlapping knots", 0, 0, 1, "This silver ring has an" +
                " interesting shape, looking like two knots interlocking in a circle. The finishing on it is rough, as if it was crafted by a skilled artisan with poor tools. Wearing it soothes your mind and allows you to act with patience and wisdom.","Ring");

    }

    override public function playerEquip():Jewelry {
        if(!player.hasPerk(PerkLib.Patience)){
            player.createPerk(PerkLib.Patience);
        }
        return super.playerEquip();
    }

    override public function playerRemove():Jewelry {
        if(player.hasPerk(PerkLib.Patience)){
            player.removePerk(PerkLib.Patience);
        }
        return super.playerRemove();
    }

}
}


code:
package classes.Items.Jewelries {
import classes.Items.Jewelry;

public class RingofTheSpectre extends Jewelry{
    public function RingofTheSpectre() {
        super("SpectrRing", "SpectrRing", "Ring of the Spectre", "a plain silver ring", 0, 1, 5000, "This ring looks absolutely" +
                " mundane, but contains a powerful enchantment, boosting the agility and critical precision of its wielder while reducing their health. It's likely that whoever crafted this wished" +
                " to remain inconspicuous, and went through perhaps too great a length to achieve it.", "Ring");
        boostsDodge(20);
        boostsCritChance(15);
        boostsMaxHealth(0.6,true);

    }

}
}


code:
/**
 * Created by Kitteh6660 on 08.29.14.
 */
package classes.Items
{
import classes.BonusDerivedStats;
import classes.ItemType;
	import classes.PerkLib;
	import classes.Player;

	public class Jewelry extends Useable
	{
		private var _effectId:Number;
		private var _effectMagnitude:Number;
		private var _perk:String;
		private var _name:String;

		public function Jewelry(id:String = "", shortName:String = "", name:String = "", longName:String = "", effectId:Number = 0, effectMagnitude:Number = 0, value:Number = 0, description:String = null, type:String = "", perk:String = "")
		{
			super(id, shortName, longName, value, description);
			this._name = name;
			this._effectId = effectId;
			this._effectMagnitude = effectMagnitude;
			this._perk = perk;
		}

		public function get effectId():Number { return _effectId; }

		public function get effectMagnitude():Number { return _effectMagnitude; }

		public function get perk():String { return _perk; }

		public function get name():String { return _name; }

		override public function get description():String {
			var desc:String = _description;
			//Type
			desc += "\n\nType: Ring ";
			//Special
			if (_effectId > 0){
				desc += "\nSpecial: ";
				switch(_effectId) {
					case JewelryLib.MODIFIER_MINIMUM_LUST:
						if (_effectMagnitude >= 0)
							desc += "Increases minimum lust by " + _effectMagnitude + ".";
						else
							desc += "Reduces minimum lust by " + (-_effectMagnitude) + ".";
						break;
					case JewelryLib.MODIFIER_FERTILITY:
						desc += "Increases cum production by " + _effectMagnitude + "% and fertility by " + _effectMagnitude + ".";
						break;
					case JewelryLib.MODIFIER_CRITICAL:
						desc += "Increases critical chance by " + _effectMagnitude + "%.";
						break;
					case JewelryLib.MODIFIER_REGENERATION:
						desc += "Grants regeneration of " + _effectMagnitude + " HP per turn. Effect doubled outside of combat.";
						break;
					case JewelryLib.MODIFIER_HP:
						desc += "Increases maximum HP by " + _effectMagnitude + "."
						break;
					case JewelryLib.MODIFIER_ATTACK_POWER:
						desc += "Increases attack power by " + _effectMagnitude + "%."
						break;
					case JewelryLib.PURITY:
						desc += "Slowly decreases the corruption of the wearer over time. Reduces minimum libido by " + _effectMagnitude + ".";
						break;
					case JewelryLib.CORRUPTION:
						desc += "Slowly corrupts the wearer over time.";
						break;
					case JewelryLib.MODIFIER_ETHEREALBLEED:
						desc += "Increases bleed duration. Allows your bleed attacks to affect bleed-immune enemies.";
						break;
					case JewelryLib.MODIFIER_SPECTRE:
						desc += "Increases dodge chance by 20%.\nIncreases critical chance by 15%.\nReduces health by 40%.";
						break;
					default:
						desc += "You shouldn't see this line at all. Something must be wrong with the coding.";
				}
			}
			//Value
			desc += "\nBase value: " + String(value);
			desc += generateStatsTooltip();
			return desc;
		}

		override public function useText():void {
			outputText("You equip " + longName + ".  ");
		}

		public function playerEquip():Jewelry { //This item is being equipped by the player. Add any perks, etc. - This function should only handle mechanics, not text output
			return this;
		}

		public function playerRemove():Jewelry { //This item is being removed by the player. Remove any perks, etc. - This function should only handle mechanics, not text output
			return this;
		}

		public function removeText():void {} //Produces any text seen when removing the armor normally

		override public function boostStat(stat:String,amount:*,mult:Boolean = false):void{
            bonusStats.boostStat(stat,amount,mult,name);
		}

	}
}