code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.internals.*;

	public class Clara extends Monster
	{
		private function notMurbleEnjoysTheLacticAcid():void
		{
			//Clara drinks her own milk to recover health and give a minor lust gain to the PC
			outputText("Clara suddenly starts roughly manhandling her tit, noisily stuffing it into her mouth and starting to suck and slobber. Frothy milk quickly stains her mouth and she releases her breast, letting it fall back down. She belches and takes a stance to defend herself again; you can see the injuries you’ve inflicted actually fading as the healing power of her milk fills her.");
			HP += 45;
			lust += 5;
			game.dynStats("lus", (5+player.lib/5));
			combatRoundOver();
		}
		//Clara throws a goblin potion, she has the web potion, the lust potion, and the weakening potion
		//should she try to drug them instead?
		protected function claraDrugAttack():void {
			var temp2:Number = rand(2);
			var color:String = "";
			if (temp2 == 0) color = "red";
			if (temp2 == 1) color = "black";
			//Throw offensive potions at the player
			outputText("Clara suddenly snatches something from a pouch at her belt. \"Try this, little cutie!\" She snarls, and throws a vial of potion at you.", false);
			//Dodge chance!
			if ((player.findPerk(PerkLib.Evade) >= 0 && rand(10) <= 3) || (rand(100) < player.spe/5)) {
				outputText("\nYou narrowly avoid the gush of alchemic fluids!\n", false);
			}
			else
			{
				//Get hit!
				//Temporary heat
				if (color == "red") {
					outputText("\nThe red fluids hit you and instantly soak into your skin, disappearing.  Your skin flushes and you feel warm.  Oh no...\n", false);
					if (player.findStatusEffect(StatusEffects.TemporaryHeat) < 0) player.createStatusEffect(StatusEffects.TemporaryHeat,0,0,0,0);
				}
				//Increase fatigue
				if (color == "black") {
					outputText("\nThe black fluid splashes all over you and wicks into your skin near-instantly.  It makes you feel tired and drowsy.\n", false);
					player.changeFatigue(10 + rand(25));
				}
			}
			combatRoundOver();
			return;
		}
		//Clara teases the PC, and tries to get them to give up
		protected function claraTeaseAttack():void
		{
			//[cocked PCs only]
			if (rand(3) == 0) outputText("Clara hesitates, then lifts up her dress and shows you her womanhood.  Then she slowly utters, \"You know, I’m still a virgin.  You’d be the first thing to ever enter inside this hole, something that Marble never could have offered you.\"  What would it be like, you wonder for a moment, before catching yourself and trying to focus back on the fight.");
			else if (rand(2) == 0) outputText("Clara seems to relax for a moment and bounces her breasts in her hands.  \"Come on, you know how good it is to drink cow-girl milk, just give up!\" she coos.  Despite yourself, you can’t help but remember what it was like, and find yourself becoming aroused.");
			else outputText("Instead of attacking, Clara runs her hands up and down her body, emphasizing all the curves it has.  \"You were made to be the milk slave of this, stop fighting it!\" she says almost exasperated.  Even so, you find your gaze lingering on those curves against your will.");
			outputText("\n");
			game.dynStats("lus",5+player.lib/20);
			combatRoundOver();
		}

		//Once Clara is at half health or lower, she'll cast blind.
		public function claraCastsBlind():void
		{
			outputText("Clara glares at you, clearly being worn down.  Then strange lights start dancing around her hand and she points it in your direction.");
			//Successful:
			if (player.inte / 5 + rand(20) + 1 < 14)
			{
				outputText("\nA bright flash of light erupts in your face, blinding you!  You desperately blink and rub your eyes while Clara cackles with glee.");
				player.createStatusEffect(StatusEffects.Blind,1,0,0,0);
			}
			else outputText("\nYou manage to close your eyes just in time to avoid being blinded by the bright flash of light that erupts in your face!  Clara curses when she see's you're unaffected by her magic.");
			combatRoundOver();
		}
		public function claraGropesBlindPCs():void
		{
			//Clara gropes the PC while they're blinded.  Damage is based on corruption + sensitivity.
			if (player.hasCock() && (!player.hasVagina() || rand(2) == 0)) outputText("Suddenly Clara wraps an arm around you, and sticks a hand into your " + player.armorName + "!  She is able to give your " + player.multiCockDescriptLight + " a good fondle before you can push her away.  \"Admit it - I make you soo hard, don't I?\" she taunts you behind your dazzled vision.");
			//Vagina:
			else if (player.hasVagina()) outputText("A sudden rush of Clara's hoofs clopping is the only warning you get before her attack comes, and you try to bring up your guard, only for her to deftly move past your defense and stick a hand into your " + player.armorName + "!  She manages to worm her way to your [vagina] and pinches your [clit] before you can push her back out!  \"Hmm, yeah, you're soo wet for me.\" she taunts you behind your dazzled vision.");
			//Bum:
			else outputText("Thanks to Clara robbing you of your sight, you lose track of her.  She takes advantage of this, and grabs you from behind, and rubs her considerable curvy cans against your undefended back!  You manage to get her off you after a moment, but not before she gives your [ass] a smack.  \"Everyone will be soo much happier when yoou finally stop fighting me!\" she taunts you behind your dazzled vision.");
			game.dynStats("lus",7+player.lib/15);
			combatRoundOver();
		}
		//Every round if you're in Clara’s base; the PC’s lust is raised slightly.
		protected function claraBonusBaseLustDamage():void
		{
			outputText("\nThe early effects of your addiction are making it harder and harder to continue the fight.  You need to end it soon or you’ll give in to those urges.");
			game.dynStats("lus",2+player.lib/20);
			combatRoundOver();
		}
		override protected function performCombatAction():void
		{
			if (player.findStatusEffect(StatusEffects.ClaraFoughtInCamp) >= 0 && player.statusEffectv1(StatusEffects.ClaraCombatRounds) >= 10)
			{
				HP = 0;
				combatRoundOver();
			}
			if (HP < 50 && rand(2) == 0) {
				notMurbleEnjoysTheLacticAcid();
			}
			else if (player.findStatusEffect(StatusEffects.Blind) >= 0)
			{
				claraGropesBlindPCs();
			}
			else
			{
				var actions:Array = [eAttack,claraDrugAttack,claraTeaseAttack,claraCastsBlind];
				var action:int = rand(actions.length);
				trace("ACTION SELECTED: " + action);
				actions[action]();
			}
			if (player.findStatusEffect(StatusEffects.ClaraCombatRounds) < 0) player.createStatusEffect(StatusEffects.ClaraCombatRounds,1,0,0,0);
			else player.addStatusValue(StatusEffects.ClaraCombatRounds,1,1);

			//Bonus damage if not in camp
			if (HP > 0 && lust < 100 && player.findStatusEffect(StatusEffects.ClaraFoughtInCamp) < 0) claraBonusBaseLustDamage();
		}
		override public function defeated(hpVictory:Boolean):void
		{
			//PC wins via turn count
			if (player.findStatusEffect(StatusEffects.ClaraFoughtInCamp) >= 0 && player.statusEffectv1(StatusEffects.ClaraCombatRounds) >= 10) {}
			else {
				clearOutput();
				//PC wins via health
				if (HP <= 0) outputText("The pissed off cowgirl finally collapses to the ground.  She tries to stand up again, but finds that she can’t.  \"Noo!\" she cries out in frustration, \"You were the perfect slave!  We were meant to be toogether!\"\n\n");
				//PC wins via lust
				else outputText("The fury and anger finally give out to the overwhelming lust that you’ve help Clara feel.  She can’t fight anymore, and falls onto her backside.  She starts feeling herself up, and desperately asks you to fuck her.\n\n");
			}
			game.marblePurification.defeatClaraCuntInAFight();
		}
		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.marblePurification.loseToClara();
		}

		public function Clara()
		{
			trace("Clara Constructor!");
			this.a = "";
			this.short = "Clara";
			this.imageName = "marble";
			this.long = "You are fighting Marble’s little sister Clara!  The cow-girl looks spitting mad, determined to steal you from her sister and make you into her milk slave, with her breasts hanging out for all to see.  Fortunately, she doesn’t look as big or strong as her sister, and you don’t think she’s been trained to fight like Marble has either.  Still, there is no telling what tricks she has up her sleeves, and she is holding a very angry looking heavy mace.";
			// this.plural = false;
			this.createVagina(false, VAGINA_WETNESS_NORMAL, VAGINA_LOOSENESS_NORMAL);
			createBreastRow(Appearance.breastCupInverse("F"));
			this.ass.analLooseness = ANAL_LOOSENESS_VIRGIN;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.tallness = 6*12+4;
			this.hipRating = HIP_RATING_CURVY;
			this.buttRating = BUTT_RATING_LARGE;
			this.lowerBody = LOWER_BODY_TYPE_HOOFED;
			this.skinTone = "pale";
			this.hairColor = "brown";
			this.hairLength = 13;
			initStrTouSpeInte(37, 55, 35, 60);
			initLibSensCor(25, 45, 40);
			this.weaponName = "mace";
			this.weaponVerb="smack";
			this.weaponAttack = 10;
			this.armorName = "tough hide";
			this.armorDef = 5;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 5;
			this.bonusHP = 30;
			this.gems = rand(5) + 25;
			this.drop = NO_DROP;
			this.tailType = TAIL_TYPE_COW;
			//this.special1 = marbleSpecialAttackOne;
			//this.special2 = marbleSpecialAttackTwo;
			checkMonster();
		}

	}

}

license: unknown


code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.internals.ChainedDrop;

	public class Ember extends Monster
	{
		private function emberMF(male:String,female:String):String{
			return game.emberScene.emberMF(male,female);
		}
		//The Actual Ember Fight (Z)
		//PC can't use any sexual moves in this battle. This means anything that deals or affects Ember's lust in any way.
		//It doesn't make sense to affect Ember's lust due to the nature of the combat, however it IS possible and encouraged to use lust moves when fighting Bimbo or Corrupt Ember.

		//PC shouldn't lose their turn for doing this, unless you want to penalize them Fen.
		private function emberReactsToLustiness():void {
			//(if PC uses any attack designed to increase Ember's lust)
			outputText("The dragon moans, weaving softly from side to side, eyes glazed and tongue lolling at the intimate prospect of sex... but then, to your surprise, " + emberMF("he","she") + " visibly shakes it off and recomposes " + emberMF("him","her") + "self, frowning at you.");
			outputText("\n\n\"<i>W-what do you think you're doing!?  I'm not some ordinary monster!  Don't think you can seduce me out of a battle!</i>\"");
			outputText("\n\nDespite Ember's initial display; you realize that, Ember was still a ways from " + emberMF("his","her") + " peak arousal.  The dragon flies off in a huff, irritated that you would stoop to fighting in a such a manner.");
			if (player.lib >= 50) outputText("  How boring.");
			gems = 0;
			XP = 0;
			HP = 0;
			game.combat.cleanupAfterCombat();
		}
		//Ember Attacks:
		private function emberAttack():void {
			//Basic attack, average damage, average accuracy
			outputText("With a growl, the dragon lashes out in a ferocious splay-fingered slash, "+ emberMF("his","her") + " claws poised to rip into your flesh.  ");
			//Blind dodge change
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(2) == 0) {
				outputText(capitalA + short + " completely misses you with a blind attack!", false);
			}
			//Miss/dodge
			else if (player.getEvasionRoll()) outputText("You dodge aside at the last second and Ember's claws whistle past you.");
			else {
				var damage:int = int((str + weaponAttack) - rand(player.tou) - player.armorDef);
				if (damage <= 0) outputText("Ember's claws scrape noisily but harmlessly off your [armor].");
				else {
					outputText("Ember's claws rip into you, leaving stinging wounds. ");
					damage = player.takeDamage(damage, true);
				}
			}
			combatRoundOver();
		}

		//Dragon Breath: Very rare attack, very high damage
		private function embersSupahSpecialDragonBreath():void {
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(2) == 0) {
				//Blind Ember:
				outputText("The blinded dragon tracks you with difficulty as you sprint around the landscape; seeing an opportunity, you strafe around " + emberMF("his","her") + " side, planting yourself behind a large flat boulder near " + emberMF("him","her") + " and pelting " + emberMF("him","her") + " with a small rock.  The scream as the dragon turns the magical conflagration toward you, only to have it hit the rock and blow up in " + emberMF("his","her") + " face, is quite satisfying. ");
				//(Ember HP damage)
				game.combat.doDamage(50, true, true);
			}
			else {
				outputText("Ember inhales deeply, then "+ emberMF("his","her") + " jaws open up, releasing streams of fire, ice and lightning; magical rather than physical, the gaudy displays lose cohesion and amalgamate into a column of raw energy as they fly at you.");
				if (player.getEvasionRoll()) outputText("  It's a narrow thing, but you manage to throw yourself aside at the last moment.  Fortunately, the energy whirling around and tearing up the soil blinds Ember to your escape until you have recovered and are ready to keep fighting.");
				else {
					outputText("  The pain as the deadly combination washes over you is indescribable.  It's a miracle that you endure it, and even Ember looks amazed to see you still standing. ");
					var damage:Number = 100 + rand(100) + (game.emberScene.emberSparIntensity() * 4) * (1 + (player.newGamePlusMod() * 0.3));
					damage = player.reduceDamage(damage);
					damage = player.takeDamage(damage, true);
				}
			}
			combatRoundOver();
		}

		//Tailslap: Rare attack, high damage, low accuracy
		private function emberTailSlap():void {
			//Blind dodge change
			if (findStatusEffect(StatusEffects.Blind) >= 0) {
				outputText(capitalA + short + " completely misses you with a blind tail-slap!", false);
				combatRoundOver();
				return;
			}
			outputText("Ember suddenly spins on "+ emberMF("his","her") + " heel, the long tail that splays behind " + emberMF("him","her") + " lashing out like a whip.  As it hurtles through the air towards you, your attention focuses on the set of spikes suddenly protruding from its tip!");
			if (player.getEvasionRoll() || rand(2) == 0) {
				outputText("  You ");
				if (rand(2) == 0) outputText("duck under");
				else outputText("leap over");
				outputText(" the tail at the last moment, causing Ember to lose control of "+ emberMF("his","her") + " own momentum and stumble.");
			}
			else {
				var damage:int = int((str + weaponAttack + 100) + (game.emberScene.emberSparIntensity() * 2));
				outputText("  The tail slams into you with bone-cracking force, knocking you heavily to the ground even as the spines jab you wickedly.  You gasp for breath in pain and shock, but manage to struggle to your feet again. ");
				damage = player.reduceDamage(damage);
				damage = player.takeDamage(damage, true);
			}
			combatRoundOver();
		}

		//Dragon Force: Tainted Ember only
		private function dragonFarce():void {
			//Effect: Stuns the PC for one turn and deals some damage, not much though. (Note: PC's version of this does something different and Ember has no cooldown to use this again. Obviously do not spam or peeps will rage.)
			//Description:
			outputText("Ember bares "+ emberMF("his","her") + " teeth and releases a deafening roar; a concussive blast of force heads straight for you!  ");
			if (player.getEvasionRoll()) {
				outputText("You quickly manage to jump out of the way and watch in awe as the blast gouges into the ground you were standing on mere moments ago.");
			}
			else {
				outputText("Try as you might, you can't seem to protect yourself; and the blast hits you like a stone, throwing you to the ground. ");
				if (player.findPerk(PerkLib.Resolute) < 0 || (game.emberScene.emberSparIntensity() >= 30 && rand(2) == 0)) {
					outputText("Your head swims - it'll take a moment before you can regain your balance. ");
					player.createStatusEffect(StatusEffects.Stunned,0,0,0,0);
				}
				var cooldown:int = 4;
				if (game.emberScene.emberSparIntensity() >= 30) cooldown--;
				if (game.emberScene.emberSparIntensity() >= 45) cooldown--;
				createStatusEffect(StatusEffects.StunCooldown, cooldown, 0, 0, 0);
				var damage:Number = 10 + rand(10) + (game.emberScene.emberSparIntensity() / 2);
				damage = player.takeDamage(damage, true);
			}
			combatRoundOver();
		}

		override protected function performCombatAction():void
		{
			if (lust >= eMaxLust() * 0.6) {
				emberReactsToLustiness();
				return;
			}
			if (findStatusEffect(StatusEffects.StunCooldown) >= 0) {
				addStatusValue(StatusEffects.StunCooldown, 1, -1);
				if (statusEffectv1(StatusEffects.StunCooldown) <= 0) removeStatusEffect(StatusEffects.StunCooldown);
			}
			else if (rand(3) == 0 && game.emberScene.emberSparIntensity() >= 15) {
				dragonFarce();
				return;
			}
			if (rand(4) == 0 && game.emberScene.emberSparIntensity() >= 5) embersSupahSpecialDragonBreath();
			else if (rand(3) == 0) emberTailSlap();
			else emberAttack();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			//Hackers gonna hate. Tested and working as intended.
			if (hpVictory) game.emberScene.beatEmberSpar();
			else emberReactsToLustiness();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.emberScene.loseToEmberSpar();
		}

		public function Ember()
		{
			this.a = " ";
			this.short = "Ember";
			this.imageName = "ember";
			this.long = "You are currently 'battling' Ember, the dragon, in a playfight.  At least, that was the intention.  The way " + emberMF("he", "she") + " lashes " + emberMF("his", "her") + " tail along the ground, with claws spread and teeth bared ferociously, makes you wonder.";
			// this.plural = false;
			this.pronoun1 = game.emberScene.emberMF("he", "she");
			this.pronoun2 = game.emberScene.emberMF("him", "her");
			this.pronoun3 = game.emberScene.emberMF("his", "her");
			var gender:int = game.flags[kFLAGS.EMBER_GENDER];
			if (gender == 1 || gender == 3) {
				this.createCock(16,2,CockTypesEnum.DRAGON);
				this.balls = 2;
				this.ballSize = 4;
				this.cumMultiplier = 3;
				// this.hoursSinceCum = 0;
			}
			if (gender >= 2) {
				this.createVagina(game.flags[kFLAGS.EMBER_PUSSY_FUCK_COUNT] == 0, VAGINA_WETNESS_SLAVERING, VAGINA_LOOSENESS_LOOSE);
				createBreastRow(Appearance.breastCupInverse("F"));
			} else {
				createBreastRow(Appearance.breastCupInverse("flat"));
			}

			this.ass.analLooseness = ANAL_LOOSENESS_NORMAL;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.tallness = rand(8) + 70;
			this.hipRating = HIP_RATING_AMPLE+2;
			this.buttRating = BUTT_RATING_LARGE;
			this.skinTone = "red";
			this.hairColor = "black";
			this.hairLength = 15;
			this.hornType = HORNS_DRACONIC_X4_12_INCH_LONG;
			this.horns = 4;
			this.tailType = TAIL_TYPE_DRACONIC;
			initStrTouSpeInte(75 + Math.floor(game.emberScene.emberSparIntensity() / 3), 75 + Math.floor(game.emberScene.emberSparIntensity() / 3), 75 + Math.floor(game.emberScene.emberSparIntensity() / 3), 75 + Math.floor(game.emberScene.emberSparIntensity() / 3));
			initLibSensCor(50, 35, game.flags[kFLAGS.EMBER_COR]);
			this.weaponName = "claws";
			this.weaponVerb="claw";
			this.weaponAttack = 30;
			this.armorName = "scales";
			this.armorDef = 40;
			this.bonusHP = 550;
			this.bonusLust = 0;
			this.lust = 20;
			this.lustVuln = .25;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 15;
			this.gems = 0;
			this.drop = new ChainedDrop().add(useables.D_SCALE, 0.2);
			//Increase the intensity of battle the more victories you have.
			if (game.emberScene.emberSparIntensity() < 100) {
				bonusHP += game.emberScene.emberSparIntensity() * 20;
				bonusLust += game.emberScene.emberSparIntensity();
				weaponAttack += game.emberScene.emberSparIntensity() * 2;
				if (game.emberScene.emberSparIntensity() < 50)
					level += Math.floor(game.emberScene.emberSparIntensity() / 5);
				else
					level += 10 + Math.floor((game.emberScene.emberSparIntensity()-50) / 10);
			}
			else {
				bonusHP += 2000;
				bonusLust += 100;
				weaponAttack += 200;
				level += 10;
			}
			checkMonster();
		}

	}

}


code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.Scenes.Areas.Lake.GooGirl;
	import classes.internals.*;

	public class GooArmor extends GooGirl
	{
		public function gooArmorAI():void {
			if (rand(2) == 0 && player.findStatusEffect(StatusEffects.GooArmorSilence) < 0) gooSilenceAttack();
			else if (rand(3) > 0) gooArmorAttackPhysical();
			else gooArmorAttackTwoGooConsume();
		}
		//ATTACK ONE: Greatsword
		public function gooArmorAttackPhysical():void {
			var evade:String = player.getEvasionReason();
			if (evade == EVASION_EVADE) {
				outputText("The goo-armor rushes forward and swings her sword in a mighty arc, but you evade the attack!");
			}
			else if (evade == EVASION_FLEXIBILITY) {
				outputText("The goo-armor swings a greatsword at you in a mighty arc, but your cat-like flexibility makes it easy to twist out of the way.");
			}
			else if (evade == EVASION_MISDIRECTION) {
				outputText("The goo-armor swings a sword at you in a mighty arc, but your training with Raphael allows you to misdirect her into a miss!");
			}
			else if (evade == EVASION_SPEED || evade != null) {
				outputText("The goo-armor rushes forward and swings her sword in a mighty arc, but you dodge it!");
			}
			//HIT!
			else {
				outputText("The goo-armor rushes forward and swings her sword in a mighty arc.  You aren't quite quick enough to dodge her blow, and the goopy sword slams into you, throwing you back and leaving a nasty welt. ");
				var damage:Number = Math.round((str + weaponAttack) - rand(player.tou) - player.armorDef);
				if (damage <= 0) damage = 1;
				damage = player.takeDamage(damage, true);
			}
			combatRoundOver();
		}
		//ATTACK TWO: Goo Consume
		public function gooArmorAttackTwoGooConsume():void {
			outputText("Suddenly, the goo-girl leaks half-way out of her heavy armor and lunges at you.  You attempt to dodge her attack, but she doesn't try and hit you - instead, she wraps around you, pinning your arms to your chest.  More and more goo latches onto you - you'll have to fight to get out of this.");
			player.createStatusEffect(StatusEffects.GooArmorBind,0,0,0,0);
			combatRoundOver();
		}
		//(Struggle)
		public function struggleAtGooBind():void {
			clearOutput();
			//If fail:
			if (rand(10) > 0 && player.str/5 + rand(20) < 23) {
				outputText("You try and get out of the goo's grasp, but every bit of goop you pull off you seems to be replaced by twice as much!");
				//(If fail 5 times, go to defeat scene)
				player.addStatusValue(StatusEffects.GooArmorBind,1,1);
				if (player.statusEffectv1(StatusEffects.GooArmorBind) >= 5) {
					if (findStatusEffect(StatusEffects.Spar) >= 0) game.valeria.pcWinsValeriaSparDefeat();
					else game.dungeons.heltower.gooArmorBeatsUpPC();
					return;
				}
			}
			//If succeed:
			else {
				outputText("You finally pull the goop off of you and dive out of her reach before the goo-girl can re-attach herself to you.  Pouting, she refills her suit of armor and reassumes her fighting stance.");
				player.removeStatusEffect(StatusEffects.GooArmorBind);
			}
			combatRoundOver();
		}
		//ATTACK THREE: Goo Silence
		public function gooSilenceAttack():void {
			outputText("The goo pulls a hand off her greatsword and shoots her left wrist out towards you.  You recoil as a bit of goop slaps onto your mouth, preventing you from speaking - looks like you're silenced until you can pull it off!");
			//(No spells until PC passes a moderate STR check or burns it away)
			player.createStatusEffect(StatusEffects.GooArmorSilence,0,0,0,0);
			combatRoundOver();
		}

		override protected function performCombatAction():void
		{
			gooArmorAI();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			if (findStatusEffect(StatusEffects.Spar) >= 0) game.valeria.pcWinsValeriaSpar();
			else game.dungeons.heltower.beatUpGooArmor();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			if (pcCameWorms){
				outputText("\n\nThe armored goo sighs while you exhaust yourself...");
				doNext(game.combat.endLustLoss);
			} else {
				if (findStatusEffect(StatusEffects.Spar) >= 0) game.valeria.pcWinsValeriaSparDefeat();
				else game.dungeons.heltower.gooArmorBeatsUpPC();
			}
		}

		public function GooArmor()
		{
			super(true);
			this.a = "a ";
			this.short = "Goo Armor";
			if (flags[kFLAGS.MET_VALERIA] > 0) {
				a = "";
				short = "Valeria";
			}
			this.imageName = "gooarmor";
			this.long = "Before you stands a suit of plated mail armor filled with a bright blue goo, standing perhaps six feet off the ground.  She has a beautiful, feminine face, and her scowl as she stands before you is almost cute.  She has formed a mighty greatsword from her goo, and has assumed the stance of a well-trained warrior.";
			// this.plural = false;
			this.createVagina(false, VAGINA_WETNESS_SLAVERING, VAGINA_LOOSENESS_GAPING_WIDE);
			createBreastRow(Appearance.breastCupInverse("C"));
			this.ass.analLooseness = ANAL_LOOSENESS_STRETCHED;
			this.ass.analWetness = ANAL_WETNESS_SLIME_DROOLING;
			this.tallness = rand(8) + 70;
			this.hipRating = HIP_RATING_AMPLE+2;
			this.buttRating = BUTT_RATING_LARGE;
			this.skinTone = "blue";
			this.skinType = SKIN_TYPE_GOO;
			//this.skinDesc = Appearance.Appearance.DEFAULT_SKIN_DESCS[SKIN_TYPE_GOO];
			this.skinAdj = "goopey";
			this.hairColor = "black";
			this.hairLength = 15;
			this.hairType = HAIR_GOO;
			initStrTouSpeInte(60, 50, 50, 40);
			initLibSensCor(60, 35, 50);
			this.weaponName = "goo sword";
			this.weaponVerb="slash";
			this.weaponAttack = 60;
			this.armorName = "armor";
			this.armorDef = 50;
			this.bonusHP = 500;
			this.lustVuln = .35;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 16;
			this.gems = rand(25) +40;
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}


code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.internals.*;

	public class Hel extends Monster
	{

		private function helAttack():void {
			var damage:Number;
			//return to combat menu when finished
			doNext(game.playerMenu);
			//Blind dodge change
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) < 1) {
				outputText(capitalA + short + " completely misses you with a blind attack!\n", false);
			}
			//Determine if dodged!
			else if (player.spe - spe > 0 && int(Math.random() * (((player.spe-spe) / 4) + 80)) > 80) {
				outputText("You nimbly dodge the salamander's massive sword thrust!", false);
			}
			//Determine if evaded
			else if (player.findPerk(PerkLib.Evade) >= 0 && rand(100) < 10) {
				outputText("Using your skills at evading attacks, you anticipate and sidestep " + a + short + "'s attack.\n", false);
			}
			//("Misdirection"
			else if (player.findPerk(PerkLib.Misdirection) >= 0 && rand(100) < 10 && player.armorName == "red, high-society bodysuit") {
				outputText("Using Raphael's teachings, you anticipate and sidestep " + a + short + "' attacks.\n", false);
			}
			//Determine if cat'ed
			else if (player.findPerk(PerkLib.Flexibility) >= 0 && rand(100) < 6) {
				outputText("With your incredible flexibility, you squeeze out of the way of " + a + short + "", false);
			}
			//Determine damage - str modified by enemy toughness!
			else
			{
				damage = int((str + weaponAttack) - rand(player.tou/2) - player.armorDef/2);
				//No damage
				if (damage <= 0) {
					damage = 0;
					//Due to toughness or amor...
					if (rand(player.armorDef + player.tou) < player.armorDef) outputText("You absorb and deflect every " + weaponVerb + " with your " + player.armorName + ".", false);
					else outputText("You deflect and block every " + weaponVerb + " " + a + short + " throws at you.", false);
				}
				//Take Damage
				else outputText("The salamander lunges at you, sword swinging in a high, savage arc.  You attempt to duck her attack, but she suddenly spins about mid-swing, bringing the sword around on a completely different path.  It bites deep into your flesh, sending you stumbling back. ", false);
				if (damage > 0) {
					if (lustVuln > 0 && (player.armor.name == "barely-decent bondage straps" || player.armor.name == "nothing")) {
						outputText("\n" + capitalA + short + " brushes against your exposed skin and jerks back in surprise, coloring slightly from seeing so much of you revealed. ", false);
						lust += 5 * lustVuln;
					}
				}
				if (damage > 0) damage = player.takeDamage(damage, true);
			}

			statScreenRefresh();
			outputText("\n", false);
			combatRoundOver();
		}

		//Attack 2 – Tail Slap (Hit)
		//low dodge chance, lower damage
		private function helAttack2():void {
			var damage:Number;
			//return to combat menu when finished
			doNext(game.playerMenu);
			//Blind dodge change
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) < 1) {
				outputText(capitalA + short + " completely misses you with a blind attack!\n", false);
				return;
			}
			//Determine if dodged!
			if (player.spe - spe > 0 && int(Math.random()*(((player.spe-spe)/4) +80)) > 83) {
				outputText("The salamander rushes at you, knocking aside your defensive feint and trying to close the distance between you.  She lashes out at your feet with her tail, and you're only just able to dodge the surprise attack.", false);
				return;
			}
			//Determine if evaded
			if (player.findPerk(PerkLib.Evade) >= 0 && rand(100) < 5) {
				outputText("Using your skills at evading attacks, you anticipate and sidestep " + a + short + "'s tail-swipe.\n", false);
				return;
			}
			//("Misdirection"
			if (player.findPerk(PerkLib.Misdirection) >= 0 && rand(100) < 5 && player.armorName == "red, high-society bodysuit") {
				outputText("Using Raphael's teachings, you anticipate and sidestep " + a + short + "' tail-swipe.\n", false);
				return;
			}
			//Determine if cat'ed
			if (player.findPerk(PerkLib.Flexibility) >= 0 && rand(100) < 3) {
				outputText("With your incredible flexibility, you squeeze out of the way of a tail-swipe!", false);
				return;
			}
			//Determine damage - str modified by enemy toughness!
			damage = int((str) - rand(player.tou) - player.armorDef);
			//No damage
			if (damage <= 0) {
				damage = 0;
				//Due to toughness or amor...
				if (rand(player.armorDef + player.tou) < player.armorDef) outputText("The salamander's tail-swipe harmlessly deflects off your armor!", false);
				else outputText("The salamander's tail-swipe hits you but fails to move or damage you.", false);
			}
			//Take Damage
			else outputText("The salamander rushes at you, knocking aside your defensive feint and sliding in past your guard.  She lashes out at your feet with her tail, and you can feel the heated wake of the fiery appendage on your ensuing fall toward the now-smouldering grass. ", false);
			if (damage > 0) {
				if (lustVuln > 0 && player.armorName == "barely-decent bondage straps") {
					outputText("\n" + capitalA + short + " brushes against your exposed skin and jerks back in surprise, coloring slightly from seeing so much of you revealed.", false);
					lust += 5 * lustVuln;
				}
			}
			if (damage > 0) damage = player.takeDamage(damage, true);
			statScreenRefresh();
			outputText("\n", false);
			combatRoundOver();
		}

		private function helCleavage():void {
			//FAIL
			if ((player.findPerk(PerkLib.Flexibility) >= 0 && rand(100) < 6) || (player.findPerk(PerkLib.Evade) >= 0 && rand(100) < 10) || (player.spe - spe > 0 && int(Math.random()*(((player.spe-spe)/4) +80)) > 80)) {
				outputText("To your surprise, the salamander suddenly pulls up her top, letting her hefty breasts hang free in the air; her small, bright pink nipples quickly harden from either arousal or temperature.  Before you can take your eyes off her impressive rack, she jumps at you.  One of her scaled arms reaches around your waist, and the other toward your head, but you roll away from her grip and push her bodily away.  She staggers a moment, but then quickly yanks the jangling bikini top back down with a glare.\n", false);
			}
			//Attack 3 – Lust – Cleavage (Failure)
			else {
				outputText("To your surprise, the salamander suddenly yanks up her top, letting her hefty breasts hang free in the air; her small, bright pink nipples quickly harden from either arousal or temperature.  Before you can take your eyes off her impressive rack, she jumps at you.  One of her scaled arms encircles your waist, and the other forcefully shoves your face into her cleavage.  She jiggles her tits around your face for a moment before you're able to break free, though you can feel a distinct heat rising in your loins.  As quickly as they were revealed, the breasts are concealed again and your opponent is ready for more combat!", false);
				var lust:Number = 20 + rand(10) + player.sens/10 + rand(player.lib/20) * (1 + (player.newGamePlusMod() * 0.2));
				game.dynStats("lus", lust);
				//Apply resistance
				lust *= player.lustPercent() / 100;
				//Clean up
				lust = Math.round(lust * 10)/10;
				outputText(" (+" + lust + " lust)\n", false);
			}
			combatRoundOver();
		}
		override protected function performCombatAction():void
		{
			trace("Hel Perform Combat Action Called");
			var select:Number = rand(3);
			trace("Selected: " + select);
			switch(select) {
				case 0:
					helAttack();
					break;
				case 1:
					helAttack2();
					break;
				default:
					helCleavage();
					break;
			}
		}

		override public function defeated(hpVictory:Boolean):void
		{
			if (findStatusEffect(StatusEffects.Sparring) >= 0) game.helFollower.PCBeatsUpSalamanderSparring();
			else game.helScene.beatUpHel();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			if (pcCameWorms){
				outputText("\n\nHelia waits it out in stoic silence...");
				doNext(game.combat.endLustLoss);
			} else {
				if (findStatusEffect(StatusEffects.Sparring) >= 0) game.helFollower.loseToSparringHeliaLikeAButtRapedChump();
				else game.helScene.loseToSalamander();
			}
		}

		public function Hel()
		{
			if (game.flags[kFLAGS.HEL_TALKED_ABOUT_HER] == 1) {
				this.a = "";
				this.short = "Hel";
			} else {
				this.a = "the ";
				this.short = "salamander";
			}
			this.imageName = "hel";
			this.long = "You are fighting a (literally) smoking hot salamander – a seven foot tall woman with crimson scales covering her legs, back, and forearms, with a tail swishing menacingly behind her, ablaze with a red-hot fire.  Her red hair whips wildly around her slender shoulders, occasionally flitting over her hefty E-cup breasts, only just concealed within a scale-covered bikini top.  Bright red eyes focus on you from an almost-human face as she circles you, ready to close in for the kill.  Her brutal, curved sword is raised to her side, feinting at you between genuine attacks.";
			createVagina(true,VAGINA_WETNESS_NORMAL,VAGINA_LOOSENESS_NORMAL);
			createStatusEffect(StatusEffects.BonusVCapacity,85,0,0,0);
			createBreastRow(Appearance.breastCupInverse("E+"));
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,85,0,0,0);
			this.tallness = 90;
			this.hipRating = HIP_RATING_CURVY+2;
			this.buttRating = BUTT_RATING_LARGE+1;
			this.skinTone = "dusky";
			this.hairColor = "red";
			this.hairLength = 13;
			initStrTouSpeInte(80, 70, 75, 60);
			initLibSensCor(65, 25, 30);
			this.weaponName = "sword";
			this.weaponVerb="slashing blade";
			this.weaponAttack = 20;
			this.armorName = "scales";
			this.armorDef = 14;
			this.armorPerk = "";
			this.armorValue = 50;
			this.bonusHP = 275;
			this.lust = 30;
			this.lustVuln = .35;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 16;
			this.gems = 10 + rand(5);
			this.drop = new ChainedDrop().
					add(armors.CHBIKNI,1/20).
					add(weapons.SCIMITR,1/20).
					add(consumables.SALAMFW,0.7);
			this.tailType = TAIL_TYPE_SALAMANDER;
			this.tailRecharge = 0;
			this.createStatusEffect(StatusEffects.Keen,0,0,0,0);
			checkMonster();
		}

	}

}


code:
package classes.Scenes.NPCs
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;

	public class Helspawn extends Monster
	{

		override public function doAI():void
		{
			var choices:Array = [];
			choices[choices.length] = helspawnTwinStrikes;
			//Bowmander only
			if (flags[kFLAGS.HELSPAWN_WEAPON] == "bow") choices[choices.length] = calledShot;
			//Zerker ability
			if (weaponAttack < 50 || flags[kFLAGS.HELSPAWN_WEAPON] == "scimitar") choices[choices.length] = helSpawnBerserk;	//Shield Bash (Shieldmander Only)
			if (flags[kFLAGS.HELSPAWN_WEAPON] == "scimitar and shield") choices[choices.length] = helSpawnShieldBash;
			//Tease (Sluttymander Only)
			if (flags[kFLAGS.HELSPAWN_PERSONALITY] >= 50) choices[choices.length] = sluttyMander;
			//Focus (Chastemander Only)
			//Self-healing & lust restoration
			if (flags[kFLAGS.HELSPAWN_PERSONALITY] < 50) choices[choices.length] = helSpawnFocus;
			choices[rand(choices.length)]();
			//Tail Whip
			if (rand(4) == 0) tailWhipShitYo();
			combatRoundOver();
		}

//Basic Attack - Twin Strike
// Two light attacks
private function helspawnTwinStrikes():void {
	//if Bowmander
	if (flags[kFLAGS.HELSPAWN_WEAPON] == "bow") outputText(flags[kFLAGS.HELSPAWN_NAME] + " leaps back out of your reach and nocks a pair of blunted arrows, drawing them back together and loosing them at once!\n");
	else outputText(flags[kFLAGS.HELSPAWN_NAME] + " lunges at you, scimitar cleaving through the air toward your throat!\n");
	createStatusEffect(StatusEffects.Attacks,0,0,0,0);
	eAttack();
}

//Called Shot (Bowmander Only)
// Super-high chance of hitting. On hit, speed debuff
private function calledShot():void {
	outputText(flags[kFLAGS.HELSPAWN_NAME] + " draws back her bowstring, spending an extra second aiming before letting fly!");
	var damage:Number = int((str + weaponAttack) - rand(player.tou) - player.armorDef);
	//standard dodge/miss text
	if (damage <= 0 || (rand(2) == 0 && (player.getEvasionRoll()))) outputText("\nYou avoid the hit!");
	else {
		outputText("\nOne of her arrows smacks right into your [leg], nearly bowling you over.  God DAMN that hurt! You're going to be limping for a while! ");
		var affect:int = 20 + rand(5);
		if (player.findStatusEffect(StatusEffects.CalledShot) >= 0) {
			while(affect > 0 && player.spe >= 2) {
				affect--;
				player.addStatusValue(StatusEffects.CalledShot,1,1);
				player.spe--;
				showStatDown( 'spe' );
				// speDown.visible = true;
				// speUp.visible = false;
			}
		}
		else {
			player.createStatusEffect(StatusEffects.CalledShot,0,0,0,0);
			while(affect > 0 && player.spe >= 2) {
				affect--;
				player.addStatusValue(StatusEffects.CalledShot,1,1);
				player.spe--;
				showStatDown( 'spe' );
				// speDown.visible = true;
				// speUp.visible = false;
			}
		}
		damage = player.takeDamage(damage, true);
	}
}

		//Berzerkergang (Berzerkermander Only)
		//Gives Helspawn the benefit of the Berzerk special ability
		private function helSpawnBerserk():void {
			outputText(flags[kFLAGS.HELSPAWN_NAME] + " lets out a savage warcry, throwing her head back in primal exaltation before charging back into the fray with utter bloodlust in her wild eyes!");
			this.weaponAttack = weaponAttack + 30;
			armorDef = 0;
		}

		//Shield Bash (Shieldmander Only)
		private function helSpawnShieldBash():void {
			clearOutput();
			var damage:Number = int((str) - rand(player.tou) - player.armorDef);
			// Stuns a bitch
			outputText(flags[kFLAGS.HELSPAWN_NAME] + " lashes out with her shield, trying to knock you back!");
			//standard dodge/miss text
			if (damage <= 0 || player.getEvasionRoll()) outputText("\nYou evade the strike.");
			else {
				outputText("\nHer shield catches you right in the face, sending you tumbling to the ground and leaving you open to attack! ");
				damage = player.takeDamage(damage, true);
				if (rand(2) == 0 && player.findStatusEffect(StatusEffects.Stunned) < 0) {
					player.createStatusEffect(StatusEffects.Stunned,0,0,0,0);
					outputText(" The hit stuns you.");
				}
			}
		}

		//Tail Whip
		private function tailWhipShitYo():void {
			// Light physical, armor piercing (fire, bitch). Random chance to get this on top of any other attack
			var damage:Number = int((str) - rand(player.tou));
			outputText("\n" + flags[kFLAGS.HELSPAWN_NAME] + " whips at you with her tail, trying to sear you with her brilliant flames!");
			//standard dodge/miss text
			if (damage <= 0 || player.getEvasionRoll()) outputText("\nYou evade the strike.");
			else {
				outputText("\n" + flags[kFLAGS.HELSPAWN_NAME] + "'s tail catches you as you try to dodge.  Your [armor] sizzles, and you leap back with a yelp as she gives you a light burning. ");
				damage = player.takeDamage(damage, true);
			}
		}

		//Tease (Sluttymander Only)
		private function sluttyMander():void {
			// Medium Lust damage
			outputText(flags[kFLAGS.HELSPAWN_NAME] + " jumps just out of reach before spinning around, planting her weapon in the ground as she turns her backside to you and gives her sizable ass a rhythmic shake, swaying her full hips hypnotically.");
			//if no effect:
			if (rand(2) == 0) outputText("\nWhat the fuck is she trying to do?  You walk over and give her a sharp kick in the kiester, \"Keep your head in the game, kiddo.  Pick up your weapon!\"");
			else {
				outputText("\nDat ass.  You lean back, enjoying the show as the slutty little salamander slips right past your guard, practically grinding up against you until you can feel a fire boiling in your loins!");
				var lustDelta:Number = player.lustVuln * (10 + player.lib/10);
				player.lust += lustDelta;
				game.mainView.statsView.showStatUp( 'lust' );
				// lustDown.visible = false;
				// lustUp.visible = true;
				lustDelta = Math.round(lustDelta * 10)/10;
				outputText(" (" + lustDelta + ")", false);
			}
		}

		//Focus (Chastemander Only)
		//Self-healing & lust restoration
		private function helSpawnFocus():void {
			outputText("Seeing a momentary lull in the melee, " + flags[kFLAGS.HELSPAWN_NAME] + " slips out of reach, stumbling back and clutching at the bruises forming all over her body.  \"Come on, " + flags[kFLAGS.HELSPAWN_NAME] + ", you can do this. Focus, focus,\" she mutters, trying to catch her breath.  A moment later and she seems to have taken a second wind as she readies her weapon with a renewed vigor.");
			lust -= 30;
			if (lust < 0) lust = 0;
			addHP(eMaxHP() / 3.0);
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.helSpawnScene.beatUpYourDaughter();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.helSpawnScene.loseSparringToDaughter();
		}

		public function Helspawn()
		{
			var weapon:String = game.flags[kFLAGS.HELSPAWN_WEAPON];
			this.a = "";
			this.short = game.flags[kFLAGS.HELSPAWN_NAME];
			this.imageName = "hollispawn";
			this.long = game.flags[kFLAGS.HELSPAWN_NAME] + " is a young salamander, appearing in her later teens.  Clad in " +
							(game.flags[kFLAGS.HELSPAWN_PERSONALITY] >= 50 ?
									"a slutty scale bikini like her mother's, barely concealing anything" :
									"a short skirt, thigh-high boots, and a sky-blue blouse, in stark contrast to her mother’s sluttier attire") +
							", she stands about six feet in height, with a lengthy, fiery tail swishing menacingly behind her. She's packing a " +
							{
								'bow': "recurve bow, using blunted, soft-tipped arrows",
								'scimitar': "scimitar, just like her mom's, and holds it in the same berzerk stance Helia is wont to use",
								'scimitar and shield': "scimitar and shield, giving her a balanced fighting style"
							}[ weapon] +
							".  Pacing around you, the well-built young warrior intently studies her mentor's defenses, readying for your next attack.";
			// this.plural = false;
			this.createVagina(false, VAGINA_WETNESS_NORMAL, VAGINA_LOOSENESS_NORMAL);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 85, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("E+"));
			this.ass.analLooseness = ANAL_LOOSENESS_VIRGIN;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,85,0,0,0);
			this.tallness = 90;
			this.hipRating = HIP_RATING_CURVY+2;
			this.buttRating = BUTT_RATING_LARGE+1;
			this.skinTone = "dusky";
			this.hairColor = "red";
			this.hairLength = 13;
			initStrTouSpeInte(50, 50, 65, 40);
			initLibSensCor(35, 55, 20);
			this.weaponName = weapon;
			this.weaponVerb = {
				'bow': "blunted arrow",
				'scimitar': "slash",
				'scimitar and shield': "slash"}[weapon];
			this.weaponAttack = 20;
			this.armorName = "scales";
			this.armorDef = 12;
			this.armorPerk = "";
			this.armorValue = 50;
			this.bonusHP = 175;
			this.lust = 30;
			this.lustVuln = .55;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 12;
			this.gems = 10 + rand(5);
			this.tailType = TAIL_TYPE_SALAMANDER;
			this.tailRecharge = 0;
			this.createStatusEffect(StatusEffects.Keen, 0, 0, 0, 0);
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}


code:
package classes.Scenes.NPCs
{
	import classes.*;

	public class Holli extends Monster
	{
		/*Fight -Z
		 Marae's offshoot, [monster] stands rooted in front of you.  Solid black eyes with golden pupils stare out at you.  Her normally-nude body is concealed inside her tree, though occasionally she will flash you the devilish grin of a sadistic temptress and the bark will split to reveal a pale, jiggling bit of flesh.  A pair of gnarled oak horns sprout from her forehead; leaves and flowers alternately bloom and wither on them as her face contorts with emotion.

		 stats:
		 -hella endurance, int, and str
		 -lots o' lust resist
		 -lots o' hp
		 -good armor and regenerates hp/lust every round; but much less so of all three if Jojo is burning her shit
		 -rooted in place, so med-low spd; however, if PC fails a run check he is automatically constricted
		 -not for pussies; this fight should be almost unwinnable without Jojo unless you are wicked lucky or have a super-sploity build
		 -basically requires luck plus any of firebreath level grindan, stun abuse, or blood mage whitefire/arouse abuse
		 */

//Attack:
//[monster] whips out at you with branches and roots!

//attack noun: lash
//Failing to Escape -Z
		public function escapeFailWithHolli():void
		{
			clearOutput();
			outputText("You ");
			if (player.canFly()) outputText("beat your wings and ");
			outputText("try to escape, but " + short + " wraps one of her writhing roots around your [leg], slamming you to the ground and tying you up with several more!  \"And just where do you think you're going, my little meat?\" she hisses.  Her bark splits open, exposing her body, and a green shaft snakes out of her crotch, sprouting thorns and blooming into a rose at the tip.  She holds the drooling blossom over your [face] as she forces your mouth open with her roots! ");
			//hp loss, begin lust constrict next round
			if (player.findPerk(PerkLib.Juggernaut) < 0 && armorPerk != "Heavy") {var damage:int = 15;
			damage = player.takeDamage(damage, true);
			}
			outputText("\n\n");
			player.createStatusEffect(StatusEffects.HolliConstrict, 0, 0, 0, 0);
			combatRoundOver();
		}

//End of Round, if no Jojo Fire -Z
		public function holliBonusHealing():void
		{
			//(monster hp < 100%)
			if (findStatusEffect(StatusEffects.HolliBurning) < 0) {
				if (HPRatio() < 1 && HP > 1) {
					outputText("\n\nWhat wounds you have inflicted on the tree-demon overflow with sap, and begin to close!  You are left to watch helplessly as she recovers, knotting up her damaged bark until it looks as formidable as before.");
					addHP(25);
				}
				//[(monster lust > 0)]
				if (lust > 20 && lust <= 99) {
					outputText("\n\nA single rent forms in the tree's armor-like surface; you can actually see the demon touching her pussy inside, and her eyes roll back as she comes!  It looks like teasing her won't be very effective if you can't distract her from pleasuring herself inside her shell.");
					lust -= 10;
					//repair monster HP and lust by significant amounts
				}
			}
			//End of Round, Round 1 with Jojo Helping - make a little woodpile
			//output anything triggered under no Jojo Fire condition, then output
			if (findStatusEffect(StatusEffects.JojoIsAssisting) >= 0) {
				if (findStatusEffect(StatusEffects.HolliBurning) >= 0) {
					outputText("\n\nJojo continues to ferry firewood to stoke the blaze; flames lick at Holli, and her face contorts in anger.  Sap flows from her burn wounds, but much of it boils away before it can do her any good and her iron-hard bark is peeling in places.");
					//much less HP regain, no lust regain, monster armor lowered
					if (armorDef > 20) armorDef = 20;
					if (tou > 50) tou = 50;
					//Reduced Regen
					addHP(5);
					lust -= 2;
					if (lust < 20) lust = 20;
				}
				else if (findStatusEffect(StatusEffects.JojoPyre) < 0) {
					outputText("\n\nJojo throws another handful of dry leaves and sticks on the growing pile at the demon's roots, then waves and calls to you.  \"[name]!  I've got enough dry wood at her base and I'm going to try to set it on fire!  Hold on just a bit longer; surcease is coming!\"");
					createStatusEffect(StatusEffects.JojoPyre, 0, 0, 0, 0);
				}
				//End of Round, Rounds 2 and 3 with Jojo Helping - light a spark
				else if (statusEffectv1(StatusEffects.JojoPyre) <= 1) {
					//display applicable EOR outputs for fire not lit, then these
					//Round 2:
					if (statusEffectv1(StatusEffects.JojoPyre) == 0) {
						outputText("\n\nJojo scurries toward the woodpile carrying a lit torch, but an eye opens on one of the demon's upper branches and she catches him with a root, sending him tumbling.  For a moment you lose hope, but the plucky monk rolls to the side before she can deliver another lash and from there to his feet.");
						addStatusValue(StatusEffects.JojoPyre, 1, 1);
					}
					//Round 3:
					else {
						outputText("\n\nWary of the constant surveillance from above, Jojo serpentines toward the tree at high speed, dodging roots and branches with a burning stick held in his teeth.  Just as he gets close enough to throw, a root sweeps low and sends him sprawling onto his own torch, catching some of his fur alight!  Without hesitation, he rolls toward the tinder pile and shoves a burning hand into the leaf litter.  As the ring of flammable material catches and the demon screams her frustration, he retreats to the woods, beating his arm with his dirt-smeared robe to put it out.");
						createStatusEffect(StatusEffects.HolliBurning, 0, 0, 0, 0);
					}

				}
			}
			combatRoundOver();
		}

//if player uses whitefire/firebreath successfully, suppress these, go to 'Fire Lit' EOR events, and output additional line after the attack:
		public function lightHolliOnFireMagically():void
		{
			if (findStatusEffect(StatusEffects.JojoIsAssisting) >= 0) {
				if (findStatusEffect(StatusEffects.HolliBurning) < 0) {
					outputText("The magical fire effectively ignites a wide swath of Jojo's tinder, and the demon howls in rage.  Seeing this, Jojo drops the burning torch he carries and turns back toward the forest to fetch more tinder.\n\n");
					createStatusEffect(StatusEffects.HolliBurning, 0, 0, 0, 0);
				}
			}
		}

//Monster Specials -Z
//fuckin' Jumanji flower darts -Z
		private function fuckinJamanjiFlowerDarts():void
		{
			outputText("A blossom opens up on a high branch of the tree, revealing an evil-looking eye surrounded by vicious spines.  With a gesture, " + short + " fires several at you!");

			//Blinded - no hit penalty
			if (findStatusEffect(StatusEffects.Blind) >= 0) outputText("  Though the demon herself is blinded, the fresh eye on the flower seems more than capable of aiming for her!");
			if (player.getEvasionRoll()) {
				outputText("  Nimbly, you step aside and let the darts whistle by.");
			}
			//Hit
			else {
				outputText("  The darts find flesh, and you feel yourself slowing down drastically; all you want to do as the plant woman's poison takes you is fuck and sleep.  \"Just give up,\" Holli coos.  \"Think how good it would be to fall into my arms and ");
				if (player.hasCock()) outputText("come inside me");
				else outputText("have me inside you");
				outputText(", forever...\" ");
				//lust damage, fatigue damage, light HP damage
				player.changeFatigue(10);
				game.dynStats("lus", 25);
				var damage:Number = 20 + rand(10);
				damage = player.takeDamage(damage, true);
			}
			combatRoundOver();
		}

//constrict -Z
		private function holliConstrictAttack():void
		{
			outputText("A forest of thick roots bursts from the ground and several lash toward your [legs], trying to ensnare you!");
			//Blinded - hit penalty, but not 100%
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(6) == 0) {
				outputText("  Luckily, the demon's blindness makes it fairly easy to dodge the grasping roots, though there are a few close scrapes.");
			}
			//Miss
			if (player.getEvasionRoll()) {
				outputText("  It's a narrow thing, but you manage to avoid the roots - one of them almost grabs you, but you duck aside and let it find only its neighbor.");
			}
			//Hit
			else {
				outputText("  She latches onto you with a painful smack and several more root tentacles join the first; as she pulls you close, her bark opens and a long, phallic stalk extends from her crotch, wrapped in thorns and flowering with a rose!  It caresses your face, then dangles the blossom above your mouth, dripping her sap.  Several of the roots pry your jaws apart, forcing you to drink the tainted fluids from her pseudo-cock!  \"What do you think of my little sap rose?\" ");
				//plus med HP damage on turn one, plus med-heavy lust damage every turn while constricted
				//sap rose shitposting
				var damage:int = 10 + rand(5);
				damage = player.takeDamage(damage, true);
				game.dynStats("lus", 15);
				player.createStatusEffect(StatusEffects.HolliConstrict, 0, 0, 0, 0);
			}
			combatRoundOver();
		}

		public function struggleOutOfHolli():void
		{
			clearOutput();
			//Boost odds of success. Round 3 guaranteed.
			player.addStatusValue(StatusEffects.HolliConstrict, 1, 9);
			//Struggle Succeed
			//if demon/dragon tongue, automatic success
			if (player.tongueType > TONGUE_HUMAN) {
				outputText("You can't move an arm nor a [leg] to bat the flower away... but she's literally holding your mouth open.  Your long tongue rolls out, gripping and ripping out several of the petals on the end of her stalk!  Holli screams and her roots slacken, allowing you to batter your way out of them.");
				player.removeStatusEffect(StatusEffects.HolliConstrict);
			}
			//else if normal str-based success
			else if (player.str / 10 + rand(20) + 1 + player.statusEffectv1(StatusEffects.HolliConstrict) > 30) {
				outputText("You manage to force the roots open when the distracted Holli begins to stroke her plant-shaft, pulling out of the bindings just as a drop of sap oozes out and falls where you were standing.  You're free!");
				//sap rose pls go
				player.removeStatusEffect(StatusEffects.HolliConstrict);
			}
			//Struggle Fail/Wait
			else {
				outputText("You try to escape the entangling roots, but cannot break their grip!  ");
				waitForHolliConstrict(false);
				return;
			}
			combatRoundOver();
		}

		public function waitForHolliConstrict(newScreen:Boolean = true):void
		{
			if (newScreen) clearOutput();
			outputText("The ominous roseate shaft hovers over you, and its owner strokes the base lewdly, moaning.  \"Oooh, gonna... cum!\" she shrieks.  As a low moan escapes her, the stalk bloats and begins to spill milky-white sap into your mouth!  Held rigid, you're eventually forced to swallow just to breathe; the sap slides into your stomach and warmth radiates to your midsection and groin, making you feel flushed and hot.  Holli sighs in satisfaction, evidently more relaxed after her climax.");
			//lower monster lust by medium-lots and apply med sens-based lust damage
			lust -= 20;
			if (lust < 20) lust = 20;
			game.dynStats("lus", 15 + player.sens / 5);
			combatRoundOver();
		}

//heal -Z
//used if monster HP < some level
		private function healHolli():void
		{
			clearOutput();
			outputText("The bark splits part way and the woman's mouth suddenly explodes with color, her lips folding out into a rather yonic-looking orchid.  Copious white-tinted sap oozes from the bloom, coating her bark and healing the lesions.  Petals rustle as she speaks wetly through it.  \"Your efforts are nothing!  Throw yourself on my mercy; be my slave and do my bidding!\"");
			//heal some fuckin' hp
			addHP(200);
			combatRoundOver();
		}

		override protected function performCombatAction():void
		{
			if (HP < 50 && rand(2) == 0) healHolli();
			else if (rand(4) == 0 && player.findStatusEffect(StatusEffects.HolliConstrict) < 0) holliConstrictAttack();
			else if (rand(2) == 0) fuckinJamanjiFlowerDarts();
			else eAttack();
			holliBonusHealing();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.holliScene.defeatHolli();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.holliScene.enjoyYourBadEndBIYAAAATCH();
		}

		override public function teased(lustDelta:Number):void
		{
			if (findStatusEffect(StatusEffects.HolliBurning) >= 0) {
				outputText("Holli doesn't even seem to notice, so concerned is she with defeating you before the mounting bonfire causes her any more pain.");
				lustDelta = 0;
			}
			applyTease(lustDelta);
		}

		public function Holli()
		{
			this.a = "";
			this.short = "Holli";
			this.imageName = "holli";
			this.long = "Marae's offshoot, Holli stands rooted in front of you.  Solid black eyes with golden pupils stare out at you.  Her normally-nude body is concealed inside her tree, though occasionally she will flash you the devilish grin of a sadistic temptress and the bark will split to reveal a pale, jiggling bit of flesh.  A pair of gnarled oak horns sprout from her forehead; leaves and flowers alternately bloom and wither on them as her face contorts with emotion.";
			// this.plural = false;
			this.createCock(12,2,CockTypesEnum.HUMAN);
			this.balls = 0;
			this.ballSize = 0;
			this.cumMultiplier = 3;
			this.hoursSinceCum = 20;
			this.createVagina(false, VAGINA_WETNESS_WET, VAGINA_LOOSENESS_LOOSE);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 20, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("E"));
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_NORMAL;
			this.tallness = rand(12) + 55;
			this.hipRating = HIP_RATING_CURVY;
			this.buttRating = BUTT_RATING_LARGE;
			this.skinTone = "black";
			this.hairColor = "sandy-blonde";
			this.hairLength = 15;
			initStrTouSpeInte(150, 80, 80, 85);
			initLibSensCor(75, 40, 80);
			this.weaponName = "branches";
			this.weaponVerb="branchy thwack";
			this.armorName = "bark";
			this.armorDef = 40;
			this.bonusHP = 1000;
			this.lust = 20;
			this.lustVuln = .2;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 20;
			this.gems = 0;
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}


code:
package classes.Scenes.NPCs
{
	import classes.*;

	public class Isabella extends Monster
	{

		//IZZY AI:

		//Isabella Combat texttttttsss
		public function isabellaAttack():void {
			//[Standard attack]
			outputText("Isabella snorts and lowers a shield a moment before she begins to charge towards you. Her hooves tear huge divots out of the ground as she closes the distance with surprising speed!  ", false);

			//Blind dodge change
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) < 2) {
				outputText("Isabella blindly tries to charge at you, but misses completely.\n", false);
			}
			//Determine if dodged!
			else if (player.spe - spe > 0 && int(Math.random()*(((player.spe-spe)/4) +80)) > 80) {
				outputText("You duck aside at the last moment, relying entirely on your speed.\n", false);
			}
			//Determine if evaded
			else if (player.findPerk(PerkLib.Evade) >= 0 && rand(100) < 10) {
				outputText("You easily evade her incredibly linear attack.\n", false);
			}
			//("Misdirection"
			else if (player.findPerk(PerkLib.Misdirection) >= 0 && rand(100) < 10 && player.armorName == "red, high-society bodysuit") {
				outputText("You easily misdirect her and step aside at the last moment.\n", false);
			}
			//Determine if cat'ed
			else if (player.findPerk(PerkLib.Flexibility) >= 0 && rand(100) < 6) {
				outputText("You throw yourself out of the way with cat-like agility at the last moment, avoiding her attack.\n", false);
			}
			else {
				var damage:Number;
				damage = Math.round((weaponAttack + str + 20) - rand(player.tou+player.armorDef));
				if (damage < 0) {
					outputText("You brace yourself and catch her shield in both hands, dragging through the dirt as you slow her charge to a stop.  She gapes down, completely awestruck by the show of power.", false);
				}
				else {
					outputText("She's coming too fast to dodge, and you're forced to try to stop her.  It doesn't work.  Isabella's shield hits you hard enough to ring your ears and knock you onto your back with bruising force. ", false);
					damage = player.takeDamage(damage, true);
					outputText("\n");
				}
			}
			combatRoundOver();
		}

		public function isabellaStun():void {
			//[Stunning Impact]
			outputText("Isabella spins her shield back at you in a potent, steel-assisted backhand.  ", false);

			//Blind dodge change
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) < 2) {
				outputText("Isabella blindly tries to charge at you, but misses completely.\n", false);
			}
			//Determine if dodged!
			else if (player.spe - spe > 0 && int(Math.random()*(((player.spe-spe)/4) +80)) > 80) {
				outputText("You duck aside at the last moment, relying entirely on your speed.\n", false);
			}
			//Determine if evaded
			else if (player.findPerk(PerkLib.Evade) >= 0 && rand(100) < 10) {
				outputText("You easily evade her incredibly linear attack.\n", false);
			}
			//("Misdirection"
			else if (player.findPerk(PerkLib.Misdirection) >= 0 && rand(100) < 10 && player.armorName == "red, high-society bodysuit") {
				outputText("You easily misdirect her and step aside at the last moment.\n", false);
			}
			//Determine if cat'ed
			else if (player.findPerk(PerkLib.Flexibility) >= 0 && rand(100) < 6) {
				outputText("You bend backward with cat-like agility to avoid her attack.\n", false);
			}
			else {
				var damage:Number = 0;
				damage = Math.round((weaponAttack + str) - rand(player.tou+player.armorDef));
				if (damage < 0) {
					outputText("You deflect her blow away, taking no damage.\n", false);
					damage = 0;
				}
				else if (player.findPerk(PerkLib.Resolute) >= 0 && player.tou >= 75) {
					outputText("You resolutely ignore the blow thanks to your immense toughness.\n");
					damage = 0;
				}
				else {
					outputText("You try to avoid it, but her steely attack connects, rocking you back.  You stagger about while trying to get your bearings, but it's all you can do to stay on your feet.  Isabella has stunned you! ", false);
					damage = player.takeDamage(damage, true);
					outputText("\n");
					player.createStatusEffect(StatusEffects.IsabellaStunned,0,0,0,0);
				}
			}
			combatRoundOver();
		}

		public function isabellaThroatPunch():void {
			outputText("Isabella punches out from behind her shield in a punch aimed right at your throat!  ", false);

			//Blind dodge change
			if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) < 2) {
				outputText("Isabella blindly tries to charge at you, but misses completely.\n", false);
			}
			//Determine if dodged!
			else if (player.spe - spe > 0 && int(Math.random()*(((player.spe-spe)/4) +80)) > 80) {
				outputText("You duck aside at the last moment, relying entirely on your speed.\n", false);
			}
			//Determine if evaded
			else if (player.findPerk(PerkLib.Evade) >= 0 && rand(100) < 10) {
				outputText("You easily evade her incredibly linear attack.\n", false);
			}
			//("Misdirection"
			else if (player.findPerk(PerkLib.Misdirection) >= 0 && rand(100) < 10 && player.armorName == "red, high-society bodysuit") {
				outputText("You easily misdirect her and step aside at the last moment.\n", false);
			}
			//Determine if cat'ed
			else if (player.findPerk(PerkLib.Flexibility) >= 0 && rand(100) < 6) {
				outputText("You bend backward with cat-like agility to avoid her attack.\n", false);
			}
			else {
				var damage:Number;
				damage = Math.round(str - rand(player.tou+player.armorDef));
				if (damage <= 0) {
					outputText("You manage to block her with your own fists.\n", false);
				}
				else if (player.findPerk(PerkLib.Resolute) >= 0 && player.tou >= 75) {
					outputText("You resolutely ignore the blow thanks to your immense toughness.\n");
				}
				else {
					outputText("You try your best to stop the onrushing fist, but it hits you square in the throat, nearly collapsing your windpipe entirely.  Gasping and sputtering, you try to breathe, and while it's difficult, you manage enough to prevent suffocation. It will be impossible to focus to cast a spell in this state! ", false);
					damage = player.takeDamage(damage, true);
					outputText("\n");
					player.createStatusEffect(StatusEffects.ThroatPunch,2,0,0,0);
				}
			}
			combatRoundOver();
		}

		//[Milk Self-Heal]
		public function drankMalkYaCunt():void {
			outputText("Isabella pulls one of her breasts out of her low-cut shirt and begins to suckle at one of the many-tipped nipples. Her cheeks fill and hollow a few times while you watch with spellbound intensity.  She finishes and tucks the weighty orb away, blushing furiously.  The quick drink seems to have reinvigorated her, and watching it has definitely aroused you.", false);
			HP += 100;
			lust += 5;
			game.dynStats("lus", (10+player.lib/20));
			combatRoundOver();
		}

		override protected function performCombatAction():void
		{
			//-If below 70% HP, 50% chance of milk drinking
			if (HPRatio() < .7 && rand(3) == 0) drankMalkYaCunt();
			//if PC has spells and isn't silenced, 1/3 chance of silence.
			else if (player.hasSpells() && player.findStatusEffect(StatusEffects.ThroatPunch) < 0 && rand(3) == 0) {
				isabellaThroatPunch();
			}
			//if PC isn't stunned, 1/4 chance of stun
			else if (player.findStatusEffect(StatusEffects.IsabellaStunned) < 0 && rand(4) == 0) {
				isabellaStun();
			}
			else isabellaAttack();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.isabellaScene.defeatIsabella();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			if (pcCameWorms){
				outputText("\n\n\"Ick,\" Isabella tuts as she turns to leave...");
				game.combat.cleanupAfterCombat();
			} else {
				game.isabellaScene.isabellaDefeats();
			}
		}

		public function Isabella()
		{
			this.a = "";
			this.short = "Isabella";
			this.imageName = "isabella";
			this.long = "Isabella is a seven foot tall, red-headed tower of angry cow-girl.  She's snarling at you from behind her massive shield, stamping her hooves in irritation as she prepares to lay into you.  Her skin is dusky, nearly chocolate except for a few white spots spattered over her body.  She wears a tight silk shirt and a corset that barely supports her bountiful breasts, but it's hard to get a good look at them behind her giant shield.";
			// this.plural = false;
			this.createVagina(false, VAGINA_WETNESS_DROOLING, VAGINA_LOOSENESS_GAPING);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 45, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("EE+"));
			this.ass.analLooseness = ANAL_LOOSENESS_VIRGIN;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,38,0,0,0);
			this.tallness = 7*12+6;
			this.hipRating = HIP_RATING_CURVY+2;
			this.buttRating = BUTT_RATING_LARGE+1;
			this.skinTone = "dusky";
			this.hairColor = "red";
			this.hairLength = 13;
			initStrTouSpeInte(70, 98, 75, 65);
			initLibSensCor(65, 25, 40);
			this.weaponName = "giant shield";
			this.weaponVerb="smash";
			this.weaponAttack = 15;
			this.armorName = "giant shield";
			this.armorDef = 8;
			this.armorPerk = "";
			this.armorValue = 70;
			this.bonusHP = 700;
			this.lust = 30;
			this.lustVuln = .35;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 15;
			this.gems = rand(5) + 20;
			this.tailType = TAIL_TYPE_COW;
			this.tailRecharge = 0;
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}