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

	/**
	 * Maximum manliness!
	 */
	public class BroBrew extends Consumable
	{
		private static const ITEM_VALUE:int = 1000;

		public function BroBrew()
		{
			super("BroBrew","BroBrew", "a can of Bro Brew", ITEM_VALUE, "This aluminum can is labelled as 'Bro Brew'.  It even has a picture of a muscly, bare-chested man flexing on it.  A small label in the corner displays: \"Demon General's Warning: Bro Brew's effects are as potent (and irreversible) as they are refreshing.");
		}

		override public function useItem():Boolean
		{
			player.slimeFeed();
			clearOutput();
			//no drink for bimbos!
			if (player.findPerk(PerkLib.BimboBody) >= 0) {
				outputText("The stuff hits you like a giant cube, nearly staggering you as it begins to settle.");
				if (player.tallness < 77) {
					player.tallness = 77;
					outputText(".. Did the ground just get farther away?  You glance down and realize, you're growing!  Like a sped-up flower sprout, you keep on getting taller until finally stopping around... six and a half feet, you assume.  Huh.  You didn't expect that to happen!");
				}
				if (player.tone < 100) {
					outputText("  A tingling in your arm draws your attention just in time to see your biceps and triceps swell with new-found energy, skin tightening until thick cords of muscle run across the whole appendage.  Your other arm surges forward with identical results.  To compensate, your shoulders and neck widen to bodybuilder-like proportions while your chest and abs tighten to a firm, statuesque physique.  Your " + player.legs() + " and glutes are the last to go, bulking up to proportions that would make any female martial artist proud.  You feel like you could kick forever with legs this powerful.");
					player.tone = 100;
				}
				outputText("\n\n");

				//female
				if (!player.hasCock()) {
					outputText("The beverage isn't done yet, however, and it makes it perfectly clear with a building pleasure in your groin.  You can only cry in ecstasy and loosen the bottoms of your " + player.armorName + " just in time for a little penis to spring forth.  You watch, enthralled, as blood quickly stiffens the shaft to its full length – then keeps on going!  Before long, you have a quivering 10-inch maleness, just ready to stuff into a welcoming box.");
					player.createCock();
					player.cocks[0].cockLength = 10;
					player.cocks[0].cockThickness = 2;
					if (player.balls === 0) {
						outputText("  Right on cue, two cum-laden testicles drop in behind it, their contents swirling and churning.");
						player.balls = 2;
						player.ballSize = 3;
					}
					outputText("\n\n");
				}
				else if (player.balls === 0) {
					outputText("A swelling begins behind your man-meat, and you're assailed with an incredibly peculiar sensation as two sperm-filled balls drop into a newly-formed scrotum.  Frikkin' sweet!\n\n");
					player.balls = 2;
					player.ballSize = 3;
				}
				outputText("Finally, you feel the transformation skittering to a halt, leaving you to openly roam your new chiseled and sex-ready body.  So what if you can barely form coherent sentences anymore?  A body like this does all the talking you need, you figure!");
				if (player.inte > 35) {
					var boost:Number = (player.inte-35) / 5;
					player.inte = 35 + boost;
					dynStats("int", -0.1);

				}
				if (player.lib < 50) {
					player.lib = 50;
					dynStats("lib", .1);
				}
				outputText("\n\n");
				if (player.findPerk(PerkLib.BimboBrains) >= 0) outputText("(Lost Perks - Bimbo Brains, Bimbo Body)\n");
				else outputText("(Lost Perk - Bimbo Body)\n");
				player.removePerk(PerkLib.BimboBrains);
				player.removePerk(PerkLib.BimboBody);
				player.createPerk(PerkLib.FutaForm, 0, 0, 0, 0);
				player.createPerk(PerkLib.FutaFaculties, 0, 0, 0, 0);
				outputText("(Gained Perks - Futa Form, Futa Faculties)");
				return false;
			}
			//HP restore for bros!
			if (player.findPerk(PerkLib.BroBody) >= 0 || player.findPerk(PerkLib.FutaForm) >= 0) {
				outputText("You crack open the can and guzzle it in a hurry.  Goddamn, this shit is the best.  As you crush the can against your forehead, you wonder if you can find a six-pack of it somewhere?\n\n");
				player.changeFatigue(-33);
				player.HPChange(100, true);
				player.refillHunger(30);
				return false;
			}
			outputText("Well, maybe this will give you the musculature that you need to accomplish your goals.  You pull on the tab at the top and hear the distinctive snap-hiss of venting, carbonating pressure.  A smoky haze wafts from the opened container, smelling of hops and alcohol.  You lift it to your lips, the cold, metallic taste of the can coming to your tongue before the first amber drops of beer roll into your waiting mouth.  It tingles, but it's very, very good.  You feel compelled to finish it as rapidly as possible, and you begin to chug it.  You finish the entire container in seconds.\n\n");

			outputText("A churning, full sensation wells up in your gut, and without thinking, you open wide to release a massive burp. It rumbles through your chest, startling birds into flight in the distance.  Awesome!  You slam the can into your forehead hard enough to smash the fragile aluminum into a flat, crushed disc.  Damn, you feel stronger already");
			if (player.inte > 50) outputText(", though you're a bit worried by how much you enjoyed the simple, brutish act");
			outputText(".\n\n");

			//(Tits b' gone)
			if (player.biggestTitSize() >= 1) {
				outputText("A tingle starts in your " + player.nippleDescript(0) + "s before the tight buds grow warm, hot even.  ");
				if (player.biggestLactation() >= 1) outputText("Somehow, you know that the milk you had been producing is gone, reabsorbed by your body.  ");
				outputText("They pinch in towards your core, shrinking along with your flattening " + player.allChestDesc() + ".  You shudder and flex in response.  Your chest isn't just shrinking, it's reforming, sculping itself into a massive pair of chiseled pecs.  ");
				if (player.breastRows.length > 1) {
					outputText("The breasts below vanish entirely.  ");
					while (player.breastRows.length > 1) {
						player.removeBreastRow(player.breastRows.length - 1, 1);
					}
				}
				player.breastRows[0].breastRating = 0;
				player.breastRows[0].nipplesPerBreast = 1;
				player.breastRows[0].fuckable = false;
				if (player.nippleLength > .5) player.nippleLength = .25;
				player.breastRows[0].lactationMultiplier = 0;
				player.removeStatusEffect(StatusEffects.Feeder);
				player.removePerk(PerkLib.Feeder);
				outputText("All too soon, your boobs are gone.  Whoa!\n\n");
			}

			outputText("Starting at your hands, your muscles begin to contract and release, each time getting tighter, stronger, and more importantly - larger.  The oddness travels up your arms, thickens your biceps, and broadens your shoulders.  Soon, your neck and chest are as built as your arms.  You give a few experimental flexes as your abs ");
			if (player.tone >= 70) outputText("further define themselves");
			else outputText("become extraordinarily visible");
			outputText(".  The strange, muscle-building changes flow down your " + player.legs() + ", making them just as fit and strong as the rest of you.  You curl your arm and kiss your massive, flexing bicep.  You're awesome!\n\n");

			outputText("Whoah, you're fucking ripped and strong, not at all like the puny weakling you were before.  Yet, you feel oddly wool-headed.  Your thoughts seem to be coming slower and slower, like they're plodding through a marsh.  You grunt in frustration at the realization.  Sure, you're a muscle-bound hunk now, but what good is it if you're as dumb as a box of rocks?  Your muscles flex in the most beautiful way, so you stop and strike a pose, mesmerized by your own appearance.  Fuck thinking, that shit's for losers!\n\n");

			//(has dick less than 10 inches)
			if (player.hasCock()) {
				if (player.cocks[0].cockLength < 10) {
					outputText("As if on cue, the familiar tingling gathers in your groin, and you dimly remember you have one muscle left to enlarge.  If only you had the intelligence left to realize that your penis is not a muscle.  In any event, your " + player.cockDescript(0) + " swells in size, ");
					if (player.cocks[0].cockThickness < 2.75) {
						outputText("thickening and ");
						player.cocks[0].cockThickness = 2.75;
					}
					outputText("lengthening until it's ten inches long and almost three inches wide.  Fuck, you're hung!  ");
					player.cocks[0].cockLength = 10;
				}
				//Dick already big enough! BALL CHECK!
				if (player.balls > 0) {
					outputText("Churning audibly, your " + player.sackDescript() + " sways, but doesn't show any outward sign of change.  Oh well, it's probably just like, getting more endurance or something.");
				}
				else {
					outputText("Two rounded orbs drop down below, filling out a new, fleshy sac above your " + player.legs() + ".  Sweet!  You can probably cum buckets with balls like these.");
					player.balls = 2;
					player.ballSize = 3;
				}
				outputText("\n\n");
			}
			//(No dick)
			else {
				outputText("You hear a straining, tearing noise before you realize it's coming from your underwear.  Pulling open your " + player.armorName + ", you gasp in surprise at the huge, throbbing manhood that now lies between your " + player.hipDescript() + ".  It rapidly stiffens to a full, ten inches, and goddamn, it feels fucking good.  You should totally find a warm hole to fuck!");
				if (player.balls === 0) outputText("  Two rounded orbs drop down below, filling out a new, fleshy sac above your " + player.legs() + ".  Sweet!  You can probably cum buckets with balls like these.");
				outputText("\n\n");
				player.createCock();
				player.cocks[0].cockLength = 12;
				player.cocks[0].cockThickness = 2.75;
				if (player.balls === 0) {
					player.balls = 2;
					player.ballSize = 3;
				}
			}
			//(Pussy b gone)
			if (player.hasVagina()) {
				outputText("At the same time, your " + player.vaginaDescript(0) + " burns hot, nearly feeling on fire.  You cuss in a decidedly masculine way for a moment before the pain fades to a dull itch.  Scratching it, you discover your lady-parts are gone.  Only a sensitive patch of skin remains.\n\n");
				player.removeVagina(0, 1);
			}
			//(below max masculinity)
			if (player.femininity > 0) {
				outputText("Lastly, the change hits your face.  You can feel your jawbones shifting and sliding around, your skin changing to accommodate your face's new shape.  Once it's finished, you feel your impeccable square jaw and give a wide, easy-going grin.  You look awesome!\n\n");
				player.modFem(0, 100);
			}
			outputText("You finish admiring yourself and adjust your " + player.armorName + " to better fit your new physique.  Maybe there's some bitches around you can fuck.  Hell, as good as you look, you might have other dudes wanting you to fuck them too, no homo.\n\n");
			//max tone.  Thickness + 50
			player.modTone(100, 100);
			player.modThickness(100, 50);
			//Bonus cum production!
			player.createPerk(PerkLib.BroBrains, 0, 0, 0, 0);
			player.createPerk(PerkLib.BroBody, 0, 0, 0, 0);
			outputText("(Bro Body - Perk Gained!)\n");
			outputText("(Bro Brains - Perk Gained!)\n");//int to 20.  max int 50)
			if (player.findPerk(PerkLib.Feeder) >= 0) {
				outputText("(Perk Lost - Feeder!)\n");
				player.removePerk(PerkLib.Feeder);
			}
			if (player.inte > 21) {
				boost = (player.inte-20) / 4;
				player.inte = 21 + boost;
			}
			dynStats("str", 33, "tou", 33, "int", -1, "lib", 4, "lus", 40);
			player.refillHunger(30);

			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 BrownEgg extends Consumable
	{
		public static const SMALL:int = 0;
		public static const LARGE:int = 1;

		private var large:Boolean;

		public function BrownEgg(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 = "BrownEg";
					shortName = "BrownEg";
					longName = "a brown and white mottled 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.BrnEg";
					shortName = "L.BrnEg";
					longName = "a large brown and white mottled 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();
			outputText("You devour the egg, momentarily sating your hunger.\n\n");
			if (!large) {
				outputText("You feel a bit of additional weight on your backside as your [butt] gains a bit more padding.");
				player.butt.rating++;
				player.refillHunger(20);
			} else {
				outputText("Your [butt] wobbles, nearly throwing you off balance as it grows much bigger!");
				player.butt.rating += 2 + rand(3);
				player.refillHunger(60);
			}
			if (rand(3) === 0) {
				if (large)
					outputText(player.modThickness(100, 8));
				else
					outputText(player.modThickness(95, 3));
			}

			return false;
		}
	}
}

license: unknown


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

	/**
	 * Item that triggers succubus events.
	 */
	public class CeruleanPotion extends Consumable
	{
		private static const ITEM_VALUE:int = 75;

		public function CeruleanPotion()
		{
			super("Cerul P", "Cerulean P.", "a cerulean-tinted potion", ITEM_VALUE, "This is a mysterious bottle filled with a sky-blue liquid that sloshes gently inside.  Supposedly it will make you irresistible, though to what or who you cannot say.");
		}

		override public function useItem():Boolean
		{
			player.slimeFeed();
			//Repeat genderless encounters
			clearOutput();
			if (player.gender === 0 && flags[kFLAGS.CERULEAN_POTION_NEUTER_ATTEMPTED] > 0) {
				outputText("You take another sip of the Cerulean Potion.  You find it soothing and become very excited about the possibility of another visit from the succubus.");
			}
			else if (player.gender === 3 && flags[kFLAGS.CERULEAN_SUCCUBUS_HERM_COUNTER] > 0) {
				outputText("With anticipation, you chug down another bottle of the Cerulean Potion. A warm sensation radiates out from your stomach as you feel the potion course through your body.");
			}
			//All else
			else {
				outputText("The liquid tastes rather bland and goes down easily. ");
				//Special repeat texts
				if (player.hasStatusEffect(StatusEffects.RepeatSuccubi)) outputText("You look forwards to tonight's encounter.");
				//First timer huh?
				else outputText("You do not notice any real effects.  Did the merchant con you?");
			}
			if (player.hasStatusEffect(StatusEffects.SuccubiNight)) {
				if (player.statusEffectv1(StatusEffects.SuccubiNight) < 3) player.addStatusValue(StatusEffects.SuccubiNight,1,1);
			}
			else player.createStatusEffect(StatusEffects.SuccubiNight, 1, 0, 0, 0);
			player.refillHunger(20);

			return false;
		}
	}
}


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

	/**
	 * Sheep transformative item.
	 *
	 * @author written by MissBlackthorne and coded by Foxwells
	 */
	public class Clovis extends Consumable
	{
		public function Clovis()
		{
			super("Clovis", "Clovis", "a bottle of Clovis", ConsumableLib.DEFAULT_VALUE, "This bottle is in the shape of a 4-leaf-clover and contains a soft pink potion. An image of a sheep is on the label along with text, \"Clovis - to help you to live in clover\".");
		}

		override public function useItem():Boolean
		{
			var tfSource: String = "clovis";
			mutations.initTransformation([2, 2]);
			outputText("You open the bottle of Clovis, its sweet smell making you feel carefree. You drink the contents and relax to the sensation it brings, feeling like you're being cuddled by a big fluffy cloud.");
			// Stat changes!
			if (player.inte > 90 && rand(3) === 0 && changes < changeLimit) {
				dynStats("int", -(rand(2) + 1));
				outputText("\n\nThe sense of calm the potion gives you slowly fades into dopey bliss. You haven't a care in the world, not even the fact that you've got a little dumber.");
			}
			if (rand(3) === 0 && changes < changeLimit) {
				dynStats("tou", rand(2) + 1);
				outputText("\n\nYou feel a wave of stubborn pride wash over you as you finish the potion. You’re sure nothing could stop you now, not even the demons.");
			}
			if (player.spe < 75 && rand(3) === 0 && changes < changeLimit) {
				dynStats("spe", rand(2) + 1);
				outputText("\n\nYou feel oddly compelled to jump from rock to rock across a nearby stream, a sense of sure footedness and increased agility deep within you. To your surprise, you make it across with no trouble. The damp and uneven rocks are barely a challenge to your increased speed.");
			}
			if (rand(3) === 0 && changes < changeLimit) {
				dynStats("sens", -(rand(2) + 1));
				outputText("\n\nYou feel less sensitive to the touch, a slight numbness pervading your body as if truly wrapped in cotton wool. The numbness eventually fades, leaving you now less affected by the lusty touches of your foes.");
			}
			if (rand(3) === 0 && changes < changeLimit) {
				dynStats("cor", -(rand(3) + 2));
				outputText("\n\nYou close your eyes as your mind becomes clearer, a purging white searing through your being. It envelops you in its fluffy softness as it chases out the taint, first burning but then soothing. As you open your eyes, you feel you have regained some of your purity that this perverted realm seeks to claim.");
				changes++;
			}
			if (player.tallness > 67 && rand(2) === 0 && changes < changeLimit) {
				player.tallness -= (1 + rand(4));
				outputText("\n\nYou blink as you feel your center of gravity shift lower. You look down and realize the ground is closer now. You appear to have gotten shorter!");
				changes++;
			}
			if (player.butt.rating < 6 && rand(3) === 0 && changes < changeLimit) {
				player.butt.rating += (1 + rand(2));
				if (player.butt.rating > 6) {
					player.butt.rating = 6;
				}
				outputText("\n\nYou feel your clothes tighten around your [butt], your behind expanding. Thankfully, it stops before your clothes can't handle it. As you run your hand over the tight fabric, you can't help but grope the now plumper flesh.");
			}
			//Neck restore
			if (player.neck.type != Neck.NORMAL && changes < changeLimit && rand(4) == 0)
				mutations.restoreNeck(tfSource);
			//Rear body restore
			if (player.rearBody.type != RearBody.NONE && changes < changeLimit && rand(5) == 0) mutations.restoreRearBody(tfSource);
			if (player.ears.type !== Ears.SHEEP && rand(3) === 0 && changes < changeLimit) {
				if (player.ears.type === -1) { outputText("\n\nTwo painful nubs begin sprouting from your head, growing out in a tear-drop shape and flopping over. To top it off, wool coats them."); } else { outputText("\n\nYou feel your ears shift and elongate, becoming much floppier. They take on a more tear drop shape, flopping at the side of your head cutely as a light coat of downy wool forms on them.");	}
				player.ears.type = Ears.SHEEP;
				player.ears.value = 2;
				outputText(" You now have sheep ears!");
				changes++;
			}
			if (player.tail.type !== Tail.SHEEP && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel the flesh above your [butt] knotting and changing. It twists and writhes around itself, lengthening before flopping straight down. With a slight poof, a coat of soft and fluffy wool coats it, your new tail taking on the wooly appearance of a sheep's.");
				player.tail.type = Tail.SHEEP;
				outputText(" You now have a sheep's tail!");
				changes++;
			}
			if (player.lowerBody.type !== LowerBody.CLOVEN_HOOFED && player.tail.type === Tail.SHEEP && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou feel a strange tightness from your feet and nearly topple over as your balance shifts. You're balancing on your toes for some reason. You look down in amazement as your legs slim and shorten, your feet elongating and darkening at the ends, all morphing until you're balancing on two sheep legs, complete with cute little hooves.");
				player.lowerBody.type = LowerBody.CLOVEN_HOOFED;
				player.lowerBody.legCount = 2;
				outputText(" You now have sheep hooves!");
				changes++;
			}
			if (player.horns.type !== Horns.SHEEP && player.horns.type !== Horns.RAM && player.ears.type === Ears.SHEEP && rand(3) === 0 && changes < changeLimit) {
					if (player.horns.type !== Horns.NONE) {
						outputText("\n\nYou feel your horns suddenly crumble, falling apart in large chunks until they flake away into nothing.");
					}
					outputText("\n\nYou grip your head as a surge of pain hits you. A pair of horns slowly emerge from your skull, curling out and forward in a half circle. The ribbed curls remind you of the horns of the sheep back in Ingnam. You now have sheep horns!");
				player.horns.type = Horns.SHEEP;
				player.horns.value = 1;
				changes++;
			}
			if (mutations.tfNoFur() && rand(3) === 0 && changes < changeLimit && player.lowerBody.legCount === 2 && player.lowerBody.type === LowerBody.CLOVEN_HOOFED && player.horns.type === Horns.SHEEP && player.tail.type === Tail.SHEEP && player.ears.type === Ears.SHEEP && !player.hasWool()) {
			    var sheepWoolColors: Array = [
				"white",
				"black",
				"gray",
				"silver",
				"brown",
				"moorit"
			    ];
				if (!player.hasFur()) {
					outputText("\n\nWith an almost audible \*POMF\*, a soft fleece erupts from your body. The fleece covers all of your midsection and thighs, thick and fluffy. It doesn't fully hide your sexual features, instead obscuring them in an enticing manner. You can't help but run your hands over your soft, " + player.skin.furColor + " wool, reveling in plushness. You now have sheep wool!");
				} else {
					outputText("\n\nYou feel your fur suddenly stand on end, every follicle suddenly detaching and leaving your skin bare. As you stand with a pile of shed fur around your feet, you feel your skin tingle, and you're sure it isn't from the cold. With an almost audible \*POMF\*, a soft fleece erupts from your body. The fleece covers all of your midsection and thighs, thick and fluffy. It doesn't fully hide your sexual features, instead obscuring them in an enticing manner. You can't help but run your hands over your soft, " + player.skin.furColor + " wool, reveling in plushness. You now have sheep wool!");
				}
				player.skin.type = Skin.WOOL;
				player.skin.desc = "wool";
				player.setFurColor(sheepWoolColors, {
					type: UnderBody.FURRY
				}, true);
				changes++;
			}
			if (player.horns.type === Horns.SHEEP && player.hasWool() && player.femininity <= 45 && rand(3) === 0 && changes < changeLimit) {
					outputText("\n\nYou feel a familiar pain in your head. Your horns are growing! More ribbed horn emerges from your scalp, your horns slowly curling around fully as they thicken. Once a full ring of horn is complete they lengthen until the pointed ends face forward, tucked under your ears. You run your fingers over your curled horns in awe. These could seriously do some damage! Or at least stun your foes. You now have the horns of a ram!");
				player.horns.type = Horns.RAM;
				player.horns.value = 2;
				changes++;
			}
			if (player.horns.type === Horns.RAM && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou groan and clutch your head as your horns stretch out, becoming even longer.");
				player.horns.type = Horns.RAM;
				player.horns.value += (1 + rand(3));
				changes++;
			}
			if (player.hasWool() && player.hair.type !== Hair.WOOL && player.femininity >= 65 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYour hair suddenly poofs out as if you had filled it with static. You attempt to smooth it down, but you can't seem to straighten it out properly. It keeps bouncing back in a cushion-like manner. You in a nearby puddle. Your hair is now much thicker, it having become rather curly and bouffant like the wool of a sheep. You realize that you now have woolen hair!");
				player.hair.type = Hair.WOOL;
				changes++;
			}
			if (player.hips.rating < 10 && player.femininity >= 65 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou grip your hips as they shift, getting wider and altering your stance. Your hips seem much more fitting for a sheep now, all big and cuddly.");
				player.hips.rating += (rand(2) + 1);
				if (player.hips.rating > 10) {
					player.hips.rating = 10;
				}
				changes++;
			}
			if (player.breastRows[0].breastRating < 5 && player.femininity >= 65 && rand(3) === 0 && changes < changeLimit) {
				player.breastRows[0].breastRating += (rand(2) + 1);
				if (player.breastRows[0].breastRating > 5) {
					player.breastRows[0].breastRating = 5;
				}
				outputText("\n\nYour breasts feel constrained and painful against your top as they grow larger by the moment, finally stopping as they reach " + player.breastCup(0) + "-cup. You rub the tender orbs as you get used to your larger breast flesh.");
				changes++;
			}
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}
}


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

	/**
	 * Triggers heat or rut and increases anal capacity.
	 */
	public class Coal extends Consumable
	{
		public function Coal()
		{
			super("Coal   ","Coal", "two pieces of coal", ConsumableLib.DEFAULT_VALUE, "These two pieces of coal may look ordinary but it makes you wonder what happens when you rub them.");
		}

		override public function useItem():Boolean
		{
			changes = 0;
			clearOutput();
			outputText("You handle the coal rocks experimentally and they crumble to dust in your hands!  You cough as you breathe in the cloud, sputtering and wheezing.  After a minute of terrible coughing, you recover and realize there's no remaining trace of the rocks, not even a sooty stain on your hands!");
			//Try to go into intense heat
			if (player.goIntoHeat(true, 2)) {
				changes++;
			}
			//Males go into rut
			else if (player.goIntoRut(true)) {
				changes++;
			}
			else {
				//Boost anal capacity without gaping
				if (player.statusEffectv1(StatusEffects.BonusACapacity) < 80) {
					if (!player.hasStatusEffect(StatusEffects.BonusACapacity)) player.createStatusEffect(StatusEffects.BonusACapacity, 0, 0, 0, 0);
					player.addStatusValue(StatusEffects.BonusACapacity, 1, 5);
					outputText("\n\nYou feel... more accommodating somehow.  Your " + player.assholeDescript() + " is tingling a bit, and though it doesn't seem to have loosened, it has grown more elastic.");
					changes++;
				}
				else {
					outputText("\n\nYour whole body tingles for a moment but it passes.  It doesn't look like the coal can do anything to you at this point.");
				}
			}

			return false;
		}
	}
}


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

	public class CumBread extends Consumable
	{

		public function CumBread() {
			super("C.Bread","C.Bread", "a bowl of cum with bread pieces floating in it", ConsumableLib.DEFAULT_VALUE, "A bowl of cum with pieces of bread floating in it.  Eating this would take the edge off your hunger but damage your dignity.");
		}

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

		override public function useItem():Boolean {
			prison.prisonItemBread(true, true);
			return true;
		}

	}

}


code:
/**
 * Created by aimozg on 01.04.2017.
 */
package classes.Items.Consumables {
import classes.GlobalFlags.kFLAGS;
import classes.Items.Consumable;
import classes.PerkLib;
import classes.PregnancyStore;
import classes.StatusEffects;
//Oviposition Elixer!
/* Notes on StatusEffects.Eggs
 v1 = egg type.
 v2 = size - 0 for normal, 1 for large
 v3 = quantity
 EGG TYPES-
 0 - brown - ass expansion
 1 - purple - hip expansion
 2 - blue - vaginal removal and/or growth of existing maleness
 3 - pink - dick removal and/or fertility increase.
 4 - white - breast growth.  If lactating increases lactation.
 5 - rubbery black
 */
public class CustomOviElixir extends Consumable {

	public function CustomOviElixir(id:String, shortName:String, longName:String, value:Number, description:String) {
		super(id, shortName, longName, value, description);
	}

	override public function canUse():Boolean {
		if (player.hasVagina()) return true;
		outputText("You pop the cork and prepare to drink the stuff, but the smell nearly makes you gag.  You cork it hastily.\n\n");
		return false;
	}

	override public function useItem():Boolean {
		player.slimeFeed();
		outputText("You pop the cork and gulp down the thick greenish fluid.  The taste is unusual and unlike anything you've tasted before.");
		if (player.pregnancyType == PregnancyStore.PREGNANCY_GOO_STUFFED) {
			outputText("\n\nFor a moment you feel even more bloated than you already are.  That feeling is soon replaced by a dull throbbing pain.  It seems that with Valeria's goo filling your womb the ovielixir is unable to work its magic on you.");
				return(false);
		}
		if (player.pregnancyType == PregnancyStore.PREGNANCY_WORM_STUFFED) {
			outputText("\n\nFor a moment you feel even more bloated than you already are.  That feeling is soon replaced by a dull throbbing pain.  It seems that with the worms filling your womb the ovielixir is unable to work its magic on you.");
				return(false);
		}
		const incubation:int = player.pregnancyIncubation;
		if (incubation == 0) { //If the player is not pregnant, get preggers with eggs!
			outputText("\n\nThe elixir has an immediate effect on your belly, causing it to swell out slightly as if pregnant.  You guess you'll be laying eggs sometime soon!");
			createPregnancy(rand(6),randBigEgg(), randEggCount());
				return(false);
		}
		var changeOccurred:Boolean = false;
		if (player.pregnancyType == PregnancyStore.PREGNANCY_OVIELIXIR_EGGS) { //If player already has eggs, chance of size increase!
			if (this is OvipositionMax && !player.hasPerk(PerkLib.Oviposition) && !canSpeedUp()) {
				outputText("\n\nYou start to feel a bit of a rumble. You look down at your belly, and it seems to have started a slight twitch,"
				          +" and then stops. You take a look at the empty ovimax bottle for information when suddenly your womb lurches forward"
				          +" and your stomach starts to slightly expand. Dropping the ovimax bottle to the ground, you moan as your bury your face"
				          +" in the parched earth, a silent scream leaving your mouth as the rumbling in your tummy is turning more violent,"
				          +" and more painful...and then it stops completely. You shudder in the fetal position,"
				          +" waiting for another seizure that didn't come. Maybe you should stop drinking these things.");

				// raises chance to gain the Oviposition perk due to overdosing. 1/3 per overdose.
				// Would happen, when actually laying those eggs.
				flags[kFLAGS.OVIMAX_OVERDOSE]++;
			}
			if (player.hasStatusEffect(StatusEffects.Eggs)) {
				//If eggs are small, chance of increase!
				if (player.statusEffectv2(StatusEffects.Eggs) == 0) {
					//1 in 2 chance!
					if (randDoIncEggSize()) {
						player.addStatusValue(StatusEffects.Eggs, 2, 1);
						outputText("\n\nYour pregnant belly suddenly feels heavier and more bloated than before.  You wonder what the elixir just did.");
						changeOccurred = true;
					}
				}
				//Chance of quantity increase!
				const bonus:Number = bonusEggQty();
				if (bonus>0) {
					outputText("\n\nA rumble radiates from your uterus as it shifts uncomfortably and your belly gets a bit larger.");
					player.addStatusValue(StatusEffects.Eggs, 3, bonus);
					changeOccurred = true;
				}
			}
		}
		if (!changeOccurred && canSpeedUp()) { //If no changes, speed up pregnancy.
			outputText("\n\nYou gasp as your pregnancy suddenly leaps forwards, your belly bulging outward a few inches as it gets closer to time for birthing.");
			var newIncubation:int = doSpeedUp(incubation);
			if (newIncubation < 2) newIncubation = 2;
			player.knockUpForce(player.pregnancyType, newIncubation);
			//trace("Pregger Count New total:" + incubation);
		}
			return(false);
	}

	protected function doSpeedUp(incubation:int):int {
		return incubation - int(incubation * 0.3 + 10);
	}

	protected function canSpeedUp():Boolean {
		return player.pregnancyIncubation > 20 && player.pregnancyType != PregnancyStore.PREGNANCY_BUNNY;
	}

	protected function bonusEggQty():int {
		return rand(2) == 0 ? rand(4) + 1 : 0;
	}

	protected function randDoIncEggSize():Boolean {
		return rand(3) == 0;
	}

	protected function randEggCount():int {
		return rand(3) + 5;
	}

	protected function randBigEgg():Boolean {
		return false;
	}

	public function createPregnancy(type:int, big:Boolean, quantity:int):void {
		player.knockUp(PregnancyStore.PREGNANCY_OVIELIXIR_EGGS, PregnancyStore.INCUBATION_OVIELIXIR_EGGS, 1, 1);
		player.createStatusEffect(StatusEffects.Eggs, type, big?1:0, quantity, 0);
	}
}
}


code:
/**
 * Created by aimozg on 10.01.14.
 */
package classes.Items.Consumables
{
	import classes.Items.Consumable;
	import classes.PerkLib;
	import classes.Player;

	public final class DeBimbo extends Consumable {

		public function DeBimbo() {
			super("Debimbo", "Debimbo", "a bottle marked as 'Debimbo'", 250);
		}

		override public function get description():String
		{
			if (player.findPerk(PerkLib.BimboBrains) >= 0 || player.findPerk(PerkLib.FutaFaculties) >= 0)
				return "This should totally like, fix your brain and stuff.  You don't really think anything is wrong with your head - it feels all pink and giggly all the time.";
			else
				return "This draft is concocted from five scholar's teas and who knows what else.  Supposedly it will correct the stupidifying effects of Bimbo Liqueur. \n\nType: Consumable";
		}

		override public function canUse():Boolean {
			if (player.findPerk(PerkLib.BimboBrains) >= 0 || player.findPerk(PerkLib.FutaFaculties) >= 0 || player.findPerk(PerkLib.BroBrains) >= 0) return true;
			outputText("You can't use this right now, and it's too expensive to waste!\n\n");
			return false;
		}

		override public function useItem():Boolean {
			if (player.findPerk(PerkLib.BimboBrains) >= 0) {
				outputText("\n\n(Perk Removed:  Bimbo Brains - Your intelligence and speech patterns are no longer limited to that of a bimbo.)");
				player.removePerk(PerkLib.BimboBrains);
			}
			else if (player.findPerk(PerkLib.FutaFaculties) >= 0) {
				outputText("\n\n(Perk Removed:  Futa Faculties - Your intelligence and speech patterns are no longer limited to that of a futanari bimbo.)");
				player.removePerk(PerkLib.FutaFaculties);
			}
			else if (player.findPerk(PerkLib.BroBrains) >= 0) {
				outputText("\n\n(Perk Removed:  Bro Brains - Your intelligence and speech patterns are no longer limited to that of a male who constantly works out.)");
				player.removePerk(PerkLib.BroBrains);
			}
			return(false);
		}

		override public function useText():void {
			if (player.findPerk(PerkLib.BroBrains) >= 0) {
				outputText("You pinch your nose and swallow the foul-tasting mixture with a grimace.  Oh, that's just nasty!  You drop the vial, which shatters on the ground, clutching at your head as a wave of nausea rolls over you.  Stumbling back against a rock for support, you close your eyes.  A constant, pounding ache throbs just behind your temples, and for once, you find yourself speechless.  A pained groan slips through your lips as thoughts and memories come rushing back.  One after another, threads of cognizant thought plow through the simple matrices of your bro mind, shredding and replacing them.");
				outputText("\n\nYou... you were a brute who constantly thinks of working out and fucking!  You shudder as your faculties return, the pain diminishing with each passing moment.");
			}
			else {
				outputText("Well, time to see what this smelly, old rat was on about!  You pinch your nose and swallow the foul-tasting mixture with a grimace.  Oh, that's just nasty!  You drop the vial, which shatters on the ground, clutching at your head as a wave of nausea rolls over you.  Stumbling back against a rock for support, you close your eyes.  A constant, pounding ache throbs just behind your temples, and for once, you find yourself speechless.  A pained groan slips through your lips as thoughts and memories come rushing back.  One after another, threads of cognizant thought plow through the simple matrices of your bimbo mind, shredding and replacing them.");
				outputText("\n\nYou... you were an air-headed ditz!  A vacuous, idiot-girl with nothing between her ears but hunger for dick and pleasure!  You shudder as your faculties return, the pain diminishing with each passing moment.");
			}
		}
	}
}


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

	/**
	 * @since  March 27, 2018
	 * @author Stadler76
	 */
	public class EchidnaCake extends Consumable
	{
		public function EchidnaCake()
		{
			super(
				"EchidCk",
				"EchidCk",
				"an echidna cake",
				ConsumableLib.DEFAULT_VALUE,
				"Try our special cake, a favorite among the echidna-morphs!\n\nDISCLAIMER: We are not responsible if you find yourself altered."
			);
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "echidnaTFs";
			var i:int = 0;
			var temp:int;
			mutations.initTransformation(null, 3);
			player.refillHunger(40);
			// Stats Changes
			//------------
			//None at the moment

			// Normal TFs
			//------------
			if (rand(4) == 0 && changes < changeLimit && player.hair.type != Hair.NORMAL && player.hair.type != Hair.QUILL) {
				outputText("\n\nYour scalp feels really strange, but the sensation is brief. You feel your hair, and you immediately notice the change. It would seem that your hair is normal again!");
				player.hair.type = Hair.NORMAL;
				changes++;
			}
			if (rand(4) == 0 && changes < changeLimit && player.arms.type == Arms.HARPY) {
				outputText("\n\nYour arm feathers fall out completely, leaving only the " + player.skinFurScales() + " underneath.");
				player.arms.type = Arms.HUMAN;
				changes++;
			}
			//Remove gills
			if (rand(3) == 0 && changes < changeLimit && player.hasGills()) mutations.updateGills();

			if (rand(3) == 0 && changes < changeLimit && player.eyes.type == Eyes.FOUR_SPIDER_EYES || player.eyes.type == Eyes.SPIDER) {
				outputText("\n\nYour eyes start throbbing painfully, your sight in them eventually going dark. You touch your head to inspect your eyes, only to find out that they have changed. You have human eyes now!");
				player.eyes.type == Eyes.HUMAN;
				player.eyes.count = 2;
				changes++;
			}
			if (rand(3) == 0 && changes < changeLimit && player.averageNipplesPerBreast() > 4) {
				outputText("\n\nA tightness arises in your nipples as three out of four on each breast recede completely, the leftover nipples migrating to the middle of your breasts. You are left with only one nipple on each breast.");
				for (i = 0; i < player.breastRows.length; i++) {
					player.breastRows[i].nipplesPerBreast = 1;
				}
				changes++;
			}
			// Main TFs
			//------------
			//Change to fur
			if (mutations.tfNoFur() && rand(3) == 0 && changes < changeLimit && !player.hasFur()) {
				outputText("\n\nYou shiver, feeling a bit cold. Just as you begin to wish for something to cover up with, it seems your request is granted; fur begins to grow all over your body! You tug at the tufts in alarm, but they're firmly rooted and... actually pretty soft. Huh. ");
				player.skin.adj = "";
				player.skin.desc = "fur";
				player.skin.type = Skin.FUR;
				player.skin.furColor = "brown";
				player.underBody.restore(); // Restore the underbody for now
				changes++;
			}
			//Gain Echidna ears
			if (rand(3) == 0 && changes < changeLimit && player.ears.type != Ears.ECHIDNA) {
				outputText("\n\n");
				switch(player.ears.type) {
					case Ears.LIZARD:
						outputText("You feel a strange itching in your reptilian ears. As you scratch them, you can feel their scales flaking away, leaving you with smooth, rounded holes for ears.");
						break;
					default:
						outputText("Tightness centers on your scalp, pulling your ears down from their normal shape into small bumps with holes in their centers.");
				}
				outputText(" You now have echidna ears!");
				player.ears.type = Ears.ECHIDNA;
				changes++;
			}
			//Gain Echidna tail
			if (rand(3) == 0 && changes < changeLimit && player.ears.type == Ears.ECHIDNA && player.tail.type != Tail.ECHIDNA) {
				outputText("\n\n");
				switch(player.tail.type) {
					case Tail.NONE:
						outputText("You feel a brief pinch at the base of your spine. Reaching behind yourself, you find that a small stump has formed above your [ass], just barely enough to qualify as a tail.");
						break;
					case Tail.HARPY:
						outputText("You feel a soft tingle as your tail feathers fall out one by one, leaving you with just a little stump for a tail.");
						break;
					case Tail.RABBIT:
						outputText("Your tiny, poofy bunny tail begins to feel chilly as its fur falls out in clumps, leaving you with just a little stump for a tail.");
						break;
					case Tail.COW:
						outputText("Your ropey cow tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.CAT:
						outputText("Your long cat tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.DOG:
						outputText("Your wagging dog tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.KANGAROO:
						outputText("Your tapered kangaroo tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.LIZARD:
					case Tail.DRACONIC:
						outputText("Your long, tapered tail becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail. You now have an echidna tail!");
						break;
					case Tail.FOX:
						outputText("Your swishing fox tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.RACCOON:
						outputText("Your ringed raccoon tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.HORSE:
						if (player.isTaur()) outputText("Your shiny horse tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail. This new, mismatched tail looks a bit odd on your horse lower body.");
						else outputText("Your shiny horse tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.MOUSE:
						outputText("Your bald mouse tail becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.FERRET:
						outputText("Your tapered ferret tail begins to feel chilly as all of its fur falls out. It becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					case Tail.RHINO:
						outputText("The tip of your long rhino tail begins to itch as the fur begins to fall out. The entire length of your tail becomes tight as the majority of the tail’s length recedes into your body, leaving you with just a little stump for a tail.");
						break;
					default: //Catch-all
						outputText("You groan as you feel your tail shifting and reforming. By the time the sensation is over, you find that you have a little stump for a tail.");
				}
				outputText(" You now have an echidna tail!");
				player.tail.type = Tail.ECHIDNA;
				changes++;
			}
			//Gain Echidna legs
			if (rand(3) == 0 && changes < changeLimit && player.ears.type == Ears.ECHIDNA && player.tail.type && Tail.ECHIDNA && player.lowerBody.type != LowerBody.ECHIDNA) {
				outputText("\n\n");
				switch(player.lowerBody.type) {
					//Irregular lower body type
					case LowerBody.NAGA:
						outputText("You collapse to the ground, a sharp pain encompassing your serpentine tail. The pain quickly becomes so severe that you black out on the spot. Eventually you awake to find that you no longer have the lower body of a snake. You have two legs again, and your feet look a lot like your old human feet. The only difference is that your toes are clawed, and the bottoms of your feet padded.");
						break;
					case LowerBody.GOO:
						outputText("You collapse to the ground, a sharp pain encompassing your amorphous lower half. The pain quickly becomes so severe that you black out on the spot. Eventually you awake to find that you no longer have a gooey lower body. You have two legs again, and your feet look a lot like your old human feet. The only difference is that your toes are clawed, and the bottoms of your feet padded.");
						break;
					//Regular lower body type (Bipedal)
					case LowerBody.HUMAN:
						outputText("You feel a sharp stinging at your toenails that only grows worse by the second. As you inspect your aching toes, you’re shocked to see that your toenails are lengthening, eventually becoming fierce claws. It would seem that the bottoms of your feet have changed as well. They’ve become padded!");
						break;
					case LowerBody.HOOFED:
					case LowerBody.CLOVEN_HOOFED:
						outputText("You nearly drop to the ground as a fuzzy sensation erupts at your hooves. Have they gone to sleep? As you inspect your feet, you find that they are no longer hooved! In fact, they look a lot like your old human feet. The only difference is that your toes are clawed, and the bottoms of your feet padded.");
						break;
					case LowerBody.HARPY:
					case LowerBody.DEMONIC_CLAWS:
					case LowerBody.DEMONIC_HIGH_HEELS:
					case LowerBody.LIZARD:
					case LowerBody.DRAGON:
						outputText("Your feet feel strange, almost as if they’ve fallen asleep. What’s wrong with them? You take a look, and you’re shocked to see that your feet have changed. In fact, they look a lot like your old human feet. The only difference is that your toes are clawed, and the bottoms of your feet padded.");
						break;
					case LowerBody.CAT:
					case LowerBody.DOG:
					case LowerBody.FOX:
					case LowerBody.KANGAROO:
					case LowerBody.BUNNY:
					case LowerBody.RACCOON:
					case LowerBody.FERRET:
						outputText("Ow! What’s wrong with your paws? They hurt! You sit down, taking a moment to inspect your aching paws. What’s this? It would appear that they’ve changed! In fact, they look a lot like your old human feet. The only difference is that your toes are clawed, and the bottoms of your feet padded.");
						break;
					default: //Catch-all
						outputText("Your feet feel strange, almost as if they’ve fallen asleep. What’s wrong with them? You take a look, and you’re shocked to see that your feet have changed. In fact, they look a lot like your old human feet. The only difference is that your toes are clawed, and the bottoms of your feet padded.");
				}
				outputText(" They actually look like the feet of an echidna!");
				player.lowerBody.type = LowerBody.ECHIDNA;
				player.lowerBody.legCount = 2;
				changes++;
			}
			//Gain Echidna cock
			if (rand(3) == 0 && changes < changeLimit && player.hasCock() && player.countCocksOfType(CockTypesEnum.ECHIDNA) < player.cockTotal()) {
				outputText("\n\n");
				if (player.cockTotal() == 1) outputText("Your [cock] suddenly becomes rock hard out of nowhere. You " + player.clothedOrNakedLower("pull it out from your [armor], right in the middle of the food tent, watching", "watch") + " as it begins to shift and change. It becomes pink in color, and you feel a pinch at the head as it splits to become four heads. " + (player.hasSheath() ? "" : "The transformation finishes off with a fleshy sheath forming at the base.") + " It ejaculates before going limp, retreating into your sheath.");
				else outputText("One of your penises begins to feel strange. You " + player.clothedOrNakedLower("pull the offending cock out from your [armor], right in the middle of the food tent, watching", "watch") + " as it begins to shift and change. It becomes pink in color, and you feel a pinch at the head as it splits to become four heads. " + (player.hasSheath() ? "" : "The transformation finishes off with a fleshy sheath forming at the base.") + " It ejaculates before going limp, retreating into your sheath.");
				outputText(" You now have an echidna penis!");
				for (i = 0; i < player.cocks.length; i++) {
					if (player.cocks[i].cockType != CockTypesEnum.ECHIDNA) {
						player.cocks[i].cockType = CockTypesEnum.ECHIDNA;
						break;
					}
				}
				changes++;
			}
			//Gain Echidna tongue
			if (rand(3) == 0 && changes < changeLimit && player.echidnaScore() >= 2 && player.tongue.type != Tongue.ECHIDNA) {
				outputText("\n\nYou feel an uncomfortable pressure in your tongue as it begins to shift and change. Within moments, you are able to behold your long, thin tongue. It has to be at least a foot long. You now have an echidna tongue!");
				player.tongue.type = Tongue.ECHIDNA;
				changes++;
			}
			//Gain quill hair
			if (rand(4) == 0 && changes < changeLimit && flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] == 1 && player.hair.type == Hair.NORMAL) {
				outputText("\n\nYour scalp begins to tingle as your hair falls out in clumps, leaving you with a bald head. You aren’t bald for long, though. An uncomfortable pressure racks the entirety of your scalp as hard quills begin to sprout from your hair pores. Their growth stops as they reach shoulder length. You now have quills in place of your hair!");
				player.hair.type = Hair.QUILL;
				changes++;
			}
			//Gain Echidna face if you have the right conditions.
			if (mutations.tfNoFur() && rand(4) == 0 && changes < changeLimit && player.hasFur() && player.ears.type == Ears.ECHIDNA && player.tail.type == Tail.ECHIDNA && player.tongue.type == Tongue.ECHIDNA) {
				outputText("You groan loudly as the bones in your face begin to reshape and rearrange. Most notable, you feel your mouth lengthening into a long, thin snout. You now have an echidna face!");
				player.face.type = Face.ECHIDNA;
				changes++;
			}
			// Other Changes
			//------------
			//Hair stops growing
			if (rand(4) == 0 && changes < changeLimit && player.echidnaScore() >= 2 && flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD] == 0) {
				outputText("\n\nYour scalp tingles oddly. In a panic, you reach up to your " + player.hairDescript() + ", but thankfully it appears unchanged.\n");
				outputText("(Your hair has stopped growing.)");
				changes++;
				flags[kFLAGS.HAIR_GROWTH_STOPPED_BECAUSE_LIZARD]++;
			}

			//Sexual changes
			if (rand(3) == 0 && changes < changeLimit && player.hasCock() && player.cumMultiplier < 25) {
				temp = 1 + rand(4);
				//Lots of cum raises cum multiplier cap to 2 instead of 1.5
				if (player.findPerk(PerkLib.MessyOrgasms) >= 0) temp += rand(10);
				temp *= 0.1;
				player.cumMultiplier += temp;
				//Flavor text
				if (player.balls == 0) outputText("\n\nYou feel a churning inside your gut as something inside you changes.");
				if (player.balls > 0) outputText("\n\nYou feel a churning in your " + player.ballsDescriptLight() + ". It quickly settles, leaving them feeling somewhat more dense.");
				outputText(" A bit of milky pre dribbles from your " + player.multiCockDescriptLight() + ", pushed out by the change.");
				changes++;
			}
			if (rand(3) == 0 && changes < changeLimit && player.gender == Gender.MALE && player.averageBreastSize() > 2 && flags[kFLAGS.HYPER_HAPPY] == 0) {
				outputText("\n\nYou cup your tits as they begin to tingle strangely. You can actually feel them getting smaller in your hands!");
				player.shrinkTits();
				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 gain
			if (rand(4) == 0 && changes < changeLimit && player.echidnaScore() >= 3 && player.hasVagina() && player.findPerk(PerkLib.Oviposition) < 0) {
				mutations.updateOvipositionPerk(tfSource);
			}
			if (rand(3) == 0 && (rand(2) == 0 || !player.inHeat) && player.hasVagina() && player.statusEffectv2(StatusEffects.Heat) < 30) {
				player.goIntoHeat(true);
			}
			//Thickness and hip modifier
			if (rand(2) == 0 && player.thickness < 90) {
				player.modThickness(90, 2);
			}
			if (rand(2.4) == 0 && changes < changeLimit && player.hasVagina() && player.mf("m", "f") == "f" && player.hips.rating < 14) {
				outputText("\n\nAfter finishing, you find that your gait has changed. Did your [hips] widen?");
				player.hips.rating++;
				changes++;
			}
			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;

	/**
	 * Ghost transformative item.
	 */
	public class Ectoplasm extends Consumable
	{
		public function Ectoplasm()
		{
			super("EctoPls","EctoPls", "a bottle of ectoplasm", ConsumableLib.DEFAULT_VALUE, "The green-tinted, hardly corporeal substance flows like a liquid inside its container. It makes you feel... uncomfortable, as you observe it.");
		}

		override public function useItem():Boolean
		{
			var tfSource:String = "ectoplasm";
			player.slimeFeed();
			clearOutput();
			outputText("You grimace and uncork the bottle, doing your best to ignore the unearthly smell drifting up to your nostrils. Steeling yourself, you raise the container to your lips and chug the contents, shivering at the feel of the stuff sliding down your throat.  Its taste, at least, is unexpectedly pleasant.  Almost tastes like oranges.");
			mutations.initTransformation([2, 3]);
			//Effect script 1:  (higher intelligence)
			if (player.inte100 < 100 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nYou groan softly as your head begins pounding something fierce.  Wincing in pain, you massage your temples as the throbbing continues, and soon, the pain begins to fade; in its place comes a strange sense of sureness and wit.");
				dynStats("int", 1);
				if (player.inte100 < 50) dynStats("int", 1);
			}
			//Effect script 2:  (lower sensitivity)
			if (player.sens100 >= 20 && rand(3) === 0 && changes < changeLimit) {
				outputText("\n\nWoah, what the... you pinch your " + player.skinFurScales() + " to confirm your suspicions; the ghostly snack has definitely lowered your sensitivity.");
				dynStats("sen", -2);
				if (player.sens100 >= 75) dynStats("sen", -2);
			}
			//Effect script 3:  (higher libido)
			if (player.lib100 < 100 && rand(3) === 0 && changes < changeLimit) {
				//([if libido >49]
				if (player.lib100 < 50) outputText("\n\nIdly, you drop a hand to your crotch as");
				else outputText("\n\nWith a substantial amount of effort, you resist the urge to stroke yourself as");
				outputText(" a trace amount of the ghost girl's lust is transferred into you.  How horny IS she, you have to wonder...");
				dynStats("lib", 1);
				if (player.lib100 < 50) dynStats("lib", 1);
			}
			//Effect script a:  (human wang)
			if (player.hasCock() && changes < changeLimit) {
				if (rand(3) === 0 && player.cocks[0].cockType !== CockTypesEnum.HUMAN) {
					outputText("\n\nA strange tingling begins behind your " + player.cockDescript(0) + ", slowly crawling up across its entire length.  While neither particularly arousing nor uncomfortable, you do shift nervously as the feeling intensifies.  You resist the urge to undo your " + player.armorName + " to check, but by the feel of it, your penis is shifting form.  Eventually the transformative sensation fades, leaving you with a completely human penis.");
					player.cocks[0].cockType = CockTypesEnum.HUMAN;
					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);
			}
			//Appearnace Change
			//Hair
			if (rand(4) === 0 && changes < changeLimit && player.hair.type !== Hair.GHOST) {
				outputText("\n\nA sensation of weightlessness assaults your scalp. You reach up and grab a handful of hair, confused. Your perplexion only heightens when you actually feel the follicles becoming lighter in your grasp, before you can hardly tell you're holding anything.  Plucking a strand, you hold it up before you, surprised to see... it's completely transparent!  You have transparent hair!");
				player.hair.type = Hair.GHOST;
				changes++;
			}
			//Skin
			if (rand(4) === 0 && changes < changeLimit && (player.skin.tone !== "sable" && player.skin.tone !== "white")) {
				if (rand(2) === 0) {
					outputText("\n\nA warmth begins in your belly, slowly spreading through your torso and appendages. The heat builds, becoming uncomfortable, then painful, then nearly unbearable. Your eyes unfocus from the pain, and by the time the burning sensation fades, you can already tell something's changed. You raise a hand, staring at the milky-white flesh. Your eyes are drawn to the veins in the back of your hand, darkening to a jet black as you watch. You have white skin, with black veins!");
					player.skin.tone = "white";
					player.skin.adj = "milky";
					player.skin.desc = "skin";
					player.skin.type = Skin.PLAIN;
				}
				else {
					outputText("\n\nA warmth begins in your belly, slowly spreading through your torso and appendages. The heat builds, becoming uncomfortable, then painful, then nearly unbearable. Your eyes unfocus from the pain, and by the time the burning sensation fades, you can already tell something's changed. You raise a hand, staring at the sable flesh. Your eyes are drawn to the veins in the back of your hand, brightening to an ashen tone as you watch.  You have black skin, with white veins!");
					player.skin.tone = "sable";
					player.skin.adj = "ashen";
					player.skin.desc = "skin";
					player.skin.type = Skin.PLAIN;
				}
				player.underBody.restore();
				player.arms.updateClaws(player.arms.claws.type);
				changes++;
			}
			//Legs
			if (player.hasPerk(PerkLib.Incorporeality) && !player.lowerBody.incorporeal) {
				// Silently fix, if the player has the perk but the legs aren't incorporeal.
				player.lowerBody.incorporeal = true;
			}
			if (changes < changeLimit && !player.hasPerk(PerkLib.Incorporeality) && (player.skin.tone === "white" || player.skin.tone === "sable") && player.hair.type === Hair.GHOST) {
				//(ghost-legs!  Absolutely no problem with regular encounters, though! [if you somehow got this with a centaur it'd probably do nothing cuz you're not supposed to be a centaur with ectoplasm ya dingus])
				outputText("\n\nAn otherworldly sensation begins in your belly, working its way to your [hips]. Before you can react, your [legs] begin to tingle, and you fall on your rump as a large shudder runs through them. As you watch, your lower body shimmers, becoming ethereal, wisps rising from the newly ghost-like [legs]. You manage to rise, surprised to find your new, ghostly form to be as sturdy as its former corporeal version. Suddenly, like a dam breaking, fleeting visions and images flow into your head, never lasting long enough for you to concentrate on one. You don't even realize it, but your arms fly up to your head, grasping your temples as you groan in pain. As fast as the mental bombardment came, it disappears, leaving you with a surprising sense of spiritual superiority.  You have ghost legs!\n\n");
				outputText("(Gained Perk:  Incorporeality)");
				player.createPerk(PerkLib.Incorporeality, 0, 0, 0, 0);
				player.lowerBody.incorporeal = true;
			}
			//Effect Script 8: 100% chance of healing
			if (changes === 0) {
				outputText("You feel strangely refreshed, as if you just gobbled down a bottle of sunshine.  A smile graces your lips as vitality fills you.  ");
				player.HPChange(player.level * 5 + 10, true);
			}
			//Incorporeality Perk Text:  You seem to have inherited some of the spiritual powers of the residents of the afterlife!  While you wouldn't consider doing it for long due to its instability, you can temporarily become incorporeal for the sake of taking over enemies and giving them a taste of ghostly libido.

			//Sample possession text (>79 int, perhaps?):  With a smile and a wink, your form becomes completely intangible, and you waste no time in throwing yourself into your opponent's frame. Before they can regain the initiative, you take control of one of their arms, vigorously masturbating for several seconds before you're finally thrown out. Recorporealizing, you notice your enemy's blush, and know your efforts were somewhat successful.
			//Failure:  With a smile and a wink, your form becomes completely intangible, and you waste no time in throwing yourself into the opponent's frame. Unfortunately, it seems they were more mentally prepared than you hoped, and you're summarily thrown out of their body before you're even able to have fun with them. Darn, you muse. Gotta get smarter.
			player.refillHunger(20);
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;

			return false;
		}
	}
}


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

	/**
	 * An egg from Ember.
	 * Boosts the special effect of Dragonbreath by 20% for 1 use. ie: if Tainted's breath weapon has a 80% chance to stun on hit, +20% equals 100% chance to stun.
	 */
	public class EmberEgg extends Consumable
	{
		public function EmberEgg()
		{
			super("DrgnEgg","DrgnEgg","an unfertilized dragon egg", ConsumableLib.DEFAULT_VALUE,"A large, solid egg, easily the size of your clenched fist.  Its shell color is reddish-white, with blue splotches.");
		}

		override public function useItem():Boolean
		{
			clearOutput();
			outputText("You crack the shell easily and swallow the large yolk and the copious amounts of albumen - the yolk is blue, while the rest is crimson-tinted.  It tastes like... well, it tastes mostly of spiced mint, you think.");
			//FIXME Clean up this if / else statement
			if (player.findPerk(PerkLib.Dragonfire) >= 0) {
				if (player.hasStatusEffect(StatusEffects.DragonBreathCooldown)) player.removeStatusEffect(StatusEffects.DragonBreathCooldown);
				else {
					if (!player.hasStatusEffect(StatusEffects.DragonBreathBoost)) player.createStatusEffect(StatusEffects.DragonBreathBoost, 0, 0, 0, 0);
				}
				//(if PC has breath weapon)
				outputText("\n\nA sudden surge of energy fills your being and you feel like you could blast anything to atoms with a single breath, like the mighty dragons of legends.");
			}
			player.changeFatigue( -20);
			player.refillHunger(50);

			return false;
		}

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


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

	/**
	 * Moved out of classes.Scenes.NPCs.EmberScene
	 * @since December 11, 2016
	 * @author Stadler76
	 */
	public class EmberTFs extends Consumable
	{
		public function EmberTFs(type:int = 0)
		{
			var id:String;
			var shortName:String;
			var longName:String;
			var description:String;
			var value:int;

			switch (type) {
				case 1:
					id = "DrakHrt";
					shortName = "DrakeHeart";
					longName = "a drake's heart's flower";
					description = "A rare, beautiful flower.  It could make an exquisite perfume.  According to a legend, dragons give this flower to the ones they intend to court.";
					value = 50;
					break;
				default:
					id = "EmberBl";
					shortName = "EmberBlood";
					longName = "Embers's blood";
					description = "Ember's dragon blood.  Can't be bought or sold. Immediately consumed. >>>Should not see me.<<<";
					value = 0;
			}

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

		override public function useItem():Boolean
		{
			var tfSource:String = "EmberTFs-" + shortName;
			var temp:int;
			var drakesHeart:Boolean = tfSource == "EmberTFs-DrakeHeart";
			mutations.initTransformation(null, 2);

			if (drakesHeart) {
				outputText("You bring the flower up to your nose and smell it. It has exquisite smell."
				           +" You suddenly have the strange desire to eat it. You pop the flower into your mouth and chew."
				           +" It tastes like vanilla somehow. Before you know it, you feel strange and tingly: you may be undergoing changes!");
			}

			//Gain Dragon Dick
			if (changes < changeLimit && player.countCocksOfType(CockTypesEnum.DRAGON) < player.totalCocks() && rand(3) == 0) {
				temp = 0;
				var choices:Array = [];
				var select:int;
				temp = player.cockTotal();
				//Build an array of all the locations for TF'able cocks.
				while (temp > 0) {
					temp--;
					if (player.cocks[temp].cockType != CockTypesEnum.DRAGON) choices[choices.length] = temp;
				}
				//Randomly choose one of those locations
				select = choices[rand(choices.length)];
				outputText("\n\nYour " + player.cockDescript(select) + " tingles as pins and needles sweep across it.  You pull open your [armor] to watch as it changes; the tip elongates and tapers, like a spear; a series of ridges form along the shaft, giving it an almost segmented look, and a prominent knot swells at its base.  You can't resist stroking it, until it begins dripping pre; ");
				if (player.sens100 >= 50) outputText("however, it's not until you press on your new, sensitive knot that you manage to blow your load and enjoy the last few spasms of pleasure as it finally finishes changing.");
				else outputText("but you sternly rein in your hands and tuck them into your armpits as the arousing changes run their course.");
				outputText("  You now have a dragon penis.");
				//lose lust if sens>=50, gain lust if else
				dynStats("sen", 10, "lus", 10);
				changes++;
				//Apply the TF
				player.cocks[select].cockType = CockTypesEnum.DRAGON;
				player.cocks[select].knotMultiplier = 1.3;
			}
			//-Remove extra breast rows
			if (changes < changeLimit && player.breastRows.length > 1 && rand(3) == 0 && !flags[kFLAGS.HYPER_HAPPY]) {
				mutations.removeExtraBreastRow(tfSource);
			}
			if (rand(5) == 0) mutations.updateOvipositionPerk(tfSource);
			//Gain Dragon Head
			if (mutations.tfNoFur() && changes < changeLimit && rand(3) === 0 && player.face.type !== Face.DRAGON && (flags[kFLAGS.EMBER_HATCHED] > 0 ? flags[kFLAGS.EMBER_ROUNDFACE] === 0 : !noFur())) {
				outputText("\n\nYou scream as your face is suddenly twisted; your facial bones begin rearranging themselves under your skin, restructuring into a long, narrow muzzle.  Spikes of agony rip through your jaws as your teeth are brutally forced from your gums, giving you new rows of fangs - long, narrow and sharp.  Your jawline begins to sprout strange growths; small spikes grow along the underside of your muzzle, giving you an increasingly inhuman visage.\n\nFinally, the pain dies down, and you look for a convenient puddle to examine your changed appearance.\n\nYour head has turned into a reptilian muzzle, with small barbs on the underside of the jaw.  You now have a dragon's face.");
				player.face.type = Face.DRAGON;
				changes++;
			}
			//-Existing horns become draconic, max of 4, max length of 1'
			if (!player.hasDragonHorns(true) && changes < changeLimit && rand(5) == 0)
				mutations.gainDraconicHorns(tfSource);
			//Gain Dragon Ears
			if (changes < changeLimit && rand(3) == 0 && player.ears.type != Ears.DRAGON) {
				player.ears.type = Ears.DRAGON;
				outputText("\n\nA prickling sensation suddenly fills your ears; unpleasant, but hardly painful.  It grows and grows until you can't stand it any more, and reach up to scratch at them.  To your surprise, you find them melting away like overheated candles.  You panic as they fade into nothingness, leaving you momentarily deaf and dazed, stumbling around in confusion.  Then, all of a sudden, hearing returns to you.  Gratefully investigating, you find you now have a pair of reptilian ear-holes, one on either side of your head.  A sudden pain strikes your temples, and you feel bony spikes bursting through the sides of your head, three on either side, which are quickly sheathed in folds of skin to resemble fins.  With a little patience, you begin to adjust these fins just like ears to aid your hearing.  You now have dragon ears!");
				changes++;
			}
			//Gain Dragon Tongue
			if (changes < changeLimit && rand(3) == 0 && player.tongue.type != Tongue.DRACONIC) {
				outputText("\n\nYour tongue suddenly falls out of your mouth and begins undulating as it grows longer.  For a moment it swings wildly, completely out of control; but then settles down and you find you can control it at will, almost like a limb.  You're able to stretch it to nearly 4 feet and retract it back into your mouth to the point it looks like a normal human tongue.  You now have a draconic tongue.");
				player.tongue.type = Tongue.DRACONIC;
				changes++;
				//Note: This type of tongue should be eligible for all things you can do with demon tongue... Dunno if it's best attaching a boolean just to change the description or creating a whole new tongue type.
			}
			//(Pending Tongue Masturbation Variants; if we ever get around to doing that.)
			//Gain Dragon Scales
			if (mutations.tfNoFur() && !player.hasDragonScales() && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nPrickling discomfort suddenly erupts all over your body, like every last inch of your skin has suddenly developed"
				           +" pins and needles.  You scratch yourself, hoping for relief; and when you look at your hands you notice small fragments"
				           +" of your [skinFurScales] hanging from your fingers.  Nevertheless you continue to scratch yourself, and when you're"
				           +" finally done, you look yourself over. New shield-like scales have grown to replace your peeled off [skinFurScales]."
				           +" They are smooth and look nearly as tough as iron.");
				player.skin.setProps({type: Skin.DRAGON_SCALES, adj: "tough", desc: "shield-shaped dragon scales"});
				//def bonus of scales
				player.underBody.type = UnderBody.REPTILE;
				player.copySkinToUnderBody({       // copy the main skin props to the underBody skin ...
					desc: "ventral dragon scales"  // ... and only override the desc
				});
				outputText("  Your body is now covered in [skinTone], shield-shaped dragon scales with [underBody.skinTone] ventral scales"
				           +" covering your underside.");
			}
			//<mod name="Reptile eyes" author="Stadler76">
			//Gain Dragon Eyes
			if (player.eyes.type != Eyes.DRAGON && player.hasDragonScales() && player.ears.type == Ears.DRAGON && player.hasDragonHorns() && changes < changeLimit && rand(4) == 0) {
				if (player.hasReptileEyes())
					outputText("\n\nYour eyes change slightly in their appearance.");
				else
				{
					outputText("\n\nYou feel a sudden surge of pain in your eyes as they begin to reshape. Your pupils begin to elongate becoming vertically slitted and your irises change their color, too.");
					outputText("\nAs the pain passes, you examine your eyes in a nearby puddle. You look into your new prideful, fierce dragon eyes with vertically slitted pupils and burning orange irises.");
					outputText("  They glitter even in the darkness. With a few tears remaining, the look is a bit blurry. Wanting to get a clearer look at them, you blink your remaining tears away and suddenly you realize, that you just did that with your second set of eyelids.");
				}
				outputText("  You now have fierce dragon eyes.");
				player.eyes.type = Eyes.DRAGON;
				changes++;
			}
			//</mod>
			//Gain Dragon Legs
			if (player.lowerBody.type != LowerBody.DRAGON && changes < changeLimit && rand(3) == 0) {
				//(if drider)
				if (player.lowerBody.type == LowerBody.DRIDER)
					outputText("\n\nA disquieting feeling ripples through your arachnid abdomen, and you find yourself losing control of your body from the waist down.  Your spidery legs flail madly as your abdomen visibly swells, chitin cracking ominously as the pressure builds up inside of you... and then explodes!  You wipe the gore from your face in disgust, wondering why you feel no pain.  Rolling over, you see that, caked with spider-slime, you now have a new pair of legs, human-like save for the scales and the bestial paws that serve as feet.  You now have dragon feet.");
				//(If naga)
				else if (player.isNaga()) {
					outputText("\n\nYou fall on your face to the ground, hissing and screeching in pain - it feels like someone has grabbed the tip of your tail, pulled it viciously straight, and is now splitting it up the middle with a knife!  Paralyzed from the waist down, you claw desperately at the earth to try and alleviate the pain, and can only think to thank your lucky stars when it fades away.  Looking down where your tail was, though the scales remain, you realize you've become a biped again, your new feet sporting bestial claws on their toes.  You now have dragon feet.");
				}
				//(If Goo)
				else if (player.isGoo()) {
					outputText("\n\nA strange tingling sensation fills you, and you watch as your gooey blob of a body begins to ripple and shudder; you try to make it stop, but you can't control it.  Before your eyes, it shapes itself into the appearance of legs, the colored slime growing denser and thicker, the surface membrane texturing itself to look like scales.  Before you've quite realized what's happened, the slime has set like water freezing, leaving you with humanoid legs once again, though tipped with claws and very reptilian in appearance.  You now have dragon feet.");
				}
				//(If hoofed legs)
				else if (player.lowerBody.type == LowerBody.HOOFED) {
					outputText("\n\nYou bellow in pain as your legs break and reform and your hooves seem to suddenly explode, the bones within twisting themselves into monstrous three-toed appendages, more like those of some terrible lizard-thing than anything else. You now have dragon feet.");
				}
				//(if centaur)
				else if (player.isTaur()) {
					outputText("\n\nYou cry out as spasms of pain suddenly rip through your quadrupedal body, bringing you crashing onto the ground.  Words cannot define the agony as muscles and bones twist and shift and collapse violently.  When it's all over, you stagger upright, finding yourself standing on two legs again.  Though covered in scales and with the paws of some monster lizard instead of feet, they otherwise look like your old human legs.  You now have dragon feet.");
				}
				//(If non-hoofed legs)
				else {
					outputText("\n\nYou scream in agony as you feel the bones in your feet suddenly break and restructure themselves, toes fusing together, bone swelling out of the merged masses of flesh.  When the pain is over, you realize that you still stand atop human-looking legs, but your feet have become like those of some bipedal reptilian killer, with powerful claws meant for gripping the ground. You now have dragon feet.");
				}
				player.lowerBody.type = LowerBody.DRAGON;
				player.lowerBody.legCount = 2;
				changes++;
			}
			//Gain Dragon Tail
			if (player.tail.type !== Tail.DRACONIC && changes < changeLimit && rand(3) === 0) {
				//(If no tail)
				if (player.tail.type === Tail.NONE) {
					outputText("\n\nA sudden dull, throbbing pain in your [butt] forces your hands to it; you can feel an ominous lump over your"
					           +" tail bone, swelling bigger and bigger with every heartbeat.  All of a sudden, it seems to explode,"
					           +" jutting out and around until it hovers near your ankles, the skin under your flesh hard and scaly."
					           +"  You have grown a dragon tail; long, thick and muscular, yet flexible.");
				//(If tail)
				} else {
					outputText("\n\nAn icy sensation fills your behind as your tail suddenly goes curiously numb.  Twisting your head around,"
					           +" you watch as it melts and transforms into a reptilian appendage, one thick and muscular, long and flexible,"
					           +" tapering to a tip adorned with wicked spikes."
					           +"  You now have a dragon tail.");
				}
				player.tail.type = Tail.DRACONIC;
				changes++
			}
			/*
			 //9999 - prolly not gonna do this!
			 Tail Slam Attack Effects:
			 Deals ⅓ normal damage, but pierces 30 defense (stacks with perks) and has a (strength / 2) chance of stunning the opponent that turn.
			 Note: Dunno how much defense critters usually have, but this is meant as a surprise attack of sorts, so it pierces a good amount of it.
			 Tail Slam Attack Description:
			 You spin around quickly, whipping your tail spikes at [enemy].

			 Hit: Your tail slams against it/" + emberMF("him","her") + " with brutal force, the spikes on the tip extending to puncture flesh.
			 Miss: Unfortunately, you lose your sense of depth as you whirl, and the tip swings harmlessly through the air in front of your target.
			 */
			//Grow Dragon Wings
			if ((player.wings.type != Wings.DRACONIC_LARGE || player.rearBody.type == RearBody.SHARK_FIN) && changes < changeLimit && rand(3) == 0) {
				if (player.wings.type == Wings.NONE) {
					outputText("\n\nYou double over as waves of pain suddenly fill your shoulderblades; your back feels like it's swelling, flesh and muscles ballooning.  A sudden sound of tearing brings with it relief and you straighten up.  Upon your back now sit small, leathery wings, not unlike a bat's. You now have small dragon wings.  They're not big enough to fly with, but they look adorable.");
					player.wings.type = Wings.DRACONIC_SMALL;
				}
				//(If Small Dragon Wings Present)
				else if (player.wings.type == Wings.DRACONIC_SMALL) {
					outputText("\n\nA not-unpleasant tingling sensation fills your wings, almost but not quite drowning out the odd, tickly feeling as they swell larger and stronger.  You spread them wide - they stretch further than your arms do - and beat them experimentally, the powerful thrusts sending gusts of wind, and almost lifting you off your feet.  You now have fully-grown dragon wings, capable of winging you through the air elegantly!");
					player.wings.type = Wings.DRACONIC_LARGE;
				}
				else if (player.rearBody.type == RearBody.SHARK_FIN) {
					outputText("\n\nA sensation of numbness suddenly fills your fin.  When it does away, it feels... different.  Looking back, you realize that it has been replaced by new, small wings, ones that you can only describe as draconic.  Your shark-like fin has changed into dragon wings.");
					player.rearBody.restore();
					player.wings.type = Wings.DRACONIC_SMALL;
				}
				//(If other wings present)
				else {
					outputText("\n\nA sensation of numbness suddenly fills your wings.  When it dies away, they feel... different.  Looking back, you realize that they have been replaced by new, small wings, ones that you can only describe as draconic.  Your wings have changed into dragon wings.");
					player.wings.type = Wings.DRACONIC_SMALL;
				}
				if (["", "no"].indexOf(player.wings.color) !== -1 || ["", "no"].indexOf(player.wings.color2) !== -1) {
					player.wings.color = player.skin.tone;
					player.wings.color2 = player.skin.tone;
				}
				changes++;
			}
			// <mod name="BodyParts.RearBody" author="Stadler76">
			//Gain Dragon Rear Body
			if (!drakesHeart && !player.hasDragonRearBody() && (player.hasDragonNeck() || flags[kFLAGS.EMBER_ROUNDFACE] == 1) && player.dragonScore() >= 4 && player.hasDraconicBackSide() && changes < changeLimit && rand(3) == 0) {
				var emberRear:Number = player.fetchEmberRearBody();
				switch (emberRear) {
					case RearBody.DRACONIC_MANE:
						// if (player.hair.length == 0) // Let's simply ignore baldness here for now. It wouldn't affect the PCs mane anyway.
						outputText("\n\nYou feel a sudden tingle just above your spine. Eager to see, what is the cause of it you bend your"
						          +" [if (hasDragonNeck)draconic neck|tail] to take a closer look at it. Looking at your"
						          +" [if (hasDragonNeck)back|tail] you see tiny splotches of hair beginning to grow out of your scaly skin. The hair"
						          +" grows longer and the splotches grow until they slowly merge to a vertical strip right above your spine.");
						outputText("\n\nTracing your spine, a mane of hair has grown; starting at the base of your neck and continuing down your"
						          +" tail, ending on the tip of your tail in a small tuft. It is the same color as the hair on your head,"
						          +" but shorter and denser; it has grown in a thick vertical strip, maybe two inches wide. It reminds you vaguely"
						          +" of a horse's mane. You now have a hairy mane on your rear.");
						player.rearBody.setAllProps({
							type:  RearBody.DRACONIC_MANE,
							color: player.hair.color
						});
						break;

					case RearBody.DRACONIC_SPIKES:
						// Teh spiky mane, similar to the hairy one.
						outputText("\n\nYou feel a sudden pain coming from your spine. Eager to see, what is the cause of it you bend your"
						          +" [if (hasDragonNeck)draconic neck|tail] to take a closer look at it. You watch your [if (hasDragonNeck)back|tail]"
						          +" in growing pain as small bulges start emerging from your spine, growing bigger and bigger, until you feel a"
						          +" sudden burst of pain, when small spikes begin to break through your skin. Hardly bearing the growing pain you"
						          +" continue watching them slowly growing longer curving backwards until finally the pain has ceased.");
						outputText("\n\nTracing your spine, a row of short steel-gray and curved backwards spikes protrude; starting at the base of"
						          +" your neck and continuing down your tail, ending on the tip of your tail. They've grown in a thick vertical"
						          +" strip, maybe an inch wide and two inches high. It reminds you very vaguely of a horse's mane.");
						outputText("  Your rear is now decorated with a row of curved spikes.");
						player.rearBody.setAllProps({type: RearBody.DRACONIC_SPIKES});
						break;

					default:
						// this should hopefully never happen
						// trace("Invalid Ember rearBody: " + emberRear);
				}
			}
			// </mod>
			//Restore non dragon neck
			if (player.neck.type != Neck.DRACONIC && changes < changeLimit && rand(4) == 0)
				mutations.restoreNeck(tfSource);
			//Gain Dragon Neck
			//public function hasDraconicBackSide():Boolean { return hasDragonWings(true) && skinType == Skin.DRACONIC && hasReptileTail() && hasReptileArms() && hasReptileLegs(); }
			//If you are considered a dragon-morph and if your backside is dragon-ish enough, your neck is eager to allow you to take a look at it, right? ;-)
			if (!drakesHeart && !player.hasDragonNeck() && player.dragonScore() >= 6 && player.hasDraconicBackSide() && player.face.type == Face.DRAGON && changes < changeLimit) {
				mutations.restoreNeck(tfSource + "-forceRestoreNeck");
				var nlChange:int = 4 + rand(5);
				if (!player.hasNormalNeck()) { // Note: hasNormalNeck checks the length, not the type!
					player.neck.modify(nlChange);
					outputText("\n\nWith less pain than the last time your neck grows a few more inches reaching " + player.neck.len + " inches.");
				} else {
					player.neck.modify(nlChange, Neck.DRACONIC);
					// Growing a dragon neck may be limited to Ember's blood only in the future.
					outputText("\n\nAfter you have finished " + (drakesHeart ? "eating the flower" : "drinking Ember's dragon blood") + " you start feeling a sudden pain in your neck. Your skin stretches and your spine grows a bit. Your neck has grown a few inches longer than that of a normal human reaching " + player.neck.len + " inches.");
				}
				if (player.hasDragonNeck() && !player.neck.pos) {
					outputText("\n\nAfter the enlongation has finally ceased, your spine begins to readjust its position on your head until its settled at the backside of your head. After that you want to try out your new draconic neck and begin to bend your neck finding that you can bend it at ease like a snake can bend its tail. Eager to see, how you look from behind you quickly turn your head around. Staring at your magnificent draconic rear your mouth and eyes open wide in astonishment. You muster your tail, your backside fully covered in scales and finally, you unfold your wings. This is the first time, you can see every single scale of them. You look at them from all sides, flapping them slowly, just to watch them moving.");
					outputText("  You now have a fully grown dragon neck.");
					player.neck.pos = true;
				}
				changes++;
			}
			// <mod name="Predator arms" author="Stadler76">
			//Gain Dragon Arms (Derived from Arms.SALAMANDER)
			if (player.arms.type != Arms.DRAGON && player.hasDragonScales() && player.lowerBody.type == LowerBody.DRAGON && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nYou scratch your biceps absentmindedly, but no matter how much you scratch, you can't get rid of the itch.  After a longer moment of ignoring it you finally glance down in irritation, only to discover that your arms former appearance has changed into those of some reptilian killer with shield-shaped " + player.skin.tone + " scales and powerful, thick, curved steel-gray claws replacing your fingernails.");
				outputText(" You now have dragon arms.");
				player.arms.setType(Arms.DRAGON, Claws.DRAGON);
				changes++
			}
			//Claw transition
			if (player.arms.type == Arms.DRAGON && player.hasDragonScales() && player.arms.claws.type != Claws.DRAGON && changes < changeLimit && rand(3) == 0) {
				outputText("\n\nYour [claws] change  a little to become more dragon-like.");
				player.arms.updateClaws(Claws.DRAGON);
				outputText(" You now have [claws].");
				changes++
			}
			// </mod>
			//Get Dragon Breath (Tainted version)
			//Can only be obtained if you are considered a dragon-morph, once you do get it though, it won't just go away even if you aren't a dragon-morph anymore.

			if (player.dragonScore() >= 4 && changes < changeLimit && player.findPerk(PerkLib.Dragonfire) < 0) {
				outputText("\n\nYou feel something awakening within you... then a sudden sensation of choking grabs hold of your throat, sending you to your knees as you clutch and gasp for breath.  It feels like there's something trapped inside your windpipe, clawing and crawling its way up.  You retch and splutter and then, with a feeling of almost painful relief, you expel a bellowing roar from deep inside of yourself... with enough force that clods of dirt and shattered gravel are sent flying all around.  You look at the small crater you have literally blasted into the landscape with a mixture of awe and surprise.");
				outputText("\n\nIt seems " + (drakesHeart ? "the flower" : "Ember's dragon blood") + " has awaked some kind of power within you... your throat and chest feel very sore, however; you doubt you can force out more than one such blast before resting.  (Gained Perk: Dragonfire!)");
				player.createPerk(PerkLib.Dragonfire, 0, 0, 0, 0);
				if (game.emberScene.emberAffection() >= 75 && !drakesHeart) outputText("\n\nEmber immediately dives back in to soothe your battered throat and mouth with another kiss.");
				changes++;
			}
			if (player.dragonScore() >= 4 && rand(3) == 0 && player.gender > 0 && (drakesHeart || player.hasCock() && game.emberScene.emberHasVagina() || player.hasVagina() && game.emberScene.emberHasCock())) {
				outputText("\n\nA sudden swell of lust races through your ");
				if (player.hasCock()) {
					outputText(player.cockDescript(0));
					if (player.hasVagina()) outputText(" and ");
				}
				if (player.hasVagina()) outputText(player.vaginaDescript());
				outputText(", making you wish " + (drakesHeart ? "you had a dragon to go with" : "Ember hadn't run you off") + ".  All you can think about now is fucking " + (drakesHeart ? "a dragon-morph" : game.emberScene.emberMF("him", "her")) + "; ");
				if (player.hasCock() && (game.emberScene.emberHasVagina() || drakesHeart)) {
					if (drakesHeart) {
						outputText("filling a womb with your seed and fertilizing those eggs");
					}
					else {
						outputText("filling her womb with your seed and fertilizing her eggs");
						if (player.hasVagina() && (game.emberScene.emberHasCock() || drakesHeart)) outputText(" even while ");
					}
				}
				else if (player.hasVagina() && (game.emberScene.emberHasCock() || drakesHeart)) {
					outputText("taking that hard, spurting cock inside your own " + player.vaginaDescript(0));
				}
				outputText("... too late, you realize that " + (drakesHeart ? "the flower" : "Ember's blood") + " has sent your draconic body into ");
				if (player.hasCock() && (game.emberScene.emberHasVagina() || drakesHeart) && (rand(2) == 0 || !player.hasVagina())) { //If hermaphrodite, the chance is 50/50.
					outputText("rut");

					player.goIntoRut(false);
				}
				else {
					outputText("heat");

					player.goIntoHeat(false);
				}
				outputText(".");
			}
			flags[kFLAGS.TIMES_TRANSFORMED] += changes;
			return false;
		}
	}

}