code:
package classes.Scenes.Areas.Forest
{
	import classes.*;
	import classes.BodyParts.*;
	import classes.BodyParts.Butt;
	import classes.BodyParts.Hips;
	import classes.GlobalFlags.*;
import classes.StatusEffects.Combat.ParalyzeVenomDebuff;
import classes.internals.*;

	public class BeeGirl extends Monster {

		override public function defeated(hpVictory:Boolean):void {
			game.forest.beeGirlScene.beeGirlPCVictory(hpVictory);
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void
		{
			if (pcCameWorms) {
				outputText("\n\nThe bee-girl goes white and backs away with a disgusted look on her face.\n\n");
				game.combat.cleanupAfterCombat();
			}
			else {
				game.forest.beeGirlScene.beeRapesYou();
			}
		}

		private function beeStingAttack():void {
			//Determine if dodged!
			var result:Object = combatAvoidDamage({doDodge:true, doParry:false, doBlock:false});
			if (result.dodge != null) {
				var possibleChoices:Array =  ["You narrowly avoid " + a + short + "'s stinger!", "You dodge " + a + short + "'s stinger with superior quickness!", "You deftly avoid " + a + short + "'s slow attempts to sting you."];
				outputText(possibleChoices[rand(possibleChoices.length)]);
				return;
			}
			if (result.block){
				outputText("You manage to raise your shield in time and block the " + a + short + "'s stinger!");
				return;
			}
			//determine if avoided with armor.
			if (player.armorDef >= 10 && rand(4) > 0) {
				outputText("Despite her best efforts, " + a + short + "'s sting attack can't penetrate your armor.");
				return;
			}
			//Sting successful!  Paralize or lust?
			//Lust 50% of the time
			if (rand(2) == 0) {
				outputText("Searing pain lances through you as " + a + short + " manages to sting you!  You stagger back a step and nearly trip, flushing hotly.  ");
				outputText("Oh no!  You've been injected with some kind of aphrodisiac.  You've got to keep focused, you can't think about... fucking... ");
				if (player.gender == 1) outputText("or dripping honey-slicked cunts beckoning you. ");
				if (player.gender == 2) outputText("planting your aching sex over her face while you lick her sweet honeypot. ");
				if (player.gender == 3) outputText("or cocks, tits, and puffy nipples. ");
				var lustDmg:int = 25;
				player.takeLustDamage(lustDmg, true);
				if (player.lust100 > 60) {
					outputText(" You shake your head and struggle to stay focused,");
					if (player.gender == 1 || player.gender == 3) outputText(" but it's difficult with the sensitive bulge in your groin.");
					if (player.gender == 2) outputText(" but can't ignore the soaking wetness in your groin.");
					if (player.sens100 > 50) outputText("  The sensitive nubs of your nipples rub tightly under your " + player.armorName + ".");
				}
				else outputText(" You shake your head and clear the thoughts from your head, focusing on the task at hand.");
				if (!player.hasStatusEffect(StatusEffects.lustvenom)) player.createStatusEffect(StatusEffects.lustvenom, 0, 0, 0, 0);
			}
			//Paralise the other 50%!
			else {
				outputText("Searing pain lances through you as " + a + short + " manages to sting you!  You stagger back a step and nearly trip, finding it hard to move yourself.");
				var paralyze:ParalyzeVenomDebuff = player.statusEffectByType(StatusEffects.ParalyzeVenom) as ParalyzeVenomDebuff;
				if (paralyze) {
					outputText("  It's getting much harder to move, you're not sure how many more stings like that you can take!");
				} else {
					paralyze = new ParalyzeVenomDebuff();
					player.addStatusEffect(paralyze);
					outputText("  You've fallen prey to paralyzation venom!  Better end this quick!");
				}
				paralyze.increase();
			}
			if (player.lust >= player.maxLust())
				doNext(game.combat.endLustLoss);
			else doNext(game.playerMenu);
		}

		override protected function performCombatAction():void
		{
			var actionChoices:MonsterAI = new MonsterAI();
			actionChoices.add(eAttack,1,true,0,FATIGUE_NONE,RANGE_RANGED);//bzzbzz I can fly and hit you anywhere
			actionChoices.add(beeStingAttack,1,true,0,FATIGUE_PHYSICAL,RANGE_RANGED);
			actionChoices.exec();
		}

		public function BeeGirl()
		{
			super();
			this.a = "a ";
			this.short = "bee-girl";
			this.imageName = "beegirl";
			this.long = "A bee-girl buzzes around you, filling the air with intoxicatingly sweet scents and a buzz that gets inside your head.  She has a humanoid face with small antennae, black chitin on her arms and legs that looks like shiny gloves and boots, sizable breasts, and a swollen abdomen tipped with a gleaming stinger.";
			this.race = "Bee-Morph";
			this.createVagina(false, Vagina.WETNESS_SLAVERING, Vagina.LOOSENESS_GAPING);
			createBreastRow(Appearance.breastCupInverse("DD"));
			this.ass.analLooseness = Ass.LOOSENESS_STRETCHED;
			this.ass.analWetness = Ass.WETNESS_NORMAL;
			this.tallness = rand(14) + 59;
			this.hips.rating = Hips.RATING_CURVY+3;
			this.butt.rating = Butt.RATING_EXPANSIVE;
			this.lowerBody.type= LowerBody.BEE;
			this.skin.tone = "yellow";
			this.hair.color = randomChoice("black","black and yellow");
			this.hair.length = 6;
			initStrTouSpeInte(30, 30, 30, 20);
			initLibSensCor(60, 55, 0);
			this.weaponName = "chitin-plated fist";
			this.weaponVerb="armored punch";
			this.armorName = "chitin";
			this.armorDef = 18;
			this.lust = 20 + rand(40);
			this.lustVuln = 0.9;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 4;
			this.gems = rand(15) + 1;
			this.drop = new ChainedDrop().add(consumables.OVIELIX, 1 / 10)
					.add(consumables.W__BOOK, 1 / 10)
					.add(consumables.BEEHONY, 1 / 2)
					.elseDrop(useables.B_CHITN);
			this.antennae.type = Antennae.BEE;
			this.wings.type = Wings.BEE_LIKE_SMALL;
			this.tail.type = Tail.BEE_ABDOMEN;
			this.tail.venom = 100;
			//this.special1 = beeStingAttack;
			checkMonster();
		}

	}

}


code:
/**
 * ...
 * @author melchi'is first attempt at making a monster
 * special thanks to ox and everyone for helping
 */
package classes.Scenes.Areas.Forest
{
	import classes.*;
	import classes.BodyParts.Butt;
	import classes.BodyParts.Hips;
	import classes.internals.*;
	import classes.GlobalFlags.*;
	import classes.Items.ArmorLib;

	public class Dryad extends Monster
	{

		//Melee special
		public function slash():void {
			outputText("The dryad reaches for you with claw-like wooden hands!  As soon as she is close, she slashes with her claws ");
			if (player.getEvasionRoll(this)) {
				outputText("and you deftly avoid her claws!");
			}
			else {
				outputText("and tears into your flesh! ");
				//Get hit
				var damage:int = str + weaponAttack + rand(40);
				damage = player.reduceDamage(damage,this);
				if (damage < 10) damage = 10;
				player.takeDamage(damage, true);
			}
		}
		//lust special
		public function pollen():void {
			var lustDmg:int = player.lib / 10 + player.cor / 10 + 10;
			outputText("The dryad runs her hands through her leafy hair and spins around.   \n\n Yellow and pink sparkles of pollen gently float through the air in your direction. ");
			if (player.getEvasionRoll(this)) {
				outputText("You cover your mouth and nose and avoid breathing in most of the pollen!");
			}
			else {
				outputText("You take a deep breath of the pollen!\n ");
				outputText("Your mind becomes a haze as a hot wave of arousal washes over you.");
				player.takeLustDamage(lustDmg, true);
			}
		}

		override protected function performCombatAction():void
		{
			var actionChoices:MonsterAI = new MonsterAI()
				.add(eAttack);
			actionChoices.add(slash,1,true,0,FATIGUE_NONE,RANGE_MELEE);
			actionChoices.add(pollen,1,true,0,FATIGUE_PHYSICAL,RANGE_RANGED);
			actionChoices.exec();
		}
		override public function defeated(hpVictory:Boolean):void
		{
			(new DryadScene()).winagainstdryad();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void {
			(new DryadScene()).loseTodryad();
		}
		function Dryad()
		{
			this.a = "the ";
			this.short = "Corrupted Dryad";
			this.imageName = "dryad";
			this.long = "The dryad before you is brimming with corruption, her hair is composed of dark brown leaves. Her skin looks to be made of corrupted wood, especially her fingers which are shaped like sharp claws. Her clothing is nothing more than leaves and straw put into a gown. Her eyes are a deep and hungry dark red. Her bark-like skin seeps a thick pink substance.  ";
			this.race = "Dryad";
			this.createVagina(false, Vagina.WETNESS_DRY, Vagina.LOOSENESS_NORMAL);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 40, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("C"));
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,30,0,0,0);
			this.tallness = 60;
			this.hips.rating = Hips.RATING_AMPLE+2;
			this.butt.rating = Butt.RATING_LARGE;
			this.skin.tone = "birch-white";
			this.hair.color = "dark brown";
			this.hair.length = 4;
			initStrTouSpeInte(95, 75, 70, 100);
			initLibSensCor(55, 35, 45);
			this.weaponName = "claws";
			this.weaponVerb = "slash";
			this.weaponAttack = 25;
			this.armorName = "forest gown";
			this.armorDef = 24;
			this.fatigue = 0;
			this.bonusHP = 425;
			this.lust = 35;
			this.lustVuln = 0.4;
			this.level = 20;
			this.gems = rand(15) + 25;
			this.drop = new WeightedDrop().
						add(armors.FRSGOWN, 1);
			/*this.special1 = slash;
			this.special2 = pollen;*/

			checkMonster();
		}
	}
}

license: unknown


code:
//Dryad Scene
package classes.Scenes.Areas.Forest
{
	import classes.BaseContent;
	import classes.display.SpriteDb;

	public class DryadScene extends BaseContent
	{

		public function DryadScene() {}

		public function encounterdryad():void {
			clearOutput();
			//rustle in the bushes
			outputText("While walking through the  glade you notice a rustling in the bushes.   Do you investigate?\n\n");
			doYesNo(fightagainstdryad, camp.returnToCampUseOneHour);

		}
		public function fightagainstdryad(): void {
			outputText("Walking up to where you heard the rustling, you notice what looks like a tree.   This tree appears to be wearing a dress made of leaves and straw.  You take a step closer and notice the tree has the silhouette of a slender woman.   Taking yet another step closer, you see this tree looks more like a person than a tree.   Her hair is thin vines with leaves growing off of them and she has a human-like face,  mouth, wooden arms, hands with claw-like fingers, legs and feet.   Before you can decide what to think her eyes pop open, glowing red, hungry eyes... Her lips curl into a wicked smile and she lunges at you! ");
			startCombat(new Dryad());
		}
		public function winagainstdryad():void {
			clearOutput();
			outputText("The dryad creaks like old wood as she collapses to the ground, too " + (monster.HP <= 0 ? "injured" : "aroused") + " to continue fighting. ");
			if (player.hasCock() && player.lust >= 33) {
				outputText("\n\nWhile gazing on her prone figure carnal desire wells up inside you.   Do you have your way with her? ");
				doYesNo( winAgainstdryadRape , combat.cleanupAfterCombat);
			}
			else {
				combat.cleanupAfterCombat();
			}
		}

		public  function winAgainstdryadRape():void {
			clearOutput();

			if (player.hasCock()) {
				outputText("Crouching down beside her, you run your hands up her legs pulling her dress up while doing so.   Seeing her girly parts exposed, you remove your armor and whip out your member.  You roll her onto her stomach and place both hands on her hips.   Throwing caution into the wind, you roughly plow her and immediately regret it.   Your [cock] receives numerous splinters and pull out receiving even more.   You stagger from the pain and limp back to camp. ");
			}
			else
			   outputText("You saunter over to the defeated dryad and roughly grab her by the hair.  \n  'Lick it!' you demand and she she complies.   You keep her licking until you are satisfied then toss her aside and head back to camp smelling of tree sap.");
			dynStats("lib", -2, "cor", 3);
			combat.cleanupAfterCombat();
		}

		public  function loseTodryad(fromBattle:Boolean = true):void {
			clearOutput();
			if (fromBattle) outputText("Too badly " + (player.HP <= 0 ? "injured" : "aroused") + " by the dryad, you give in  and let her she wants to you.\n\n");
			if (player.hasCock()) {
				outputText("The dryad rushes towards you and wraps her arms around you.   Her bark-like skin is cold and rough.   Your bodies entangle as her sap rubs onto your person.    She places a hand behind your head and locks eyes with you.   Her glowing red eyes burn desire into your skull.   Her lips part and she frenches you deeply.\n\n");
				outputText("Seeing you suitably aroused, she tears into your clothing until your [cock]  is exposed.\n");
				outputText("'Pollinate me' !  she demands hungrily.");
				outputText("She places her hand on your [cock] and sticky sap oozes from her palm lubricates your member.\n");
				outputText("Greedily, her hand jerks your member until you feel like you are about to burst.   She senses this and kneels in front of your [cock].   Her leaf hair falls down in front of her face as you spray all over her hair and face.\n");
				outputText("Satisfied, she stands up and looks at you one last time 'I will to shed a thousand seeds.'   As she steps away her leaf-hair seems to brighten and flowers start to bud from her locks.\n");
				outputText("You wake up several hours later wondering what just happened.\n");
			} else {
				outputText("The dryad sees that you no longer have the ability to fight.   You open your mouth to say something but she kisses you to keep you from talking.    Thus, your words come out as a surprised squeaking sounds.   She works her way around your body kissing and groping as she goes.   She continues working away until you are a shuddering mess in her arms.");
			}
			player.orgasm('Generic');
			dynStats("lib", -2, "cor", 3);
			if (fromBattle)
				combat.cleanupAfterCombat();
			else
				doNext(camp.returnToCampUseTwoHours);
		}
	}
}


code:
package classes.Scenes.Areas.Forest
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.Items.Weapon;
	import classes.internals.*;
	import classes.Items.WeaponLib;
	import classes.BodyParts.*;

	public class Dullahan extends Monster
	{
		public var determined:Number = 0;
		override protected function handleStun():Boolean
		{
			if (flags[kFLAGS.DULLAHAN_RUDE] == 2 && rand(2) == 0){
				outputText("[say: Not... good enough!] The Dullahan finds more determination and recovers from her daze!\n\n");
				removeStatusEffect(StatusEffects.Stunned);
				return true;
			}else{
			outputText("Despite the Dullahan's head clearly being disoriented, the body still continues to act, though it isn't very precise due to lacking sight and hearing.\n\n");
			removeStatusEffect(StatusEffects.Stunned);
			createStatusEffect(StatusEffects.Blind, 3, 0, 0, 0);
			return true;
			}
		}

		override protected function handleFear():Boolean
		{
			if (flags[kFLAGS.DULLAHAN_RUDE] == 2) outputText("[say: You know the things I've seen, [name]. No petty illusion can overwhelm those corporeal nightmares.]\n\n");
			else outputText("The Dullahan laughs excessively at your attempts. [say: You cannot frighten DEATH itself!] she screams. Although her voice cracks as she tries to make it sound deeper, she is actually unaffected by your attempt!\n\n");
			removeStatusEffect(StatusEffects.Fear);
			return true;
		}

		public function flurryAttack():void {//kind of shamelessly copied from the Valkyrie
			outputText("The Dullahan rears back for a moment, and dashes forward with a flurry of slashes! The first attack is oddly easy to dodge");
			var customOutput:Array = [
			"[BLIND] ,and step away as you watch the Dullahan's blind attacks strike only air. ",
			"[SPEED], and you successfully dodge her followup attacks!",
			"[EVADE], and you dodge the rest of the flurry, thanks to your incredible evasive ability!",
			"[MISDIRECTION], and you counter her feint with your own practiced misdirection, avoiding all hits!",
			"[FLEXIBILITY], and the rest also fail to hit as you bend and contort to barely dodge her strikes!",
			"[UNHANDLED], and you successfully dodge her followup attacks!",
			"[BLOCK], and you manage to raise your shield in time to block the rest of her flurry!"];
			if(!playerAvoidDamage({doDodge:true, doParry:false, doBlock:true, doFatigue:false},customOutput)){
				outputText(", but it was a feint! You dodge into a position perfect for her to strike, and she hits you multiple times before you can back off to safety!");
				var attacks:int = 2 + rand(2);
				if (flags[kFLAGS.DULLAHAN_RUDE] == 2) attacks += 4;
				var damage:int = 0
				while (attacks > 0) {
					damage += ((str) + rand(50))
					damage = player.reduceDamage(damage,this);
					attacks--
				}
				player.takeDamage(damage, true);
			}
		}

		public function horror():void{
			outputText("The Dullahan dashes back, and covers itself completely in its cloak. She turns around, as if preparing something.\n\nWhen you decide to attack, you're surprised as she turns around, holding her head on her left hand, pointing at you with the other. She screams in a terrifying voice as her eyes glow with a menacing purple light.");
			if (flags[kFLAGS.DULLAHAN_RUDE] == 2) outputText(" [say: The abyss is vast, and it awaits us all. Welcome it, [name]. This is what you've asked for.]");
			else outputText(" [say: [name]! I, the horseman of the dead, am here to claim your soul!]");
			if (rand(player.inte) > 50){
				outputText(" You focus as she begins morphing into a tall, revulsing and horrifying specter.\nWith some effort, you see past her illusion. The Dullahan notices, and appears to be flustered for a moment as she reattaches her head and returns to a combat stance.");
				return;

			}else{
				outputText(" You cower as she morphs into a tall, revulsing and horrifying specter, wailing the cries of the dead in an unknowable tongue.\nBy the gods, you have picked a fight with the horseman of the dead, an unknowable entity of oblivion! You can't face such a foe, it's impossible, it's madness itself!");
				player.createStatusEffect(StatusEffects.Whispered, 0, 0, 0, 0);
				return;
			}
		}

		public function determination():void{
			if (determined == 0){
				outputText("[say: Did you expect me to just lay down and accept your blade, [name]? No. Despite my apperance, I do not welcome death. You, however seem to court it!]");
			}else{
				outputText("[say: I've suffered too much to fall here. Too much. I will not!]");
			}
			outputText("\nThe dullahan seems even more focused than before!");
			str += 10;
			spe += 30;
			weaponAttack += 10;
			determined += 1;

			var healAmount:Number = maxHP() * 0.25;
			addHP(maxHP()*0.25);
			outputText("(" + healAmount + ")");

		}

		public function pommelBash():void{
			outputText("The dullahan charges at you with her sword. You prepare to defend, but at the last second, she switches her attack direction, shoving the pommel of her saber downwards, towards your head!");
			var result:Object = combatAvoidDamage({doDodge:true, doParry:false, doBlock:false});
			if (result.dodge != null){
				outputText("You manage to dodge the peculiar attack without any harm.");
			}else{
				outputText("The pommel bashes powerfully against your skull, causing way more pain than you expected such a blow to.");
				var damage:Number = player.reduceDamage(str,this);
				player.takeDamage(damage, true);
				if (player.stun(1,100)){
					outputText(" You're left stunned by the concussive force of the attack!");
				}

			}

		}

		public function dullahanDisarm():void{
			outputText("The Dullahan charges at you and strikes, but her blade does not target you. She clashes it with your [weapon], sliding her blade down to the grip and then pulling on it fiercely!");
			if (rand(player.str) < rand(str + 30)){
				outputText("She manages to pull your weapon from your hands, throwing it far from your reach!\n\nThe dullahan moves back and looks at you, mockingly. [say: Pick it up.]");
				player.disarm(0);
				this.weaponAttack = 15;
				this.weaponName = "saber pommel";
				this.weaponVerb = "bash";
				this.spe += 20;
			}else{
				outputText("\nDespite her efforts, you win the struggle, and keep your weapon.");
			}

		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean = false):void {
			if (flags[kFLAGS.DULLAHAN_RUDE] == 2) game.forest.dullahanScene.dullahanFinishesYouOff();
			else if (hasStatusEffect(StatusEffects.Spar)) game.forest.dullahanScene.defeatedDullahanVictoryFriendly();
			else game.forest.dullahanScene.dullahanVictory();
		}

		override public function handleCombatLossText(inDungeon:Boolean, gemsLost:int):int
		{
			if (hasStatusEffect(StatusEffects.Spar)){
				if (player.HP <= 0) player.HP = 1;
				return 1;
			}
			return super.handleCombatLossText(false,10);
		}

		override public function defeated(hpVictory:Boolean):void
		{
			if (flags[kFLAGS.DULLAHAN_RUDE] == 2) game.forest.dullahanScene.defeatedDullahanFinishHerOff(hpVictory);
			else if (hasStatusEffect(StatusEffects.Spar)) game.forest.dullahanScene.defeatedDullahanFriendly(hpVictory);
			else game.forest.dullahanScene.defeatedDullahan(hpVictory);

		}

		override protected function performCombatAction():void
		{
			if (HPRatio() <= 0.5 && flags[kFLAGS.DULLAHAN_RUDE] == 2 && determined == 0){
				determination();
				return;
			}
			if (HPRatio() <= 0.25 && flags[kFLAGS.DULLAHAN_RUDE] == 2 && determined == 1){
				determination();
				return;
			}
			var actionChoices:MonsterAI = new MonsterAI()
				.add(eAttack, 2,true,0,FATIGUE_NONE,RANGE_MELEE);
			actionChoices.add(pommelBash,3,player.hasStatusEffect(StatusEffects.Disarmed),0,FATIGUE_NONE,RANGE_MELEE);
			actionChoices.add(dullahanDisarm, 1, !player.hasStatusEffect(StatusEffects.Disarmed) && !player.weapon.isAttached() && flags[kFLAGS.DULLAHAN_RUDE] == 2, 10,FATIGUE_PHYSICAL,RANGE_MELEE);
			actionChoices.add(flurryAttack, 1, !player.hasStatusEffect(StatusEffects.Disarmed), 15,FATIGUE_PHYSICAL,RANGE_MELEE);
			actionChoices.add(horror, 1, !player.hasStatusEffect(StatusEffects.Disarmed) && HPRatio() < .6, 15,FATIGUE_MAGICAL,RANGE_RANGED);
			actionChoices.exec();
		}

		override public function react(context:int):Boolean{
			switch(context){
				case CON_WHENATTACKED:
					//Dullahan counter
					var chancetoCounter:Number = 90;
					if (hasStatusEffect(StatusEffects.Blind)) chancetoCounter -= 30;
					if (flags[kFLAGS.DULLAHAN_RUDE] == 2) chancetoCounter += 25;
					chancetoCounter -= player.spe / 3;
					chancetoCounter -= lust / 2; //body loses composure as you tease it.
					if(rand(100) < chancetoCounter){
						if (!game.combat.isWieldingRangedWeapon()){
							var thornsDamage:Number = player.reduceDamage(rand(40) + 100,this);
							outputText("The Dullahan expertly parries and counters your attack, damaging you!(" + thornsDamage + ")");
							player.takeDamage(thornsDamage);
						}else{
							outputText("The Dullahan expertly deflects your projectile with a swipe of her sabre!");
						}
						game.combat.damage = 0;
						return false;
					}
					break;
				case CON_PLAYERWAITED:
					clearOutput();
					if (player.hasStatusEffect(StatusEffects.Disarmed)){
						outputText("You run desperately over to your weapon and grab it. The Dullahan stays silent, with a clear look of disapproval.\n\n");
						weaponName = "saber";
						weaponVerb = "slash";
						weaponAttack = 50;
						spe -= 20;
					player.rearm();
					}else{
						outputText("You decide not to take any action this round.\n\n");
					}
					return false;
					break;

			}
		return true;
		}

		/*
		override public function whenAttacked():Boolean{
			//Dullahan counter
			var chancetoCounter:Number = 90;
			if (hasStatusEffect(StatusEffects.Blind)) chancetoCounter -= 30;
			if (flags[kFLAGS.DULLAHAN_RUDE] == 2) chancetoCounter += 25;
			chancetoCounter -= player.spe / 3;
			chancetoCounter -= lust / 2; //body loses composure as you tease it.
			if(rand(100) < chancetoCounter){
			if (!game.combat.isWieldingRangedWeapon()){
			var thornsDamage:Number = player.reduceDamage(rand(40) + 100,this);
			outputText("\nThe Dullahan expertly parries and counters your attack, damaging you!(" + thornsDamage + ")\n\n");
			player.takeDamage(thornsDamage);
			}else{
			outputText("\nThe Dullahan expertly deflects your projectile with a swipe of her sabre!\n");
			}
			game.combat.damage = 0;
			if (player.hasStatusEffect(StatusEffects.FirstAttack)) {
				game.combat.attack();
				return false;
			}
			return false;
			}
			return true;
		}*/

		public function Dullahan()
		{
			this.a = "a ";
			this.short = "Dullahan";
			this.imageName = "dullahan";
			this.long = "Before you stands a female knight. She looks mostly human, aside from her skin, which is pale blue, and eyes, which are black, with golden pupils. Her neat hair is very long, reaching up to her thighs. She wears what amounts to an armored corset; her breasts are barely covered by tight leather. While her forearm, abdomen and calves are covered in black steel plates, she's wearing thigh-highs and a plain white skirt that barely covers her legs. Over her armor, she wears a needlessly long cloak that wraps around her neck like a scarf. She has a cold but determined look to her, and her stance shows she has fencing experience.";
			// this.plural = false;
			this.createVagina(false, 1, 1);
			createBreastRow(Appearance.breastCupInverse("E"));
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_NORMAL;
			this.tallness = 60;
			this.hips.rating = Hips.RATING_SLENDER;
			this.butt.rating = Butt.RATING_AVERAGE;
			this.skin.tone = "pale blue";
			this.skin.type = Skin.PLAIN;
			//this.skinDesc = Appearance.Appearance.DEFAULT_SKIN_DESCS[Skin.FUR];
			this.hair.color = "white";
			this.hair.length= 20;
			initStrTouSpeInte(85, 70, 80, 60);
			initLibSensCor(40, 50, 15);
			this.weaponName = "saber";
			this.weaponVerb = "slash";
			this.fatigue = 0;
			this.weaponAttack = ((flags[kFLAGS.DULLAHAN_RUDE] == 2) ? 50 : 20)
			this.armorName = "black and gold armor";
			this.armorDef = 30;
			this.bonusHP = ((flags[kFLAGS.DULLAHAN_RUDE] == 2) ? 1500 : 380);
			this.lust = 5 + rand(15);
			this.lustVuln = ((flags[kFLAGS.DULLAHAN_RUDE] == 2) ? 0 : 0.46);

			this.temperment = TEMPERMENT_LUSTY_GRAPPLES;
			this.level = ((flags[kFLAGS.DULLAHAN_RUDE] == 2) ? 25 : 18)
			this.gems = 30;
			this.drop = new WeightedDrop();
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Areas.Forest
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
import classes.Scenes.Combat.CombatAttackData;
import classes.internals.WeightedDrop;
	import classes.BodyParts.*;

	public class DullahanHorse extends Monster
	{
		private var isCharging:Boolean = false;
		private var couchedLanceSpeedBonus:int = 0;
		protected function knightCharge():void {
			if(!isCharging){
                outputText("The dark knight begins charging at you, fearsome scythe outstretched!\n\n");
				couchedLanceSpeedBonus++;
				isCharging = true;
				return;
			}
			switch(extraDistance){
				case 2:
					outputText("The dark knight continues to charge towards you!");
					couchedLanceSpeedBonus++;
                    game.combatAttackData.closeDistance(this);
                    break;
				case 1:
					outputText("The dark knight is nearly within your reach!");
						couchedLanceSpeedBonus++;
                    game.combatAttackData.closeDistance(this);
                    if (player.inte > 50) outputText("\nPreparing to dodge is probably a good idea.");
                    break;
				case 0:
					if (flags[kFLAGS.IN_COMBAT_USE_PLAYER_WAITED_FLAG] == 0) {
						outputText("Now within reach, the knight swings its scythe in a wide arc with a devastating attack!")
						var customOutput:Array = [
						"[BLIND]\n\nThe knight misses you, too blinded for an accurate attack.",
						"[SPEED]\n\nYou successfully dodge its fearsome charge!",
						"[EVADE]\n\n You anticipate the swing, dodging its thanks to your incredible evasive ability!",
						"[MISDIRECTION]\n\nYou use the techniques you learned from Raphael to sidestep and completely avoid its attack!",
						"[FLEXIBILITY]\n\nYou use your incredible flexibility to barely fold your body and avoid its attack!",
						"[UNHANDLED]\n\nYou successfully dodge its fearsome charge!"];
						if(!playerAvoidDamage({doDodge:true, doParry:false, doBlock:false},customOutput)){
								outputText("The long curved scythe hits you, tearing your flesh and dealing a tremendous amount of damage.");
								var damage:int = 0;
								damage = ((str)*3 + rand(50)) + couchedLanceSpeedBonus * 30;
								damage = player.reduceDamage(damage,this);
                            	player.takeDamage(damage, true);
						}
					} else {
						outputText("Taking your time to prepare to dodge, you swiftly roll out of the way as soon as the knight begins its attack. The scythe merely scratches you, and the knight continues to gallop forward.");
						player.takeDamage(10 + rand(10) * couchedLanceSpeedBonus, true);
						isCharging = false;

					}
                    game.combatAttackData.distance(this,false,2);
					break;
				}
		}

		override protected function handleStun():Boolean
		{
			removeStatusEffect(StatusEffects.Uber);
			outputText("The knight stops on its tracks and shakes its head before rearing its steed back to begin charging again. You've bought yourself some time!");
            game.combatAttackData.distance(this,false,2 - this.extraDistance);
			return super.handleStun();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.forest.dullahanScene.dullahanPt2();
		}

		override public function won(hpVictory:Boolean,pcCameWorms:Boolean = false):void {
			game.forest.dullahanScene.dullahanVictory();
		}

		override protected function performCombatAction():void
		{
			knightCharge();
			return;
		}
		public function DullahanHorse()
		{
			this.extraDistance = 2;
			this.distance = DISTANCE_DISTANT;
			this.a = "a ";
			this.short = "Dark Knight";
			this.imageName = "dullahan";
			this.long = "Racing across the battlefield on a black horse is a cloaked knight. You can't make out any of its features, though it is obviously humanoid. It wields a massive scythe which, combined with its fast steed makes for a terrifyingly effective opponent. You can't see its face, but whenever you look at where it should be, a shiver runs down your spine.";
			// this.plural = false;
			this.createVagina(false, 1, 1);
			createBreastRow(Appearance.breastCupInverse("E"));
			this.ass.analLooseness = Ass.LOOSENESS_TIGHT;
			this.ass.analWetness = Ass.WETNESS_NORMAL;
			this.tallness = 60;
			this.hips.rating = Hips.RATING_SLENDER;
			this.butt.rating = Butt.RATING_AVERAGE;
			this.skin.tone = "pale blue";
			this.skin.type= Skin.PLAIN;
			//this.skinDesc = Appearance.Appearance.DEFAULT_SKIN_DESCS[Skin.FUR];
			this.hair.color = "white";
			this.hair.length= 20;
			initStrTouSpeInte(85, 70, 100, 60);
			initLibSensCor(40, 50, 15);
			this.weaponName = "rapier";
			this.weaponVerb="lunge";
			this.weaponAttack = 14;
			this.armorName = "black and gold armor";
			this.armorDef = 17;
			this.bonusHP = 380;
			this.lust = 25 + rand(15);
			this.lustVuln = 0;
			this.temperment = TEMPERMENT_LUSTY_GRAPPLES;
			this.level = 18;
			this.gems = 30;
			this.drop = new WeightedDrop();
			this.special1 = knightCharge;
			this.createPerk(PerkLib.Immovable);
			checkMonster();
		}

	}
}