code:
/**
 * Created by K.Quesom 11.06.14
 */
package classes.Scenes.Areas.Bog
{
	import classes.*;
	import classes.BodyParts.*;
	import classes.BodyParts.Hips;
	import classes.internals.WeightedDrop;

	public class Phouka extends Monster
	{
		protected function phoukaFightAttack():void
		{
			var damage:int;
			//Only the bunny, goat and horse forms make physical attacks
			if (hasStatusEffect(StatusEffects.Blind) && rand(3) < 1) {
				outputText(capitalA + short + " completely misses you due to his blindness!\n");
			}
			else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY) {
				damage = player.reduceDamage(60 + 30 + 10,this); //60 == Bunny Strength, 30 == Bunny Weapon Attack
				outputText("The bunny morph hops towards you.  At the last second he changes direction and throws a kick toward you with his powerful hind legs.");
				if (!combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}))
					outputText("\nThrowing yourself out of the way, you manage to avoid the kick.  The " + this.short + " hops out of reach and prepares for another attack.");
				else if (damage <= 0)
					outputText("\nYou block his attack by moving your shoulder in close, absorbing the energy of the kick harmlessly.");
				else {
					player.takeDamage(damage);
					outputText("\nThe kick connects and leaves you reeling.");
				}
			}
			else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_GOAT) {
				damage = player.reduceDamage(80 + 40 + 10,this); //80 == Goat Strength, 40 == Goat Weapon Attack
				outputText("The goat morph races toward you, head down.");
				if (!combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed)
					outputText("\nThrowing yourself out of the way, you manage to keep from getting skewered.");
				else if (damage <= 0)
					outputText("\nYou manage to smack the goat morph in the side of the head.  The horns pass you by harmlessly.");
				else {
					player.takeDamage(damage);
					outputText("\nIts head and horns crash into you, leaving you winded and bruised.");
				}
			}
			else { //HORSE
				damage = player.reduceDamage(95 + 55 + 10,this); //95 == Horse Strength, 55 == Horse Weapon Attack
				outputText("The stallion charges you, clearly intending to trample you under its hooves.");
				if (!combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed || (damage <= 0))
					outputText("\nAs the stallion passes you twist in place and manage to stay clear of its legs.");
				else {
					player.takeDamage(damage);
					outputText("\nYou get clipped by the stallion's legs and hooves as he charges. As he comes around for another pass you check over your body, amazed none of your bones are broken after that.");
				}
			}

		}

		protected function phoukaFightLustAttack():void
		{ //Only the faerie, bunny and horse forms make lust attacks
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE)
				outputText("The " + this.short + " uses his wings to climb high up in the air above you.  Then he starts jerking his cock at you with one hand while fondling his balls with the other.  ");
			else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY)
				outputText("The bunny morph leaps forward, trying to catch you off guard and grapple you.  ");
			else outputText("The stallion rears up on his hind legs, waving his massive cock at you.  ");

			if (!combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed) {
				if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY)
					outputText("You throw yourself out of the way at the last moment and succeed in throwing the " + this.short + " off balance. He staggers away, his attempted attack ruined.\n");
				else outputText("You manage to look away in time and the " + this.short + "'s lewd display has no real effect on you.\n");
			}
			else {
				if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE)
					outputText("A drizzle of precum rains down around you.  The sight of the " + this.short + " pumping his shaft along with the smell of the salty yet sweet fluids makes you wish you could stop fighting and concentrate on pleasuring yourself.");
				else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY)
					outputText("He grabs you and rubs up against your body.  For a moment you are lost in the feeling of his " + (game.noFur() ? "smooth black skin" : "soft black fur") + ".  Then you feel his cock pressing against your ribs and shove him away.");
				else outputText("You are hypnotized by the equine cock jabbing at the air.  Then the " + this.short + " charges past you and you can taste the musk in the air.");
				game.dynStats("lus", 15 + player.lib / 10 + player.cor / 5 + rand(10));
			}

		}

		protected function phoukaFightSilence():void
		{ //Reuses the statusEffect Web-Silence from the spiders
			outputText(this.capitalA + this.short + " scoops up some muck from the ground and rams it down over his cock.  After a few strokes he forms the lump of mud and precum into a ball and whips it at your face.  ");
			if (hasStatusEffect(StatusEffects.Blind) && rand(3) < 2)
				outputText("Since he's blind the shot goes horribly wide, missing you entirely.");
			else
			{
				var result:Object = combatAvoidDamage({doDodge:true, doParry:false, doBlock:false});
				if (result.dodge == EVASION_SPEED)
					outputText("You lean back and let the muck ball whip pass to one side, avoiding the attack.");
				else if (result.dodge == EVASION_EVADE)
					outputText("You pull back and to the side, blocking the shot with your arm. The muck splatters against it uselessly.");
				else if (result.dodge == EVASION_MISDIRECTION)
					outputText(this.capitalA + this.short + " was watching you carefully before his throw.  That proves to be his undoing as your misleading movements cause him to lob the muck at the wrong time");
				else if (result.dodge == EVASION_FLEXIBILITY)
					outputText("As the ball leaves his fingers you throw yourself back, your spine bending in an inhuman way.  You feel the ball sail past, inches above your chest.");
				else if (result.dodge != null) // failsafe
					outputText("You throw yourself out of the way at the last moment!");
				else {
					outputText("The ball smacks into your face like a wet snowball.  It covers most of your nose and mouth with a layer of sticky, salty mud which makes it hard to breathe.  You'll be unable to use your magic while you're struggling for breath!\n");
					player.createStatusEffect(StatusEffects.WebSilence, 0, 0, 0, 0); //Probably safe to reuse the same status affect as for the spider morphs
				}
			}

		}

		override protected function performCombatAction():void
		{
			var blinded:Boolean = hasStatusEffect(StatusEffects.Blind);
			if ((!blinded) && !player.hasStatusEffect(StatusEffects.WebSilence) && rand(4) == 0) {
				phoukaTransformToPhouka(); //Change to faerie form so that it can lob the ball of muck at you
				phoukaFightSilence();
			}
			else {
				var transformChance:int = rand(9); //2 in 3 chance of staying in current form
				if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE) {
					if (blinded) transformChance = rand(3); //100% chance of change from blind phouka if not doing silence attack
					else transformChance = rand(4); //75% chance of change from phouka if not doing silence attack
				}
				switch (transformChance){
					case 0: phoukaTransformToBunny(); break;
					case 1: phoukaTransformToGoat(); break;
					case 2: phoukaTransformToHorse(); break;
					default:
				}
				if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE)
					phoukaFightLustAttack(); //Can only get here if the phouka isn’t blind
				else if ((PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY) && (rand(4) != 0) && (!blinded))
					phoukaFightLustAttack(); //Bunny has a 75% chance of teasing attack, no teasing while blind
				else if ((PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_HORSE) && (rand(4) == 0) && (!blinded))
					phoukaFightLustAttack(); //Horse has a 25% chance of teasing attack, no teasing while blind
				else phoukaFightAttack();
			}
		}

		override public function teased(lustDelta:Number):void
		{
			if (lustDelta >= 10)
				outputText("\n\nThe " + this.short + " breaks off its attack in the face of your teasing.  Its drooling member leaves a trail of precum along the ground and you get the feeling it needs to end this fight quickly.");
			else if (lustDelta >= 5)
				outputText("\n\nThe " + this.short + " stops its assault for a moment.  A glob of precum oozes from its cock before it shakes its head and gets ready to attack again.");
			else if (lustDelta > 0)
				outputText("\n\nThe " + this.short + " hesitates and slows down.  You see its cock twitch and then it readies for the next attack.");
			applyTease(lustDelta);
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.bog.phoukaScene.phoukaPlayerWins(hpVictory);
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void
		{
			//40% chance of getting infected by the bog parasite if fully worms are on. 20% if worms are "half", none if worms are off, the player doesn't have a penis or if he's already infested by something.
			if (player.hasCock() && !player.hasStatusEffect(StatusEffects.ParasiteSlug) && player.findPerk(PerkLib.ParasiteMusk) < 0 && !player.hasStatusEffect(StatusEffects.Infested) && ((player.hasStatusEffect(StatusEffects.WormsOn) && rand(10) < 5)  || (player.hasStatusEffect(StatusEffects.WormsHalf) && rand(10) < 3))) {

				player.createStatusEffect(StatusEffects.ParasiteSlug, 72, 0, 0, 0);
			}
			if (pcCameWorms) {
				outputText("\n\nThe " + this.short + " looks on, amused. “Kinky! But those wee things can't handle whiskey, so I’m safe from ‘em. Now be a good ");
				if (player.hasVagina())
					outputText("lass and spread yer legs for me.”\n\n");
				else outputText("lad and spread yer asscheeks for me.”\n\n");
				doNext(game.combat.endLustLoss);
			}
			else {
				if (player.hasVagina()) { //Phouka prefer vaginal if they can get it
					if (player.isTaur() || rand(2) == 0)
						game.bog.phoukaScene.phoukaSexHorse(true, !hpVictory); //And they love mating with female or herm centaurs in their horse form
					else game.bog.phoukaScene.phoukaSexBunny(true, !hpVictory);
				}
				else game.bog.phoukaScene.phoukaSexGoat(true, !hpVictory);
			}
		}

		protected function phoukaTransformToBunny():void
		{
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY) return; //Already a bunny, so no change
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE) {
				outputText("The faerie suddenly drops out of the air.  A look of concentration sets in on its face and it begins to expand and warp.  You blink and see that in front of you there is now a 5 foot tall bunny morph.\n\n");
			}
			else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_GOAT) {
				outputText("As the goat morph charges towards you it starts to grow.  By the time it gets close it has changed completely and you now face a 5 foot tall bunny morph.\n\n");
			}
			else { //Was a horse
				outputText("As the horse morph charges towards you it quite suddenly shrinks.  You have to adjust your defence as a 5 foot tall bunny morph is now hopping your way.\n\n");
			}
			this.long = "The " + this.short + " is hopping around near you, waiting for an opening.  He has the general appearance of a " + (game.noFur() ? "human aside from his long ears and his limbs ending in furry paws" : "bunny with coal black fur") + ".  A large cock stands erect between his legs.  His cat-like green eyes, filled with lust, follow your every motion.";
			this.cocks[0].cockType = CockTypesEnum.HUMAN;
			this.cocks[0].cockLength = 10;
			this.cocks[0].cockThickness = 1.5;
			this.tallness = 60;
			this.armorValue = 60;
			this.spe = 90;
			PhoukaScene.phoukaForm = PhoukaScene.PHOUKA_FORM_BUNNY;
		}

		protected function phoukaTransformToGoat():void
		{
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_GOAT) return; //Already a goat, so no change
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE) {
				outputText("The faerie suddenly drops out of the air.  A look of concentration sets in on its face and it begins to expand and warp.  You blink and see that in front of you there is now a 4 foot tall goat morph.\n\n");
			}
			else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY) {
				outputText("The bunny morph hops back from you and starts to melt and change.  You blink and see that in front of you there is now a 4 foot tall goat morph.\n\n");
			}
			else { //Was a horse
				outputText("As the horse morph charges towards you it quite suddenly shrinks.  You have to adjust your defence as it is now a 4 foot tall goat morph.\n\n");
			}
			this.long = "The " + this.short + " is charging back and forth just out of reach, waiting for an opening.  He has the general appearance of a " + (game.noFur() ? "human with furry, goat-like legs" : "goat with coal black fur") + ".  He has large glossy black horns and a large cock between his legs.  His cat-like green eyes, filled with lust, follow your every motion.";
			this.cocks[0].cockType = CockTypesEnum.HUMAN;
			this.cocks[0].cockLength = 10;
			this.cocks[0].cockThickness = 1.5;
			this.tallness = 48;
			this.armorValue = 60;
			this.spe = 70;
			PhoukaScene.phoukaForm = PhoukaScene.PHOUKA_FORM_GOAT;
		}

		protected function phoukaTransformToHorse():void
		{
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_HORSE) return; //Already a horse, so no change
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE) {
				outputText("The faerie suddenly drops out of the air.  A look of concentration sets in on its face and it begins to grow larger and larger.  You watch amazed as the creature's form stretches.  Finally it seems unable to grow further and settles into the form of a massive stallion.\n\n");
			}
			else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY) {
				outputText("The bunny morph hops back from you and starts to grow and melt.  You watch amazed as the creature's form stretches.  Finally it seems unable to grow further and settles into the form of a massive stallion.\n\n");
			}
			else { //Was a goat
				outputText("The goat morph eyes you then seems to think better of charging again.  It backs away and starts to grow larger and larger, its features and body shape twisting and reforming.  Finally it seems unable to grow further and settles into the form of a massive stallion.\n\n");
			}
			this.long = "The " + this.short + " is running in a wide circle around you, waiting for an opening.  He has the general appearance of a stallion with coal black fur.  A massive cock stands erect between his legs.  His cat-like green eyes, filled with lust, follow your every motion.";
			this.cocks[0].cockType = CockTypesEnum.HORSE;
			this.cocks[0].cockLength = 20;
			this.cocks[0].cockThickness = 2.5;
			this.tallness = 86;
			this.armorValue = 75;
			this.spe = 55;
			PhoukaScene.phoukaForm = PhoukaScene.PHOUKA_FORM_HORSE;
		}

		protected function phoukaTransformToPhouka():void
		{
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_FAERIE) return; //Already a faerie, so no change
			if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_BUNNY) {
				outputText("The bunny morph hops back from you and starts to melt and shrink.  In seconds only a tiny faerie is left floating in the air where the bunny once was.\n\n");
			}
			else if (PhoukaScene.phoukaForm == PhoukaScene.PHOUKA_FORM_GOAT) {
				outputText("The goat morph bounds away from you and starts to melt and deform.  In seconds only a tiny faerie is left floating in the air where the goat once was.\n\n");
			}
			else { //Was a horse
				outputText("The horse morph charges past you.  You look over your shoulder and wonder where the stallion could have gone.  Then you see the tiny faerie zipping back for another attack.\n\n");
			}
			this.long = "The " + this.short + " is flying around near you, waiting for an opening.  He has the general appearance of a faerie, though he is slightly larger and his skin and wings are coal black.  A large cock stands erect between his legs.  His cat-like green eyes, filled with lust, follow your every motion.";
			this.cocks[0].cockType = CockTypesEnum.HUMAN;
			this.cocks[0].cockLength = 1;
			this.cocks[0].cockThickness = 0.5;
			this.tallness = 5;
			this.armorValue = 80;
			this.spe = 80;
			PhoukaScene.phoukaForm = PhoukaScene.PHOUKA_FORM_FAERIE;
		}

		override public function handleAwardItemText(itype:ItemType):void
		{
			outputText("  You are just about to leave when you remember that glint from the hollow of that nearby tree.");
			if (itype == null)
				outputText("\n\nYou take a look and curse the " + this.short + ".  Looks like it used a piece of a broken bottle to lure you in.  At least you learned more about fighting the little pests.  You gain " + this.XP + " XP from your victory.");
			else outputText("\n\nYou look inside the hollow and are pleased to find " + itype.longName + ".  You also gain " + this.XP + " XP from your victory, since you learned a bit more about fighting these little pests.\n\n");
		}

		override public function handleAwardText():void
		{
			//Talk about gems and XP when the player looks in the hollow of the tree instead of here
		}

		override public function handleCombatLossText(inDungeon:Boolean, gemsLost:int):int
		{
			if (player.gems > 1)
				outputText("  Once free you check your gem pouch and realize the " + this.short + " took " + gemsLost + " of your gems.");
			else if (player.gems == 1)
				outputText("  Once free you check your gem pouch and realize the " + this.short + " took your only gem.");
			return 1; //Only use up one hour after combat loss
		}

		public function Phouka(phoukaName:String)
		{
			super();

			this.a = "the ";
			this.short = phoukaName;
			this.imageName = "phouka";
			this.long = "The " + this.short + " is flying around near you, waiting for an opening.  He has the general appearance of a faerie, though he is slightly larger and his skin and wings are coal black.  A large cock stands erect between his legs.  His cat-like green eyes, filled with lust, follow your every motion.";
			this.race = "Faerie?";

			this.createCock(1, 0.5, CockTypesEnum.HUMAN);
			this.balls = 2;
			this.ballSize = 1;
			this.cumMultiplier = 5;
			this.hoursSinceCum = 20;

			createBreastRow(0);
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_NORMAL;

			this.tallness = 5;
			this.hips.rating = Hips.RATING_SLENDER;
			this.butt.rating = Butt.RATING_TIGHT;
			this.lowerBody.type = LowerBody.HUMAN
			this.arms.type = Arms.HUMAN;

			this.skin.tone = "black";
			this.hair.color = "black";
			this.hair.length = 1;

			this.ears.type = Ears.ELFIN;

			initStrTouSpeInte(55, 25, 80, 40);
			initLibSensCor(75, 35, 100);

			this.weaponName = "claws";
			this.weaponVerb="claw";
			this.weaponAttack = 15;
			this.armorName = "skin";
			this.armorDef = 80;

			this.bonusHP = 300;
			this.lust = 30;
			this.lustVuln = .5;

			this.level = 14;
			this.gems = 0;
			this.drop = new WeightedDrop().add(consumables.BLACK_D, 20)
				.add(consumables.RIZZART, 10)
				.add(consumables.GROPLUS, 2)
				.add(consumables.SDELITE, 13)
				.add(consumables.P_WHSKY, 35)
				.add(null, 20);

			this.wings.type = Wings.FAERIE_SMALL;
			this.wings.color = "black";
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Areas {
	import classes.BaseContent;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.Scenes.API.Encounter;
	import classes.Scenes.API.Encounters;
	import classes.Scenes.API.IExplorable;
	import classes.StatusEffects;
	/* Deepwoods area found when exploring the Forest */
	public class DeepWoods extends BaseContent implements IExplorable {
		private var forest:Forest;

		/**
		 * Create a new deepwoods instance for exploring.
		 *
		 * The constructor will fail if the forest is not valid. This fail-fast
		 * behaviour is used because explore() is only called much later, making it harder
		 * to figure out what happened.
		 * @param	forest the forest to use for encounters
		 * @throws ArgumentError if the forest is null or undefined
		 */
		public function DeepWoods(forest:Forest)
		{
			if (forest === null) {
				throw ArgumentError("Forest cannot be null");
			}

			this.forest = forest;
		}

		public function isDiscovered():Boolean {
			//TODO refactor all areas to use class fields as counters
			return player.hasStatusEffect(StatusEffects.ExploredDeepwoods);
		}

		public function discover():void {
			player.createStatusEffect(StatusEffects.ExploredDeepwoods, 0, 0, 0, 0);
			clearOutput();
			outputText(images.showImage("area-deepwoods"));
			outputText("After exploring the forest so many times, you decide to really push it, and plunge deeper and deeper into the woods.  The further you go the darker it gets, but you courageously press on.  The plant-life changes too, and you spot more and more lichens and fungi, many of which are luminescent.  Finally, a wall of tree-trunks as wide as houses blocks your progress.  There is a knot-hole like opening in the center, and a small sign marking it as the entrance to the 'Deepwoods'.  You don't press on for now, but you could easily find your way back to explore the Deepwoods.\n\n<b>Deepwoods exploration unlocked!</b>");
			doNext(camp.returnToCampUseOneHour);
		}

		public function explore():void {
			clearOutput();
			//Increment deepwoods exploration counter
			player.location = "deepwoods";
			player.addStatusValue(StatusEffects.ExploredDeepwoods, 1, 1);
			deepwoodsEncounter.execEncounter();
		}

		private function deepwoodsWalkFn():void {
			clearOutput();
			outputText(images.showImage("area-deepwoods"));
			outputText("You enjoy a peaceful walk in the deepwoods.  It gives you time to think over the recent, disturbing events.");
			dynStats("tou", .5, "int", 1);
			doNext(camp.returnToCampUseOneHour);
		}

		public function tentacleBeastDeepwoodsEncounterFn():void { //Oh noes, tentacles!
			if (player.gender > 0) flags[kFLAGS.GENDERLESS_CENTAUR_MADNESS] = 0;
			//Tentacle avoidance chance due to dangerous plants
			if (player.hasKeyItem("Dangerous Plants") && player.inte / 2 > rand(50)) {
//				trace("TENTACLE'S AVOIDED DUE TO BOOK!");
				clearOutput();
				outputText(images.showImage("item-dPlants"));
				outputText("Using the knowledge contained in your 'Dangerous Plants' book, you determine a tentacle beast's lair is nearby, do you continue?  If not you could return to camp.\n\n");
				menu();
				addButton(0,"Continue", forest.tentacleBeastScene.encounter);
				addButton(4, "Leave", camp.returnToCampUseOneHour);
			}
			else forest.tentacleBeastScene.encounter();
		}

		private var _deepwoodsEncounter:Encounter = null;
		public function get deepwoodsEncounter():Encounter { //late init because it references game
			return _deepwoodsEncounter ||= Encounters.group(game.commonEncounters, {
				name: "kitsune",
				call: forest.kitsuneScene
			}, { // [INTERMOD:8chan]
				name: "dullahan",
				call: forest.dullahanScene
			}, { // ALICE TEST
				name: "alice",
				call: forest.aliceScene
			}, {
				name: "akbal",
				call: forest.akbalScene
			}, {
				name: "tamani",
				call: forest.tamaniScene
			}, {
				name: "faerie",
				call: forest.faerie
			}, {
				name: "erlking",
				call: forest.erlkingScene
			}, {
				name: "fera",
				call: game.fera
			}, {
				name: "lumber",
				call: game.camp.cabinProgress.forestEncounter
			}, {
				name  : "glade",
				call  : forest.corruptedGlade,
				chance: 1
			},{
                name: "goblinSharpshooter",
                call: game.goblinSharpshooterScene.meetGoblinSharpshooter,
                when: game.goblinSharpshooterScene.encounterWhen,
                chance: game.goblinSharpshooterScene.encounterChance
            }, {
				name: "tentabeast",
				call: tentacleBeastDeepwoodsEncounterFn,
				when: Encounters.fn.ifLevelMin(2)
			}, {
				name: "dungeon",
				call: game.dungeons.enterDeepCave,
				when: game.dungeons.canFindDeepCave
			}, {
				name  : "walk",
				call  : deepwoodsWalkFn,
				chance: 0.01
			}, {
				name: "aiko",
				call: forest.aikoScene,
				when: function ():Boolean {
					return (Encounters.fn.ifLevelMin(16)
						&& flags[kFLAGS.AIKO_TIMES_MET] < 4
						&& flags[kFLAGS.AIKO_BALL_RETURNED] != 2);
				}
			});
		}
	}
}

license: unknown


code:
/* Created by aimozg on 06.01.14 */
package classes.Scenes.Areas {
	import classes.*;
	import classes.BodyParts.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Scenes.API.Encounter;
	import classes.Scenes.API.Encounters;
	import classes.Scenes.API.FnHelpers;
	import classes.Scenes.API.IExplorable;
	import classes.Scenes.Areas.Desert.*;
	import classes.Scenes.PregnancyProgression;
	import classes.internals.GuiOutput;

	use namespace kGAMECLASS;

	public class Desert extends BaseContent implements IExplorable {
		public var antsScene:AntsScene = new AntsScene();
		public var nagaScene:NagaScene = new NagaScene();
		public var oasis:Oasis = new Oasis();
		public var sandTrapScene:SandTrapScene;
		public var sandWitchScene:SandWitchScene = new SandWitchScene();
		public var ghoulScene:GhoulScene = new GhoulScene();
		public var wanderer:Wanderer = new Wanderer();

		public function Desert(pregnancyProgression:PregnancyProgression, output:GuiOutput) {
			this.sandTrapScene = new SandTrapScene(pregnancyProgression, output);
		}

		public function isDiscovered():Boolean { return flags[kFLAGS.TIMES_EXPLORED_DESERT] > 0; }
		public function discover():void {
			flags[kFLAGS.TIMES_EXPLORED_DESERT] = 1;
			outputText(images.showImage("area-desert"));
			outputText("You stumble as the ground shifts a bit underneath you.  Groaning in frustration, you straighten up and discover the rough feeling of sand ");
			if (player.lowerBody.type== LowerBody.HUMAN) outputText("inside your footwear, between your toes");
			else if (player.lowerBody.type== LowerBody.HOOFED) outputText("in your hooves");
			else if (player.lowerBody.type== LowerBody.DOG) outputText("in your paws");
			else if (player.lowerBody.type== LowerBody.NAGA) outputText("in your scales");
			outputText(".\n\nYou've discovered the Desert!");
			doNext(camp.returnToCampUseOneHour);
		}

		private var _desertEncounter:Encounter = null;
		public function get desertEncounter():Encounter { //late init because it references game
			const fn:FnHelpers = Encounters.fn;
			if (_desertEncounter == null) _desertEncounter =
					Encounters.group(game.commonEncounters, {
						name: "naga",
						call: nagaScene.nagaEncounter
					}, {
						name  : "sandtrap",
						chance: 0.5,
						call  : sandTrapScene.encounterASandTrap
					}, /*{
						name  : "ghoul",
						chance: 0.5,
						call  : ghoulScene.ghoulEncounter
					},*/ {
						name: "sandwitch",
						when: function ():Boolean {
							return flags[kFLAGS.SAND_WITCH_LEAVE_ME_ALONE] == 0;
						},
						call: sandWitchScene.encounter
					}, {
						name: "cumwitch",
						when: function ():Boolean {
							return flags[kFLAGS.CUM_WITCHES_FIGHTABLE] > 0;
						},
						call: game.dungeons.desertcave.fightCumWitch
					}, /*{
						name: "mimic",
						chance: 0.2,
						when: fn.ifLevelMin(3),
						call: game.mimicScene.mimicTentacleStart
					},*/ {
						name  : "wanderer",
						chance: 0.5,
						call  : wanderer.wandererRouter
					}, {
						name: "sw_preg",
						when: function ():Boolean {
							return sandWitchScene.pregnancy.event == 2;
						},
						call: sandWitchPregnancyEvent
					}, {
						name: "teladre",
						when: fn.not(game.telAdre.isAllowedInto),
						chance: 0.5,
						call: game.telAdre.discoverTelAdre
					}, {
						name  : "ants",
						when  : function ():Boolean {
							return player.level >= 5 && flags[kFLAGS.ANT_WAIFU] == 0 && flags[kFLAGS.ANTS_PC_FAILED_PHYLLA] == 0 && flags[kFLAGS.ANT_COLONY_KEPT_HIDDEN] == 0;
						},
						chance: 0.25,
						call  : antsScene.antColonyEncounter
					}, {
						name: "dungeon",
						when: function ():Boolean {
							return (player.level >= 4 || flags[kFLAGS.TIMES_EXPLORED_DESERT] > 45) && flags[kFLAGS.DISCOVERED_WITCH_DUNGEON] == 0;
						},
						call: game.dungeons.desertcave.enterDungeon
					}, {
						name: "wstaff",
						when: function ():Boolean {
							return flags[kFLAGS.FOUND_WIZARD_STAFF] == 0 && player.inte100 > 50;
						},
						call: wstaffEncounter
					}, {
						name: "nails",
						when: function ():Boolean {
							return player.hasKeyItem("Carpenter's Toolbox")
								   && player.keyItemv1("Carpenter's Toolbox") < camp.cabinProgress.maxNailSupply();
						},
						call: nailsEncounter
					}, {
						name: "chest",
						when: function ():Boolean {
							return !player.hasKeyItem("Camp - Chest")
						},
						call: chestEncounter
					},{
                        name: "goblinSharpshooter",
                        call: game.goblinSharpshooterScene.meetGoblinSharpshooter,
                        when: game.goblinSharpshooterScene.encounterWhen,
                        chance: game.goblinSharpshooterScene.encounterChance
                    }, {
						name  : "bigjunk",
						chance: game.commonEncounters.bigJunkChance,
						call  : game.commonEncounters.bigJunkDesertScene
					}, {
						name  : "exgartuan",
						chance: 0.25,
						when  : function():Boolean { return silly(); },
						call  : game.exgartuan.fountainEncounter
					}, {
						name  : "mirage",
						chance: 0.25,
						when  : fn.ifLevelMin(2),
						call  : mirageDesert
					}, {
						name  : "oasis",
						chance: 0.25,
						when  : fn.ifLevelMin(2),
						call  : oasis.oasisEncounter
					}, {
						name: "walk",
						chance: 0.1,
						call: walkingDesertStatBoost
					});
			return _desertEncounter;
		}
		//Explore desert
		public function explore():void {
			clearOutput();
			player.location = "desert";
			flags[kFLAGS.TIMES_EXPLORED_DESERT]++;
			desertEncounter.execEncounter();
		}

		public function sandWitchPregnancyEvent():void {
			if (flags[kFLAGS.EGG_WITCH_TYPE] == PregnancyStore.PREGNANCY_DRIDER_EGGS) sandWitchScene.sammitchBirthsDriders();
			else sandWitchScene.witchBirfsSomeBees();
		}

		public function chestEncounter():void {
			clearOutput();
			outputText(images.showImage("item-chest"));
			outputText("While wandering the trackless sands of the desert, you break the silent monotony with a loud 'thunk'.  You look down and realize you're standing on the lid of an old chest, somehow intact and buried in the sand.  Overcome with curiosity, you dig it out, only to discover that it's empty. Deciding that it would make a nice addition to your campsite, you start hauling the chest back to it.");
			player.createKeyItem("Camp - Chest", 0, 0, 0, 0);
			outputText("\n\nKey item gained: Chest!");
			outputText("\nYou now have " + num2Text(inventory.fixStorage()) + " item storage slots at camp.");
			doNext(camp.returnToCampUseOneHour);
		}

		public function nailsEncounter():void {
			clearOutput();
			outputText(images.showImage("item-nails"));
			outputText("While exploring the desert, you find the wreckage of a building. Judging from the debris, it's the remains of the library that was destroyed by the fire.\n\n");
			outputText("You circle the wreckage for a good while but can't seem to find anything to salvage until something shiny catches your eye.  There are some exposed nails that look like they can be scavenged.\n\n");
			outputText("You take your hammer out of your toolbox and spend some time extracting straight nails.  A good amount of the nails you pulled are bent but some are incredibly in good condition.  You could use these nails for construction.\n\n");
			var extractedNail:int = 5 + rand(player.inte / 5) + rand(player.str / 10) + rand(player.tou / 10) + rand(player.spe / 20) + 5;
			flags[kFLAGS.ACHIEVEMENT_PROGRESS_SCAVENGER] += extractedNail;
			player.addKeyValue("Carpenter's Toolbox", 1, extractedNail);
			outputText("After spending nearly an hour scavenging, you've managed to extract " + extractedNail + " nails.\n\n");
			if (player.keyItemv1("Carpenter's Toolbox") > camp.cabinProgress.maxNailSupply()) player.addKeyValue("Carpenter's Toolbox", 1, -(player.keyItemv1("Carpenter's Toolbox") - camp.cabinProgress.maxNailSupply()));
			outputText("Nails: " + player.keyItemv1("Carpenter's Toolbox") + "/" + camp.cabinProgress.maxNailSupply());
			doNext(camp.returnToCampUseOneHour);
		}

		public function wstaffEncounter():void {
			clearOutput();
			outputText(images.showImage("item-wStaff"));
			outputText("While exploring the desert, you see a plume of smoke rising in the distance.  You change direction and approach the soot-cloud carefully.  It takes a few moments, but after cresting your fourth dune, you locate the source.  You lie low, so as not to be seen, and crawl closer for a better look.\n\n");
			outputText("A library is burning up, sending flames dozens of feet into the air.  It doesn't look like any of the books will survive, and most of the structure has already been consumed by the hungry flames.  The source of the inferno is curled up next to it.  It's a naga!  She's tall for a naga, at least seven feet if she stands at her full height.  Her purplish-blue skin looks quite exotic, and she wears a flower in her hair.  The naga is holding a stick with a potato on the end, trying to roast the spud on the library-fire.  It doesn't seem to be going well, and the potato quickly lights up from the intense heat.\n\n");
			outputText("The snake-woman tosses the burnt potato away and cries, \"Hora hora.\"  She suddenly turns and looks directly at you.  Her gaze is piercing and intent, but she vanishes before you can react.  The only reminder she was ever there is a burning potato in the sand.   Your curiosity overcomes your caution, and you approach the fiery inferno.  There isn't even a trail in the sand, and the library is going to be an unsalvageable wreck in short order.   Perhaps the only item worth considering is the stick with the burning potato.  It's quite oddly shaped, and when you reach down to touch it you can feel a resonant tingle.  Perhaps it was some kind of wizard's staff?\n\n");
			flags[kFLAGS.FOUND_WIZARD_STAFF]++;
			inventory.takeItem(weapons.W_STAFF, camp.returnToCampUseOneHour);
		}

		private function mirageDesert():void {
			clearOutput();
			outputText(images.showImage("dungeon-entrance-phoenixtower"));
			outputText("While exploring the desert, you see a shimmering tower in the distance.  As you rush towards it, it vanishes completely.  It was a mirage!   You sigh, depressed at wasting your time.");
			dynStats("lus", -15);
			doNext(camp.returnToCampUseOneHour);
		}

		private function walkingDesertStatBoost():void {
			clearOutput();
			outputText(images.showImage("area-desert"));
			outputText("You walk through the shifting sands for an hour, finding nothing.\n\n");
			//Chance of boost == 50%
			if (rand(2) == 0) {
				if (rand(2) == 0 && player.str100 < 50) { //50/50 strength/toughness
					outputText("The effort of struggling with the uncertain footing has made you stronger.");
					dynStats("str", .5);
				}
				else if (player.tou100 < 50) { //Toughness
					outputText("The effort of struggling with the uncertain footing has made you tougher.");
					dynStats("tou", .5);
				}
			}
			doNext(camp.returnToCampUseOneHour);
		}
	}
}


code:
package classes.Scenes.Areas.Desert
{
	import classes.*;
	import classes.BodyParts.Butt;
	import classes.BodyParts.Hips;
	import classes.Items.Shields.DragonShellShield;
	import classes.internals.*;

	public class CumWitch extends Monster
	{
		/*public function cumWitchAI():void {
			//Hurt!
			if (HPRatio() < .6 && hasFatigue(10,MAGICAL)) {
				sandWitchCuntHeals();
				return;
			}

			var choices:Array = [];

			//Dicks only
			if (player.hasCock()) choices[choices.length] = cumMagicAttack;
			choices[choices.length] = bukkakeAttack;
			choices[choices.length] = cocknosisAttack;
			if (!hasStatusEffect(StatusEffects.Shell)) {
				choices[choices.length] = shellDefense;
				choices[choices.length] = shellDefense;
				choices[choices.length] = shellDefense;
			}
			//HERMS
			if (player.gender == 3) choices[choices.length] = genderConfusionAttack;
			//VAGOOZLES
			if (player.hasVagina()) choices[choices.length] = cumHungerAttack;
			choices[rand(choices.length)]();
		}*/

		override protected function performCombatAction():void
		{
			var actionChoices:MonsterAI = new MonsterAI()
				.add(cumMagicAttack, 1,player.hasCock(),10,FATIGUE_MAGICAL,RANGE_RANGED);
			actionChoices.add(bukkakeAttack,1,true,10,FATIGUE_PHYSICAL,RANGE_RANGED);
			actionChoices.add(cocknosisAttack, 1, true, 10, FATIGUE_MAGICAL,RANGE_RANGED);
			actionChoices.add(shellDefense, 3, !hasStatusEffect(StatusEffects.Shell), 10, FATIGUE_MAGICAL,RANGE_SELF);
			actionChoices.add(genderConfusionAttack, 1, player.gender == 3, 10, FATIGUE_MAGICAL,RANGE_RANGED);
			actionChoices.add(cumHungerAttack, 1, player.hasVagina(), 10, FATIGUE_MAGICAL,RANGE_TEASE);
			actionChoices.add(sandWitchCuntHeals, 99, HPRatio() < .6, 10, FATIGUE_MAGICAL_HEAL,RANGE_TEASE);
			actionChoices.exec();
		}
		//*Attack: Bukkake
		public function bukkakeAttack():void {
			changeFatigue(10, FATIGUE_PHYSICAL);
			//*Cum Witch hikes up her dress and bukkake's at PC.  Large # of chance for 'hits' for low individual damage.  Small reduction to sand witch lust.  Used more at high lust.
			outputText("The Cum Witch moans and daintily peels her robes away from her swollen cock-flesh.  A bubble of precum pops wetly from her urethra to splatter on the floor as her balls suddenly swell.  You look back up in time to see the telltale glow of magic surrounding her staff, but then she's thrusting her hips at you, lewdly humping the air as she unleashes rope after thick rope of potent jism in your direction!\n");
			var hits:int = 5 + rand(8);
			var bonus:int = 0;
			var damage:int = 0;
			while (hits > 0) {
			var result:Object = combatAvoidDamage({doDodge:true,doParry:false,doBlock:false});
				//Evade
				if (result.dodge == EVASION_EVADE) outputText("\nYou roll away from some of the hermaphrodite spunk, easily evading it.");
				//Misdirect
				else if (result.dodge == EVASION_MISDIRECTION) outputText("\nYou feint one direction and then move another, misdirecting like a pro and avoiding some of the sexual artillery.");
				//Flexibility
				else if (result.dodge == EVASION_FLEXIBILITY) outputText("\nYou twist aside, making the most of your cat-like reflexes to avoid some of the stuff.");
				else if (result.dodge == EVASION_SPEED || result.dodge != null) { // failsafe
					//Miss1
					if (rand(3) == 0) outputText("\nA glob of her goo goes wide, over your shoulder!");
					else if (rand(2) == 0) outputText("\nOne wave of alabaster falls short, to splatter at your [feet].");
					else outputText("\nSome of the Cum Witch's cum nearly hits you, but you manage to step aside.");
				}
				//Dragon-shell shield
				else if (player.shield == game.shields.DRGNSHL && rand(2) == 0) outputText("\nYou ready your dragon-shell shield, letting the futa-cum hit it. Within a short span of time, the cum is completely absorbed.");
				else {
					var temp:Number = rand(5);
					//Hit1
					if (temp == 0) outputText("\nA mass of jizz splatters into your [hair], soaking it with thick, salty goo.");
					else if (temp == 1) outputText("\nOne jet of thick witch-cum hits you in the [chest] before you can react.  You can feel it getting inside your [armor], squishing and sliding over your [nipples] as you try to fight.");
					else if (temp == 2) outputText("\nSome of the stuff spatters off your arm and soaks your hand, making it a slimy mess.");
					else if (temp == 3) outputText("\nA creamy deluge hits your [legs], though rather than running down, it seems to come up, flowing into your [armor] to squish wetly across your sensitive groin.");
					else {
						outputText("\nSpunk nearly blinds you as the Cum Witch's virile fluids take you in the face.  You spit some of it out, the smell of the stuff making your head swim.");
						//bonus damage!
						bonus = 3;
					}
					damage+= 2;
				}
				hits--;
			}
			player.takeLustDamage(damage+bonus, true);

		}

		//*Attack: Cum Magic
		public function cumMagicAttack():void {
			changeFatigue(10, FATIGUE_MAGICAL);
			//*Used on males only, casts spell that causes balls to temporarily swell and increase lust by a moderate amount.  Unavoidable.
			outputText("Gesticulating with her free hand, the Cum Witch utters impossible to pronounce words before closing her fingers tightly into a fist.  That same instant, you feel an onset of warmth in your [balls], a spreading heat that makes you tremble with growing lust.  A second later, [eachCock] is throbbing, and a runner of cum trickles from the [cockHead], a hint of your temporarily-enhanced virility.");
			//(15-30 lust, based on libido)
			player.takeLustDamage(5+player.lib/12, true);
			player.hoursSinceCum += 100;

		}
		//*Attack: Cum Hunger
		//*Used on vagoozles, spell that causes womb to literally thirst for sperm.  Unavoidable moderate lust gain.  Pregnant character's are immune.
		public function cumHungerAttack():void {
			changeFatigue(10, FATIGUE_MAGICAL);
			outputText("Moaning luridly, the Cum Witch swivels her staff and opens her hand to spread her fingers wide.  At the same time, you feel her magic slam into your midsection, burrowing into your womb.  ");
			if (player.pregnancyIncubation > 0) {
				outputText("Yet, whatever she tries to do fails, as her otherworldly conjuration falls apart as soon as soon as it reaches you.");

				return;
			}
			outputText("It worms around your uterus, tickling it faintly before gently kneading your ovaries.  Your [legs] go weak as your womb throbs, hungering for something to fill it.  A trickle of wetness squirts from your [vagina] as the magic fades, and you squirm as your lust rises. If only something would make you pregnant!  Your eyes dart unbidden to the Witch's groin before you yank them away.");
			player.takeLustDamage(5+player.lib/12, true);

		}

		//*Attack: Gender Confusion
		public function genderConfusionAttack():void {
			changeFatigue(10, FATIGUE_MAGICAL);
			//*Used on genderless and hermaphrodite characters.  Mental attack that draws on disharmony with standard gender types to stun for one round.  3 turn cooldown
			outputText("Touching her alabaster staff to her brow, just under the brim of her hat, the Cum Witch makes a brief incantation and fixes you with her gaze.  Her eyes flash blindingly white, and then you feel her inside you, rifling through your memories, digging up memories of your childhood, your past, and throwing them against you.  ");
			if (player.inte/5 + rand(20) + player.level/2 < 18) {
				outputText("She batters your consciousness with conflicting memories of your gender, utterly dazing you.  How can you fight when you can barely tell who you are anymore?");
				player.createStatusEffect(StatusEffects.Confusion,0,0,0,0);
			}
			else {
				outputText("You parse the flood of information with mental focus and expel the intruder from your mind with a clenching of your sizable intellect.");
			}

		}
		//*Attack: Shell
		public function shellDefense():void {
			changeFatigue(20, FATIGUE_MAGICAL);
			//*Grants immunity to all magic-based attacks for the next two turns.
			outputText("The Cum Witch holds her staff in both hands and rotates it in a circle, chanting all the while.  Her voice rises in pitch and intensity until she's screaming out unwords of power.  With one final cry, she slams her staff down into the ground hard enough to kick up a puff of sandy dust.  It quickly settles, but the Cum Witch has some kind of glittering, reflective shield around herself now!");
			createStatusEffect(StatusEffects.Shell,3,0,0,0);

		}

		//*Attack: Cocknosis
		//*Intelligence dependant attack with possibility of very high lust gain.
		public function cocknosisAttack():void {
			changeFatigue(10, FATIGUE_MAGICAL);
			outputText("Lifting her robes enticingly, the Cum Witch reveals her ");
			if (lust100 < 50) outputText("half-hard");
			else if (lust100 < 70) outputText("hard");
			else if (lust100 < 85) outputText("throbbing");
			else outputText("hard, dripping");
			outputText(" cock.  She gently begins to sway her hips, bouncing back and forth with near-mechanical precision, her softly bobbing cock catching your eyes with its metronome-like precision.  She softly begins to speak, enunciating each word to the time and tune of her movements.");

			outputText("\n\n\"See my cock?  See the glistening thickness of it?  Watch how it sways and bobs for you, moving with such smooth and easy grace.  Can you feel your eyes following it, locking onto it and never letting go?\"\n\n");

			if (player.inte/20 + rand(20) >= 13) {
				outputText("You chuckle at her crude attempt to hypnotize you with her member.  She stomps her foot in irritation and drops her robes back into place.");
			}
			else {
				outputText("The Witch smirks, though you're too focused on her cock to see, and she continues, \"Good " + player.mf("boy","girl") + ".  Watch it sway.  You're so focused on my cock now that the world is just falling away around it, sinking into nothingness, leaving only that wonderful cock behind for you to watch.  And since it's filling your view, you can feel it filling your mind as well, can't you?\"");
				outputText("\n\nYou nod, your view rigidly attached to her equally rigid tool as you utterly and completely fixate on her penis, admiring its curves, its thickness, and the way it seems to pulsate happily for you whenever you look at it just right.  The Witch keeps talking, but it's her dick that's important.  You start to drool as your [skin] flushes and your body heats.  Gods, her cock is gorgeous.  Reaching down, you begin to masturbate without thinking.  You don't know why, but it just feels like the right thing to do.");
				game.dynStats("lus", 20);
				if (player.lust100 <= 99) outputText("\n\nYou bump against something, startling yourself out of the cocknosis before you can completely fall for it.  Still, you keep seeing her dick every time you close your eyes, and your body is very turned on from how you were touching yourself.");
				else outputText("\n\nYou play with yourself until you're on the very edge of orgasm.  At that moment, a loud *SNAP* startles you back to wakefulness, and as you look down at the cock bobbing just a few inches away, you realize it's hopeless.  You can't fight this.");
				outputText("\n\nThe witch smiles knowingly.");
			}

		}

		//*Attack: Heal
		//*Restores one third of her HP.
		public function sandWitchCuntHeals():void {
			outputText("The Witch smirks at you and holds her free hand under her robes.  When she pulls it out, you realize she's gathered a handful of her cum.  She holds it up and exhales over it, the air making a slight whistle as it blows through her parted lips.  The ebony sorceress then smears the goop over her wounds, which seem to drink in the cum and vanish before your eyes.  She scolds, \"Physical damage?  How artless.\"");
			addHP(maxHP() * 0.33);
			changeFatigue(10,FATIGUE_MAGICAL);

		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.dungeons.desertcave.cumWitchDefeated();
		}

		override public function won(hpVictory:Boolean,pcCameWorms:Boolean = false):void
		{
			game.dungeons.desertcave.defeatedByCumWitch();
		}

		public function CumWitch()
		{
			this.a = "the ";
			this.short = "Cum Witch";
			this.imageName = "cumwitch";
			this.long = "The Cum Witch is a moderately tall woman, almost six feet in height.  Her dark ebony skin is nearly as black as pitch, though it glitters with sweat from her recent sexual activities and the fight.  She has plump lips and long, smooth blonde hair, though much of it is hidden behind a pointed, wide-brimmed hat.  Her robes are even blacker than she is, but she wields an alabaster staff that fairly sizzles with magical might.  Of course, her garments don't do much to conceal her gigantic breasts.  Though there are only two, they're large enough to dwarf the four tits most sand witches are packing.";
			this.race = "Human?";
			this.createCock(12,2,CockTypesEnum.HUMAN);
			this.balls = 0;
			this.ballSize = 0;
			this.cumMultiplier = 3;
			this.hoursSinceCum = 20;
			this.createVagina(false, Vagina.WETNESS_WET, Vagina.LOOSENESS_LOOSE);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 20, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("E"));
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_NORMAL;
			this.tallness = rand(12) + 55;
			this.hips.rating = Hips.RATING_CURVY;
			this.butt.rating = Butt.RATING_LARGE;
			this.skin.tone = "black";
			this.hair.color = "sandy-blonde";
			this.hair.length = 15;
			initStrTouSpeInte(35, 35, 35, 85);
			initLibSensCor(55, 40, 30);
			this.weaponName = "fists";
			this.weaponVerb="punches";
			this.armorName = "robes";
			this.bonusHP = 100;
			this.lust = 30;
			this.lustVuln = .8;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 6;
			this.gems = rand(15) + 5;
			this.drop = new WeightedDrop().addMany(1,
					consumables.TSCROLL,
					consumables.OVIELIX,
					consumables.LACTAID,
					consumables.LABOVA_,
					consumables.W__BOOK,
					consumables.B__BOOK,
					null);
			this.createPerk(PerkLib.SpellcastingAffinity,75,0,0,0);
			this.createPerk(PerkLib.SpeedyRecovery,0,0,0,0);
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Areas.Desert
{
	import classes.*;
	import classes.BodyParts.*;
	import classes.BodyParts.Hips;
	import classes.internals.WeightedDrop;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;

	public class DemonPack extends Monster
	{

		override protected function performCombatAction():void
		{
			//Demon pack has different AI
			if (rand(2) == 0)
				special1();
			else special2();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			clearOutput();
			if (hpVictory) {
				outputText("You strike out and the last of the demons tumbles to the ground with a thud. You stand there for a second surrounded by dead or unconscious demons feeling like a god of battle. Then you realize that if a god of battle does exist he lives on a demonic plane like this, so to avoid insulting him you take your hands off your hips and your " + player.legs() + " off the head of the demon leader before you start to search the bodies.");
				game.dynStats("lus", 1);
			} else {
				outputText("The demons stop attacking, and reach out to touch your body. Some are already masturbating like it's the only thing in the world and you know that right now, if you wanted to, you could make each and every one of them fuck you.");
			}
			if (hasStatusEffect(StatusEffects.phyllafight)) {
				doNext(game.desert.antsScene.consolePhylla);
			} else if (hpVictory || flags[kFLAGS.SFW_MODE] > 0){
				game.combat.cleanupAfterCombat();
			} else {
				outputText("  Do you rape them?");
				game.output.doYesNo(rapeDemons, game.combat.cleanupAfterCombat);
			}
		}

		private function rapeDemons():void{
			clearOutput();
			outputText("You open your arms and step into the throng of eager demons. They jump eagerly to touch you, becoming more and more lust-frenzied every second. You take the nearest demon and throw it to the ground and without a moment's thought the rest of the group leap to join you in a thoughtless madness of lust...");
			doNext(game.desert.oasis.oasisSexing);
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void
		{
			clearOutput();
			if (player.gender == 0){
				if (hpVictory) {
					outputText("You collapse before the demons, who laugh at your utter lack of male or female endowments, beating you until you pass out.");
				} else {
					outputText("You offer yourself to the demons, who promptly begin laughing at your lack of endowments.  They fall on you as one, beating you into unconsciousness.");
				}
				game.combat.cleanupAfterCombat();
			} else if (flags[kFLAGS.SFW_MODE] > 0) {
				outputText("Because SFW mode is enabled, this scene is disabled.");
				game.combat.cleanupAfterCombat();
			} else if (hpVictory){
				outputText("The demons finally beat you down and you collapse onto the sand of the oasis. Almost immediately you feel demonic hands pressing and probing your prone form. You hear the leader of the group say something in a strange tongue but you have a feeling you know what it means. The demons dive onto your inert body with intent and begin to press themselves against you...");
				doNext(game.desert.oasis.oasisSexing);
			} else {
				outputText("You struggle to keep your mind on the fight and fail to do so. ");
				if (pcCameWorms){
					outputText("\n\nThe demons joke and smile, obviously unconcerned with your state.\n\n");
				}
				if (player.cocks.length > 0) {
					if (player.cockTotal() > 1) outputText("Each of y");
					else outputText("Y");
					outputText("our " + player.multiCockDescriptLight() + " throbs ");
					if (player.hasVagina()) outputText(" and your ");
				}
				if (player.vaginas.length > 0) {
					if (!player.hasCock()) outputText("Your ");
					outputText(player.vaginaDescript(0) + " burns ");
				}
				outputText("with arousal.  You make a grab for the nearest demon and catch a handful of jiggly breast. You try desperately to use your other arm to pull her closer to slake your thirst but you both go tumbling to the ground. The demonic leader laughs out loud and the rest of the tribe falls on you, grabbing for anything it can find.");
				doNext(game.desert.oasis.oasisSexing);
			}
		}

		override public function teased(lustDelta:Number):void
		{
			outputText("\n");
			if (lustDelta == 0) outputText("\n" + capitalA + short + " seems unimpressed.");
			else if (lustDelta > 0 && lustDelta < 5) outputText("The demons lessen somewhat in the intensity of their attack, and some even eye up your assets as they strike at you.");
			else if (lustDelta >= 5 && lustDelta < 10) outputText("The demons are obviously steering clear from damaging anything you might use to fuck and they're starting to leave their hands on you just a little longer after each blow. Some are starting to cop quick feels with their other hands and you can smell the demonic lust of a dozen bodies on the air.");
			else if (lustDelta >= 10) outputText("The demons are less and less willing to hit you and more and more willing to just stroke their hands sensuously over you. The smell of demonic lust is thick on the air and part of the group just stands there stroking themselves openly.");
			applyTease(lustDelta);
		}

		public function DemonPack()
		{
			//trace("DemonPack Constructor!");
			this.a = "the ";
			this.short = "demons";
			this.imageName = "demonmob";
			this.long= "The group is composed of roughly twenty tan-skinned demons, mostly humanoid in shape with many and varied corruptions across the mob. You see demonic high heels, twisting horns and swinging cocks of all shapes and sizes. There even seems to be a bull head in there somewhere. You also make out plenty of breasts ranging from tiny ones to a pair that requires a second person to carry them, and with those breasts a wide range of pussies, dripping and dry, sometimes nestled below some form of demonic dick.  The small tribe carries no weapons and what little clothing they wear is well-shredded, except for one hefty male wearing a cloak of what appears to be snakeskin across his broad shoulders." + (game.silly() ? "  You spot an odd patch that reads, \"<i>41st Engineer Company: Vaginal Clearance</i>\" on his shoulder." : "");
			this.race = "Demons";
			this.plural = true;
			this.pronoun1 = "they";
			this.pronoun2 = "them";
			this.pronoun3 = "their";
			this.createCock(18,2);
			this.createCock(18,2,CockTypesEnum.DEMON);
			this.balls = 2;
			this.ballSize = 1;
			this.cumMultiplier = 3;
			// this.hoursSinceCum = 0;
			this.createVagina(false, Vagina.WETNESS_SLICK, Vagina.LOOSENESS_LOOSE);
			createBreastRow(0);
			this.ass.analLooseness = Ass.LOOSENESS_STRETCHED;
			this.ass.analWetness = Ass.WETNESS_SLIME_DROOLING;
			this.tallness = rand(8) + 70;
			this.hips.rating = Hips.RATING_AMPLE+2;
			this.butt.rating = Butt.RATING_LARGE;
			this.skin.tone = "red";
			this.hair.color = "black";
			this.hair.length = 15;
			initStrTouSpeInte(80, 10, 10, 5);
			initLibSensCor(50, 60, 80);
			this.weaponName = "claws";
			this.weaponVerb="claw";
			this.armorName = "demonic skin";
			this.bonusHP = 200;
			this.lust = 30;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 6;
			this.gems = rand(25) +10;
			this.drop = new WeightedDrop().addMany(1,
							consumables.SUCMILK,
							consumables.INCUBID,
							consumables.OVIELIX,
							consumables.B__BOOK);
			this.special1 = game.combat.packAttack;
			this.special2 = game.combat.lustAttack;
			this.tail.type = Tail.DEMONIC;
			this.horns.type = Horns.DEMON;
			this.horns.value = 2;
			checkMonster();
		}

	}

}


code:
// By Foxwells
// Ghouls! Cuz wynaut? We already have one spirit entity.
// Will first appear as a normal hyena, first damaging turns them into ghost form. Like a Zoroark.
// Can't be lusted because they're, well, flesh-hungry ghosts. They don't wanna fuck.
// If win: Ghoul eats them (I PROMISE I don't have a vore fetish), PC suffers stat drop
// If lose: They poof away.

package classes.Scenes.Areas.Desert {
	import classes.*;
	import classes.BodyParts.*;
	import classes.internals.*;
	import classes.internals.WeightedDrop;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Scenes.Areas.Desert.*;

	public class Ghoul extends Monster {
		public var ghoulReveal:Boolean = false;
		public var spellCostBlind:int = 8;
		public var spellCostGhoulMagic:int = 12;

		/*override public function whenAttacked():Boolean{
			if (!ghoulReveal) {
				outputText("Your " + game.player.weaponName + " strikes the hyena, causing it to recoil and vanish in a cloud of sandy dust. You stumble back in surprise and look up to see a snarling, ghostly creature in the air. Your enemy wasn't a hyena. It was a ghoul!\n\n");
				if (game.silly()) outputText("The wild Ghoul's illusion wore off!\n\n");
				ghoulReveal = true;
			}
		return true;
		}*/

		override public function react(context:int):Boolean{
			switch(context){
				case CON_WHENATTACKED:
				if (!ghoulReveal) {
				outputText("Your " + game.player.weaponName + " strikes the hyena, causing it to recoil and vanish in a cloud of sandy dust. You stumble back in surprise and look up to see a snarling, ghostly creature in the air. Your enemy wasn't a hyena. It was a ghoul!\n\n");
				if (game.silly()) outputText("The wild Ghoul's illusion wore off!\n\n");
				ghoulReveal = true;
				}
				break;
			}
			return true;
		}

		protected function hyenaBite():void {
			if(hasStatusEffect(StatusEffects.Blind)) { //Blind
				outputText("The hyena lunges for you, aiming to bite you, but misses entirely due to its blindness!");
				return;
			}
			if (!combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed) { //Evading
				outputText("The hyena lunges for you, aiming to bite you, but easily move out of the way.");
				return;
			}
			else { //Damage
				outputText("The hyena lunges for you, sinking its teeth into you. ");
				var damage:int = (rand(10) + 5);
				damage = player.reduceDamage(damage,this);
				player.takeDamage(damage, true);
			}
		}

		protected function hyenaClaw():void {
			if(hasStatusEffect(StatusEffects.Blind)) { //Blind
				outputText("The hyena slashes its paw at you, but misses due to its blindness!");
				return;
			}
			if (!combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed) { //Evading
				outputText("The hyena slashes its paw at you, but you easily move out of the way.");
				return;
			}
			else { //Damage
				outputText("The hyena slashes its paw at you, raking down hard and causing you to yelp in pain. ");
				var damage:int = (rand(5) + 5);
				damage = player.reduceDamage(damage,this);
				player.takeDamage(damage, true);
			}
		}

		protected function ghoulBlind():void {
				outputText("The ghoul glares and points at you! A bright flash erupts before you! ");
				if (rand(player.inte / 5) <= 4) {
					outputText("You are blinded!");
					player.createStatusEffect(StatusEffects.Blind, 1 + rand(3), 0, 0, 0);
				}
				else {
					outputText("You manage to blink in the nick of time!");
				}

		}

		protected function ghoulMagic():void {
				outputText("The ghoul chants out an incantation, and a dark alchemic circle forms around your feet. ");
				if (!combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed) { //Evading
					outputText("You jump out of the circle before anything happens. Where you'd just been erupts in flames.");
					return;
				}
				else { //Damage
					outputText("Blackened flames burst from the circle, causing you to seize with pain as they scorch every inch of your body. ");
					var damage:int = (rand(10) + 10);
					damage = player.reduceDamage(damage,this);
					player.takeDamage(damage, true);
				}

		}

		override protected function performCombatAction():void {
			var actionChoices:MonsterAI = new MonsterAI();
				actionChoices.add(hyenaClaw, 1,!ghoulReveal,0,FATIGUE_PHYSICAL,RANGE_MELEE);
				actionChoices.add(hyenaBite, 1,!ghoulReveal,0,FATIGUE_PHYSICAL,RANGE_MELEE);
				actionChoices.add(ghoulMagic, 2, ghoulReveal && !player.hasStatusEffect(StatusEffects.Blind) , spellCostGhoulMagic, FATIGUE_MAGICAL,RANGE_RANGED);
				actionChoices.add(ghoulBlind, 2, ghoulReveal, spellCostBlind, FATIGUE_MAGICAL,RANGE_RANGED);
				actionChoices.add(eAttack, 6, ghoulReveal,0,FATIGUE_NONE,RANGE_MELEE);
			actionChoices.exec();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			clearOutput();
			outputText("The ghoul lets out a furious screech as your attacks become too much to bear, and vanishes in a dusty cloud of sand. You're left staring at the spot, wondering if you just hallucinated everything that happened.");
			game.combat.cleanupAfterCombat();
			ghoulReveal = false;
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void
		{
			if(pcCameWorms){
				outputText("\nThe ghoul lets out a disgusted noise and vanishes without a word.");
				doNext(game.combat.endLustLoss);
			} else {
				game.desert.ghoulScene.ghoulWon();
			}
			ghoulReveal = false;
		}

		private const VIRGIN_VARIATIONS:Array = [
			["true"],
			["false"]
		];

		private const HIP_VARIATIONS:Array = [
			["boyish"],
			["slender"],
			["average"],
			["ample"],
			["curvy"],
			["fertile"],
			["inhumanly wide"]
		];

		private const BUTT_VARIATIONS:Array = [
			["buttless"],
			["tight"],
			["average"],
			["noticeable"],
			["large"],
			["jiggly"],
			["expansive"],
			["huge"],
			["inconceivably big"]
		];

		private const LEG_VARIATIONS:Array = [
			["lack of"],
			["human"],
			["hoofed"],
			["dog"],
			["naga"],
			["demonic high heels"],
			["demonic claws"],
			["bee"],
			["goo"],
			["cat"],
			["lizard"],
			["pony"],
			["bunny"],
			["harpy"],
			["kangaroo"],
			["chitinous spider legs"],
			["drider lower body"],
			["fox"],
			["dragon"],
			["raccoon"],
			["ferret"],
			["cloven hoofed"],
			["echidna"],
			["salamander"],
			["wolf"]
		];

		private const ARM_VARIATIONS:Array = [
			["no"],
			["human"],
			["harpy"],
			["spider"],
			["predator"],
			["salamander"],
			["wolf"]
		];

		private const SKINCOLOUR_VARIATIONS:Array = [
			["albino"],
			["aphotic blue-black"],
			["ashen grayish-blue"],
			["ashen"],
			["black"],
			["blue"],
			["brown"],
			["cerulean"],
			["dark green"],
			["dark"],
			["ebony"],
			["emerald"],
			["ghostly pale"],
			["gray"],
			["grayish-blue"],
			["green"],
			["indigo"],
			["light"],
			["milky white"],
			["olive"],
			["orange and black striped"],
			["orange"],
			["pale white"],
			["pale yellow"],
			["pale"],
			["pink"],
			["purple"],
			["red"],
			["rough gray"],
			["sable"],
			["sanguine"],
			["shiny black"],
			["silver"],
			["tan"],
			["white"]
		];

		private const SKINTYPE_VARIATIONS:Array = [
			["skin"],
			["fur"],
			["lizard scales"],
			["goo"],
			["dragon scales"]
		];

		private const HAIRCOLOUR_VARIATIONS:Array = [
			["auburn"],
			["black and orange"],
			["black and white spotted"],
			["black and yellow"],
			["black"],
			["blond"],
			["blonde"],
			["blue"],
			["brown"],
			["cerulean"],
			["dark blue"],
			["deep red"],
			["emerald"],
			["golden blonde"],
			["golden-blonde"],
			["gray"],
			["green"],
			["light blonde"],
			["midnight black"],
			["orange"],
			["pink"],
			["platinum blonde"],
			["purple"],
			["red"],
			["reddish-orange"],
			["sandy blonde"],
			["sandy brown"],
			["shiny black"],
			["silver blonde"],
			["silver-white"],
			["silver"],
			["transparent"],
			["white and black"],
			["white"]
		];

		private const HAIRTYPE_VARIATIONS:Array = [
			["normal"],
			["feather"],
			["ghost"],
			["goo"],
			["anemone"],
			["quill"],
			["basilisk spine"],
			["basilisk plume"]
		];

		private const FACE_VARIATIONS:Array = [
			["lack of"],
			["human"],
			["horse"],
			["dog"],
			["cow"],
			["minotaur"],
			["shark with shark teeth"],
			["snake with snake fangs"],
			["cat"],
			["lizard"],
			["bunny"],
			["kangaroo"],
			["spider with spider fangs"],
			["fox"],
			["dragon"],
			["raccoon mask"],
			["raccoon"],
			["mouse-like with buckteeth"],
			["mouse"],
			["ferret mask"],
			["ferret"],
			["pig"],
			["boar"],
			["rhino"],
			["echidna"],
			["deer"],
			["wolf"]
		];

		private const EARS_VARIATIONS:Array = [
			["no"],
			["human"],
			["horse"],
			["dog"],
			["cow"],
			["elvin"],
			["cat"],
			["lizard"],
			["bunny"],
			["kangaroo"],
			["fox"],
			["dragon"],
			["raccoon"],
			["mouse"],
			["ferret"],
			["pig"],
			["rhino"],
			["echidna"],
			["deer"],
			["wolf"]
		];

		private const TONGUE_VARIATIONS:Array = [
			["non-existant"],
			["human"],
			["snake"],
			["demonic"],
			["draconic"],
			["echidna"],
			["lizard"]
		];

		private const EYES_VARIATIONS:Array = [
			["no"],
			["human"],
			["four spider"],
			["black Sand Trap"],
			["lizard"],
			["dragon"],
			["basilisk"],
			["wolf"]
		];

		private const WEAPON_VARIATIONS:Array = [
			["sword"],
			["rapier"],
			["scimitar"],
			["katana"],
			["halberd"],
			["axe"],
			["dagger"]
		];

		private const ARMOR_VARIATIONS:Array = [
			["Bee Armor"],
			["Chainmail Armor"],
			["Dragonscale Armor"],
			["Gel Armor"],
			["Leather Armor"],
			["Platemail Armor"],
			["Samurai Armor"],
			["Scalemail Armor"],
			["Spider-Silk Armor"],
			["Ballroom Dress"],
			["Leather Robes"],
			["Bondage Straps"],
			["Chainmail Bikini"],
			["Classy Suitclothes"],
			["Comfortable Clothes"],
			["Green Adventurer's Clothes"],
			["Kimono"],
			["Nurse's Outfit"],
			["Overalls"],
			["Robes"],
			["Rubber Outfit"],
			["Bodysuit"],
			["Slutty Swimwear"],
			["Spider-Silk Robes"],
			["Scandalously Seductive Armor"],
			["Wizard's Robes"],
			["Birthday Suit"]
		];

		private const TAIL_VARIATIONS:Array = [
			["non-existant"],
			["horse"],
			["dog"],
			["demonic"],
			["cow"],
			["spider adbomen"],
			["bee abdomen"],
			["shark"],
			["cat"],
			["lizard"],
			["rabbit"],
			["harpy"],
			["kangaroo"],
			["fox"],
			["draconic"],
			["raccoon"],
			["mouse"],
			["ferret"],
			["behemoth"],
			["pig"],
			["scorpion"],
			["goat"],
			["rhino"],
			["echidna"],
			["deer"],
			["salamander"],
			["wolf"]
		];

		private const HORN_VARIATIONS:Array = [
			["no"],
			["demon"],
			["cow"],
			["minotaur"],
			["2 draconic"],
			["4, 12-inch long draconic"],
			["antlers"],
			["goat"],
			["unicorn"],
			["rhino"]
		];

		private const WING_VARIATIONS:Array = [
			["no"],
			["small, bee-like"],
			["large, bee-like"],
			["harpy"],
			["imp"],
			["large imp"],
			["tiny bat-like"],
			["large bat-like"],
			["shark fin"],
			["large, feathered"],
			["small, draconic"],
			["large, draconic"],
			["giant dragonfly"]
		];

		public function Ghoul() {
			var vaginaVirgin:Array = randomChoice(VIRGIN_VARIATIONS);
			var hipRate:Array = randomChoice(HIP_VARIATIONS);
			var buttRate:Array = randomChoice(BUTT_VARIATIONS);
			var legType:Array = randomChoice(LEG_VARIATIONS);
			var armsType:Array = randomChoice(ARM_VARIATIONS);
			var skinColour:Array = randomChoice(SKINCOLOUR_VARIATIONS);
			var skinsType:Array = randomChoice(SKINTYPE_VARIATIONS);
			var hairColours:Array = randomChoice(HAIRCOLOUR_VARIATIONS);
			var hairTypes:Array = randomChoice(HAIRTYPE_VARIATIONS);
			var faceTypes:Array = randomChoice(FACE_VARIATIONS);
			var earTypes:Array = randomChoice(EARS_VARIATIONS);
			var tongueTypes:Array = randomChoice(TONGUE_VARIATIONS);
			var eyeTypes:Array = randomChoice(EYES_VARIATIONS);
			var weaponTypes:Array = randomChoice(WEAPON_VARIATIONS);
			var armorTypes:Array = randomChoice(ARMOR_VARIATIONS);
			var tailTypes:Array = randomChoice(TAIL_VARIATIONS);
			var hornTypes:Array = randomChoice(HORN_VARIATIONS);
			var wingTypes:Array = randomChoice(WING_VARIATIONS);

			this.revealedDesc = "The ghoul is one of the more bizarre things you've seen, with a " + faceTypes[0] + " face, " + armsType[0] + " arms, and a " + legType[0] + " lower body. Its face is complete with " + eyeTypes[0] + " eyes and a " + tongueTypes[0] + " tongue. It also has " + wingTypes[0] + " wings, " + (horns.type != Horns.NONE ? hornTypes[0] + " horns," : "") + " and a " + tailTypes[0] + " tail above its [ass]. It has " + hairColours[0] + " " + hairTypes[0] + " hair, " + skinColour[0] + " " + skinsType[0] + ", " + hipRate[0] + " hips, and a " + buttRate[0] + " butt. It wields a " + weaponTypes[0] + " for a weapon and wears " + armorTypes[0] + " as armor.";

			this.a = "the ";
			this.short = "";
			this.imageName = "ghoul";
			this.long = "";
			this.race = "";

			if (rand(2) == 0) {
				this.createCock(rand(4) + 5, rand(2) + 1, CockTypesEnum.DISPLACER);
				this.balls = 2;
				this.ballSize = rand(2) + 1;
				this.createBreastRow();
			} else {
				this.createVagina(vaginaVirgin[0], rand(6) + 1, rand(7) + 1);
				this.createBreastRow(rand(5) + 1, rand(2) + 1);
			}
			this.ass.analLooseness = rand(4) + 1;
			this.ass.analWetness = rand(4) + 1;

			this.pronoun1 = "it";
			this.pronoun2 = "it";
			this.pronoun3 = "its";

			this.tallness = rand(18) + 59;
			this.hips.rating = rand(19) + 1;
			this.butt.rating = rand(19) + 1;
			this.lowerBody.type = rand(25) + 1;
			this.arms.type = rand(5) + 1;

			this.skin.tone = skinColour[0];
			this.skin.setType(rand(5));
			this.hair.length = rand(25);
			if (this.hair.length > 0) {
				this.hair.color = hairColours[0];
				this.hair.type = rand(7) + 1;
			} else {
				this.hair.type = Hair.NORMAL;
			}
			this.face.type = rand(23) + 1;
			this.ears.type = rand(19) + 1;
			this.tongue.type = rand(4) + 1;
			this.eyes.type = rand(5) + 1;

			initStrTouSpeInte(45,30,55,25);
			initLibSensCor(0,0,50);

			this.weaponName = weaponTypes[0];
			this.weaponVerb = "slash";
			this.weaponAttack = rand(4) + 2;

			this.armorName = armorTypes[0];
			this.armorDef = rand(5) + 2;

			this.bonusHP = 100;
			this.lust = 0;
			this.lustVuln = 0;
			this.temperment = TEMPERMENT_AVOID_GRAPPLES;
			this.fatigue = 0;

			this.level = 4;
			this.gems = rand(25) + 5;

			this.drop = new WeightedDrop(consumables.ECTOPLS, 1);

			this.tail.type = rand(26);
			this.horns.value = rand(4);
			if (this.horns.value > 0) {
				this.horns.type = rand(7) + 1;
			} else {
				this.horns.type = Horns.NONE;
			}
			this.wings.type = rand(13);
			this.antennae.type = rand(2);
			if (this.antennae.type == 2) {
				this.antennae.type = Antennae.BEE;
			} else {
				this.antennae.type = Antennae.NONE;
			}

			checkMonster();
		}

		private var revealedDesc:String = "";

		override public function get short():String {
			var str:String = "";
			if (ghoulReveal) {
				str += "ghoul";
			} else if (!ghoulReveal) {
				str += "hyena";
			}
			return str;
		}

		override public function get long():String {
			if (ghoulReveal) {
				return revealedDesc;
			} else {
				return "The hyena appears to be a regular spotted hyena, with pale brown fur covered in dark brown spots. Its forequarters are strong and muscular while its hindquarters are notably underdeveloped in comparison. It has a flat snout ending in a black nose, and curved, erect ears tipped in black. Its eyes watch you closely in case you try any sudden movements. There seem to be no other hyenas in sight, and you can't stop thinking about how odd it is that there's even a hyena in a desert.";
			}
		}
	}
}


code:
// By Foxwells
// Ghouls! Their lore is that they look like hyenas and lure people to places and then eat them
// Apparently also they live in deserts and graveyards

package classes.Scenes.Areas.Desert {

	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;

	public class GhoulScene extends BaseContent {

		public function GhoulScene() {

		}

		public function ghoulEncounter():void {
			clearOutput();
			outputText(images.showImage("event-hyena"));
			outputText("As you wander the desert, your eyes catch something moving. You look in its direction. It's a hyena. Not a hyena-morph, but a literal hyena. If that wasn't weird enough, you're pretty certain anything hyena would be found ");
				if (flags[kFLAGS.TIMES_EXPLORED_PLAINS] > 0) {
					outputText("at the Plains.");
				} else {
					outputText("elsewhere.");
				}
			outputText(" But it hardly matters. The hyena has spotted you and is charging at you, ruining any more contemplation. Instead, you prep yourself for a fight.");
			startCombat(new Ghoul());
		}

		public function ghoulWon():void {
			combat.cleanupAfterCombat();
			clearOutput();
			outputText(images.showImage("monster-ghoul"));
			if (player.HP <= 0) {
				outputText("You fall into the sand, your wounds too great. ");
			}
			else { //lust loss I guess
				outputText("You fall into the sand, your lust too overpowering. ");
			}
			outputText("The ghoul wastes no time and lunges forward at you. The last thing you see before you pass out is the ghoul's outstretched jaws.\n\nYou have no idea what time it is when you wake up. Bite marks and other wounds cover your body, and pain wracks you with every breath you take. The sand is red with your blood and the metallic smell makes your stomach churn, but at the very least, you don't seem to be bleeding anymore. With great effort, you heave yourself up and stagger your way back to camp.");
			dynStats("str", -2);
			dynStats("tou", -3);
			dynStats("sens", 3);
			doNext(camp.returnToCampUseFourHours);
		}
	}
}


code:
package classes.Scenes.Areas.Desert
{
	import classes.*;
	import classes.BodyParts.*;
import classes.BodyParts.Butt;
import classes.BodyParts.Hips;
import classes.StatusEffects.Combat.NagaVenomDebuff;
import classes.internals.*;

	public class Naga extends Monster
	{

		override public function react(context:int):Boolean{
			switch (context){
				case CON_PLAYERWAITED:
					if (player.hasStatusEffect(StatusEffects.NagaBind)) {
						clearOutput();
						outputText("The naga's grip on you tightens as you relax into the stimulating pressure.");
						player.takeLustDamage(player.sens / 5 + 5, true);
						game.combat.takeDamage(5 + rand(5));
						tookAction = true;
						return false;
					}
			}
			return true;
		}

		override public function struggle():void{
			if (player.hasStatusEffect(StatusEffects.NagaBind)) {
				clearOutput();
				if (rand(3) == 0 || rand(80) < player.str / 1.5) {
					outputText("You wriggle and squirm violently, tearing yourself out from within the naga's coils.");
					player.removeStatusEffect(StatusEffects.NagaBind);
				}
				else {
					outputText("The naga's grip on you tightens as you struggle to break free from the stimulating pressure.");
					var lustDmg:int = player.sens / 10 + 2;
					player.takeLustDamage(lustDmg, true);
					game.combat.takeDamage(7 + rand(5));
				}
			tookAction = true;
			}
		}
		//2a)  Ability -  Poison Bite - poisons player
		protected function nagaPoisonBiteAttack():void {
			//(Deals damage over 4-5 turns, invariably reducing
			//your speed. It wears off once combat is over.)
			outputText("The naga strikes with the speed of a cobra, sinking her fangs into your flesh!  ");
			var venom:NagaVenomDebuff = player.statusEffectByType(StatusEffects.NagaVenom) as NagaVenomDebuff;
			if (!venom) {
				outputText("The venom's effects are almost instantaneous; your vision begins to blur and it becomes increasingly harder to stand.");
				player.addStatusEffect(new NagaVenomDebuff());
			}
			else {
				outputText("The venom's effects intensify as your vision begins to blur and it becomes increasingly harder to stand.");
				venom.increase();
			}

		}

		//2b)  Ability - Constrict - entangles player, raises lust
		//every turn until you break free
		protected function nagaConstrict():void {
			outputText("The naga draws close and suddenly wraps herself around you, binding you in place! You can't help but feel strangely aroused by the sensation of her scales rubbing against your body. All you can do is struggle as she begins to squeeze tighter!");
			player.createStatusEffect(StatusEffects.NagaBind,0,0,0,0);
			if (player.findPerk(PerkLib.Juggernaut) < 0 && armorPerk != "Heavy") {player.takeDamage(2+rand(4));
			}

		}

		//2c) Abiliy - Tail Whip - minus ??? HP
		//(base it on toughness?)
		protected function nagaTailWhip():void {
			outputText("The naga tenses and twists herself forcefully.  ");
			//[if evaded]
			if ((player.findPerk(PerkLib.Evade) && rand(6) == 0)) {
				outputText("You see her tail whipping toward you and evade it at the last second. You quickly roll back onto your feet.");
			}
			else if (player.findPerk(PerkLib.Misdirection) >= 0 && rand(100) < 10 && player.armorName == "red, high-society bodysuit") {
				outputText("Using Raphael's teachings and the movement afforded by your bodysuit, you anticipate and sidestep " + a + short + "'s tail-whip.");
			}
			else if (player.spe > rand(300)) {
				outputText("You see her tail whipping toward you and jump out of the way at the last second. You quickly roll back onto your feet.");
			}
			else {
				outputText("Before you can even think, you feel a sharp pain at your side as the naga's tail slams into you and shoves you into the sands. You pick yourself up, wincing at the pain in your side. ");
				var damage:Number = 10;
				if (player.armorDef < 10) damage += 10 - player.armorDef;
				damage += rand(3);
				damage = player.takeDamage(damage, true);
			}

		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.desert.nagaScene.nagaRapeChoice();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void
		{
			if (pcCameWorms){
				outputText("\n\nThe naga's eyes go wide and she turns to leave, no longer interested in you.");
				player.orgasm('Generic');
				doNext(game.combat.cleanupAfterCombat);
			} else {
				game.desert.nagaScene.nagaFUCKSJOOOOOO();
			}
		}

		override protected function performCombatAction():void {
			var actionChoices:MonsterAI = new MonsterAI();
				actionChoices.add(nagaPoisonBiteAttack, 1, true, 5, FATIGUE_PHYSICAL,RANGE_MELEE);
				actionChoices.add(nagaConstrict, 1, true, 10, FATIGUE_PHYSICAL,RANGE_MELEE);
				actionChoices.add(nagaTailWhip, 1, true, 5, FATIGUE_PHYSICAL,RANGE_RANGED);
				actionChoices.add(eAttack,2,true,0,	FATIGUE_NONE,RANGE_MELEE);
			actionChoices.exec();
		}

		public function Naga(noInit:Boolean = false)
		{
			if (noInit) return;
			//trace("Naga Constructor!");
			this.a = "the ";
			this.short = "naga";
			this.imageName = "naga";
			this.long = "You are fighting a naga. She resembles a beautiful and slender woman from the waist up, with dark hair hanging down to her neck. Her upper body is deeply tanned, while her lower body is covered with shiny scales, striped in a pattern reminiscent of the dunes around you. Instead of bifurcating into legs, her hips elongate into a snake's body which stretches far out behind her, leaving a long and curving trail in the sand.  She's completely naked, with her round C-cup breasts showing in plain sight. In her mouth you can see a pair of sharp, venomous fangs and a long forked tongue moving rapidly as she hisses at you.";
			this.race = "Naga";
			// this.plural = false;
			this.createVagina(false, Vagina.WETNESS_SLAVERING, Vagina.LOOSENESS_NORMAL);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 40, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("C"));
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,10,0,0,0);
			this.tallness = 5*12+10;
			this.hips.rating = Hips.RATING_AMPLE+2;
			this.butt.rating = Butt.RATING_LARGE;
			this.lowerBody.type = LowerBody.NAGA;
			this.skin.tone = "mediterranean-toned";
			this.hair.color = "brown";
			this.hair.length = 16;
			initStrTouSpeInte(28, 20, 35, 42);
			initLibSensCor(55, 55, 40);
			this.weaponName = "fist";
			this.weaponVerb="punch";
			this.weaponAttack = 3;
			this.armorName = "scales";
			this.armorDef = 5;
			this.lust = 30;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 2;
			this.gems = rand(5) + 8;
			this.drop = new WeightedDrop().
					add(null,1).
					add(consumables.REPTLUM,5).
					add(consumables.SNAKOIL,4);
			/*this.special1 = nagaPoisonBiteAttack;
			this.special2 = nagaConstrict;
			this.special3 = nagaTailWhip;*/
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Areas.Desert
{
	import classes.*;
	import classes.internals.*;

	public class NagaSentinel extends Monster
	{
		/*//I love the sexy slither of a lady snake
		//other moves to implement
		//poison bite: reduces toughness and intelligence
		//"grab": naga spreads her tail and whispers into your mind to beg you to let yourself be coiled. If player fails an intelligence + libido + lust check, you get coiled. Bondage fetish makes it harder to pass the check. Each coiled turn adds more poison stacks.
		//All physical damage dealt is reduced by poison stacks.

		public function poisonBite():void{
			outputText("The naga coils back and, with blinding speed, she launches herself at you, mouth open and fangs filled with poison!");
			var playerReaction:Object = combatAvoidDamage(true,false,true,true);
			if (playerReaction.dodge != null) outputText(" You manage to dash out of the way and avoid her deadly bite.");
			if (playerReaction.block){
				outputText(" You manage to raise your shield and block her deadly bite! The large naga crashes against your defensive wall in a rather painful fashion.");
				game.combat.doDamage(10 + rand(15), true, true, false);
			}
			if (playerReaction.failed){
				outputText("\nShe sinks her long fangs on your shoulders, penetrating your [armor]. Before you can react with an attack of your own, she has already jumped back beyond your reach.");
				outputText(" You feel woozy and weak as her unique poison begins coursing through your body.");
				player.takeDamage(10 + rand(10), true);
				if (player.hasStatusEffect(StatusEffects.NagaSentVenom)) player.addStatusValue(StatusEffects.NagaSentVenom, 1, 2);
				else player.createStatusEffect(StatusEffects.NagaSentVenom, 3, 0, 0, 0);
			}

		}

		override public function handleDamaged(damage:Number, apply:Boolean = true):Number{
			if (game.combat.damageType == game.combat.DAMAGE_PHYSICAL_MELEE){
				if (player.hasStatusEffect(StatusEffects.NagaSentVenom)){
				if (apply) outputText("You struggle to draw upon your strength, feeling that attacking her is just...wrong. Her poison seems to be twisting your mind, somehow. ");
				damage *= 1 - player.statusEffectv1(StatusEffects.NagaSentVenom) / 100;
				}
			}
		return damage;
		}

		public function fireArrow():void{
			outputText("The naga draws her bow and quickly fires a shot, with incredible speed and accuracy!");
			if (attackSucceeded()){
				var damage:Number = Math.round(weaponAttack + spe / 3 + inte / 4 + rand(20));
				player.reduceDamage(damage,this);
				outputText("\nThe arrow buries itself on your body, causing immense pain.");
				player.takeDamage(damage, true);
				outputText("\nThe arrow had some type of poison coating its head!");
				game.dynStats("lus", damage / 5 * (player.findPerk(PerkLib.Medicine) >= 0 ? 0.5 : 1));
				outputText(" (" + (damage / 5) +" lust)");
				if(player.lust < 30) outputText("You feel light headed and your breath quickens. [say: Oooh, do you have a fetish for pain? That's promising...]");
				else if (player.lust < 60) outputText("It's becoming hard to focus. Your gaze stops focusing on her stance and movements, and shifts to appreciate her voluptuous body and sensuous slithering. [say: I've been waiting for a partner for so many years... Just imagine what a naga with a decade of pent-up lust can do to you.]");
				else {
					outputText("Your hands tremble, all your willpower being strained to prevent yourself from just submitting to the naga immediately.\n\n [say: I love it when my partners resist for a while. It makes their release all the more pleasurable. How long will it take for you to give up?]");
					if(player.gender == 1) outputText("\nYour [cocks] throb and leak, begging you to cease your resistance and be ravaged by the grandiose beauty before you.");
					if(player.gender == 2) outputText("\nYour [vagina] leaks in anticipation as your mind inevitably imagines her long forked tongue pleasuring your folds.");
					if(player.gender == 3) outputText("\nYour [vagina] and [cocks] leak and engorge, begging you to surrender and enjoy whatever wicked pleasures the snake woman can provide.");
				}

			}
		}

		public function NagaSentinel(noInit:Boolean = false)
		{
			if (noInit) return;
			trace("Naga Constructor!");
			this.a = "the ";
			this.short = "Naga Sentinel";
			this.imageName = "naga";
			this.long = "The naga before you is significantly larger than the usual specimen. Her scales are a fiery shade of red which gleams in light. Her pale upper body is covered in golden armor plating that barely manages to contain her hefty breasts. Her long, orange hair covers part of her eyes, their vertical pupils tracking your every movement with uncanny precision. She's wielding an exquisitely crafted longbow, with plenty of arrows sitting in a quiver strapped to her hips.";
			// this.plural = false;
			this.createVagina(false, Vagina.WETNESS_SLAVERING, Vagina.VAGINA_LOOSENESS_NORMAL);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 40, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("E"));
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,10,0,0,0);
			this.tallness = 6*12+10;
			this.hips.rating = Hips.RATING_AMPLE+2;
			this.butt.rating = Butt.RATING_LARGE;
			this.lowerBody.type = LowerBody.NAGA;
			this.skin.tone = "pale";
			this.hair.color = "golden-red";
			this.hair.length= 16;
			initStrTouSpeInte(70, 70, 130, 80);
			initLibSensCor(55, 55, 80);
			this.weaponName = "ornate bow";
			this.weaponVerb="arrow fire";
			this.weaponAttack = 30;
			this.armorName = "armored scales";
			this.armorDef = 45;
			this.lust = 15;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 20;
			this.gems = rand(5) + 8;
			this.drop = new WeightedDrop().
					add(null,1).
					add(consumables.REPTLUM,5).
					add(consumables.SNAKOIL,4);
			checkMonster();
			this.special1 = poisonBite;
		}

	}*/

}


code:
package classes.Scenes.Areas.Desert
{
	import classes.*;
	import classes.BodyParts.*;
	import classes.BodyParts.Butt;
	import classes.BodyParts.Hips;
	import classes.internals.*;
	import classes.display.SpriteDb;

	public class SandTrap extends Monster
	{
		//Wait:
		public function sandTrapWait():void {
			clearOutput();
			game.spriteSelect(SpriteDb.s_sandtrap);
			if (!hasStatusEffect(StatusEffects.Climbed)) createStatusEffect(StatusEffects.Climbed,0,0,0,0);
			outputText("Instead of attacking, you turn away from the monster and doggedly attempt to climb back up the pit, digging all of your limbs into the soft powder as you climb against the sandslide.");
			if (trapLevel() == 4) {
				outputText("\n\nYou eye the ground above you.  The edge of the pit is too sheer, the ground too unstable... although it looks like you can fight against the currents carrying you further down, it seems impossible to gain freedom with the sand under the monster's spell.");
			}
			else {
				//Strength check success: [Player goes up one level, does not go down a level this turn]
				if (player.str/10 + rand(20) > 10) {
					outputText("\n\nSweat beads your forehead - trying to clamber out of this pit is like running against the softest treadmill imaginable.  Nonetheless, through considerable effort you see you've managed to pull further clear of the sandtrap's grasp.  \"Watching you squirm around like that gets me so hot,\" it calls up to you.  Turning around you see that the creature is rubbing its hands all over its lean body whilst watching you struggle.  \"Such an energetic little mating dance, just for me... mmm, prey who do that are always the best!\"");
					trapLevel(2);
				}
				else {
					//Strength check fail:  [Player goes down as normal]
					outputText("\n\nSweat beads your forehead - trying to clamber out of this pit is like running against the softest treadmill imaginable.  You feel like you're going to burst and you eventually give up, noting wearily that you've managed to get nowhere. \"Watching you squirm around like that gets me so hot,\" the sandtrap calls to you.  Turning around you see that the creature is rubbing its hands all over its lean body whilst watching you struggle.  \"Such an energetic little mating dance, just for me... mmm, prey who do that are always the best!\"");
					trapLevel(1);
				}
			}
			outputText("\n\n");
			//
		}

		public function trapLevel(adjustment:Number = 0):Number {
			if (!hasStatusEffect(StatusEffects.Level)) createStatusEffect(StatusEffects.Level,4,0,0,0);
			if (adjustment != 0) {
				addStatusValue(StatusEffects.Level,1,adjustment);
				//Keep in bounds ya lummox
				if (statusEffectv1(StatusEffects.Level) < 1) changeStatusValue(StatusEffects.Level,1,1);
				if (statusEffectv1(StatusEffects.Level) > 4) changeStatusValue(StatusEffects.Level,1,4);
			}
			return statusEffectv1(StatusEffects.Level);
		}

		//sandtrap pheromone attack:
		private function sandTrapPheremones():void {
			game.spriteSelect(SpriteDb.s_sandtrap);
			outputText("The sandtrap puckers its lips.  For one crazed moment you think it's going to blow you a kiss... but instead it spits clear fluid at you!   You desperately try to avoid it, even as your lower half is mired in sand.");
			if (player.spe/10 + rand(20) > 10 || !combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed) {
				outputText("  Moving artfully with the flow rather than against it, you are able to avoid the trap's fluids, which splash harmlessly into the dune.");
			}
			else {
				var lustDmg:Number = (10 + player.lib/10);
				outputText("  Despite ducking away from the jet of fluid as best you can, you cannot avoid some of the stuff splashing upon your arms and face.  The substance feels oddly warm and oily, and though you quickly try to wipe it off it sticks resolutely to your skin and the smell hits your nose.  Your heart begins to beat faster as warmth radiates out from it; you feel languid, light-headed and sensual, eager to be touched and led by the hand to a sandy bed...  Shaking your head, you try to stifle what the foreign pheromones are making you feel.");
				player.takeLustDamage(lustDmg, true);
			}
		}

		//sandtrap quicksand attack:
		private function nestleQuikSandAttack():void {
			game.spriteSelect(SpriteDb.s_sandtrap);
			outputText("The sandtrap smiles at you winningly as it thrusts its hands into the sifting granules.  The sand beneath you suddenly seems to lose even more of its density; you're sinking up to your thighs!");
			//Quicksand attack fail:
			if (player.spe/10 + rand(20) > 10  || !combatAvoidDamage({doDodge:true, doParry:false, doBlock:false}).failed) {
				outputText("  Acting with alacrity, you manage to haul yourself free of the area affected by the sandtrap's spell, and set yourself anew.");
			}
			//Quicksand attack success: (Speed and Strength loss, ability to fly free lost)
			else {
				outputText("  You can't get free in time and in a panic you realize you are now practically wading in sand.  Attempting to climb free now is going to be very difficult.");
				if (player.canFly()) outputText("  You try to wrench yourself free by flapping your wings, but it is hopeless.  You are well and truly snared.");
				trapLevel(-1);
				if (!hasStatusEffect(StatusEffects.Climbed)) createStatusEffect(StatusEffects.Climbed,0,0,0,0);
			}
		}

		override public function react(context:int):Boolean{
			switch(context){
				case CON_WHENATTACKED:
					//Bonus sand trap damage!
					if (hasStatusEffect(StatusEffects.Level)) game.combat.damage = Math.round(game.combat.damage * 1.75);
					break;

				case CON_BEFOREATTACKED:
					if (hasStatusEffect(StatusEffects.Level) && !player.hasStatusEffect(StatusEffects.FirstAttack) && !game.combat.isWieldingRangedWeapon()) {
						outputText("It's all or nothing!  With a bellowing cry you charge down the treacherous slope and smite the sandtrap as hard as you can!  ");
						trapLevel(-4);
					}
					break;
				case CON_PLAYERWAITED:
					if (hasStatusEffect(StatusEffects.Level)) {
					sandTrapWait();
					tookAction = true;
					return false;
					}
					break;

			}
		return true;
		}

		override protected function performCombatAction():void
		{
			if (hasStatusEffect(StatusEffects.Level)) {
				if (trapLevel() == 4 && !hasStatusEffect(StatusEffects.Climbed)) nestleQuikSandAttack();
				else sandTrapPheremones();
//PC sinks a level (end of any turn in which player didn't successfully \"Wait\"):
				if (!hasStatusEffect(StatusEffects.Climbed)) {
					outputText("\n\nRivulets of sand run past you as you continue to sink deeper into both the pit and the sand itself.");
					trapLevel(-1);
				}
				else removeStatusEffect(StatusEffects.Climbed);

			} else super.performCombatAction();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.desert.sandTrapScene.pcBeatsATrap();
		}

		override public function won(hpVictory:Boolean,pcCameWorms:Boolean = false):void
		{
			if (pcCameWorms) {
				outputText("\n\nThe sand trap seems bemused by the insects your body houses...");
				doNext(game.combat.endLustLoss);
			} else {
				game.desert.sandTrapScene.sandtrapmentLoss(true);
			}
		}

		override public function playerLossCondition():Function {
			if (trapLevel() <= 1) return game.desert.sandTrapScene.sandtrapmentLoss;
			return null;
		}

		public function SandTrap()
		{
			//1/3 have fertilized eggs!
			if (rand(3) == 0) this.createStatusEffect(StatusEffects.Fertilized,0,0,0,0);
			this.a = "the ";
			if (game.silly())
				this.short = "sand tarp";
			else
				this.short = "sandtrap";
			this.imageName = "sandtrap";
			this.long = "You are fighting the sandtrap.  It sits half buried at the bottom of its huge conical pit, only its lean human anatomy on show, leering at you from beneath its shoulder length black hair with its six equally sable eyes.  You cannot say whether its long, soft face with its pointed chin is very pretty or very handsome - every time the creature's face moves, its gender seems to shift.  Its lithe, brown flat-chested body supports four arms, long fingers playing with the rivulets of powder sand surrounding it.  Beneath its belly you occasionally catch glimpses of its insect half: a massive sand-coloured abdomen which anchors it to the desert, with who knows what kind of anatomy.";
			this.race = "Sand Trap";
			// this.plural = false;
			this.createCock(10,2,CockTypesEnum.HUMAN);
			this.balls = 2;
			this.ballSize = 4;
			this.cumMultiplier = 3;
			// this.hoursSinceCum = 0;
			this.createBreastRow(0,0);
			this.ass.analLooseness = Ass.LOOSENESS_NORMAL;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.tallness = rand(8) + 150;
			this.hips.rating = Hips.RATING_AMPLE+2;
			this.butt.rating = Butt.RATING_LARGE;
			this.skin.tone = "fair";
			this.hair.color = "black";
			this.hair.length = 15;
			initStrTouSpeInte(55, 10, 45, 55);
			initLibSensCor(60, 45, 50);
			this.weaponName = "claws";
			this.weaponVerb="claw";
			this.weaponAttack = 10;
			this.armorName = "chitin";
			this.armorDef = 20;
			this.bonusHP = 100;
			this.lust = 20;
			this.lustVuln = .55;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 4;
			this.gems = 2 + rand(5);
			this.drop = new ChainedDrop(consumables.TRAPOIL).add(consumables.OVIELIX,1/3);
			this.tail.type = Tail.DEMONIC;
			createStatusEffect(StatusEffects.Level,4,0,0,0);
			checkMonster();
		}

	}

}