code:
package classes.Scenes.Dungeons.HelDungeon
{
	import classes.*;

	public class Brigid extends Monster
	{

		//Attack One: Hot Poker, Right Up Your Ass!
		private function brigidPoke():void {
			outputText("Brigid stalks forward with confidence, her shield absorbing your defensive blows until she's right on top of you. She bats your [weapon] aside and thrashes you with her hot poker, scalding your " + player.skin() + " and sending you reeling. ");
			//(Effect: Heavy Damage)
			var damage:Number = Math.round((str + weaponAttack) - rand(player.tou) - player.armorDef);
			if (damage < 30) damage = 30;
			damage = player.takeDamage(damage, true);
			game.combat.combatRoundOver();
		}

		//Attack Two: SHIELD BOP! OOM BOP!
		private function brigidBop():void {
			outputText("The harpy feints at you with her poker; you dodge the blow, but you leave yourself vulnerable as she spins around and slams her heavy shield into you, knocking you off balance. ");
			//(Effect: Stagger/Stun)
			var damage:Number = 5;
			damage = player.takeDamage(damage, true);
			if (player.findPerk(PerkLib.Resolute) >= 0) outputText("  Of course, your resolute posture prevents her from accomplishing much.");
			else player.createStatusEffect(StatusEffects.Stunned,0,0,0,0);
			game.combat.combatRoundOver();
		}

		//Attack Three: Harpy Ass Grind GO!
		private function BrigidAssGrind():void {
			outputText("Brigid grins as she approaches you.  She handily deflects a few defensive blows and grabs you by the shoulders.  She forces you onto your knees and before you can blink, has turned around and smashed your face into her ass!  \"<i>Mmm, you like that, don'tcha?</i>\" she growls, grinding her huge, soft ass across your face, giving you an up-close and personal feel of her egg-laying hips.");
			game.dynStats("lus", 30);
			game.combat.combatRoundOver();
		}
		override protected function performCombatAction():void
		{
			if (player.findStatusEffect(StatusEffects.Stunned) >= 0) {
				player.removeStatusEffect(StatusEffects.Stunned);
				if (rand(2) == 0) BrigidAssGrind();
				else brigidPoke();
				return;
			}
			if (rand(3) == 0) BrigidAssGrind();
			else if (rand(2) == 0) brigidBop();
			else brigidPoke();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.brigidScene.pcDefeatsBrigid();
		}

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

		public function Brigid()
		{
			this.a = "";
			this.short = "Brigid the Jailer";
			this.imageName = "brigid";
			this.long = "Brigid is a monster of a harpy, standing a foot taller than any other you've seen. She's covered in piercings, and her pink-dyed hair is shaved down to a long mohawk. She's nude, save for the hot poker in her right hand and the shield in her left, which jingles with every step she takes thanks to the cell keys beneath it.";
			// this.plural = false;
			this.createVagina(false, VAGINA_WETNESS_SLAVERING, VAGINA_LOOSENESS_LOOSE);
			if (LOWER_BODY_TYPE_HARPY > 0) {
				this.createStatusEffect(StatusEffects.BonusVCapacity, LOWER_BODY_TYPE_HARPY, 0, 0, 0);
			}
			createBreastRow(Appearance.breastCupInverse("D"));
			this.ass.analLooseness = ANAL_LOOSENESS_STRETCHED;
			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;
			initStrTouSpeInte(90, 60, 120, 40);
			initLibSensCor(40, 45, 50);
			this.weaponName = "poker";
			this.weaponVerb="burning stab";
			this.weaponAttack = 30;
			this.armorName = "armor";
			this.armorDef = 20;
			this.bonusHP = 1000;
			this.lust = 20;
			this.lustVuln = .25;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 19;
			this.gems = rand(25) +140;
			this.additionalXP = 50;
			this.wingType = WING_TYPE_FEATHERED_LARGE;
			this.tailType = TAIL_TYPE_DEMONIC;
			this.hornType = HORNS_DEMON;
			this.horns = 2;
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}


code:
/**
 * Created by aimozg on 03.01.14.
 */
package classes.Scenes.Dungeons.HelDungeon
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;

	public class BrigidScene extends BaseContent
	{
		public function BrigidScene()
		{
		}

		//Brigid the Jailer -- PC Victorious
		public function pcDefeatsBrigid():void {
			clearOutput();
			outputText("The harpy jailer collapses, ");
			if (monster.lust >= monster.eMaxLust()) outputText("too turned on");
			else outputText("too badly beaten");
			outputText(" to continue the fight.  You quickly snatch the keys from inside her shield, and hook them onto your own belt.");
			//(New Key Item: Harpy Key A)
			player.createKeyItem("Harpy Key A",0,0,0,0);
			combat.cleanupAfterCombat();
			flags[kFLAGS.HEL_BRIGID_DEFEATED] = 1;
		}

		//Brigid the Jailer -- PC Defeated
		public function pcDefeatedByBrigid():void {
			clearOutput();
			if (flags[kFLAGS.HEL_HARPY_QUEEN_DEFEATED] == 0) {
				outputText("\"Tsk tsk tsk,\" the harpy jailer croons, looming over you as you slump to the ground. \"You shouldn't have messed with me, bitch!\" she snaps, giving you a rough kick to the side. \"Now, let's see what Mother has to say about this...\"");
				//(Go to \"Harpy Breeding Slut\" Bad End)
				doNext(getGame().dungeons.heltower.harpyQueenBeatsUpPCBadEnd);
			}
			else {
				outputText("\"That's it?!\" Brigid screams, as you collapse in front of her.  \"A weak little piece of trash like you took out our queen?\"");

				outputText("\n\n\"[name]!\" calls a voice from behind you.  Hel bounds down the stairs, summoned by the sound of the fight; when she spies your defeated form, she draws her sword and throws herself at the harpy jailer, completely clearing the ground in her rage.  The scene that plays out next passes through your dazed mind agonizingly, like a nightmare.");
				outputText("\n\nAs Hel launches herself over your body, weapon raised over her head, Brigid turns and raises a taloned foot.  It catches the salamander right in the stomach, bending her double, and the scimitar flies out of her hands to skitter across the stone floor.  You can see the light leave Hel's eyes as she coughs violently, and a small fan of blood and flame is ejected from her mouth.  The man on the table winces as Brigid lowers your partner to the ground.");
				outputText("\n\n\"Completely PATHETIC!\" rants the dyke jailer.  \"Neither of you is anything more than garbage!\"  She turns to her torture rack, holding it steady with one foot as she searches for and discards items from it.");

				outputText("\n\n\"Where the fu- AHA!\" she cries in triumph, tossing a dangerous-looking knife aside and claiming something from behind it.  Turning again, Brigid advances on you and Hel with a smouldering smile, carrying two small vials of thick, white liquid.  \"Garbage you may be, but even garbage can be recycled.\"");

				outputText("\n\nAn alarm blares in your mind and you reach out sluggishly to try and grab her slim ankle, but she kicks you in the head and your vision goes mazy.  The last thing you make out before slipping into unconsciousness is the harpy standing over Hel, pinning her fiery tail under a shield held down with one claw as she forces the contents of a vial down the salamander's gullet...");

				doNext(brigitPostQueenDeathBadEndII);
			}
		}

		//--Next--
		private function brigitPostQueenDeathBadEndII():void {
			clearOutput();
			//[(if M, U, or visibly pregnant F/H)
			if (player.gender <= 1 || player.pregnancyIncubation > 0) {
				outputText("A soft, ticklish feeling against your [chest] is the first thing to bring you back to reality.  Your eyes open slowly, revealing a confusing blur of orange.  \"[name],\" murmurs a familiar voice from the unfocused smear, \"you're all right... thank god.\"  As your head clears, the picture slowly resolves into the tear-streaked face of Kiri, the little harpy from before; she smiles as you recognize her, and wraps her arms around your neck.  You try to hold her back, but find you cannot move your hands - looking at them, you notice your wrists secured to the table you're lying on with metal clasps!");
				outputText("\n\n\"S-sorry,\" Kiri whispers, \"Brigid won, remember...\"  The results of the last fight return to you in a flash, explaining your current predicament.  Testing your whole body, you find all your limbs similarly bound to the stone table.");

				outputText("\n\n\"The others?\" you ask, blearily.");

				outputText("\n\nThe harpy girl atop you frowns unhappily, and darts her eyes to the left.  Turning your head to follow her glance, you see the captured salamander from before and, mounted atop his swollen prick, Hel!  Her face is covered by an iron mask, but the tits are the same familiar, jiggling orbs and you can't imagine there are any other female salamanders here... or rather, formerly female.  You revise your guess hurriedly as the captive grunts and thrusts into her, forcing her hips up and allowing the small cock now growing from her crotch to bob freely!  A drop of pre-cum glides down it, and Hel shivers; the skin on her new dick looks chafed and raw, flushed red where it's not spotted with orange scales.");

				outputText("\n\n\"She's been first pick of the remaining women,\" Kiri mumbles, gesturing toward several satisfied harpy and phoenix matrons dozing along the walls.  \"They've spend equal time fighting over and fucking her, poor sis-\"");

				outputText("\n\nA sharp crack sounds and Kiri's eyes widen as her chest jerks forward; Brigid stands behind her, holding a leather crop.  \"You're here to fuck, not talk!\" the torturer screams, shaking the whip at you.  \"I don't care if it's salamanders, phoenixes, or just half-breed harpies, but you are going to help make me a new army to replace the one you wiped out!\"  Kiri grimaces at the brutal woman, but begins shifting her hips against you, sending a wave of pleasure to the base of your spine.");

				//[(if F or U)
				if (!player.hasCock()) {
					outputText("\n\nYour eyes widen in shock at the sensation, and Kiri flinches at your expression.  \"What,\" Brigid asks, glowering at you, \"did you think we'd let you go after what you did, just because we couldn't breed you?");
					if (player.pregnancyIncubation > 0) outputText("  Once this disgusting thing you're carrying falls out of you, we'll use you more traditionally, but...\"  She pauses to press uncomfortably on your pregnant belly, then resumes speaking.  \"I have no intention of letting you sit idle for however long that takes.");
					outputText("  For now, I've given you the most obvious modification - I can think of something else later.\"");
					outputText("\n\nShe squeezes Kiri's ass firmly with one hand, and lifts the girl partway out of your lap.  A smooth, hot sensation separates from your crotch and glides along nerves you hadn't noticed until now as Kiri's pussy slides upward, partially revealing the erect, " + player.skinTone + " flesh of a brand new cock!  Brigid gloats at your confusion, laughing her delight to the roof of the chamber, then shoves Kiri's ass downward again, spearing her pussy on your new flesh and making the girl wince and grit her teeth.");
					player.createCock();
				}
				outputText("\n\nThe jailer slaps the small half-breed on the butt, sending a pleasing tremor through your cock, then withdraws to a stool in the corner.  \"Fuck... or I'll make you fuck,\" she declares ominously, casting her riding crop aside and beckoning another harpy over.  She picks up a worn journal as the other woman sits on her leg, then begins turning the pages with a thumb as she plays with the harpy's pussy.  \"Watch them for me, sweet,\" Brigid says, kissing the woman on the neck.  \"Make sure they do their jobs while I'm studying mom's notes.\"  Her lover shivers and nods nervously, fixing her eyes on you.");

				outputText("\n\nKiri strokes your prick with her body vigorously, pushing you toward your limit and keeping up appearances even as she whispers to you.  \"Please, [name]... just endure it for now.  I'll think of a way to get you out of here, I promise.\"  She shifts her hips downward, engulfing your shaft again, and rolls her head passionately as her cheeks flush.  \"I-it may be a while, though,\" she says, kissing your chest.  \"I - ah! I'm not very much by myself, so... the only thing I can do is make lots of loyal, strong daughters with your seed... s-someday there'll be enough to make a break for it!  J-just hold on and... and... fertilize me!  Fertilize me, [name]!\"");

				outputText("\n\nThe harpy's eyes roll back in her head as she moans and sinks down one last time in orgasm, sucking at your cock with her vagina; your throbbing prick obeys, ejaculating a load of semen into the open-mouthed bird-girl.  \"Ohh god,\" Kiri gasps, \"YES!  Cover my eggs in your sticky cum!  Fill me up!\"");
				if (player.cockTotal() > 1 || player.cumQ() > 1000) outputText("  " + player.SMultiCockDesc() + " holds forth for a while, until Kiri's ass, pussy, and tailfeathers are soaked with oozing, white cum.");
				outputText("  Next to you, the salamander on the other table climaxes as well, dumping a load into Hel that sizzles when it leaks onto his fiery, iron-bound tail.  Your former lover squirms and shivers as the scalding-hot load fills her cunt, and her own prick twitches weakly, depositing a small string of bubbling jism on the stone table.");

				outputText("\n\n\"Oh dad... Hel... I'm sorry,\" Kiri whimpers, unable to pull her eyes away from them as your cock dribbles the last of your seed into her.  The bound man's single eye widens as he hears the name of his partner, and his face deforms with rage as a roar pours out of him with enough volume to shake the room.  Kiri buries her face in your [chest] and shudders as the prisoner bellows his frustration; Hel simply looks left and right, confused and anxious as the echoing roar dies off; Brigid pushes her toy pussy away and rises from her stool.");

				outputText("\n\n\"Not bad, old man,\" the jailer quips.  \"I didn't think you had that much life left in you.  Maybe I'll keep you with this woman for a while!\"  The salamander's eye hardens, but he says nothing; Brigid looks from him to you and Kiri, but you both assume expressions of studied incomprehension.  \"... Whatever.  You bitches get up; you've had your turns and I've got a lot more cunts to pack full.\"  She begins pulling Hel's chains free of the iron ring at the end of the table.");

				outputText("\n\nKiri frowns unhappily as she slips your cock from her pussy, then kisses you.  \"Remember, [name]... just hold on!  And... save some of your seed for me!\"  She lingers for a while, looking in your eyes affectionately, but Brigid grabs her by the hair and, swearing filthily, pulls her away.  A sadistic-looking phoenix takes her place, straddling you and slipping your sore prick into her cunt... the last thing you manage to do before your head is filled with the agony and ecstasy of having your raw shaft ridden again right after orgasm is to wonder exactly how long salamander-harpy half-breeds gestate...");
				//[GAME THE FUCK OVER, SON; WHERE IS MY MONEY?]
				getGame().gameOver();
				if (flags[kFLAGS.HARDCORE_MODE] <= 0) addButton(1, "Retry", getGame().dungeons.heltower.retryDungeonFromBadEndPrompt);
			}
			//(else if not visibly pregnant F or H)
			else {
				//hymen check]
				player.cuntChange(15,false,false,false);
				outputText("The heat in your [vagina] is the first thing to stir you.  Your eyes open painfully, fluttering with each soft pulse of your head; it feels like an imp was set loose inside, covering your brain with thick jizz, but eventually you manage to focus and look down.  What greets you is the sight of ");
				if (player.hasCock()) outputText(player.sMultiCockDesc() + " bobbing up and down, drooling pre-cum, as ");
				outputText("your red, sore pussy is pounded viciously by a thick cock dotted with scales.  Below it dangles a pair of swollen balls, bouncing as the shaft is thrust into you; with an inkling of understanding, you look back to confirm your suspicion.  Sure enough, you're mounted atop the table-bound salamander from before, who grunts as he pushes into you.  The hot cock, hotter than your body, slides in with a sizzle, and some of your juices roll down the shaft, only to evaporate when they hit the salamander's flaming, iron-bound tail.  Your own limbs are chained to the table via a massive iron ring and Brigid stands in front of you, watching you expectantly; behind her are arranged a score of assorted harpies and surviving phoenixes in various stages of coitus.");

				outputText("\n\nIt takes you a while to realize that the gasps you're hearing aren't all coming from you and the rabble; you turn your head to the table next to you, upon which is strapped Hel.  The woman is restrained much the same way as your salamander, except her legs are spread wide open, displaying her pussy for all to see, and an additional iron mask completely covers her face.  Atop Hel sits Kiri, the little orange-feathered harpy from before, grinding her feathery pelvis into Hel's.  \"S-sorry dad; [name],\" Kiri says, wincing as she notices your stare.  \"Just... try to... t-to hold on!\"  She reclines and pulls away from Hel, and for the first time you can see what she's grinding on; a small, orange-scaled dick is jutting fron Hel's crotch!  Kiri moans as she stirs her pussy with it, throwing her hips upward to reveal that she, too, sports a brand-new, oozing penis.");

				outputText("\n\n\"Talk less, fuck more!\" howls Brigid, striking Kiri across the shoulders.  \"Our queen is gone, and the burden falls on us to repopulate our ranks!  Be glad I consider you worthy enough to use your seed, little half-breed!  Whether it's salamanders, phoenixes, or weak fodder like you, you WILL reproduce!\"");

				outputText("\n\nAs Brigid turns away, Kiri scowls and leans forward again, pressing her modest breasts against her lover's and whispering something to the masked Hel, who nods and begins thrusting vigorously.  The sight returns your attention to the cock in your own [vagina], and your head rolls back as the salamander under you fucks faster, drawing closer to orgasm.  His thick, rough prick scrapes your walls angrily, the little lubrication you can generate overtaxed as it tries to cope with his sweltering body heat and the blistering pace of the sex.");

				outputText("\n\nA muffled cry comes from the table beside you, as Hel achieves climax and buries her new dick as deeply into Kiri as she can.  As her body convulses, you can see her pussy squeezing out strings of white seed to drool between her legs - likely Kiri's, as the little harpy blushes when she notices the oozing mess over her shoulder.  The room is filled with the smell of semen as the goo hits Hel's tail and begins to bubble, and Kiri lets out a cry as well, falling backward onto her outstretched hands as her hips shake; a little squirt of cum lances from her cock, to land on Hel's tits.  \"F-fuck yeah, fertilize me!  Paint my eggs with your sperm!\" Kiri shouts in ecstasy, proving that she's still a harpy after all.");

				outputText("\n\nThe dick in you twitches and a flood of painful warmth in your own womb tenses your body; you slide partway off of the shaft in agony, and you can see the man's wrists straining against his bonds, trying to break free so he can pull you back down.  He roars in frustration as you expose more than half of his cock to the air trying to get away from the intensely hot seed, but there's not enough slack in your bonds, and he finishes inside you, leaving your [face] tear-stained and pinched.  Brigid takes your chin in her hands.");

				outputText("\n\n\"Aww, didn't come yet?  Too bad.  There's only one use for a trash " + player.race() + " like you, anyway,\" your jailer coos sweetly, caressing your " + player.skin() + ".  \"You're going to make me more salamanders, so... better luck next time!\"  She unfastens your chains from the loop on the table, violently dragging you clear and covering your [butt] in the scalding seed pouring out of you.  \"I don't care what you bitches do with this one,\" Brigid says, yanking you toward the ongoing harpy orgy, \"just don't ruin her.  That breeding stock on the table won't last much longer once we start to make up for the soldiers we lost, and we might be able to get a replacement out of her womb.  And don't fucking bother me, I need to go over mom's notes and figure out how she was making the phoenixes!\"");

				outputText("\n\nWith a shove from the pink-haired jailer, you're tumbled into a pair of lovers; the phoenix stops groping the harpy's tits to wrap her arm around you and pull you to the floor, and no sooner are you laid down than the harpy's stretched, semen-stuffed pussy is atop your mouth, grinding into your face and drooling warm phoenix seed down your throat");
				if (player.hasCock()) outputText(" as the phoenix's cunt slides onto your [cock smallest]");
				outputText(".  Brigid makes her way up the stairs, leaving you and the others at the mercy of the assorted horde.  The harpy rides your mouth greedily, knocking your head into the hard stone floor, and the last thing you can see around her feathery thighs before you slip into unconsciousness again is Kiri being pulled roughly from her resting place atop Hel by a mean-looking, wide-hipped harpy matron who takes her place, sitting sideways and drawing her talons sadistically across Hel's vulnerable chest to smear Kiri's seed around...");
				//[GAME OVER, MOTHERFUCKER]
				getGame().gameOver();
				if (flags[kFLAGS.HARDCORE_MODE] <= 0) addButton(1, "Retry", getGame().dungeons.heltower.retryDungeonFromBadEndPrompt);
			}
		}

	}
}

license: unknown


code:
package classes.Scenes.Dungeons.HelDungeon
{
	import classes.*;

	public class HarpyMob extends Monster
	{
		public function harpyHordeAI():void {
			if (rand(3) == 0) harpyHordeLustAttack();
			else if (rand(3) > 0) harpyHordeClawFlurry()
			else harpyHordeGangBangAttack();
		}

		//ATTACK ONE: Claw Flurry
		public function harpyHordeClawFlurry():void {
			outputText("The harpies lunge at you, a veritable storm of talons and claws raining down around you.  You stumble back, trying desperately to deflect some of the attacks, but there are simply too many to block them all!  Only a single harpy in the brood seems to be holding back...\n");
			//(Effect: Multiple light attacks)
			createStatusEffect(StatusEffects.Attacks,3+rand(3),0,0,0);
			eAttack();
			combatRoundOver();
		}

		//ATTACK TWO: Gangbang
		public function harpyHordeGangBangAttack():void {
			outputText("Suddenly, a pair of harpies grabs you from behind, holding your arms to keep you from fighting back! Taking advantage of your open state, the other harpies leap at you, hammering your chest with punches and kicks - only one hangs back from the gang assault.\n\n");
			player.createStatusEffect(StatusEffects.HarpyBind,0,0,0,0);
			//(PC must struggle:
			harpyHordeGangBangStruggle(false);
		}

		public function harpyHordeGangBangStruggle(clearDisp:Boolean = true):void {
			if (clearDisp) clearOutput();
			//Failure:
			//If fail:
			if (rand(10) > 0 && player.str/5 + rand(20) < 23) {
				var damage:Number = 80 + rand(40);
				outputText("You struggle in the harpies' grasp, but can't quite get free.  The brood continues to hammer away at your defenseless self. ");
				damage = player.takeDamage(damage, true);
			}
			//Success:
			else {
				player.removeStatusEffect(StatusEffects.HarpyBind);
				outputText("With a mighty roar, you throw off the harpies grabbing you and return to the fight!");
			}
			combatRoundOver();
		}

		//ATTACK THREE: LUSTY HARPIES!
		public function harpyHordeLustAttack():void {
			outputText("The harpies back off for a moment, giving you room to breathe - only to begin a mini strip-tease, pulling off bits of clothing to reveal their massive asses and hips or bearing their small, perky tits.  They caress themselves and each other, moaning lewdly.  Distracted by the burlesque, you don't notice a lipstick-wearing harpy approach you until it's too late!  She plants a kiss right on your lips, ");
			if (player.findPerk(PerkLib.LuststickAdapted) >= 0) outputText("doing relatively little thanks to your adaptation");
			else {
				outputText("sending shivers of lust up your spine");
				game.dynStats("lus", 5);
				if (player.hasCock()) game.dynStats("lus", 15);
			}
			outputText(".");
			game.dynStats("lus", 10);
			combatRoundOver();
		}

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

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

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.dungeons.heltower.pcLosesToHarpyHorde();
		}

		public function HarpyMob()
		{
			this.a = "the ";
			this.short = "harpy horde";
			this.imageName = "harpymob";
			this.long = "You are surrounded by a wing of particularly large and muscular harpies, perhaps a dozen of them in total.  All of them are clad in simple brown shifts that give them good camouflage in the mountains, and are using their talon-like claws as weapons against you. While not a great threat to a champion of your ability individually, a whole brood of them together is... something else entirely.";
			this.plural = true;
			this.pronoun1 = "they";
			this.pronoun2 = "them";
			this.pronoun3 = "their";
			this.createVagina(false, VAGINA_WETNESS_SLAVERING, VAGINA_LOOSENESS_GAPING_WIDE);
			createBreastRow(Appearance.breastCupInverse("B"));
			this.ass.analLooseness = ANAL_LOOSENESS_STRETCHED;
			this.ass.analWetness = ANAL_WETNESS_SLIME_DROOLING;
			this.tallness = rand(8) + 70;
			this.hipRating = HIP_RATING_CURVY+2;
			this.buttRating = BUTT_RATING_LARGE;
			this.lowerBody = LOWER_BODY_TYPE_HARPY;
			this.skinTone = "red";
			this.skinType = SKIN_TYPE_PLAIN;
			this.skinDesc = "feathers";
			this.hairColor = "black";
			this.hairLength = 15;
			initStrTouSpeInte(50, 50, 120, 40);
			initLibSensCor(60, 45, 50);
			this.weaponName = "claw";
			this.weaponVerb="claw";
			this.weaponAttack = 10;
			this.armorName = "armor";
			this.armorDef = 20;
			this.bonusHP = 1000;
			this.lust = 20;
			this.lustVuln = .2;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 18;
			this.gems = rand(25) +140;
			this.additionalXP = 50;
			this.tailType = TAIL_TYPE_HARPY;
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Dungeons.HelDungeon
{
	import classes.*;

	public class HarpyQueen extends Monster
	{
		public function harpyQueenAI():void {
			if (rand(4) == 0) eldritchRopes();
			else if (rand(2) == 0) lustSpikeAttack();
			else windSlamAttack();
		}
		//ATTACK ONE: ELDRITCH ROPES
		public function eldritchRopes():void {
			outputText("The Harpy Queen flicks her left wrist at you. Before you can blink, ropes of white-hot magic hurtle toward you. You manage to duck and dodge a few of them, but a pair still grab your wrists, pulling painfully at your arms.");
			//(Effect: Grab + Physical Damage)
			var damage:int = 25 + rand(10);
			damage = player.takeDamage(damage, true);
			createStatusEffect(StatusEffects.QueenBind,0,0,0,0);
			combatRoundOver();
		}

		public function ropeStruggles(wait:Boolean = false):void {
			clearOutput();
			//Struggle Fail:
			if (rand(10) > 0 && player.str/5 + rand(20) < 23 || wait) {
				outputText("You give a mighty try, but cannot pull free of the magic ropes!  The Harpy Queen laughs uproariously, pulling at your arms harder.");
				if (player.findPerk(PerkLib.Juggernaut) < 0 && armorPerk != "Heavy") {var damage:int = 25 + rand(10);
				damage = player.takeDamage(damage, true);
				}
			}
			else {
				outputText("With supreme effort, you pull free of the magic ropes, causing the queen to tumble to her hands and knees.");
				removeStatusEffect(StatusEffects.QueenBind);
			}
			combatRoundOver();
		}

		//ATTACK TWO: LUST SPIKE
		public function lustSpikeAttack():void {
			outputText("The Harpy Queen draws a strange arcane circle in the air, lines of magic remaining wherever the tip of her staff goes.  You try to rush her, but the circle seems to have created some kind of barrier around her.  You can only try to force it open - but too late!  A great pink bolt shoots out of the circle, slamming into your chest.  You suddenly feel light-headed and so very, very horny...");
			//(Effect: Heavy Lust Damage)
			game.dynStats("lus", 40);
			combatRoundOver();
		}

		//ATTACK THREE: Wind Slam!
		public function windSlamAttack():void {
			outputText("The queen swings her arm at you and, despite being a few feet away, you feel a kinetic wall slam into you, and you go flying - right into the harpy brood!  You feel claws, teeth and talons dig into you, but you're saved by a familiar pair of scaled arms.  \"<i>Get back in there!</i>\" Helia shouts, throwing you back into the battle!");
			//(Effect; Heavy Damage)
			var damage:Number = 100 + rand(50);
			damage = player.takeDamage(damage, true);
			combatRoundOver();
		}

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

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

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.dungeons.heltower.harpyQueenBeatsUpPCBadEnd();
		}

		public function HarpyQueen()
		{
			this.a = "the ";
			this.short = "Harpy Queen";
			this.imageName = "harpyqueen";
			this.long = "You face the Harpy Queen, a broodmother of epic proportions - literally.  Her hips are amazingly wide, thrice her own width at the least, and the rest of her body is lushly voluptuous, with plush, soft thighs and a tremendous butt.  Her wide wings beat occasionally, sending ripples through her jiggly body.  She wields a towering whitewood staff in one hand, using the other to cast eldritch spells.";
			// this.plural = false;
			this.createVagina(false, VAGINA_WETNESS_SLAVERING, VAGINA_LOOSENESS_LOOSE);
			createBreastRow(Appearance.breastCupInverse("D"));
			this.ass.analLooseness = ANAL_LOOSENESS_STRETCHED;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.tallness = rand(8) + 70;
			this.hipRating = HIP_RATING_AMPLE+2;
			this.buttRating = BUTT_RATING_LARGE;
			this.lowerBody = LOWER_BODY_TYPE_HARPY;
			this.skinTone = "red";
			this.skinType = SKIN_TYPE_PLAIN;
			this.skinDesc = "feathers";
			this.hairColor = "black";
			this.hairLength = 15;
			initStrTouSpeInte(70, 60, 120, 40);
			initLibSensCor(40, 45, 50);
			this.weaponName = "eldritch staff";
			this.weaponVerb="thwack";
			this.weaponAttack = 20;
			this.armorName = "armor";
			this.armorDef = 20;
			this.bonusHP = 1000;
			this.lust = 20;
			this.lustVuln = .15;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 20;
			this.gems = rand(25) +160;
			this.additionalXP = 50;
			this.tailType = TAIL_TYPE_HARPY;
			this.wingType = WING_TYPE_FEATHERED_LARGE;
			this.drop = NO_DROP;
			this.createPerk(PerkLib.ImprovedSelfControl, 0, 0, 0, 0);
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Dungeons.HelDungeon
{
	import classes.*;

	public class PhoenixPlatoon extends Monster
	{
		//ATTACK ONE: SPARTAN RUSH
		public function phoenixPlatoonRush():void {
			outputText("You fall back under a hail of scimitar attacks.  The sheer number of phoenixes attacking is bad enough, but their attacks are perfectly coordinated, leaving virtually no room for escape or maneuver without getting hit!\n");
			//(Effect: Multiple medium-damage attacks)
			//(Effect: Multiple light attacks)
			createStatusEffect(StatusEffects.Attacks,2+rand(3),0,0,0);
			eAttack();
			combatRoundOver();
		}

		//ATTACK TWO: FIRE BREATH
		public function phoenixPlatoonFireBreath():void {
			outputText("Suddenly, the shield wall parts, revealing a single member of the platoon, a particularly muscular girl with a raging erection.  Before you can consider what's going on, she rears back and huffs at you.  To your horror, a great gout of fire erupts from her mouth, rolling towards you.  You dive, but are still caught partially in the inferno.");
			//(Effect: One heavy-damage attack)
			var damage:Number = 100 + rand(50);
			damage = player.takeDamage(damage, true);
			combatRoundOver();
		}
		//ATTACK THREE: LUSTBANG GRENADE
		public function phoenixPlatoonLustbang():void {
			outputText("\"<i>LUSTBANG OUT!</i>\" one of the rear-most phoenixes shouts, causing all the other warriors to duck down behind their shields.  Oh, shit!  A large glass sphere rolls out from the shield wall, and immediately explodes in a great pink cloud.  You cough and wave your arms, but by the time the cloud has dissipated, you feel lightheaded and lusty, barely able to resist the urge to throw yourself at the phoenixes and beg for their cocks and cunts.");
			//(Effect: Large lust increase)
			game.dynStats("lus", 40);
			combatRoundOver();
		}

		public function phoenixPlatoonAI():void {
			if (findStatusEffect(StatusEffects.Platoon) < 0) {
				phoenixPlatoonRush();
				createStatusEffect(StatusEffects.Platoon,0,0,0,0);
			}
			else if (statusEffectv1(StatusEffects.Platoon) == 0) {
				phoenixPlatoonFireBreath();
				addStatusValue(StatusEffects.Platoon,1,1);
			}
			else {
				phoenixPlatoonLustbang()
				removeStatusEffect(StatusEffects.Platoon);
			}
		}

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

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

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.dungeons.heltower.phoenixPlatoonMurdersPC();
		}

		public function PhoenixPlatoon()
		{
			this.a = "the ";
			this.short = "phoenix platoon";
			this.imageName = "phoenixmob";
			this.long = "You are faced with a platoon of heavy infantry, all armed to the teeth and protected by chain vests and shields. They look like a cross between salamander and harpy, humanoid save for crimson wings, scaled feet, and long fiery tails. They stand in a tight-knit shield wall, each phoenix protecting herself and the warrior next to her with their tower-shield. Their scimitars cut great swaths through the room as they slowly advance upon you.";
			this.plural = true;
			this.pronoun1 = "they";
			this.pronoun2 = "them";
			this.pronoun3 = "their";
			this.createCock();
			this.balls = 2;
			this.ballSize = 1;
			this.cumMultiplier = 3;
			this.createVagina(false, VAGINA_WETNESS_SLAVERING, VAGINA_LOOSENESS_LOOSE);
			createBreastRow(Appearance.breastCupInverse("D"));
			this.ass.analLooseness = ANAL_LOOSENESS_STRETCHED;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.tallness = rand(8) + 70;
			this.hipRating = HIP_RATING_AMPLE+2;
			this.buttRating = BUTT_RATING_LARGE;
			this.lowerBody = LOWER_BODY_TYPE_LIZARD;
			this.skinTone = "red";
			this.hairColor = "black";
			this.hairLength = 15;
			initStrTouSpeInte(70, 60, 120, 40);
			initLibSensCor(40, 45, 50);
			this.weaponName = "spears";
			this.weaponVerb="stab";
			this.weaponAttack = 20;
			this.armorName = "armor";
			this.armorDef = 20;
			this.bonusHP = 1000;
			this.lust = 20;
			this.lustVuln = .15;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 20;
			this.gems = rand(25) +160;
			this.additionalXP = 50;
			this.hornType = HORNS_DRACONIC_X2;
			this.horns = 2;
			this.tailType = TAIL_TYPE_HARPY;
			this.wingType = WING_TYPE_FEATHERED_LARGE;
			this.drop = NO_DROP;
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Dungeons
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.BaseContent;
	import classes.Scenes.Dungeons.DungeonAbstractContent;
	import classes.Scenes.Dungeons.DungeonCore;

	public class YourCabin extends DungeonAbstractContent
	{

		public function YourCabin()
		{
		}

		public function enterCabin():void {
			kGAMECLASS.inDungeon = true;
			kGAMECLASS.dungeonLoc = -10;
			menu();
			clearOutput();
			outputText("Your Cabin\n")
			outputText("You are in your cabin.  Behind you is a door leading back to your camp.  Next to the door is a window to let the sunlight in. \n\n");

			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] > 0)
			{
				outputText("Your bed is located at one of the corners. It's constructed with wood frame and a mattress is laid on the frame. It's covered in sheet. A pillow leans against the headboard.  ");
				if (inventory.itemStorageDirectGet().length > 0) {
					var chests:int = 0;
					if (player.hasKeyItem("Camp - Chest") >= 0) chests++;
					if (player.hasKeyItem("Camp - Murky Chest") >= 0) chests++;
					if (player.hasKeyItem("Camp - Ornate Chest") >= 0) chests++;
					outputText("Your storage " + (chests == 1 ? "chest is" : "chests are") + " located in front of your bed.")
				}
				outputText("\n\n");
			}
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_NIGHTSTAND] > 0)
			{
				outputText("A nightstand is situated next to your bed. ");
				if (flags[kFLAGS.BENOIT_CLOCK_BOUGHT] > 0) outputText("An alarm clock rests on your nightstand. It's currently set to go off at " + flags[kFLAGS.BENOIT_CLOCK_ALARM] + "am. ");
				if (player.hasKeyItem("Equipment Storage - Jewelry Box") >= 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DRESSER] <= 0) outputText("A jewelry box sits on your nightstand.");
				outputText("\n\n")
			}
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_DRESSER] > 0)
			{
				outputText("Your dresser is located at side opposite from your bed. ");
				if (player.hasKeyItem("Equipment Storage - Jewelry Box") >= 0) outputText("A jewelry box sits on your dresser.");
				outputText("\n\n")
			}
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_TABLE] > 0)
			{
				outputText("A table is located right near the window. ");
				if (flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] > 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR2] <= 0) outputText("A chair is set near the table. ");
				if (flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] > 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR2] > 0) outputText("Two chairs are set at opposite sides of the table. ");
				outputText("\n\n")
			}
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] > 0)
			{
				var books:Number = 0
				books++ //Your codex counts.
				if (player.hasKeyItem("Dangerous Plants") >= 0) books++;
				if (player.hasKeyItem("Traveler's Guide") >= 0) books++;
				if (player.hasKeyItem("Hentai Comic") >= 0) books++;
				if (player.hasKeyItem("Yoga Guide") >= 0) books++;
				if (player.hasKeyItem("Carpenter's Toolbox") >= 0) books++; //Carpenter's Guide is bundled in your toolbox!
				if (player.hasKeyItem("Izma's Book - Combat Manual") >= 0) books++;
				if (player.hasKeyItem("Izma's Book - Etiquette Guide") >= 0) books++;
				if (player.hasKeyItem("Izma's Book - Porn") >= 0) books++;
				outputText("Located at the corner opposite the door is a bookshelf.  It currently holds " + num2Text(books) + " book");
				if (books > 1) outputText("s");
				outputText(".");
				outputText("\n\n")
			}
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] > 0)
			{
				if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] > 0) outputText("A desk is located right next to your bookshelf. ");
				else outputText("Located at the corner opposite the door is a desk. ");
				outputText("It has a drawer to store supplies for writing and studying.  ");
				if (flags[kFLAGS.CAMP_CABIN_FURNITURE_DESKCHAIR] > 0) outputText("A nicely constructed chair is tucked under the desk. It provides a place for you to sit on and study.");
				outputText("\n\n");
			}
			outputText("What would you like to do?");

			dungeons.setDungeonButtons(null, null, null, null);
			//Build menu
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] > 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] > 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESKCHAIR] > 0) addButton(0, "Study", menuStudy);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_NIGHTSTAND] > 0 && flags[kFLAGS.BENOIT_CLOCK_BOUGHT] > 0) addButton(1, "Set Alarm", menuAlarm);
			addButton(3, "Stash", inventory.stash);
			addButton(4, "Furniture", menuFurniture);
			addButton(9, "Wait", camp.doWait); //You can wait/rest/sleep in cabin.
			if (player.fatigue > 40 || player.HP / player.maxHP() <= .9) addButton(9, "Rest", getGame().camp.rest);
			if (model.time.hours >= 21 || model.time.hours < 6) addButton(9, "Sleep", getGame().camp.doSleep);
			addButton(11, "South (Exit)", exitCabin);
			addButton(14, "Codex", camp.codex.accessCodexMenu);
			removeButton(7);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_NIGHTSTAND] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DRESSER] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_TABLE] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR2] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESKCHAIR] >= 1) removeButton(2);
			if (model.time.hours >= 23 || model.time.hours < 6) {
				removeButton(0);
			}
		}

		private function exitCabin():void {
			kGAMECLASS.inDungeon = false;
			kGAMECLASS.dungeonLoc = -1;
			playerMenu();
		}

		private function menuAlarm():void {
			clearOutput();
			outputText("Set the hour the alarm will go off.");
			menu();
			addButton(0, "6am", setAlarm, 6);
			addButton(1, "7am", setAlarm, 7);
			addButton(2, "8am", setAlarm, 8);
			addButton(3, "9am", setAlarm, 9);
			addButton(4, "Back", enterCabin);
		}
		private function setAlarm(timeSet:int = 6):void {
			clearOutput();
			outputText("Alarm has been set to go off at " + timeSet + "am.");
			flags[kFLAGS.BENOIT_CLOCK_ALARM] = timeSet;
			doNext(enterCabin);
		}

		private function menuStudy():void {
			clearOutput();
			outputText("What would you like to study?");
			menu();
			if (player.hasKeyItem("Izma's Book - Combat Manual") >= 0) addButton(0, "C.Manual", studyCombatManual);
			if (player.hasKeyItem("Izma's Book - Etiquette Guide") >= 0) addButton(1, "E.Guide", studyEtiquetteGuide);
			if (player.hasKeyItem("Izma's Book - Porn") >= 0) addButton(2, "Porn", studyPorn);
			addButton(14, "Back", enterCabin);
		}

		private function studyCombatManual():void {
			clearOutput();
			outputText("You take the book titled 'Combat Manual' from the bookshelf and sit down on the chair while you lay the book on the desk.  You open the book and study its content.\n\n");
			//(One of the following random effects happens)
			var choice:Number = rand(3);
			if (choice == 0) {
				outputText("You learn a few new guarding stances that seem rather promising.");
				//(+2 Toughness)
				dynStats("tou", 2);
			}
			else if (choice == 1) {
				outputText("After a quick skim you reach the end of the book. You don't learn any new fighting moves, but the refresher on the overall mechanics and flow of combat and strategy helped.");
				//(+2 Intelligence)
				dynStats("int", 2);
			}
			else {
				outputText("Your read-through of the manual has given you insight into how to put more of your weight behind your strikes without leaving yourself open.  Very useful.");
				//(+2 Strength)
				dynStats("str", 2);
			}
			outputText("\n\nFinished learning what you can from the old rag, you close the book and put it back on your bookshelf.");
			doNext(camp.returnToCampUseOneHour);
		}

		private function studyEtiquetteGuide():void {
			clearOutput();
			outputText("You take the book titled 'Etiquette Guide' from the bookshelf and sit down on the chair while you lay the book on the desk.  You open the book and study its content.\n\n");

			outputText("You peruse the strange book in an attempt to refine your manners, though you're almost offended by the stereotypes depicted within.  Still, the book has some good ideas on how to maintain chastity and decorum in the face of lewd advances.\n\n");
			//(-2 Libido, -2 Corruption)
			dynStats("lib", -2, "cor", -2);

			outputText("After reading through the frilly book, you carefully put the book back on your bookshelf.");
			doNext(camp.returnToCampUseOneHour);
		}

		private function studyPorn():void {
			clearOutput();
			outputText("You take the book that's clearly labelled as porn from your bookshelf.  You look around to make sure you have complete privacy.\n\n");

			outputText("You wet your lips as you flick through the pages of the book and admire the rather... detailed illustrations inside.  A bee-girl getting gangbanged by imps, a minotaur getting sucked off by a pair of goblins... the artist certainly has a dirty mind.  As you flip the pages you notice the air around you heating up a bit; you attribute this to weather until you finish and close the book.\n\n");
			//(+2! Libido and lust gain)
			dynStats("lib", 2, "lus", (20+player.lib/10));
			outputText("Your mind is already filled with sexual desires.  You put the pornographic book back in your bookshelf.");

			doNext(camp.returnToCampUseOneHour);
		}

		private function menuFurniture():void {
			menu();
			clearOutput();
			outputText("What furniture would you like to construct?\n\n");
			camp.cabinProgress.checkMaterials();
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_NIGHTSTAND] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DRESSER] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_TABLE] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR2] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] == 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESKCHAIR] == 0)
			{
				outputText("Your cabin is empty.\n\n");
			}
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_NIGHTSTAND] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DRESSER] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_TABLE] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR2] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] >= 1 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESKCHAIR] >= 1)
			{
				outputText("You have constructed every furniture available!\n\n");
			}
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] <= 0) addButton(0, "Bed", constructFurnitureBedPrompt);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_NIGHTSTAND] <= 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] > 0) addButton(1, "Nightstand", constructFurnitureNightstandPrompt);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_DRESSER] <= 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] > 0) addButton(2, "Dresser", constructFurnitureDresserPrompt);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_TABLE] <= 0) addButton(3, "Table", constructFurnitureTablePrompt);
			if ((flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] <= 0 || flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR2] <= 0) && flags[kFLAGS.CAMP_CABIN_FURNITURE_TABLE] > 0) addButton(4, "Chair", constructFurnitureChairPrompt);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] <= 0) addButton(5, "Bookshelf" , constructFurnitureBookshelfPrompt);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] <= 0) addButton(6, "Desk" , constructFurnitureDeskPrompt);
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_DESKCHAIR] <= 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] > 0) addButton(7, "Chair 4 Desk" , constructFurnitureChairForDeskPrompt);
			addButton(14, "Back", enterCabin);
		}

		//CONSTRUCT FURNITURE
		//Bed
		private function constructFurnitureBedPrompt():void {
			clearOutput();
			outputText("Would you like to construct a bed? (Cost: 45 nails and 25 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 45 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 25)
				{
					doYesNo(constructFurnitureBed, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureBed():void {
			clearOutput();
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a bed. After moment of thinking over something you looking for a model that could be used by two people. Maybe someday you will need that extra space to sleep since it's Mareth after all. You follow the instructions.\n\n");
			outputText("You pick up the wood and begin to construct a bed frame. You put it together and drive nails into place with your hammer.\n\n");
			outputText("Next, you add a wooden slab to the bed for mattress. With the bed finished, you go outside to pick up your bedroll and bring it inside. It easily converts to mattress, sheet, and pillow. It took you two hours to completely make a large bed from the beginning!\n\n");
			outputText("You have finished your bed! (HP and Fatigue recovery increased by 50%!) \n\n");
			player.addKeyValue("Carpenter's Toolbox", 1, -45);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 25;
			flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] = 1;
			player.changeFatigue(40);
			doNext(camp.returnToCampUseTwoHours);
		}
		//Nightstand
		private function constructFurnitureNightstandPrompt():void {
			clearOutput();
			outputText("Would you like to construct a nightstand? (Cost: 20 nails and 10 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 20 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 10)
				{
					doYesNo(constructFurnitureNightstand, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureNightstand():void {
			clearOutput();
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a nightstand. You follow the instructions.\n\n");
			outputText("You pick up the wood and begin to construct a nightstand. You cut the wood into lengths. You put it together by driving nails into place with your hammer. After putting the nightstand together, you paint the nightstand for a polished look.\n\n");
			outputText("The paint dries relatively quickly and it only took you one hour to finish your nightstand! \n\n");
			outputText("You have finished your nightstand! \n\n");
			player.addKeyValue("Carpenter's Toolbox", 1, -20);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 10;
			flags[kFLAGS.CAMP_CABIN_FURNITURE_NIGHTSTAND] = 1;
			player.changeFatigue(20);
			doNext(camp.returnToCampUseOneHour);
		}
		//Dresser
		private function constructFurnitureDresserPrompt():void {
			clearOutput();
			outputText("Would you like to construct a dresser? (Cost: 50 nails and 30 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 50 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 30)
				{
					doYesNo(constructFurnitureDresser, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureDresser():void {
			clearOutput();
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a dresser. You follow the instructions.\n\n");
			outputText("You pick up the wood and cut it into lengths. You nail the dresser together before you work on the drawers. You cut yet more wood and nail it together. You add a handle and a base. You just completed one of the drawers. You put a drawer into the slot. You repeat the process until all of the drawer slots are filled. \n\n");
			outputText("Next, you paint the dresser for a more polished look. \n\n");
			outputText("The paint dries relatively quickly and it took you two hours to finish your dresser. \n\n");
			outputText("You have finished your dresser! \n\n");
			player.addKeyValue("Carpenter's Toolbox", 1, -50);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 30;
			flags[kFLAGS.CAMP_CABIN_FURNITURE_DRESSER] = 1;
			player.changeFatigue(60);
			doNext(camp.returnToCampUseOneHour);
		}
		//Table
		private function constructFurnitureTablePrompt():void {
			clearOutput();
			outputText("Would you like to construct a table? (Cost: 20 nails and 15 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 20 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 15)
				{
					doYesNo(constructFurnitureTable, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureTable():void {
			clearOutput();
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a table. You follow the instructions.\n\n");
			outputText("You pick up the wood and begin to construct a table. You cut the wood into lengths. You put it together by driving nails into place with your hammer. After putting the table together, you paint the table for a polished look.\n\n");
			outputText("The paint dries relatively quickly and it only took you one hour to finish your table! \n\n");
			outputText("You have finished your table! \n\n");
			player.addKeyValue("Carpenter's Toolbox", 1, -20);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 15;
			flags[kFLAGS.CAMP_CABIN_FURNITURE_TABLE] = 1;
			player.changeFatigue(50);
			doNext(camp.returnToCampUseOneHour);
		}
		//Chair
		private function constructFurnitureChairPrompt():void {
			clearOutput();
			outputText("Would you like to construct a chair? (Cost: 40 nails and 10 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 40 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 10)
				{
					doYesNo(constructFurnitureChair, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureChair():void {
			clearOutput();
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a chair. You follow the instructions.\n\n");
			outputText("You pick up the wood and begin to construct a chair. You cut the wood into lengths. You put it together by driving nails into place with your hammer. After putting the chair together, you paint the chair for a polished look.\n\n");
			outputText("The paint dries relatively quickly and it only took you one hour to finish your chair! \n\n");
			outputText("You have finished your chair! \n\n");
			player.addKeyValue("Carpenter's Toolbox", 1, -40);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 10;
			if (flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] >= 1)
			{
				flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR2] = 1;
			}
			else
			{
				outputText("Of course, you could construct another chair. \n\n");
				flags[kFLAGS.CAMP_CABIN_FURNITURE_CHAIR1] = 1;
			}
			player.changeFatigue(20);
			doNext(camp.returnToCampUseOneHour);
		}
		//Bookshelf
		private function constructFurnitureBookshelfPrompt():void {
			clearOutput();
			outputText("Would you like to construct a bookshelf? (Cost: 75 nails and 25 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 75 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 25)
				{
					doYesNo(constructFurnitureBookshelf, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureBookshelf():void {
			clearOutput();
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a bookshelf. You follow the instructions.\n\n");
			outputText("You pick up the wood and begin to construct a bookshelf. You cut the wood into lengths. You put it together by driving nails into place with your hammer. After putting the bookshelf together, you paint the bookshelf for a polished look.\n\n");
			outputText("The paint dries relatively quickly and it only took you two hours to finish your bookshelf! The bookshelf can hold three rows of books but you doubt you'll be able to fill out your bookshelf.\n\n");
			outputText("You have finished your bookshelf! \n\n");
			if (player.hasKeyItem("Dangerous Plants") >= 0 || player.hasKeyItem("Traveler's Guide") >= 0 || player.hasKeyItem("Hentai Comic") >= 0 || player.hasKeyItem("Yoga Guide") >= 0) {
				outputText("You take your time to place your books into the bookshelf. \n\n");
			}
			player.addKeyValue("Carpenter's Toolbox", 1, -75);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 25;
			flags[kFLAGS.CAMP_CABIN_FURNITURE_BOOKSHELF] = 1;
			player.changeFatigue(50);
			doNext(camp.returnToCampUseOneHour);
		}
		//Desk
		private function constructFurnitureDeskPrompt():void {
			clearOutput();
			outputText("Would you like to construct a desk? (Cost: 60 nails and 20 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 60 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 20)
				{
					doYesNo(constructFurnitureDesk, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureDesk():void {
			clearOutput();
			player.addKeyValue("Carpenter's Toolbox", 1, -60);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 20;
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a desk. You follow the instructions.\n\n");
			outputText("You pick up the wood and begin to construct a desk. You cut the wood into lengths. You put it together by driving nails into place with your hammer. After putting the desk together, you paint the bookshelf for a polished look.\n\n");
			outputText("Next, you construct a drawer to store small objects. You nail the drawer together and paint it. Finally, you install the drawer in place.\n\n")
			outputText("The paint dries relatively quickly and it only took you two hours to finish your desk! \n\n");
			outputText("You have finished your desk! \n\n");
			flags[kFLAGS.CAMP_CABIN_FURNITURE_DESK] = 1;
			player.changeFatigue(60);
			doNext(camp.returnToCampUseTwoHours);
		}
		//Chair for Desk
		private function constructFurnitureChairForDeskPrompt():void {
			clearOutput();
			outputText("Would you like to construct a chair? (Cost: 40 nails and 10 wood.)\n\n");
			camp.cabinProgress.checkMaterials();
			if (player.hasKeyItem("Carpenter's Toolbox"))
			{
				if (player.keyItemv1("Carpenter's Toolbox") >= 40 && flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 10)
				{
					doYesNo(constructFurnitureChairForDesk, menuFurniture);
				}
				else
				{
					kGAMECLASS.camp.cabinProgress.errorNotEnough();
					doNext(playerMenu);
				}
			}
			else
			{
				kGAMECLASS.camp.cabinProgress.errorNotHave();
				doNext(playerMenu);
			}
		}

		private function constructFurnitureChairForDesk():void {
			clearOutput();
			outputText("You take the book from your toolbox and flip pages until you reach pages about how to construct a chair. You follow the instructions.\n\n");
			outputText("You pick up the wood and begin to construct a chair. You cut the wood into lengths. You put it together by driving nails into place with your hammer. After putting the chair together, you paint the chair for a polished look.\n\n");
			outputText("The paint dries relatively quickly and it only took you one hour to finish your chair! \n\n");
			outputText("You have finished your chair! \n\n");
			player.addKeyValue("Carpenter's Toolbox", 1, -40);
			flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] -= 10;
			flags[kFLAGS.CAMP_CABIN_FURNITURE_DESKCHAIR] = 1;
			player.changeFatigue(20);
			doNext(camp.returnToCampUseOneHour);
		}

	}

}


code:
/**
 * Created by aimozg on 20.02.14.
 */
package classes.Scenes.Explore
{
	import classes.BaseContent;
	import classes.Monster;
	import classes.Scenes.Areas.Bog.*;
	import classes.Scenes.Areas.Desert.*;
	import classes.Scenes.Areas.Forest.*;
	import classes.Scenes.Areas.GlacialRift.*;
	import classes.Scenes.Areas.HighMountains.*;
	import classes.Scenes.Areas.Lake.*;
	import classes.Scenes.Areas.Mountain.*;
	import classes.Scenes.Areas.Plains.*;
	import classes.Scenes.Areas.Swamp.*;
	import classes.Scenes.Areas.VolcanicCrag.*;
	import classes.Scenes.Dungeons.DeepCave.*;
	import classes.Scenes.Dungeons.DesertCave.*;
	import classes.Scenes.Dungeons.D3.*;
	import classes.Scenes.Dungeons.Factory.*;
	import classes.Scenes.Dungeons.HelDungeon.*;
	import classes.Scenes.Monsters.*;
	import classes.Scenes.NPCs.*;
	import classes.Scenes.Places.Boat.*;
	import classes.Scenes.Places.Farm.*;
	import classes.Scenes.Places.Owca.*;
	import classes.Scenes.Places.Prison.*;
	import classes.Scenes.Quests.UrtaQuest.*;

	public class ExploreDebug extends BaseContent
	{

		public function doExploreDebug():void
		{
			clearOutput();
			menu();

			outputText("Monsters   combat each monster.\n\n");
			addButton(0, "Monsters", exploreDebugMonsters);
		}

		// array of lazy monster creators
		// 1) first go simple monsters that do not depend on/change game state
		// 2) then NPCs and quest monsters that might depend on/change game state
		// but still fightable without special initialization
		// 3) finally very special monsters, which rely on some kind of game state initialization (such as Ember)
		// and may crash or break something very heavily on attempt to fight
		private var allMonsters:Array = [
			// Generic monsters first...
			function ():Monster {return new Anemone();},
			function ():Monster {return new Basilisk();},
			function ():Monster {return new BeeGirl();},
			function ():Monster {return new ChameleonGirl();},
			function ():Monster {return new CorruptedDrider();},
			function ():Monster {return new CumWitch();},
			function ():Monster {return new DemonPack();},
			function ():Monster {return new FemaleSpiderMorph();},
			function ():Monster {return new FetishCultist();},
			function ():Monster {return new FetishZealot();},
			function ():Monster {return new FrostGiant();},
			function ():Monster {return new Gnoll();},
			function ():Monster {return new GnollSpearThrower();},
			function ():Monster {return new Goblin();},
			function ():Monster {return new GoblinAssassin();},
			function ():Monster {return new GooGirl();},
			function ():Monster {return new GreenSlime();},
			function ():Monster {return new Harpy();},
			function ():Monster {return new HellHound();},
			function ():Monster {return new Imp();},
			function ():Monster {return new ImpHorde();},
			function ():Monster {return new ImpLord();},
			function ():Monster {return new InfestedHellhound();},
			function ():Monster {return new Kitsune("black");},
			function ():Monster {return new Kitsune("blonde");},
			function ():Monster {return new Kitsune("red");},
			function ():Monster {return new MaleSpiderMorph();},
			function ():Monster {return new Minotaur(true);},
			function ():Monster {return new Minotaur(false);},
			function ():Monster {return new MinotaurMob();},
			function ():Monster {return new Naga();},
			function ():Monster {return new SandTrap();},
			function ():Monster {return new SandWitch();},
			function ():Monster {return new Satyr();},
			function ():Monster {return new SharkGirl();},
			function ():Monster {return new TentacleBeast();},
			function ():Monster {return new Valkyrie();},
			function ():Monster {return new WormMass();},
			function ():Monster {return new Yeti();},
			// ...NPCs, quest, and named monsters second, ...
			function ():Monster {return new Akbal();},
			function ():Monster {return new Amily();},
			function ():Monster {return new Behemoth();},
			function ():Monster {return new Brigid();},
			function ():Monster {return new Ceraph();},
			function ():Monster {return new GooArmor();},
			function ():Monster {return new Farmers();},
			function ():Monster {return new GoblinBroodmother();},
			function ():Monster {return new HarpyMob();},
			function ():Monster {return new HarpyQueen();},
			function ():Monster {return new Hel();},
			function ():Monster {return new IncubusMechanic();},
			function ():Monster {return new Isabella();},
			function ():Monster {return new Izma();},
			function ():Monster {return new Izumi();},
			function ():Monster {return new Jojo();},
			function ():Monster {return new Kelt();},
			function ():Monster {return new Kiha();},
			function ():Monster {return new Lethice();},
			function ():Monster {return new LustyDemons();},
			function ():Monster {return new Marble();},
			function ():Monster {return new MilkySuccubus();},
			function ():Monster {return new Minerva();},
			function ():Monster {return new MinotaurLord();},
			function ():Monster {return new OmnibusOverseer();},
			function ():Monster {return new PhoenixPlatoon();},
			function ():Monster {return new SandMother();},
			function ():Monster {return new SandWitchMob();},
			function ():Monster {return new Scruffy();},
			function ():Monster {return new SecretarialSuccubus();},
			function ():Monster {return new Shouldra();},
			function ():Monster {return new Sirius();},
			function ():Monster {return new Sophie();},
			function ():Monster {return new SpiderMorphMob();},
			function ():Monster {return new Tamani();},
			function ():Monster {return new TamanisDaughters();},
			function ():Monster {return new Vala();},
			function ():Monster {return new Zetaz();},
			// ...VERY special monsters third.
			function ():Monster {return new EncapsulationPod();},
			function ():Monster {return new Sheila();},
			function ():Monster {return new Holli();},
			function ():Monster {return new Helspawn();},
			function ():Monster {return new Marae();},
			function ():Monster {return new Ember();}
		];

		private function exploreDebugMonsters(monsterIdx:int = 0):void
		{
			clearOutput();
			menu();

			if (monsterIdx == 0) {
				outputText("WARNING. You are going to fight (probably) all the monsters. " +
						"You won't be penalized for defeat or awarded for victory. " +
						"Even though the monsters' victory and defeat events are removed, " +
						"fighting certain quest monsters/NPCs through this debug scene " +
						"may put their scenes into inconsistent state. \n\n");
			}

			if (monsterIdx >= allMonsters.length) {
				outputText("You have fought every monster.");
			} else {
				var m:Monster = allMonsters[monsterIdx]();
				m.onDefeated = function (hpVictory:Boolean):void
				{
					getGame().inCombat = false;
					getGame().combat.clearStatuses(false);
					statScreenRefresh();
					exploreDebugMonsters(monsterIdx + 1);
				};
				m.onWon = function (hpVictory:Boolean, pcCameWorms:Boolean):void
				{
					getGame().inCombat = false;
					getGame().combat.clearStatuses(false);
					statScreenRefresh();
					exploreDebugMonsters(monsterIdx + 1);
				};
				m.onPcRunAttempt = function ():void
				{
					getGame().inCombat = false;
					getGame().combat.clearStatuses(false);
					statScreenRefresh();
					exploreDebugMonsters(monsterIdx + 1);
				};
				outputText("You are going to fight " + m.a + " " + m.short + ".");
				addButton(0, "Fight", function():void{
					outputText("\n\nStarting combat...");
					startCombat(m);
				});
				addButton(1, "Skip", exploreDebugMonsters, monsterIdx+1);
				addButton(2, "Heal", function():void{
					player.HP = player.maxHP();
					player.lust = 0;
					statScreenRefresh();
				});
			}
			if (monsterIdx>1) addButton(6, "Go Back", exploreDebugMonsters, monsterIdx-1);
			addButton(9, "Enough", playerMenu);
		}

		public function ExploreDebug()
		{
		}
	}
}