code:
package classes.Scenes.Monsters
{
	import classes.Items.Consumables.SuccubisDream;
	import classes.Items.WeaponLib;
	import classes.Monster;
	import classes.Scenes.Areas.Bog.LizanRogue;
	import classes.Scenes.Areas.GlacialRift.Amarok;
	import classes.Scenes.Areas.GlacialRift.FrostGiant;
	import classes.Scenes.Areas.GlacialRift.Valkyrie;
	import classes.Scenes.Areas.GlacialRift.Yeti;
	import classes.Scenes.Areas.HighMountains.Basilisk;
	import classes.Scenes.Areas.HighMountains.Cockatrice;
	import classes.Scenes.Areas.HighMountains.Phoenix;
	import classes.Scenes.Areas.Swamp.CorruptedDrider;
import classes.Scenes.Combat.CombatAttackBuilder;
import classes.Scenes.Monsters.GoblinElder;
	import classes.Scenes.Monsters.ImpOverlord;
	import classes.Scenes.Quests.UrtaQuest.MinotaurLord;
	import classes.StatusEffects;
	import classes.PerkLib;
	import classes.GlobalFlags.kFLAGS;
import classes.Vagina;
import classes.lists.BreastCup;

public class Mammon extends Monster
	{

		public function Mammon()
		{
			this.a = "";
			this.short = "Mammon";
			this.imageName = "aspctlaurentius";
			this.long = "placeholder";

			initStrTouSpeInte(60, 75, 75, 200);
			initLibSensCor(40, 40, 95);

			this.lustVuln = 0.75;

			this.tallness = 5 * 12 + 7;
			this.createBreastRow(BreastCup.D);
			this.createVagina(false,Vagina.WETNESS_NORMAL,Vagina.LOOSENESS_LOOSE);
			this.drop = NO_DROP;
			this.ignoreLust = true;
			this.level = 40;
			this.bonusHP = 2500;
			this.weaponName = "spectral sword";
			this.weaponVerb = "slash";
			this.weaponAttack = 0;
			this.armorName = "";
			this.armorDef = 0;
			this.lust = 30;
			this.bonusLust = 20;
			this.createPerk(PerkLib.Immovable);
			this.additionalXP = 3200;
			this.gems = 2500;
			createPerk(PerkLib.Archmage);
			createPerk(PerkLib.Mage);
			createPerk(PerkLib.Spellpower);
			createPerk(PerkLib.MysticLearnings);
			checkMonster();
		}

		override protected function outputDefaultTeaseReaction(lustDelta:Number):void{
			if (lustDelta == 0) outputText("\n\n" + capitalA + short + " doesn't seem to be affected in any way.");
			outputText("\n\n" + capitalA + short + " shows desire, but you doubt she'll give up on fighting by sheer lust.");
		}

		override protected function handleFear():Boolean{
			outputText("[say: What lies in wait for me is more terrifying than any illusion you can conjure. Cease with this foolishness.]");
			return true;
		}

		//Mammon switches places on the start of every turn. Currently this is random, but the idea is to make it random only in the first 12 turns.
		override public function react(condition:int):Boolean{
			switch(condition){
				case CON_TURNSTART:
						if(!hasSwitched){
							hasSwitched = true;
                            var currplace = getCurrMonsterIndex();
                            game.monsterArray[currplace] = new EmptySpace();
                            game.monsterArray[rand(game.monsterArray.length)] = this;
                            game.monster = game.monsterArray[currplace];
                            statScreenRefresh();
						}

					break;
			}
			return true;
		}

		public function checkmate():void{
			if(!player.hasWaited()){
				outputText(" Before you can even think of acting, you see all twelve of her conjured swords completely surround you!");
                outputText("\n\n[say: I have no patience for this.] Mammon says, waving her hand and telekinetically impaling her blades into you!");
				for(var i:int = 0;i<12;i++){
					player.takeDamage(player.reduceDamage(rand(20) + 100,this,40,false,true));
				}
				outputText("\n\nThe blades withdraw and move back to Mammon, the wounds left behind them dripping copious amounts of blood as you wonder, through the searing pain coursing through" +
						" your body, how she could have acted that fast. You tremble and groan in agony; you need to be prepared for this move.");
			}else{
				outputText(" You see her swords blink into existence right before your eyes!");
                outputText("\n\n[say: I have no patience for this.] Mammon says, waving her hand and attempting to impale you. You were ready for this, however, and can at least attempt to avoid" +
						" her devastating attack!");
				for(var i:int = 0;i<12;i++){
                    if (!playerAvoidDamage({doDodge:true,doParry:true,doBlock:true,doFatigue:false,toHitChance:(85 - player.getEvasionChance())})) {
                        outputText(" You're not quick enough! One blade pierces your body.\n");
                        player.takeDamage(player.reduceDamage(rand(20) + 100,this,40,false,true));
                    }
				}
				outputText("\nThe blades move back to surround Mammon, but she looks wary, for a moment. [say: Does this mean...?] she quickly resumes her focus, however.")
			}
			this.tookAction = true;
		}

		public function megaLeech():void{
			outputText("You have Mammon in your sights in one moment, and in the next, she's gone. You feel a faint gust of wind behind you, and, to your surprise, you turn to see Mammon herself" +
					" next to you, holding a bright green magical blade in her hands!");
			var attack:Object = new CombatAttackBuilder(this).canCounter().getObject();
			var reaction:Object = combatAvoidDamage(attack);
            if (reaction.failed) {
                outputText(" She swiftly plunges the magical sword into your abdomen before you could muster any reaction. The pain completely paralyzes you, but you soon notice that there's more" +
						" to this attack!" +
						" \n");
				outputText("[say: Time to make up for your transgressions.] The blade crackles with green lightning, and it begins to suck your lifeforce to replenish Mammon's!");
				var damage = player.takeDamage(250 + rand(50)) * (spellMod());
                HPChange(damage,true);
				outputText("You scream and thrash in agony before her incantation fades into dust. You attempt to attack her, but she disappears in the blink of an eye. How can she move and cast" +
						" spells so quickly?");
            }else if(reaction.counter){
                outputText(" She attempts to plunge the magical sword into your abdomen! This attack would certainly bypass any regular defense, but your stance was designed to counter" +
						" such moves at the very last second, and she's in your range!" +
						"\nWith astounding speed, you manage to catch her magical blade with your [weapon], slapping it away and causing Mammon's expression to change to complete shock." +
						"\nYou follow the deflection with an attack of your own, decisively striking the sorceress while her guard is completely down!");
				var damage = 1.30 * game.combat.calcDamage(true,false);
                game.combat.doDamage(damage,true,true,false,true);
				outputText("She stumbles back, bleeding and dazed from your surprise attack. [say: How...-] You attempt to attack again before she can regain her composure, but she blinks out of" +
						" sight again, reappearing in the distance. [say: You will pay tenfold for this!] She yells, evidently distressed.");
            }else if(game.combat.currAbilityUsed.spellName == "Withering Touch"){
                outputText(" She swiftly plunges the magical sword into your abdomen before you could muster any reaction. The pain completely paralyzes you, but you soon notice that there's more" +
                        " to this attack!\n");
                outputText("[say: Time to make up for your transgressions.] The blade crackles with green lightning, and it begins to suck your lifeforce to replenish Mammon's!");
                var damage = player.takeDamage(125 + rand(50)) * (spellMod());
                outputText(" You scream in agony, but, despite the pain, you realize that she's within range of your spell, and it's a perfect one for the occasion!" +
						"\nBefore she can remove the blade, you grab her hand and finish your casting; she realizes too late what curse you just cast on her.");
				outputText("\nShe feels it immediately; the energy that was supposed to heal her instead corrodes her lifeforce, wracking her in pain. She groans and trembles, her blade dissipating" +
						" into a bright green mist. ");
				createStatusEffect(StatusEffects.Withering,3,0,0,0);
                HPChange(damage,true);
				outputText("\nShe stumbles back, muscles tensed in pain, the corroding hex coursing through her veins like liquid fire. She looks at you with fierce anger, but before you can do" +
						" anything, she teleports away to recover her composure. [say: You... you despicable spawn! How dare you!], she says, still shaken.");

            }
		}

		public function rewind():void{
			outputText("Mammon breathes deeply, her scorn giving way to genuine disappointment and regret. [say: Still, you endure. You're strong of will, [name]. It pains me to fight someone like" +
					" you. Someone who has such potential for greatness, someone who burns a path through the threads of reality. However, it is clear you attempt to burn through mine. And if" +
					" these threads demand that you beat me here today...]" +
					"\n\nMammon levitates higher, emitting a pulse of energy that begins distorting your vision and your sense of space. You attempt to move, but you can't, your body afflicted" +
					" with a strange malaise. You look at your left hand, and notice it is moving extremely fast, as if time itself is accelerated in that portion of your body. Your legs, however," +
					" seem to lag behind, leaden by the passage of time. The whole room distorts in a similar fashion, pieces of the chamber visibly aging centuries in seconds, while others are" +
					" frozen, specks of dust, vapor and petals remaining static in the air." +
					"\n\n[say: Then I will weave them anew, as I see fit!]" +
					"The space between you and Mammon expands, and soon there are miles between the two of you. It contorts and corkscrews into impossible shapes, folding in on itself multiple" +
					" times, shifting in color and in moments of time. You see several versions of yourself, all of them superimposed, millions of frames of reality representing every action you" +
					" took in this fight. They all disappear, one by one, until you see yourself as the only frame remaining." +
					"\n\nThen you also vanish, a flash of infinite colors blinding you.");
			game.combat.overrideEndOfRoundFunction = rewind2;

		}

		public function rewind2():void{
			clearOutput();
            game.combat.startCombatMultiple(new Mammon(), new EmptySpace(), new EmptySpace(), new EmptySpace(),null,null,null,null);
            game.combat.overrideEndOfRoundFunction = null;
		}

		public function whitefire():void{
			outputText("[say: I had hopes you would be wiser than this, [name]. But I won't let misguided righteousness ruin me.] Mammon says, closing her eyes and preparing a spell.");
			if(game.combat.currAbilityUsed.spellName == "Distance"){
				outputText("You begin shifting the weight in your body to dash backwards and get some distance, and just in time; in the blink of an eye, a massive pillar of fire and electric" +
						" sparks bursts from the ground, deafening and blinding you! You barely avoid the magical flames, and you're certain you'd have been completely scorched had you not" +
						" preemptively moved back.");
				outputText("Mammon narrows her eyes. [say: Luck, perhaps. Or maybe...] She tenses her muscles and focuses on you again.");
			}else{
				outputText("Suddenly, your entire body is surrounded by a massive pillar of fire and electric sparks, bursting forth from the ground instantly! The all-encompassing flames ravage" +
						" every inch of your body for a  few moments, while you can do nothing but scream and thrash in agony. When it dissipates, you're left kneeling in the ground, trembling at" +
						" the center of a charred circle of stone.");
				game.combat.monsterDamageType = game.combat.DAMAGE_FIRE;
				var damage = (inte*1.25 + 50 + rand(100)) * player.fireRes * spellMod();
				player.takeDamage(damage,true);
				outputText("\n\n[say: Make this easy for yourself, [name]. Give up, now.]");
				outputText("\nYou pant and groan. How could she have casted a spell like that so quickly?")
			}
		}

		public function witheringTouch():void{
			outputText("Mammon rapidly floats upwards, her scimitars vanishing into magical dust as she weaves a spell. Despite the distance, you recognize the hex she's casting. It's a spell of" +
					" Withering Touch!\n\nYou remain ready for her attack, but she surprises you by suddenly teleporting much closer before launching her spell, while still remaining far enough" +
					" from any counter attacks. The profane projectile rapidly moves towards you, giving you very little time to react!");
			if(Math.round((inte > player.inte ? Math.abs(player.inte /((inte+30) * 2) - 1) : (inte+30) / (player.inte*2)) * 100) < rand(100)){
				outputText("The dark, swirling projectile hits you in full, too fast and too close to be avoided. It does not hurt, but the cursed energy envelops your body, and you feel your" +
						" life force be tainted, hexed. You're fairly sure that <b>any healing effect will deal damage to you</b> while this curse is in effect!");
				player.createStatusEffect(StatusEffects.Withering,4,0,0,0);
				outputText("Teleporting away, Mammon stares at you with scorn. [say: I took the knowledge you've given me to heart, [name]. A shame you haven't done the same.] ")
       		 }else{
				outputText("The dark, swirling projectile hits you in full, too fast and too close to be avoided. It does not hurt, but the cursed energy quickly envelops your body. You close your" +
						" eyes and focus your mind, preparing a mental defense against the curse attacking you. You suddenly open your eyes with a burst of magical energy, completely negating her" +
						" curse!");
				outputText("\nTeleporting away, Mammon stares at you, somewhat surprised. [say: It seems you have learned my lessons well. What a shame it must come to this.]")
			}
		}

		public var hasSwitched:Boolean = false;
		override protected function performCombatAction():void
		{
			hasSwitched = false;
			if(game.combat.combatRound == 3){
				rewind();
				return;
			}
			eAttack();

		}

	}

}


code:
package classes.Scenes.Monsters
{
	import classes.Ass;
	import classes.BodyParts.Butt;
	import classes.BodyParts.Hips;
	import classes.CockTypesEnum;
	import classes.Monster;
import classes.PerkLib;
import classes.StatusEffects;
	import classes.internals.*;
	import classes.lists.BreastCup;
	/**
	 * ...
	 * @author ...
	 */
	public class Mimic extends Monster
	{

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void {
			game.mimicScene.mimicTentacle2();
		}

		override public function defeated(hpVictory:Boolean):void {
			game.mimicScene.killTheMimic();
		}

		private function mimicBite():void {
			outputText("The creature lashes out at you, attempting to bite you! ");
			if (!combatAvoidDamage({doDodge:true,doParry:false,doBlock:false}).failed) {
				outputText("Thankfully you're quick enough to avoid its gaping maw!");
			}
			else {
				outputText("Ow! The mouth rends your arm and it hurts like hell! ");
				var damage:int = (10 + (str / 2) + rand(str / 3)) * (1 + (player.newGamePlusMod() * 0.3));
				damage = player.reduceDamage(damage,this);
				if (damage < 10) damage = 10;
				player.takeDamage(damage, true);
			}

		}

		override protected function performCombatAction():void
		{
			var actionChoices:MonsterAI = new MonsterAI();
			if (distance == DISTANCE_DISTANT) {
				outputText("The creature sits tight, being unable to reach you.");
				return;
			}
			actionChoices.add(eAttack, 1, true, 0, FATIGUE_NONE, RANGE_MELEE);
			actionChoices.add(mimicBite, 1, true, 0, FATIGUE_NONE, RANGE_MELEE);
			actionChoices.exec();
		}

		public function Mimic(type:int)
		{
			this.a = "the ";
			this.short = "mimic";
			switch(type) {
				case APPEARANCE_ROCK:
					this.imageName = "mimic-stone";
					this.long = "This strange monster originally disguised as a huge block of gray stone covered in bizarre runes and symbols. Its surface appears to be gray and made of stone. There is a gaping maw with hundreds of teeth inside and a huge tongue lashing about.";
					break;
				case APPEARANCE_BOOB:
					this.imageName = "mimic-boob";
					this.long = "This strange monster originally disguised as a huge breast. Its surface appears to be pale, reminiscent of skin. There is a gaping maw where its nipple should be with hundreds of teeth inside and a tiny whippy tongue lashing about. Milky saliva seems to be leaking from its nightmarish mouth.";
					break;
				case APPEARANCE_DICK:
					this.imageName = "mimic-cock";
					this.long = "This strange monster originally disguised as a huge penis. Its surface appears to be pale, reminiscent of skin. There is a gaping maw where its urethra should be with hundreds of teeth inside and a tiny whippy tongue lashing about. There are dozens of tentacles sprouting from its shaft.";
					break;
				case APPEARANCE_CHEST:
				default:
					this.imageName = "mimic-chest";
					this.long = "This strange monster originally disguised as a wooden chest. Its surface appears to be brown and made of wood. There is a gaping maw where the box and lid meet, with hundreds of teeth inside and a huge tongue lashing about.";
			}
			this.race = "Mimic";
			if (type == APPEARANCE_DICK)
				this.createCock(80, 16, CockTypesEnum.HUMAN);
			else
				this.initedGenitals = true;
			this.balls = 0;
			this.ballSize = 0;
			if (type == APPEARANCE_BOOB)
				createBreastRow(BreastCup.JACQUES00);
			else
				createBreastRow(0);
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.tallness = rand(24) + 25;
			this.hips.rating = Hips.RATING_BOYISH;
			this.butt.rating = Butt.RATING_TIGHT;
			if (type == APPEARANCE_ROCK)
				this.skin.tone = "gray";
			if (type == APPEARANCE_BOOB || type == APPEARANCE_DICK)
				this.skin.tone = "light";
			else
				this.skin.tone = "brown";
			this.hair.color = "none";
			this.hair.length = 0;
			this.pronoun1 = "it";
			this.pronoun2 = "it";
			this.pronoun3 = "its";
			initStrTouSpeInte(30, 45, 15, 5);
			initLibSensCor(45, 45, 100);
			this.weaponName = "mouth";
			this.weaponVerb = "bite";
			this.weaponAttack = 20 + player.level;
			if (type == APPEARANCE_ROCK) {
				this.armorName = "stone surface";
				this.armorDef = 70;
			}
			if (type == APPEARANCE_DICK || type == APPEARANCE_BOOB) {
				this.armorName = "flesh";
				this.armorDef = 0;
			}
			else {
				this.armorName = "wooden surface";
				this.armorDef = 20;
			}
			this.lust = 10;
			this.lustVuln = 0;
			this.temperment = TEMPERMENT_LUSTY_GRAPPLES;
			this.level = 6;
			this.gems = rand(30) + 11;
			this.drop = new WeightedDrop().
					add(consumables.PPHILTR,4).
					add(consumables.NUMBOIL,4).
					add(consumables.HUMMUS_,3).
					add(consumables.INCUBID,1).
					add(consumables.SUCMILK,1).
					add(consumables.REDUCTO,1);
			this.special1 = mimicBite;
			this.createPerk(PerkLib.Immovable);
			checkMonster();
		}

		public const APPEARANCE_ROCK:int = 0;
		public const APPEARANCE_BOOB:int = 1;
		public const APPEARANCE_DICK:int = 2;
		public const APPEARANCE_CHEST:int = 3;
	}

}

license: unknown


code:
//Mimic, one of the classic encounters from Unnamed Text Game, now modified to be up to modern standards, with new fight.
package classes.Scenes.Monsters
{
	import classes.BaseContent;
	import classes.PerkLib;
	import classes.GlobalFlags.*;
	import classes.Scenes.Monsters.Mimic;
	import classes.StatusEffects;

	public class MimicScene extends BaseContent
	{
		public var mimicAppearance:int;
		public const APPEARANCE_ROCK:int = 0;
		public const APPEARANCE_BOOB:int = 1;
		public const APPEARANCE_DICK:int = 2;
		public const APPEARANCE_CHEST:int = 3;
		//Check if it's a boob/dick
		public function isSexy():Boolean {
			switch (mimicAppearance) {
				case APPEARANCE_ROCK: return false;
				case APPEARANCE_BOOB: return true;
				case APPEARANCE_DICK: return true;
				case APPEARANCE_CHEST: return false;
				default: return false;
			}
		}

		public function MimicScene() {}

		public function mimicTentacleStart():void {
			clearOutput();
			//Random appearance :D
			var choices:Array = [
				APPEARANCE_ROCK,
				APPEARANCE_BOOB,
				APPEARANCE_DICK,
				APPEARANCE_CHEST, APPEARANCE_CHEST, APPEARANCE_CHEST
			];
			mimicAppearance = randomChoice(choices);
			//lead in based on where the event occurs
			if (player.isInDesert()) outputText("The wind howls through the tall pillars of rock that thrust out of the sand on both sides ");
			else if (player.isInMountains()) outputText("Thunder rumbles overhead ");
			else outputText("The peaceful sounds of nature are everywhere ");
			outputText("as you explore deeper into this strange land. The relative monotony of your journey is interrupted as you see ");
			if (mimicAppearance == APPEARANCE_ROCK) outputText("a huge block of gray stone covered in bizarre runes and symbols ");
			else if (mimicAppearance == APPEARANCE_BOOB) outputText("what can only be described as an enormous, disembodied... boob ");
			else if (mimicAppearance == APPEARANCE_DICK) outputText("what is unmistakably an enormous, flaccid penis, complete with gigantic balls, ");
			else outputText("a large wooden box with a hinged lid and tarnished brass fittings ");
			outputText("nestled in a shady alcove.\n\n");
			//Check if you're smart enough to even think about it
			if (rand(18) + (player.inte / 2) < 15) {
				outputText("You are entranced by the sight of ");
				if (mimicAppearance == APPEARANCE_ROCK) outputText("a magic rock");
				else if (mimicAppearance == APPEARANCE_BOOB) outputText("a giant boob");
				else if (mimicAppearance == APPEARANCE_DICK) outputText("a huge penis");
				else outputText("what is clearly a treasure chest");
				outputText(". Ignoring the sad remnants of your better judgment, you walk over. ");
				doNext(mimicTentacle1); //call mimicTentacle1()
			}
			else {
				if (mimicAppearance == APPEARANCE_ROCK) outputText("While a magic rock ");
				else if (mimicAppearance == APPEARANCE_BOOB) outputText("While a giant boob ");
				else if (mimicAppearance == APPEARANCE_DICK) outputText("While a huge penis ");
				else outputText("While what is clearly a treasure chest ");
				outputText("certainly warrants further investigation, you aren’t absolutely sure that this is the best idea. Do you choose to investigate? ");
				doYesNo(mimicTentacle1, camp.returnToCampUseOneHour); //call mimicTentacle1() or return to main screen
			}
		}

		public function mimicTentacle1():void
		{
			clearOutput();
			outputText("You approach within a few feet of the ");
			if (mimicAppearance == APPEARANCE_ROCK) outputText("stone ");
			else if (mimicAppearance == APPEARANCE_BOOB) outputText("huge tit ");
			else if (mimicAppearance == APPEARANCE_DICK) outputText("giant dick ");
			else outputText("chest ");
			//d100 roll (0-99) + inte/3 vs 75
			if (rand(100) + Math.floor(player.inte / 1.5) >= 80) {
				//another d100 roll + inte/3 vs only 50 this time
				if (rand(player.inte) + Math.floor(player.inte / 3) >= 50 + player.newGamePlusMod() * 10) {
					//find a cool item!
					outputText("and begin to reach towards it. However, just as you begin to move your hand, the... thing gives a strange shudder and emits a bizarre, snorting sound. You quickly realize that not only is this some kind of creature, but you have somehow come upon it while it sleeps! As you begin to slowly back away, you notice a ");
					var itemRoll:int = rand(4);
					if (itemRoll == 0) outputText("glinting silver vial ");
					if (itemRoll == 1) outputText("small sack ");
					if (itemRoll == 2) outputText("large glass bottle ");
					if (itemRoll == 3) outputText("small clay jar ");
					outputText("in a pile of rubbish off to one side of the alcove. Careful not to disturb the... whatever it is, you grab the ");
					if (itemRoll == 0) outputText("vial ");
					if (itemRoll == 1) outputText("sack ");
					if (itemRoll == 2) outputText("bottle ");
					if (itemRoll == 3) outputText("jar ");
					outputText("and leave the monster to its slumber. ");
					if (itemRoll == 0) inventory.takeItem(consumables.PPHILTR, camp.returnToCampUseOneHour); //find purity philter
					if (itemRoll == 1) findSomeGems(); //find bag o gems
					if (itemRoll == 2) inventory.takeItem(consumables.NUMBOIL, camp.returnToCampUseOneHour); //find numbing oil
					if (itemRoll == 3) inventory.takeItem(consumables.HUMMUS_, camp.returnToCampUseOneHour); //find Hummanus
					return;
				}
				else { //you just escape, no fancy item!
					outputText("and slowly reach towards it with one hand. As your fingers hover within inches of touching it, you feel a sudden sense of danger, and leap back just as dozens of tentacles sprout from the thing's surface. The strange creature lunges for you again, but you have already escaped its reach and, to your great relief, it appears to be immobile.  Do you want to fight this creature? You can try to attack from a safe distance, but it would have the first strike should you try to approach for a melee strike.");
					menu();
					addButton(0, "Fight", function():*{
						monster.distance = monster.DISTANCE_DISTANT
						startCombatImmediate(new Mimic(mimicAppearance));
					});
					addButton(14, "Leave", camp.returnToCampUseOneHour);
					return;
				}
			}
			else { //if you're dumb or fail, FIGHT!
				outputText("and slowly reach out to touch it with one hand. You get a sense that something is terribly wrong when you realize that your hand is stuck fast to the ");
				if (mimicAppearance == APPEARANCE_ROCK) outputText("stone's surface! ");
				else if (mimicAppearance == APPEARANCE_BOOB) outputText("enormous boob's skin! ");
				else if (mimicAppearance == APPEARANCE_DICK) outputText("enormous cock's skin! ");
				else outputText("box's surface! ");
				outputText("As you struggle to pull your hand free, the monster, for that is clearly what it is, opens its beady little eyes and stares at you hungrily. ");
				outputText("\n\n");
				//It grabs you!
				if (mimicAppearance == APPEARANCE_ROCK) outputText("An enormous maw opens in front of you, lined with huge rocky teeth. Dozens of tentacles shoot out of the things gaping mouth, and you scream with terror as they begin to drag you into its rocky gullet. ");
				else if (mimicAppearance == APPEARANCE_BOOB) outputText("The enormous nipple opens wide to reveal a lamprey like mouth lined with hundreds of tiny pointy teeth and thin, whippy tongues shoot out and splatter milky saliva everywhere as they flail back and forth. Dozens of tentacles sprout from its quivering bulk and wrap around your limbs and waist, lifting you into the air. ");
				else if (mimicAppearance == APPEARANCE_DICK) outputText("The monstrous cock rears up like a snake and emits a horrible hissing garble as what would be its urethral opening splits open to reveal row after row of tiny, pointy teeth. Thin, whippy tongues shoot out and splatter gooey cum-spit everywhere as they flail back and forth. Dozens of tentacles sprout from its shaft and wrap around your limbs and waist, lifting you into the air. ");
				else outputText("The lid of the chest opens to reveal a giant mouth, filled with hundreds of tiny pointy teeth and a huge slavering tongue that lashes about wildly. Dozens of tentacles shoot out of the thing's gaping jaws, and you scream with terror as they begin to drag you into its gullet. ");
				outputText("\n\nYou shake and break free from the tentacles. It's a fight!");
				//Start the FIGHT!
				startCombat(new Mimic(mimicAppearance));
				return;
			}
			//doNext(camp.returnToCampUseOneHour); //Failsafe
		}

		//If you lose to Mimic.
		public function mimicTentacle2():void
		{
			clearOutput();
			if (player.hasCock()) var tempSize:Number = Math.round((player.nippleLength + player.cocks[0].cockLength / 2) * 100) / 100;
			var nippleCockDescript:String = player.nippleDescript(0);
			//If its a box or a rock, it swallows you whole!
			if (!isSexy()) outputText("\n\nWith you collapsing from being unable to put up any further fight, you are unable to prevent yourself from being dragged into the thing’s enormous maw. You are pulled deeper and deeper into the monster’s surprisingly vast innards, and the light streaming in through its jaws grows more and more faint, until with a final <i>*snap*</i>, the light is cut off completely. Surrounded by total darkness and gripped by what must be hundreds of tentacles, you let loose an involuntary moan of terror as the finality of your fate sinks home. ");
			outputText("You feel hundreds of tiny tendrils begin gently stroking and teasing your whole body. They seem to seek out every erogenous zone you have with unnatural precision. In a matter of minutes, you are quaking with arousal, ");
			//no parts!
			if (player.gender == 0)
			{
				outputText("but your crotch remains smooth and featureless. You sense that the creature is becoming angry with your genderless state, ");
				//nipplecocks?
				if (player.breastRows[0].nippleCocks)
				{
					outputText("but before it does something rash, your " + nippleCockDescript + " " + tempSize + " inch nipplecocks grow painfully erect, throbbing in time with your racing heart. The creature burbles appreciatively, clearly glad that you have something to offer. ");
					if (isSexy())
					{
						outputText("The tentacles move your torso towards the thing’s toothy maw, and with mounting terror, you realize that it intends to suck all of your throbbing dicknipples into its nightmare hole of a mouth! As the echoes of your screams finally die away, you realize that your breasts are still intact, and that the horrible looking teeth are actually fairly soft. However, you quickly understand their purpose when they dig painfully into your tits as you attempt to pull them free. ");
					}
					else
					{
						outputText("You feel some kind of tentacle collect ");
						if (player.totalBreasts() * player.breastRows[0].nipplesPerBreast == 2) outputText("both of your " + nippleCockDescript + " dicknipples and engulf them in some kind of orifice. ");
						else outputText("every single one of your " + int(player.totalBreasts() * player.breastRows[0].nipplesPerBreast) + " " + nippleCockDescript + " dicknipples into a big bundle and engulf them all in a single large orifice. ");
					}
					outputText("\n\nThe ");
					//Mouth or suckers?
					if (isSexy()) outputText("creature's mouth begins ");
					else outputText("mouth-tentacle begins ");
					outputText("to suck and massage your cockteats with a sort of spinning motion. The combined sensations from that and the countless other tendrils quickly bring you to orgasm, causing you to spew unusually large amounts of ");
					if (player.breastRows[0].lactationMultiplier > 0) outputText("milky ");
					outputText("cum deep into the creatures hungry mouth. Unfortunately, the beast doesn’t seem satisfied with just one emission, and its ministrations become more forceful as you are made to cum again and again. Far beyond the limits of your endurance, you still manage to hold on to some last shred of consciousness. Even as dozens of small tendrils are forced into your tortured nippledicks in search of more cum, your only reaction is a weak moan. As the thing continues to alternate between scouring your body for any last traces of semen and attempting to coax you to further orgasm, you eventually slip into unconsciousness. ");
					//if you didnt get swallowed earlier, get swallowed now
					if (isSexy()) outputText("\n\nJust before you black out, you look up to see yourself being lifted towards the beast’s suddenly huge, gaping maw. ");
				}
				//nipplecunts?
				if (player.hasFuckableNipples())
				{
					outputText("but before it does something rash, the ");
					//describe nipplecunts based on vag looseness
					if (player.vaginas[0].vaginalLooseness < 2) outputText("small openings ");
					if (player.vaginas[0].vaginalLooseness >= 2 && player.vaginas[0].vaginalLooseness < 4) outputText("puckered openings ");
					if (player.vaginas[0].vaginalLooseness >= 4) outputText("engorged lips ");
					outputText("on your nipples to ease open and begin ");
					//wetness + milkyness :P
					if (player.vaginas[0].vaginalWetness < 2) outputText("dripping ");
					if (player.vaginas[0].vaginalWetness >= 2 && player.vaginas[0].vaginalWetness < 4) outputText("drooling ");
					if (player.vaginas[0].vaginalWetness >= 4) outputText("spurting ");
					if (player.breastRows[0].lactationMultiplier > 0) outputText("milky ");
					outputText("fluids. The monster makes a surprised but appreciative gurgle as it begins to use its ");
					//what kind of tongue? box or rock = huge, boob/dick = whippy
					if (isSexy()) outputText("long, whippy tongues ");
					else outputText("gigantic tongue");
					outputText("to slurp at this new bounty.\n\nYour mind reels as ");
					//what kind of tongue? box or rock = huge, boob/dick = whippy
					if (isSexy()) outputText("the seemingly uncountable number of tongues and tendrils slurp, stroke, and suck at your breasts. ");
					else
					{
						outputText("the monster’s huge tongue covers the entire front of your body, dragging its bumpy, slick surface over your ");
						if (player.totalBreasts() > 2) outputText(player.totalBreasts() + " ");
						outputText("breasts in long strokes. ");
					}
					outputText("You orgasm again and again, far beyond the limits of your endurance. Yet you still hold on to some last shred of consciousness. The creature’s ministrations become more forceful, but you’re too far gone to care. Even when the creature shoves ");
					//what kind of tongue? box or rock = huge, boob/dick = whippy
					if (isSexy()) outputText("what must be two dozen of its wriggling tongues deep into each of your tortured nipples, exploring every nook and crevice");
					else outputText("its huge tongue deep into each of your tortured nipples one by one");
					outputText(", your reaction is only a weak moan. ");
					outputText("As the thing continues to alternate between scouring your body for any last traces of nectar and attempting to coax you to further orgasm, you eventually slip into unconsciousness. ");
					//if you didnt get swallowed earlier, get swallowed now
					if (isSexy()) outputText("\n\nJust before you black out, you look up to see yourself being lifted towards the beast’s suddenly huge, gaping maw. ");
				}
				//just a boring, genderless freak?
				if (!player.breastRows[0].nippleCocks && !player.hasFuckableNipples())
				{
					if (isSexy()) outputText("and its eyes narrow, giving it a singularly furious expression. ");
					else outputText("and the tentacles holding you seem to quiver with a palpable fury. ");
					outputText("\n\nWithout warning, hundreds of tentacles begin whipping and beating you violently. You try to scream, but your shouts are cut off by a punishing series of blows to the stomach. Your ears are filled with the monster's burbling roars of fury as you are pummeled into unconsciousness. ");
					//if you didnt get swallowed earlier, get swallowed now
					if (isSexy()) outputText("\n\nJust before you black out, you look up to see yourself being lifted towards the beast’s suddenly huge, gaping maw. ");
				}
			}
			//Man parts!
			if (player.gender == 1)
			{
				outputText("and your ");
				if (player.cockTotal() == 1) outputText(player.cockDescript() + " is ");
				else outputText(player.multiCockDescript() + " are ");
				outputText("soon rock hard. ");
				//did it swallow you, or does it have a mouth?
				if (isSexy())
				{
					outputText("The tentacles move your crotch towards the thing’s toothy maw, and with mounting terror, you realize that it intends to suck your throbbing dick");
					if (player.cockTotal() > 1) outputText("s");
					outputText(" into its nightmare hole of a mouth! As the echoes of your screams finally die away, you realize that your junk is still intact, and that the horrible looking teeth are actually fairly soft. However, you quickly understand their purpose when they dig painfully into your cock");
					if (player.cockTotal() == 1) outputText(" as you attempt to pull it free. ");
					else outputText("s as you attempt to pull them free. ");
				}
				else
				{
					outputText("You feel some kind of orifice enveloping ");
					if (player.cockTotal() == 1) outputText("your " + player.cockDescript() + ". ");
					else outputText("all of your cocks at once. ");
				}
				//Do you have dicknipples?
				if (player.breastRows[0].nippleCocks)
				{
					outputText("\n\nMeanwhile, the tiny tendrils continue to stimulate the rest of your body, causing your " + nippleCockDescript + " " + tempSize + " inch nipplecocks to grow painfully erect, throbbing in time with your racing heart. The creature lets loose an irritated burble");
					//if not swallowed
					if (isSexy()) outputText(", and you see its eyes narrow with anger");
					outputText(". It seems to be annoyed that you would dare sprout more cocks in such an inconvenient location! Your affront is dealt with quickly as your errant dicknipples are engulfed in hastily sprouted sucker tentacles. ");
				}
				//back to the main action!
				outputText("\n\nThe ");
				//Mouth or suckers?
				if (isSexy())
				{
					if (player.breastRows[0].nippleCocks) outputText("creature's mouths begin ");
					else outputText("creature's mouth begins ");
				}
				else
				{
					if (player.breastRows[0].nippleCocks) outputText("mouth-tentacles begin ");
					else outputText("mouth-tentacle begins ");
				}
				outputText("to suck and massage your cock");
				if (player.cockTotal() > 1 || player.breastRows[0].nippleCocks) outputText("s");
				outputText(" with a sort of spinning motion. The combined sensations from that and the countless other tendrils quickly bring you to orgasm, causing you to spew unusually large amounts of cum deep into the creatures hungry mouth");
				if (player.breastRows[0].nippleCocks) outputText("s");
				outputText(". Unfortunately, the beast doesn’t seem satisfied with just one emission, and its ministrations become more forceful as you are made to cum again and again. Far beyond the limits of your endurance, you still manage to hold on to some last shred of consciousness. Even as dozens of small tendrils are forced down your urethra");
				if (player.cockTotal() > 1 || player.breastRows[0].nippleCocks) outputText("s");
				outputText(" in search of more cum, your only reaction is a weak moan. As the thing continues to alternate between scouring your body for any last traces of semen and attempting to coax you to further orgasm, you eventually slip into unconsciousness. ");
				//if you didnt get swallowed earlier, get swallowed now
				if (isSexy()) outputText("\n\nJust before you black out, you look up to see yourself being lifted towards the beast’s suddenly huge, gaping maw. ");
			}
			//Girl Parts!
			if (player.gender == 2)
			{
				outputText("and your " + player.vaginaDescript());
				if (player.vaginas.length > 1) outputText("s are ");
				else outputText(" is ");
				//wetnesssss
				if (player.vaginas[0].vaginalWetness < 2) outputText("dripping ");
				if (player.vaginas[0].vaginalWetness >= 2 && player.vaginas[0].vaginalWetness < 4) outputText("drooling ");
				if (player.vaginas[0].vaginalWetness >= 4) outputText("spurting ");
				outputText("juices everywhere. The thing's ");
				//what kind of tongue? box or rock = huge, boob/dick = whippy
				if (isSexy()) outputText("thin, whippy tongues run");
				else outputText("huge tongue runs");
				outputText(" across your " + player.vaginaDescript());
				if (player.vaginas.length > 1) outputText("s");
				outputText(", and you hear the creature burble with satisfaction. It clearly likes the taste. ");
				//do you have fuckable nipples?
				if (player.hasFuckableNipples())
				{
					outputText("\n\nMeanwhile, the tiny tendrils continue to stimulate the rest of your body, causing the ");
					//describe nipplecunts based on vag looseness
					if (player.vaginas[0].vaginalLooseness < 2) outputText("small openings ");
					if (player.vaginas[0].vaginalLooseness >= 2 && player.vaginas[0].vaginalLooseness < 4) outputText("puckered openings ");
					if (player.vaginas[0].vaginalLooseness >= 4) outputText("engorged lips ");
					outputText("on your nipples to ease open and begin ");
					//wetness + milkyness :P
					if (player.vaginas[0].vaginalWetness < 2) outputText("dripping ");
					if (player.vaginas[0].vaginalWetness >= 2 && player.vaginas[0].vaginalWetness < 4) outputText("drooling ");
					if (player.vaginas[0].vaginalWetness >= 4) outputText("spurting ");
					if (player.averageLactation() > 0) outputText("milky ");
					outputText("fluids. The monster makes a surprised but appreciative gurgle as it begins to use its ");
					//what kind of tongue? box or rock = huge, boob/dick = whippy
					if (isSexy()) outputText("cluster of newly sprouted tongues ");
					else outputText("seemingly <i>even larger</i> tongue ");
					outputText("to slurp at this new bounty. ");
				}
				//back to the main action!
				outputText("\n\nYour mind reels as ");
				//what kind of tongue? box or rock = huge, boob/dick = whippy
				if (isSexy())
				{
					outputText("the seemingly uncountable number of tongues and tendrils slurp, stroke, and suck at your " + player.vaginaDescript());
					if (player.vaginas.length > 1) outputText("s");
					outputText(" and ");
					if (player.totalBreasts() > 2) outputText(player.totalBreasts() + " ");
					outputText("breasts. ");
				}
				else
				{
					outputText("the monster’s huge tongue covers your crotch and the entire front of your body, dragging its bumpy, slick surface over ");
					if (player.vaginas.length == 1) outputText("your " + player.vaginaDescript());
					else outputText("all of your " + player.vaginaDescript() + "s");
					outputText(" and ");
					if (player.totalBreasts() > 2) outputText(player.totalBreasts() + " ");
					outputText("breasts in long strokes. ");
				}
				outputText("You orgasm again and again, far beyond the limits of your endurance. Yet you still hold on to some last shred of consciousness. The creature’s ministrations become more forceful, but you’re too far gone to care. Even when the creature shoves ");
				//what kind of tongue? box or rock = huge, boob/dick = whippy
				if (isSexy())
				{
					outputText("what must be two dozen of its wriggling tongues deep into ");
					if (player.vaginas.length == 1) outputText("your " + player.vaginaDescript());
					else outputText("each of your " + player.vaginaDescript() + "s");
					outputText(", exploring every nook and crevice");
				}
				else
				{
					outputText("its huge tongue deep into ");
					if (player.vaginas.length == 1) outputText("your " + player.vaginaDescript());
					else outputText("each of your " + player.vaginaDescript() + "s one by one");
				}
				outputText(", your reaction is only a weak moan. ");
				if (player.hasFuckableNipples()) outputText("Your moan drags out a bit longer as your poor nipples receive the same treatment. ");
				outputText("As the thing continues to alternate between scouring your body for any last traces of nectar and attempting to coax you to further orgasm, you eventually slip into unconsciousness. ");
				//if you didnt get swallowed earlier, get swallowed now
				if (isSexy()) outputText("\n\nJust before you black out, you look up to see yourself being lifted towards the beast’s suddenly huge, gaping maw. ");
			}
			//Futaz!
			if (player.gender == 3)
			{
				outputText(" your " + player.vaginaDescript());
				if (player.vaginas.length > 1) outputText("s");
				//wetnesssss
				if (player.vaginas[0].vaginalWetness < 2) outputText(" dripping ");
				if (player.vaginas[0].vaginalWetness >= 2 && player.vaginas[0].vaginalWetness < 4) outputText(" drooling ");
				if (player.vaginas[0].vaginalWetness >= 4) outputText(" spurting ");
				outputText("juices everywhere while your ");
				if (player.cockTotal() == 1) outputText(player.cockDescript() + " rapidly becomes ");
				else outputText(player.multiCockDescript() + " rapidly become ");
				outputText("rock hard. Your eyes roll back in your head as the thing's ");
				//what kind of tongue? box or rock = huge, boob/dick = whippy
				if (isSexy()) outputText("thin, whippy tongues run");
				else outputText("huge tongue runs");
				outputText(" across your " + player.vaginaDescript());
				if (player.vaginas.length > 1) outputText("s");
				outputText(". ");
				outputText("You feel some kind of orifice enveloping ");
				if (player.cockTotal() == 1) outputText("your " + player.cockDescript() + ". ");
				else outputText("all of your cocks at once. ");
				//fun with tits?
				if (player.breastRows[0].nippleCocks || player.hasFuckableNipples()) outputText("\n\nMeanwhile, the tiny tendrils continue to stimulate the rest of your body, causing ");
				//do you have fuckable nipples?
				if (player.hasFuckableNipples())
				{
					//describe nipplecunts based on vag looseness
					if (player.vaginas[0].vaginalLooseness < 2) outputText("the small openings ");
					if (player.vaginas[0].vaginalLooseness >= 2 && player.vaginas[0].vaginalLooseness < 4) outputText("the puckered openings ");
					if (player.vaginas[0].vaginalLooseness >= 4) outputText("the engorged lips ");
					outputText("on your nipples to ease open and begin ");
					//wetness + milkyness :P
					if (player.vaginas[0].vaginalWetness < 2) outputText("dripping ");
					if (player.vaginas[0].vaginalWetness >= 2 && player.vaginas[0].vaginalWetness < 4) outputText("drooling ");
					if (player.vaginas[0].vaginalWetness >= 4) outputText("spurting ");
					if (player.breastRows[0].lactationMultiplier > 0) outputText("milky ");
					outputText("fluids. The monster makes a surprised but appreciative gurgle as it begins to use its ");
					//what kind of tongue? box or rock = huge, boob/dick = whippy
					if (isSexy()) outputText("cluster of newly sprouted tongues ");
					else outputText("seemingly <i>even larger</i> tongue ");
					outputText("to slurp at this new bounty. ");
				}
				//do you have nipplecocks?
				if (player.breastRows[0].nippleCocks)
				{
					outputText("your " + nippleCockDescript + " " + tempSize + " inch nipplecocks to grow painfully erect, throbbing in time with your racing heart. The creature lets loose an irritated burble");
					//if not swallowed
					if (isSexy()) outputText(", and you see its eyes narrow with anger");
					outputText(". It seems to be annoyed that you would dare sprout more cocks in such an inconvenient location! Your affront is dealt with quickly as your errant dicknipples are engulfed in hastily sprouted sucker tentacles. ");
				}
				//back to the main action!
				outputText("\n\nYour mind reels as ");
				//what kind of tongue? box or rock = huge, boob/dick = whippy
				if (isSexy())
				{
					outputText("the seemingly uncountable number of tongues and tendrils slurp, stroke, and suck at your " + player.vaginaDescript());
					if (player.vaginas.length > 1) outputText("s");
					outputText(" and ");
					if (player.totalBreasts() > 2) outputText(player.totalBreasts() + " ");
					outputText("breasts while the ");
					if (player.breastRows[0].nippleCocks) outputText("creature's mouths begin ");
					else outputText("creature's mouth begins ");
				}
				else
				{
					outputText("the monster’s huge tongue slithers over your crotch, around your ");
					if (player.cockTotal() == 1 && !player.hasSheath()) outputText("cock, ");
					else if (!player.hasSheath()) outputText("bundle of cocks, ");
					else outputText("sheath, ");
					outputText("and up the entire front of your body, dragging its bumpy, slick surface over ");
					if (player.vaginas.length == 1) outputText("your " + player.vaginaDescript());
					else outputText("all of your " + player.vaginaDescript() + "s");
					outputText(" and ");
					if (player.totalBreasts() > 2) outputText(player.totalBreasts() + " ");
					outputText("breasts in long strokes while the ");
					if (player.breastRows[0].nippleCocks) outputText("mouth-tentacles begin ");
					else outputText("mouth-tentacle begins ");
				}
				outputText("to suck and massage your cock");
				if (player.cockTotal() > 1 || player.breastRows[0].nippleCocks) outputText("s");
				outputText(" with a sort of spinning motion.");
				outputText("You orgasm again and again, far beyond the limits of your endurance. Yet you still hold on to some last shred of consciousness. The creature’s ministrations become more forceful, but you’re too far gone to care. Even when the creature shoves ");
				//what kind of tongue? box or rock = huge, boob/dick = whippy
				if (isSexy())
				{
					outputText("what must be two dozen of its wriggling tongues deep into ");
					if (player.vaginas.length == 1) outputText("your " + player.vaginaDescript());
					else outputText("each of your " + player.vaginaDescript() + "s");
					outputText(", exploring every nook and crevice, ");
				}
				else
				{
					outputText("its huge tongue deep into ");
					if (player.vaginas.length == 1) outputText("your " + player.vaginaDescript());
					else outputText("each of your " + player.vaginaDescript() + "s one by one");

				}
				outputText(" while dozens of small tendrils are forced down your urethra");
				if (player.cockTotal() > 1 || player.breastRows[0].nippleCocks) outputText("s");
				outputText(" in search of more cum, your reaction is only a weak moan. ");
				if (player.hasVagina()) player.cuntChange(60, true);
				if (player.hasFuckableNipples()) outputText("Your moan drags out a bit longer as your poor nipples receive the same treatment. ");
				outputText("As the thing continues to alternate between scouring your body for any last traces of fluid and attempting to coax you to further orgasm, you eventually slip into unconsciousness. ");
				//if you didnt get swallowed earlier, get swallowed now
				if (isSexy()) outputText("\n\nJust before you black out, you look up to see yourself being lifted towards the beast’s suddenly huge, gaping maw. ");
			}
			player.orgasm('Generic');
			doNext(mimicTentacleEnd);
		}

		public function mimicTentacleEnd():void {
			clearOutput();
			outputText("Much to your surprise, you wake up some time later. You aren’t sure where you are, or how you got there, but you are certainly glad to be alive. You are covered in some kind of slime, and your body seems strangely sensitive. ");
			if (player.hasVagina()) {
				if (isSexy())
				{
					if (rand(5) > player.vaginas[0].vaginalWetness)
					{
						player.vaginas[0].vaginalWetness++;
						outputText("<b>Strangely, even after that ordeal, your vagina seems wetter than usual.</b> ");
					}
				}
				else
				{
					if (rand(5) > player.vaginas[0].vaginalLooseness)
					{
						player.vaginas[0].vaginalLooseness++;
						outputText("<b>Your cunt is painfully stretched from the ordeal, temporarily enlarged.</b> ");
					}
				}
			}
			dynStats("int", -2, "sen", 5, "cor", 2);
			combat.cleanupAfterCombat();
		}

		public function killTheMimic():void {
			clearOutput();
			outputText("The monster collapses, too brutally beaten to even harm you. You search the contents of the monster before heading off. ");
			combat.cleanupAfterCombat();
		}

		public function findSomeGems():void {
			var quantity:int = (rand(30) + 10 + player.level) * (1 + (player.perkv1(PerkLib.AscensionFortune) * 0.1));
			player.gems += quantity;
			outputText("Upon opening the small bag, you find " + quantity + " gems inside!");
			doNext(camp.returnToCampUseOneHour);
		}
	}

}


code:
package classes.Scenes.Monsters
{
	import classes.CharCreation;
	import classes.Items.Consumables.WhiskerFruit;
	import classes.Monster;
	import classes.lists.*;
	import classes.BodyParts.*;
	import classes.CockTypesEnum;
	import classes.internals.*;
	import classes.Appearance;
	import classes.Vagina;
	import classes.StatusEffects;
	/**
	 * See constructor for description.
	 *
	 * @author Trolololkarln
	 */
	public class RandomSuccubus extends Monster
	{
		private var special:String
		/**
		 * Provides a randomized succubus (or incubus/omnibus 10% of the time).
		 * Assumed that succubi were allways female, incubi always male and omnibi are the most random since they could have started as either.
		 *
		 * @param gender R,M,F or H
		 * @param specialP for semi-uniqueness
		 */
		public function RandomSuccubus(gender:String="R", specialP:String="") {
			special = specialP;
			this.a = "the ";
			this.race = "Demon";
			var vag:Boolean = true;
			this.tallness = 3 * 12;
			this.lowerBody.type = LowerBody.DEMONIC_HIGH_HEELS;

			if (gender=="R" && (rand(10)<1))//10% of the time
			{
				switch (rand(2)) //50/50 split
				{
					case 0://Incubus
						gender = "M";
					break;
					case 1://Omnibus
						gender = "H";
					break;
					default:
				}
			}

			if (gender == "M"){
				//Add cock. Size is standard + up to 12 - up to 4, avg of 9,5. Thickness is standard + up to 4, avg of 3.
				this.createCock((5, 5 + rand(7) + rand(7) - rand(5)), (rand(501)*0.01 + 1), CockTypesEnum.DEMON);
				//Feminity is completely randomized, allowing traps, but slanted towards masculine.
				this.femininity = (rand(10) + rand(10) + rand(20) + rand(60) + rand(4) + 1);
				vag = false;
			}
			if (gender == "H"){
				//Same cock
				this.createCock((5, 5 + rand(7) + rand(7) - rand(5)), (rand(501)*0.01 + 1), CockTypesEnum.DEMON);
				//Equal random femininity
				this.femininity = (rand(100) + 1);
			}

			if (vag)
			{
				//Random vag, although never virgin.
				this.createVagina(false, (rand(5) + 1), (rand(5) + 1));
			}
			switch (this.gender)
			{
				case Gender.FEMALE:
					this.short = "succubus";
					this.imageName = "RndSucc";
					//At least A cup, slanted towards DD
					this.createBreastRow(rand(6) + rand(5) + 1)

					//Hips heavily slanted towards curvy, same with butt
					this.hips.rating = (rand(6) + rand(6) + rand(6) + rand(6));
					this.butt.rating = (rand(6) + rand(6) + rand(6) + rand(6));

					//Shorter than male, usually. From 3 through 8 feet. (maybe add one foot?)
					this.tallness += (rand(7) + rand(7) + rand(13) + rand(13) + rand(13) + rand(13));

					//Longer hair, generally.
					this.hair.length = (rand(7) + rand(7) + rand(7) + rand(7)+ rand(7)+ rand(7)+ rand(7)+ rand(7));
				break;
				case Gender.MALE:
					this.short = "incubus";
					this.imageName = "RndInc";
					//Hips slanted towards avarege, with cap at ample+2
					this.hips.rating = (rand(2) + rand(2) + rand(2) + rand(2) + rand(2) + rand(2) + rand(2) + rand(2));
					//Butt from none up to noticeble, mostly average
					this.butt.rating = (rand(3) + rand(3) + rand(3));

					//Balls, none, two or four (if PC can get quadballs, why can't the demons?).
					this.balls = (rand(2) * 2 + 2 - rand(2) * 2);
					this.ballSize = (rand(10) + 1);

					//Taller than females, ussually. 1 feet higher maximum, and more heavily slanted to tallnes.
					this.tallness += (rand(7) + rand(7) + rand(7) + rand(7) + rand(13) + rand(13) + rand(13) + rand(13));

					//Normal feet
					this.lowerBody.type = LowerBody.HUMAN;

					//Shorter hair
					this.hair.length = (rand(13));
				break;
				case Gender.HERM:
					this.short = "omnibus";
					this.imageName = "RndOmni";
					//Same range as female + flat, but equally random
					this.createBreastRow(rand(11));
					//Completely random hipssize and buttsize
					this.hips.rating = (rand(21));
					this.butt.rating = (rand(21));

					//Ball stuff, see male
					this.balls = (rand(2) * 2 + 2 - rand(2) * 2);
					this.ballSize = (rand(11));

					//More random, same max as male.
					this.tallness += (rand(7) + rand(7) + rand(7) + rand(7) + rand(13) + rand(13) + rand(25));

					//Random hairlength
					this.hair.length = rand(31);
				break;
				default:
			}
			//No anal virgins, else random
			this.ass.analLooseness = (rand(5) + 1);
			this.ass.analWetness = (rand(6));

			//Array selection, expand these as oppertunity arise
			var sTone:Array = ["blue", "purple", "light purple", "dark purple", "dark blue", "indigo", "burgundy", "lavender", "midnight-black"];
			this.skin.tone = sTone[rand(sTone.length)];

			var hColor:Array = ["blue", "purple", "light purple", "dark purple", "dark blue", "blond"];
			this.hair.color = hColor[rand(hColor.length)];

			var tail:Array = [Tail.NONE, Tail.NONE, Tail.DEMONIC];
			this.tail.type = tail[rand(tail.length)];

			var horns:Array = [Horns.NONE, Horns.NONE, Horns.DEMON, Horns.RAM];
			this.horns.type = horns[rand(horns.length)];
			if (this.horns.type != Horns.NONE) this.horns.value = (rand(4) + 1);

			var wings:Array = [Wings.NONE, Wings.NONE, Wings.NONE, Wings.BAT_LIKE_TINY, Wings.BAT_LIKE_TINY, Wings.BAT_LIKE_LARGE, Wings.IMP, Wings.IMP_LARGE, Wings.DRACONIC_SMALL, Wings.FEATHERED_LARGE];
			this.wings.type = wings[rand(wings.length)];
			if (this.wings.type == Wings.FEATHERED_LARGE) this.wings.color = "black";

			var ears:Array = [Ears.ELFIN, Ears.ELFIN, Ears.ELFIN, Ears.HUMAN, Ears.IMP];
			this.ears.type = ears[rand(ears.length)];

			if (this.hasCock()) {
				var cock:Array = [CockTypesEnum.DEMON, CockTypesEnum.DOG, CockTypesEnum.HORSE, CockTypesEnum.HUMAN, CockTypesEnum.TENTACLE];
				this.cocks[0].cockType = cock[rand(cock.length)];
				if (this.cocks[0].cockType==CockTypesEnum.TENTACLE) {
					for (; rand(3) < 1; ) {
						this.createCock((5, 5 + rand(7) + rand(7) - rand(5)), (rand(501)*0.01 + 1), CockTypesEnum.TENTACLE);
					}
				}
			}

			//Combat shit
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			//Attributes, looked mostly at the secriterial succubus and random'ed upwards.
			initStrTouSpeInte((50 + rand(51)), (40 + rand(61)), (50 + rand(26) + rand(26)), (80 + rand(21)));
			initLibSensCor((70 + rand(31)), (60 + rand(41)), (100 - rand(11)));
			//Due to the heavy randomisation, could be over or under powered for it's level.
			this.level = (7 + rand(5));
			//Weapon
			this.weaponName = "claws";
			this.weaponAttack = 10 + rand(11);
			this.weaponVerb = "punch";
			this.weaponPerk = [];
			//Armor
			this.armorName = "demonic skin";
			this.armorDef = (5 + rand(6));
			//Bonuses
			this.bonusHP = rand(11) * 100;
			this.bonusLust = rand(11) * 10;
			//Rewards
			this.gems = 100 + rand(1001) + rand(11) * 10;
			this.additionalXP = 250 + rand(251);//the inherent randomness warrants high base. Get lucky and spar against Hel faster.
			this.drop = new WeightedDrop().
					add(consumables.INCUBID, 1).
					add(consumables.SUCMILK, 1).
					add(consumables.SDELITE, 1).
					add(weapons.SUCWHIP, 0.01);

			//Long Descrption, TB written.
			this.long = "";

			//Special cases
			if (special != ""){
				if (special == "LiddelliumCampSucc"){
					var specialST:Array = ["blue", "indigo", "purple", "burgundy", "lavender", "blue", "indigo", "purple", "burgundy", "lavender", "midnight-black"];//[rand {blue} | {indigo} | {purple} | {burgundy} | {lavender} | low -% {midnight - black}]
					this.skin.tone = specialST[rand(specialST.length)];
					this.horns.type = Horns.DEMON;
					this.horns.value = rand(4) + 1;
					//this.hair.length = [rand {shoulder - length} | {long} | {waist - length}];
					var specialHC:Array = ["black ", "auburn ", "violet ", "navy-blue ", ""];//[rand {black} | {auburn} | {violet} | {navy - blue} | {}];
					this.hair.color = specialHC[rand(specialHC.length)];
					this.tail.type = Tail.DEMONIC;
					this.wings.type = Wings.BAT_LIKE_LARGE;

					this.long="The succubus is a demonic symbol of feminine perfection, displaying eye-catching curves and"+this.allBreastsDescript+"Her skin is "+this.skin.tone+" and blemish-free. Adorning her head are two demonic horns parting the "+Appearance.hairDescription(this)+" "+this.hair.color+"hair swaying beautifully as she moves. Like any other succubus, she has a long thin tail with a spaded tip, swishing side to side in a cute yet menacing fashion. Behind her are large bat-like wings that may offer some limited use for brief flights."
				}
				if (special == "LiddelliumHL"){
					//look
					this.skin.tone = "deep purple";
					this.hair.color = "black";
					//this.eyes.color = "hazel";
					this.tail.type = Tail.DEMONIC;
					this.wings.type = Wings.BAT_LIKE_LARGE;
					//Boost all stats by half of the maximum randomized value
					this.str += 25;
					this.tou += 30;
					this.spe += 30;
					this.inte += 10;

					this.lib += 15;
					this.sens += 20;
					this.cor += 10;

					this.level += 2;
					this.weaponAttack += 5;

					this.armorDef += 3;

					this.bonusHP += 500;
					this.bonusLust += 50;
					//Special loot
					this.drop = new WeightedDrop().add(useables.LETHITE,1);
				}
			}
			checkMonster();
		}

		protected function tailWhip():void{//"/tail whip. More accurate, small damage, maybe small lust gain."-Satan
			var hitChance:Number = player.standardDodgeFunc(this, 15); //+15% chance to hit
			var damage:int = eBaseDamage() / 3; //standard damage is str + weaponAttack, deal a third of that
			var lustDamage:int; //Not calculated yet
			outputText("Hoping to catch you off-guard, the " + this.short + " feints an attack only to follow up with a tail-whip.\n"); //Adding a line break because the default avoidance messages don't have one at the beginning
			if (!playerAvoidDamage({toHit:hitChance})) { //Using default avoidance messages, you (or Satan or anyone else) can write custom ones if you'd prefer
				outputText("The spade slaps against you like a leather coil. "); //Leaving a space at the end so the damage display isn't flush against the text
				damage = player.reduceDamage(damage, this); //Apply damage reduction
				lustDamage = damage / 2; //Deal lust damage equal to half the HP damage
				player.takeDamage(damage, true); //Deal damage
				player.takeLustDamage(lustDamage, true); //Deal lust damage
			}
		}

		protected function heelKick():void{//"/heel-kick. Higher damage, lower accuracy. One of the demon TFs is a demonic high-heel, kinda silly."-S
			outputText("Twisting her body and bending one leg up, the succubus gives quite a view while also heavily telegraphing her attack.\n");
			var hitChance:Number = player.standardDodgeFunc(this, -20);
			var damage:int = eBaseDamage() * 2;
			//Is -20% hit-chance for double damage fine?
			if (!playerAvoidDamage({toHit:hitChance})){
				outputText("With a strong lunge, the demoness shoves her demonic high-heel into you. ");
				damage = player.reduceDamage(damage, this);
				player.takeDamage(damage, true);
			}
		}

		protected function grapple():void{//"/grapple. Constricts the player and does no damage, the succubus will tease with the player held down."-S
			//I haven't done it here, but it might be a good idea to add a failure chance, based on dodging and/or strength or something. Imagine a 50-str 4-foot-tall succubus tackling a 100-str 9-foot-tall juggernaut in full plate.
			if (player.hasStatusEffect(StatusEffects.Grappled)){
				outputText("The " + this.short + " joins in the pinning embrace.");
				player.createOrFindStatusEffect(StatusEffects.Grappled).value2++;
				createStatusEffect(StatusEffects.Grappling, 0, 0, 0, 0);
				return;
			}
			outputText("The " + this.short + " charges in quickly, opening " + (this.gender == Gender.MALE?"his":"her") + " arms to embrace you. ")
			if (player.spe+rand(100) < this.spe+rand(100)){
				outputText((this.gender == Gender.MALE?"He":"She") + " tackles you with all " + (this.gender == Gender.MALE?"his":"her") + " might, straddling you as you both fall. ")
				if (player.str + rand(100) < this.str + rand(100)){
					outputText((this.gender == Gender.MALE?"He":"She") + " has you in " + (this.gender == Gender.MALE?"his":"her") + " clutches!");
					player.createOrFindStatusEffect(StatusEffects.Grappled).value2++; //New status effect. It will need to be added to the isPlayerBound function in Combat.as//Creates the status effect if it's not already present, and then increases value2 to keep track of how many succubi have you grappled (not actually used in this example)
					createStatusEffect(StatusEffects.Grappling,0,0,0,0); //Another new status effect, you can use this to keep track of which succubus has you grappled.
				}
				else outputText("Thankfully, you manage to push " + (this.gender == Gender.MALE?"him":"her") + " off and get back into your stance.");
			}
			else outputText("However, your speed proves superior and " + (this.gender == Gender.MALE?"he":"she") + " never gets too close");
		}
		protected function grappleTease():void{//"/grapple-tease. Add lust, of course."-S
			if (this.gender != Gender.MALE && this.tail.type != Tail.NONE) outputText("Her tail wriggles around, prodding at you in a somewhat ticklish manner as she stares longingly into your eyes. Her breasts press up against you. ");
			var lustDamage:int = (5 + rand(6)) * ((player.sens + player.cor + player.lib) / 100);//From 5*0.23=1 on a low roll and pure champion to 10*3=30 on a high roll and sexual champion (both will almost certainly have lust-resist by this time)
			if (lustDamage > 10) outputText("This lewd embrace is working you up. ");
			player.takeLustDamage(lustDamage, true);
		}
		override public function struggle():void {
			if (player.hasStatusEffect(StatusEffects.Grappled)){
				clearOutput();
				var totStr:int = 0;
				for each (var grappler:Monster in game.monsterArray) {
					if (grappler.hasStatusEffect(StatusEffects.Grappling)) totStr += grappler.str;
				}
				if (player.statusEffectv3(StatusEffects.Grappled) > 6 || (player.str + rand(100)) > ((totStr / player.statusEffectv2(StatusEffects.Grappled)) + rand(100) + 10 * player.statusEffectv2(StatusEffects.Grappled))) { //Player strength vs succubus strength to escape//AVG str+(0-99)+(5*grapplers), statisticly most likely 75+49+(30)=154, giving 100-strength PC 45% chance to break free... not to unreasonable, I think. It is 3 persons trying hold 'em down, after all.
					if (this.special == "LiddelliumHL") outputText("You overcome the pair as you knock the succubus back while wrestling your arms from the incubus.");
					else outputText("You manage to break free of the lewd embrace.");
					player.removeStatusEffect(StatusEffects.Grappled);
					for each (var grappler:Monster in game.monsterArray) {
						grappler.removeStatusEffect(StatusEffects.Grappling);
					}
				}
				else if (this.special == "LiddelliumHL") outputText("You struggle to escape from the demons");
				else {
					outputText("You struggle to escape from the demon's embrace.");
				}
			}
		}

		protected function lustMagicAttack():void{
			outputText("The demon" + (this.gender == Gender.MALE?"":"ess") + " performs a series of arcane gestures, visibly glowing with unholy aura. ");
			var lustDamage:int = (5 + rand(6)) * ((2 * this.inte + player.lib + 2 * player.cor) / 200);//Similar to the above, but wheigted
			if (lustDamage > 10) outputText((this.gender == Gender.MALE?"His":"Her") + " magic fires into you in an instant, spreading a warmth throughout your body!");
			player.takeLustDamage(lustDamage, true);
		}

		protected function swipe():void {
			outputText("The " + this.short + "'s " + (this.wings.type == Wings.NONE?"legs tense":"wings flap") + " for a powerful leap, closing the distance faster than you expected.\n");
			var hitChance:Number = player.standardDodgeFunc(this);
			var damage:int = eBaseDamage();
			if (!playerAvoidDamage({toHit:hitChance})){
				outputText((this.gender == Gender.MALE?"His":"Her") + " claws swing at you, scraping through flesh painfully. ");
				damage = player.reduceDamage(damage, this);
				if (damage < (player.maxHP() / 100)) outputText("It doesn't cut deep, but it does hurt! ");
				player.takeDamage(damage, true);//This should be the standard, no?
			}
		}

		override protected function performCombatAction():void{
			if (player.hasStatusEffect(StatusEffects.Grappled) && !hasStatusEffect(StatusEffects.Grappling)){
				if (this.special == "LiddelliumHL"){
					hlGrappleTease(player.statusEffectv3(StatusEffects.Grappled));
					return;
				}
				grapple();//Join in the pile if already grappled.
				return;
			}
			if (this.hasStatusEffect(StatusEffects.Grappling)) {
				if (this.special == "LiddelliumHL"){
					hlGrappleTease(player.statusEffectv3(StatusEffects.Grappled));
					return;
				}
				grappleTease(); //Always use tease while grappling. We can expand the logic here for the harem leader teases later.
				return;
			}
			var actionChoices:MonsterAI = new MonsterAI();
			if (this.special != "LiddelliumHL") actionChoices.add(grapple, 1, (this.distance == DISTANCE_MELEE), 0, FATIGUE_NONE, RANGE_MELEE);//Broken in multi-combat, it would seem.//Fixed now!
			actionChoices.add(swipe, 1, true, 0, FATIGUE_NONE, RANGE_MELEE);
			actionChoices.add(lustMagicAttack, 0.5, true, 10, FATIGUE_MAGICAL, RANGE_RANGED);
			if (this.tail.type == Tail.DEMONIC) actionChoices.add(tailWhip, 0.5, true, 5, FATIGUE_PHYSICAL, RANGE_MELEE);
			if (this.lowerBody.type == LowerBody.DEMONIC_HIGH_HEELS) actionChoices.add(heelKick, 0.5, true, 5, FATIGUE_PHYSICAL, RANGE_MELEE);
			if (this.special == "LiddelliumHL") actionChoices.add(hlGrapple, 1, ((!player.hasStatusEffect(StatusEffects.Grappled)) && ((game.monsterArray[0].HP > 0 && game.monsterArray[1].HP > 0) && (game.monsterArray[0].lust < game.monsterArray[0].maxLust() && game.monsterArray[1].lust < game.monsterArray[1].maxLust()))), 10, FATIGUE_PHYSICAL, RANGE_MELEE);
			//"teases. they gotta have a lot of teases of course, but man I kinda don't wanna bother. Maybe just rip some teases from other succubi like Vapula, secretary, Ceraph, idk. "-S
			actionChoices.exec();
		}

		//Harem leaders have special grapple
		protected function hlGrapple():void{
			outputText("The succubus dashes around to flank you with a kick. The move is simple enough to track and dodge, but it was only a feint as the incubus maneuvers around to grab you! His arms swing up under your own and you become trapped in a full-nelson grapple.");
			createStatusEffect(StatusEffects.Grappling, 0, 0, 0, 0);
			player.createStatusEffect(StatusEffects.Grappled, 0, 0, 1, 0);
		}

		protected function hlGrappleTease(turn:int):void{
			//3 different, in a chain.
			this.createOrFindStatusEffect(StatusEffects.Grappling);
			player.createOrFindStatusEffect(StatusEffects.Grappled).value3++;
			var lustDamage:int = (10 + rand(11)) * ((player.sens + player.cor + player.lib) / 100);
			switch (turn) {
				case 1:
					return;//do nothing if it's the second grappling on the first turn.
				break;
				case 2:
					outputText("Still firmly grabbed by the male of the pair, the female takes the time to sensually caress your body. There's a dizzying light in her eyes that draws you in. ");
					player.takeLustDamage(lustDamage, true);
				break;
				case 3:
					return;//Second one grappling second turn
				break;
				case 4:
					outputText("The succubus lays kisses over your chest. [say: Don't resist, we're experienced owners. Being our slave is a very rewarding experience...] She holds your cheek as she stares longingly into your eyes. ");
					player.takeLustDamage(lustDamage+5, true);
				break;
				case 5:
					return;//Second grapple third turn
				break;
				case 6:
					outputText("Large bat-like wings stretch over your sides from both the incubus and the succubus, enveloping you in their mutual embrace. The sultry masculine voice of the incubus whispers into your ear. [say: Don't resist us.] ");
					player.takeLustDamage(lustDamage+10, true);
				break;
				default:
					struggle();//Should probably handle this some other way?
			}
		}
	}
}


code:
package classes.Scenes.Monsters
{
	import classes.*;
	import classes.StatusEffects.Combat.BasiliskSlowDebuff;

	/**
	 * Class to categorize monsters with the stare ability
	 * @since  27.02.2018
	 * @author Stadler76
	 */
	public class StareMonster extends Monster
	{
		public static function speedReduce(player:Player, amount:Number = 0):void
		{
			var bse:BasiliskSlowDebuff = player.createOrFindStatusEffect(StatusEffects.BasiliskSlow) as BasiliskSlowDebuff;
			bse.applyEffect(amount);
		}
	}
}


code:
package classes.Scenes.Monsters
{
	import classes.*;
	import classes.BodyParts.Butt;
	import classes.BodyParts.Hips;
	import classes.internals.*;
	import classes.GlobalFlags.kFLAGS;

	public class Succubus extends AbstractSuccubus
	{
		override protected function performCombatAction():void{
			var actionChoices:MonsterAI = new MonsterAI();
			actionChoices.add(kissAttack, 1, true, 0, FATIGUE_NONE, RANGE_MELEE_CHARGING);
			actionChoices.add(seduceAttack, 1, true, 10, FATIGUE_PHYSICAL, RANGE_TEASE);
			actionChoices.add(succubusBarrage, 1, true, 10, FATIGUE_PHYSICAL, RANGE_MELEE);
			actionChoices.exec();
		}

		public function succubusBarrage():void {
			outputText("The succubus looks like as if she's running towards you. ");
			if (!combatAvoidDamage({doDodge:true,doParry:false,doBlock:false}).failed) {
				outputText("With your efforts in running, you manage to run until she stops giving chase.");
			}
			else {
				var damage:int = 0;
				outputText("Despite your sprint, it closes the distance and leaps on you, tearing and scratching. ");
				if (rand((player.str / 3) + 10) < ((str / 3) + 10)) {
					outputText("You try to shake her off, but she's too powerful and rains painful scratches and blows before pushing you onto the ground. You get up and get back to fighting. ");
					damage = (10 + str);
				}
				else {
					outputText("You bring your strength to bear and throw her off with only minor injuries. ");
					damage = Math.floor((5 + str) / 2);
				}
				player.takeDamage(damage, true);
			}

		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void {
			game.succubusScene.loseToSuccubus();
		}

		override public function defeated(hpVictory:Boolean):void {
			game.succubusScene.winAgainstSuccubus();
		}

		public function Succubus()
		{
			this.a = "the ";
			this.short = "ivory succubus";
			this.imageName = "ivorysuccubus";
			this.long = "The succubus before you is a typical example of a lusty demon. Two horns protrude from her forehead, a pair of wings sprout from her back, and a spaded tail swishes about. She's completely nude, leaving her G-cup breasts and moist pussy open for you to see. From time to time, you can see her jiggling ass clearly inviting you. She doesn't appear to be wielding anything.";
			this.race = "Demon";
			this.createVagina(false, Vagina.WETNESS_WET, Vagina.LOOSENESS_NORMAL);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 40, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("G"));
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_NORMAL;
			this.createStatusEffect(StatusEffects.BonusACapacity,30,0,0,0);
			this.tallness = 35 + rand(4);
			this.hips.rating = Hips.RATING_AMPLE+2;
			this.butt.rating = Butt.RATING_LARGE;
			this.skin.tone = "ivory";
			this.hair.color = "black";
			this.hair.length = 4;
			initStrTouSpeInte(25, 20, 35, 42);
			initLibSensCor(75, 45, 90);
			this.weaponName = "fists";
			this.weaponVerb="punch";
			this.armorName = "skin";
			this.lust = 50;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 3;
			this.gems = rand(5) + 5;
			this.drop = new WeightedDrop().
					add(consumables.INCUBID, 1).
					add(consumables.SUCMILK, 1).
					add(consumables.SDELITE, 1);
			/*this.special1 = kissAttack;
			this.special2 = seduceAttack;
			this.special3 = succubusBarrage;*/
			checkMonster();
		}

	}

}


code:
//Succubus, one of the classic encounters from Unnamed Text Game, now modified to be up to modern standards, with new fight.
package classes.Scenes.Monsters
{
	import classes.BaseContent;
	import classes.display.SpriteDb;
    import classes.GlobalFlags.kFLAGS;
	public class SuccubusScene extends BaseContent
	{

		public function SuccubusScene() {}

		public function encounterSuccubus():void {
			clearOutput();
			spriteSelect(SpriteDb.s_ivory_succubus);
			//Glared at
			outputText("While you're minding your own business, you spot a figure in the distance. It appears to be a succubus with ivory skin, and she glares at you.");
			unlockCodexEntry(kFLAGS.CODEX_ENTRY_SUCCUBUS);
			if (player.hasCock()) {
				outputText("[pg]She's expressing interest in your [cock] and says, \"Hello dearie. You've got that wonderful cock of yours and I'd like to offer my pussy to you. It'll be very pleasurable. What do you say?\"");
				menu();
				addButton(0, "Fight", fightAgainstSuccubus);
				addButton(1, "Accept", loseToSuccubus, false);
				addButton(4, "Run", tryToFlee);
			}
			else {
				outputText("She starts to close the distance by charging at you! It's a fight!");
				startCombat(new Succubus());
			}
		}

		public function fightAgainstSuccubus():void {
			startCombatImmediate(new Succubus());
		}

		public function winAgainstSuccubus():void {
			clearOutput();
			outputText("The succubus falls to her knees, too badly " + (monster.HP<= 0 ? "beaten" : "aroused") + " to continue fighting.");
			if (player.hasCock() && player.lust >= 33) { //Cocks only at the moment.
				outputText("\n\nSadly, your desires have not been met. Of course, you can always rape the poor thing. Do you?");
				addButton(0, "Rape Her", winAgainstSuccubusRape).hint("Rape the succubus.");
                setSexLeaveButton();
			}
			else {
				combat.cleanupAfterCombat();
			}
		}

		public function winAgainstSuccubusRape():void {
			clearOutput();
			outputText("Seeing the succubus in such a vulnerable state, you move over to her" + player.clothedOrNakedLower(", stripping out of your " + player.armorDescript() + ", exposing your " + player.cockDescript() + "", " while your " + player.cockDescript() + " swings freely") + ".\n\n");
			outputText("Lost in the moment, you grind your pelvic region into hers, feeling around for her fuckhole with your erect member");
			if (player.cockTotal() > 1) outputText("s. When you feel at least one of them sink in a bit, you thrust in her hard, the others splaying out in all directions. The succubus screams at you, obviously violated. But that only serves to drive you on further, fucking her faster and harder. One of your cocks slips out, slathered in her own juices and someone else's cum, and another takes its place.\n\n");
			else outputText(" When you feel yourself sink in a bit, you thrust in her hard. The succubus screams at you, obviously violated. But that only serves to drive you on further, fucking her faster and harder.\n\n");
			outputText("Her tight cunt, combined with your crazed lust, has you shooting a huge load into her deepest reaches. But just once isn't enough right now. You keep going, staying hard the whole time.");
			if (player.cockTotal() > 1) outputText("She only wears herself out trying to wriggle away from you, and you use the chance to carefully cram another of your cocks into her. You can feel her getting stretched out. ");
			outputText("With the glint of a pervert in your eye, you look down on her, drinking in the anguish in her face as you rape her slowly this time. She gets increasingly wet as you keep fucking her, and you mock her openly for supposedly enjoying this. You lick the tears rolling down her face and continue for some time. When you decide she's been broken, you decide to finish and change suddenly to much faster strokes. The succubus howls, ruffling your hair as you cum all over her insides yet again. Satisfied, you pull out and leave her there panting and wasted, evidence of the incursion leaking from her snatch. ");
			player.orgasm('Generic');
			dynStats("lib", -2, "cor", 3);
			combat.cleanupAfterCombat();
		}

		public function loseToSuccubus(fromBattle:Boolean = true):void {
			clearOutput();
			if (fromBattle) outputText("Too badly " + (player.HP <= 0 ? "beaten" : "aroused") + " by the succubus, you give in and let the succubus do whatever she wants to you.\n\n");
			if (player.hasCock()) {
				outputText("She saunters toward you, swaying her hips the whole way. When she gets within your reach she kisses you instantly, shoving her tongue into your mouth as far as it can go. At the same time, she wraps a leg around you and hooks it behind you, grabbing your stiff cock and guiding it to her nethers.");
				outputText("\n\nHer insides and warm and wet already, squeezing around you and twisting eagerly. The succubus moans into your mouth as she caresses your body with her hands. She expertly lowers the both of you from standing to the ground, with her staying on top of you. She switches to bouncing on your cock, taking it as far as she can. Her powerful legs bounce at a pace few human women could match. She coaxes you to shoot inside her quite easily, and the feeling of this ejaculation is so powerful you feel like you could die of pleasure right there. The succubus moans erotically as she accepts your seed inside of her, and leans over to kiss you on the forehead as if to wish you good night.");
				outputText("\n\nStrangely, the kiss is the last thing you remember, and you awaken on the cold ground, feeling completely exhausted. It feels like she took part of your soul with her...but it felt so good.");
				player.orgasm('Generic');
				dynStats("lib", -2, "cor", 3);
				if (fromBattle)
					combat.cleanupAfterCombat();
				else
					doNext(camp.returnToCampUseTwoHours);
			}
			else {
				outputText("She saunters toward you, swaying her hips the whole way. When she gets within your reach, she caresses your cheeks and pulls your face in close to hers, sliding her tongue deep into your mouth. You " + (player.lib + player.cor < 80 ? "reluctantly" : "eagerly") + " engage in the kiss, dueling her tongue with your own, trying to pin it down. She expertly laps your tongue and crushes it against the floor of your mouth. She swings one leg up to your head to scissor against your pubic region, and grinds against it hard despite there being nothing there. She flits her gaze down, then back up to yours, her eyes filled with lust regardless. She makes out with you longer, going on to lick all around your lips. All the way she pushes against you hard enough to let you feel her pubic bone crushing against yours, along with her considerable wetness.");
				outputText("\n\nWhen it's finally over she leaves you wordlessly. Suddenly on the ground there's a bottle that wasn't there before. You pick it up and examine it. It's a viscous white fluid labeled 'Incubus Draft'.");
				player.orgasm('Generic');
				dynStats("lib", -2, "cor", 3);
				inventory.takeItem(consumables.INCUBID, combat.cleanupAfterCombat); //it's Incubus Draft
			}
		}

		public function tryToFlee():void {
			clearOutput();
			startCombat(new Succubus());
			combat.runAway();
		}

	}

}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by Basilisk.
	 */
	public class PlayerBasiliskPregnancy implements VaginalPregnancy
	{
		private var output:GuiOutput;
		private var pregnancyProgression:PregnancyProgression;

		/**
		 * Create a new Basilisk pregnancy for the player. Registers pregnancy for Basilisk.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerBasiliskPregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			// needed as an instance variable for refactor test code (detectVaginalBirth)
			this.pregnancyProgression = pregnancyProgression;
			this.output = output;

			pregnancyProgression.registerVaginalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_BASILISK, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateVaginalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.pregnancyIncubation === 185) {
				output.text("\nYour belly grumbles as if empty, even though you ate not long ago.  Perhaps with all the exercise you're getting you just need to eat a little bit more.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 160) {
				output.text("\nYour belly looks a little pudgy");

				if (player.thickness > 60 && player.tone < 40) {
					output.text(" even for you");
				}

				output.text(", maybe you should cut back on all the food you've been consuming lately?\n");

				displayedUpdate = true;
			}
			if (player.pregnancyIncubation === 140) {
				output.text("\nYour belly is definitely getting bigger, and no matter what you do, you can't seem to stop yourself from eating at the merest twinge of hunger.  The only explanation you can come up with is that you've gotten pregnant during your travels.  Hopefully it won't inconvenience your adventuring.\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 110) {
				output.text("\nYour belly has gotten nice and big, perhaps as big as you remember the bellies of the pregnant women back home being.  The elders always did insist on everyone doing their part to keep the population high enough to sustain the loss of a champion every year.  You give yourself a little hug, getting a surge of happiness from your hormone-addled body.  Pregnancy sure is great!\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 72) {
				output.text("\nThe huge size of your pregnant belly constantly impedes your movement, but the constant squirming and shaking of your unborn offspring makes you pretty sure you won't have to carry them much longer.  A sense of motherly pride wells up in your breast - you just know you'll have such wonderful babies.");

				if (player.cor < 50) {
					output.text("  You shudder and shake your head, wondering why you're thinking such unusual things.");
				}

				output.text("\n");

				displayedUpdate = true;
			}

			if (player.pregnancyIncubation === 32 || player.pregnancyIncubation === 64 || player.pregnancyIncubation === 85 || player.pregnancyIncubation === 150) {
				//Increase lactation!
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() >= 1 && player.biggestLactation() < 2) {
					output.text("\nYour breasts feel swollen with all the extra milk they're accumulating.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() > 0 && player.biggestLactation() < 1) {
					output.text("\nDrops of breastmilk escape your nipples as your body prepares for the coming birth.\n");
					player.boostLactation(.5);

					displayedUpdate = true;
				}

				//Lactate if large && not lactating
				if (player.biggestTitSize() >= 3 && player.mostBreastsPerRow() > 1 && player.biggestLactation() === 0) {
					output.text("\nYou realize your breasts feel full, and occasionally lactate.  It must be due to the pregnancy.\n");
					player.boostLactation(1);

					displayedUpdate = true;
				}

				//Enlarge if too small for lactation
				if (player.biggestTitSize() === 2 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have swollen to C-cups, in light of your coming pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}

				//Enlarge if really small!
				if (player.biggestTitSize() === 1 && player.mostBreastsPerRow() > 1) {
					output.text("\nYour breasts have grown to B-cups, likely due to the hormonal changes of your pregnancy.\n");
					player.growTits(1, 1, false, 3);

					displayedUpdate = true;
				}
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function vaginalBirth():void
		{
			pregnancyProgression.detectVaginalBirth(PregnancyStore.PREGNANCY_BASILISK);
			kGAMECLASS.highMountains.basiliskScene.basiliskBirth();
		}
	}
}


code:
package classes.Scenes.Monsters.pregnancies
{
	import classes.CockTypesEnum;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Player;
	import classes.PregnancyStore;
	import classes.Scenes.AnalPregnancy;
	import classes.Scenes.PregnancyProgression;
	import classes.Scenes.VaginalPregnancy;
	import classes.internals.GuiOutput;
	import classes.internals.Utils;

	/**
	 * Contains pregnancy progression and birth scenes for a Player impregnated by bee.
	 */
	public class PlayerBeePregnancy implements AnalPregnancy
	{
		private var pregnancyProgression:PregnancyProgression;
		private var output:GuiOutput;

		/**
		 * Create a new bee pregnancy for the player. Registers pregnancy for bee.
		 * @param	pregnancyProgression instance used for registering pregnancy scenes
		 * @param	output instance for gui output
		 */
		public function PlayerBeePregnancy(pregnancyProgression:PregnancyProgression, output:GuiOutput)
		{
			this.output = output;
			this.pregnancyProgression = pregnancyProgression;

			pregnancyProgression.registerAnalPregnancyScene(PregnancyStore.PREGNANCY_PLAYER, PregnancyStore.PREGNANCY_BEE_EGGS, this);
		}

		/**
		 * @inheritDoc
		 */
		public function updateAnalPregnancy():Boolean
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			if (player.buttPregnancyIncubation === 36) {
				output.text("\nYou feel bloated, your bowels shifting uncomfortably from time to time.\n");

				displayedUpdate = true;
			}

			if (player.buttPregnancyIncubation === 20) {
				output.text("\nA honey-scented fluid drips from your rectum.  At first it worries you, but as the smell fills the air around you, you realize anything with such a beautiful scent must be good.  ");

				if (player.cockTotal() > 0) {
					output.text("The aroma seems to permeate your very being, slowly congregating in your ");
				}

				if (player.cockTotal() === 1) {
					output.text(player.cockDescript(0));

					if (player.countCocksOfType(CockTypesEnum.HORSE) === 1) {
						output.text(", each inhalation making it bigger, harder, and firmer.  You suck in huge lungfuls of air, until your " + player.cockDescript(0) + " is twitching and dripping, the flare swollen and purple.  ");
					}

					if (player.dogCocks() === 1) {
						output.text(", each inhalation making it thicker, harder, and firmer.  You suck in huge lungfuls of air, desperate for more, until your " + player.cockDescript(0) + " is twitching and dripping, its knot swollen to the max.  ");
					}

					if (player.countCocksOfType(CockTypesEnum.HUMAN) === 1) {
						output.text(", each inhalation making it bigger, harder, and firmer.  You suck in huge lungfuls of air, until your " + player.cockDescript(0) + " is twitching and dripping, the head swollen and purple.  ");
					}

					//FAILSAFE FOR NEW COCKS
					if (player.countCocksOfType(CockTypesEnum.HUMAN) === 0 && player.dogCocks() === 0 && player.countCocksOfType(CockTypesEnum.HORSE) === 0) {
						output.text(", each inhalation making it bigger, harder, and firmer.  You suck in huge lungfuls of air until your " + player.cockDescript(0) + " is twitching and dripping.  ");
					}
				}

				if (player.cockTotal() > 1) {
					output.text("groin.  Your " + player.multiCockDescriptLight() + " fill and grow with every lungful of the stuff you breathe in.  You suck in great lungfuls of the tainted air, desperate for more, your cocks twitching and dripping with need.  ");
				}

				output.text("You smile knowing you couldn't stop from masturbating if you wanted to.\n");

				kGAMECLASS.dynStats("int", -.5, "lus", 500);

				displayedUpdate = true;
			}

			return displayedUpdate;
		}

		/**
		 * @inheritDoc
		 */
		public function analBirth():void
		{
			//TODO remove this once new Player calls have been removed
			var player:Player = kGAMECLASS.player;
			var displayedUpdate:Boolean = false;

			output.text("\n");

			output.text(kGAMECLASS.images.showImage("birth-beegirl"));

			output.text("There is a sudden gush of honey-colored fluids from your ass.  Before panic can set in, a wonderful scent overtakes you, making everything ok.  ");

			if (player.cockTotal() > 0) {
				output.text("The muzzy feeling that fills your head seems to seep downwards, making your equipment hard and tight.  ");
			}

			if (player.vaginas.length > 0) {
				output.text("Your " + player.vaginaDescript(0) + " becomes engorged and sensitive.  ");
			}

			output.text("Your hand darts down to the amber, scooping up a handful of the sticky stuff.  You wonder what your hand is doing as it brings it up to your mouth, which instinctively opens.  You shudder in revulsion as you swallow the sweet-tasting stuff, your mind briefly wondering why it would do that.  The stuff seems to radiate warmth, quickly pushing those nagging thoughts away as you scoop up more.\n\n");
			output.text("A sudden slip from below surprises you; a white sphere escapes from your anus along with another squirt of honey.  Your drugged brain tries to understand what's happening, but it gives up, your hands idly slathering honey over your loins.  The next orb pops out moments later, forcing a startled moan from your mouth.  That felt GOOD.  You begin masturbating to the thought of laying more eggs... yes, that's what those are.  You nearly cum as egg number three squeezes out.  ");

			if (player.averageLactation() >= 1 && player.biggestTitSize() > 2) {
				output.text("Seeking even greater sensation, your hands gather the honey and massage it into your " + player.breastDescript(0) + ", slowly working up to your nipples.  Milk immediately begins pouring out from the attention, flooding your chest with warmth.  ");
			}

			output.text("Each egg seems to come out closer on the heels of the one before, and each time your conscious mind loses more of its ability to do anything but masturbate and wallow in honey.\n\n");
			output.text("Some time later, your mind begins to return, brought to wakefulness by an incredibly loud buzzing...  You sit up and see a pile of dozens of eggs resting in a puddle of sticky honey.  Most are empty, but a few have hundreds of honey-bees emptying from them, joining the massive swarms above you.  ");

			if (player.cor < 35) {
				output.text("You are disgusted, but glad you were not stung during the ordeal.  You stagger away and find a brook to wash out your mouth with.");
			}

			if (player.cor >= 35 && player.cor < 65) {
				output.text("You are amazed you could lay so many eggs, and while the act was strange there was something definitely arousing about it.");
			}

			if (player.cor >= 65 && player.cor < 90) {
				output.text("You stretch languidly, noting that most of the drugged honey is gone.  Maybe you can find the Bee again and remember to bottle it next time.");
			}

			if (player.cor >= 90) {
				output.text("You lick your lips, savoring the honeyed residue on them as you admire your thousands of children.  If only every night could be like this...\n");
			}

			player.orgasm('Anal');

			kGAMECLASS.dynStats("int", 1, "lib", 4, "sen", 3);

			if (player.buttChange(20, true)) {
				output.text("\n");
			}

			if (player.butt.rating < 17) {
				if (player.butt.rating < 13) {
					//Guaranteed increase up to level 10
					player.butt.rating++;

					output.text("\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.");
				} else if (Utils.rand(2) === 0) {
					//Big butts only increase 50% of the time.
					player.butt.rating++;

					output.text("\nYou notice your " + player.buttDescript() + " feeling larger and plumper after the ordeal.");
				}
			}

			output.text("\n");

			displayedUpdate = true;

			pregnancyProgression.detectAnalBirth(PregnancyStore.PREGNANCY_BEE_EGGS);
		}
	}
}