code:
package classes.Scenes.Areas.Forest
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.Scenes.Monsters.Goblin;
	import classes.internals.*;

	public class Tamani extends Goblin
	{

		override protected function goblinTeaseAttack():void
		{
			if (flags[kFLAGS.TAMANI_TIMES_HYPNOTISED] > 0) {
				tamaniHypnoTease();
				return;
			}
			super.goblinTeaseAttack();
		}

//New Tease option:
		public function tamaniHypnoTease():void {
			var selector:Number = rand(3);
			//Choose 1 of 3 variations
			if (selector == 0) outputText("Tamani smiles and shifts her leather straps, pulling one into the puffy gash that is her vagina.  She groans out loud, sliding the studded leather band into her outer lips and sawing it along her clit.  Her whole body blushes as she pulls it free, running a fingertip up the now wet strip of leather, \"Mmm, can't you see how much my pussy needs a man inside it?  Be a good husband and fuck Tamani full!  You know you want to.\"\n\n", false);
			if (selector == 1) outputText("Tamani saunters up to you, sliding her fingers down to each side of her pussy and spreading them.  Your eyes are drawn to her honeyed tunnel, unable to look away she gets closer.  She whispers, \"Your cock knows what it needs.  Just be a good husband and obey your dick, it KNOWS how badly you need mistress's pussy.\"\n\n", false);
			if (selector == 2) outputText("Tamani turns around and bends down, pressing her hands into the dirt as she kicks her legs apart.  Your stare open-mouthed at her bouncy ass-cheeks and the tantalizingly wet entrance of her slit.  She smirks and offers, \"You've cum so many times inside me, why resist when you can give in and feel that pleasure again today?  Come on husband, don't make Tamani beg...\"\n\n", false);

			//REACTIONS
			//LOW HYPNO VALUE:
			if (flags[kFLAGS.TAMANI_TIMES_HYPNOTISED] < 5) {
				selector = rand(3);
				if (selector == 0) outputText("You reluctantly pull your stare away from the heavenly entrance between her legs.  There's an urge to walk over to her and plunge yourself inside her over and over, but you dismiss it.", false);
				if (selector == 1) outputText("You find it hard to pull your gaze from her inviting twat, but you manage.  You shake your head, clearing away thoughts of fertilizing your wife.  Her rhetoric must be getting to you.", false);
				if (selector == 2) outputText("No matter the case, her actions shifted a fair bit of your blood-flow to your groin.", false);
			}
			//MEDIUM HYPNO VALUE:
			else if (flags[kFLAGS.TAMANI_TIMES_HYPNOTISED] < 10) {
				selector = rand(2);
				if (selector == 0) {
					outputText("With effort you manage to wrench your eyes away from the inviting folds of Tamani's vagina.  ", false);
					if (player.totalCocks() > 1) outputText("Each of y", false);
					else outputText("Y", false);
					outputText("our " + player.multiCockDescriptLight(), false);
					if (player.lust > 80) outputText(" drips pre-cum", false);
					else if (player.lust > 40) outputText(" grows harder", false);
					else outputText(" hardens", false);
					outputText(" from the sexual sight, and you feel a compulsion to rush to your wife and take her on the spot.  Obviously she's not really your wife, but after so many fuckings it kind of makes sense to think of her that way.", false);
					if (player.lust < 70) outputText("  Still, you don't want to fuck her right now!", false);
				}
				else {
					outputText("Struggling, you pull your eyes back into your head and away from Tamani's gorgeous slit.  You shudder, feeling ", false);
					if (player.totalCocks () > 1) outputText("each of ", false);
					outputText("your " + player.multiCockDescriptLight(), false);
					if (player.lust <= 41) outputText(" thicken perceptibly", false);
					else if (player.lust <= 81) outputText(" twitch eagerly", false);
					else outputText("drip pre-cum", false);
					outputText(", responding to the overly sensual goblin's body.  You start to approach her, but stop yourself, realizing you were about to pick up your wife and fuck her on the spot.  You know she's not really your wife, but you have a hard time thinking of her as anything else, save for maybe your mistress.", false);
					if (player.lust < 70) outputText("  Regardless, you're resolute in your desire not to fuck her right now!", false);
				}
			}
			//HIGH HYPNO VALUE
			else {
				selector = rand(2);
				if (selector == 0) {
					outputText("You barely manage to step yourself from lunging forward to bury your mouth between your mistress's legs.  Hard and trembling between your legs, ", false);
					if (player.totalCocks() > 1) outputText("each of ", false);
					outputText("your " + player.multiCockDescriptLight() + " aches with need.  You battle with the compulsion to kneel before your short, stacked mistress and perform your duties as her breeder husband.", false);
				}
				else {
					outputText("You wrench your gaze from the juicy mound before you with great difficulty.  The desire to submit to your wife and fuck her on the spot rages through your body, melting your resistance into liquid lust and pooling it in your groin.  ", false);
					if (player.totalCocks() > 1) outputText("Each of y", false);
					else outputText("Y", false);
					outputText("our " + player.multiCockDescriptLight() + " pulses and dribbles pre-cum, aching to do its duty and fire load after load into Tamani's perfect pussy.", false);
				}
			}
			game.dynStats("lus", (rand(player.lib/5) +3+(flags[kFLAGS.TAMANI_TIMES_HYPNOTISED])));
			combatRoundOver();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			clearOutput();
			if (hpVictory) {
				outputText("Tamani is defeated!");
			} else {
				outputText("Tamani gives up on defeating you and starts masturbating!");
			}
			game.forest.tamaniScene.tamaniVictoryMenu();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			if (hpVictory){
				if (player.totalCocks() > 0) {
					if (rand(2) == 0) game.forest.tamaniScene.tamaniSexLost();
					else game.forest.tamaniScene.tamaniSexLetHer();
				}else {
					outputText("Tamani sighs as you begin to lose conscious, \"You dummy, why'd you get rid of the fun parts?\"", true);
					game.combat.cleanupAfterCombat();
				}
			} else {
				if (player.totalCocks() > 0) {
				//hypnoslut loss scene
				if (game.flags[kFLAGS.TAMANI_TIMES_HYPNOTISED] > 19 && rand(2) == 0) {
					game.forest.tamaniScene.getRapedByTamaniYouHypnoSlut();
				} else if (rand(2) == 0) game.forest.tamaniScene.tamaniSexLost();
				else game.forest.tamaniScene.tamaniSexLetHer();
				} else {
					outputText("You give into your lusts and masturbate, but Tamani doesn't seem to care.  She kicks and punches you over and over, screaming, \"You dummy, why'd you get rid of the fun parts?\"", true);
					game.player.takeDamage(9999);
					game.combat.cleanupAfterCombat();
				}
			}
		}

		public function Tamani()
		{
			super(false);
			this.a = "";
			this.short = "Tamani";
			this.imageName = "tamani";
			this.long = "She keeps her arms folded across her " + game.forest.tamaniScene.tamaniChest() + " and glares at you.  The little thing is only about four feet tall, with pink and black dyed hair cut into a cute little 'do.  The greenish-gray skin of her breasts bulges out around her arms, supported by a few leather straps, amplifying her cleavage.  Her cunt lips are pierced multiple times, inflamed, and slightly parted.  There really isn't any clothing on her to hide them, just more of the ever-present straps wrapping around her thighs.";
			// this.plural = false;
			this.createVagina(false, VAGINA_WETNESS_DROOLING, VAGINA_LOOSENESS_NORMAL);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 55, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("E"));
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,40,0,0,0);
			this.tallness = 40;
			this.hipRating = HIP_RATING_AMPLE+2;
			this.buttRating = BUTT_RATING_LARGE;
			this.skinTone = "greenish gray";
			this.hairColor = "pink and black";
			this.hairLength = 16;
			initStrTouSpeInte(32, 43, 55, 62);
			initLibSensCor(65, 65, 50);
			this.weaponName = "fists";
			this.weaponVerb="tiny punch";
			this.armorName = "leather straps";
			this.bonusHP = 40;
			this.lust = 40;
			this.lustVuln = 0.9;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 4;
			this.gems = rand(25) + 5;
			this.drop = new WeightedDrop().add(consumables.GOB_ALE,4)
					.addMany(1,
							consumables.L_DRAFT,
							consumables.PINKDYE,
							consumables.BLUEDYE,
							consumables.ORANGDY,
							consumables.PURPDYE,
							consumables.INCUBID,
							consumables.REDUCTO,
							consumables.L_BLUEG,
							null);
			this.special1 = goblinDrugAttack;
			this.special2 = goblinTeaseAttack;
			checkMonster();
		}

	}

}

license: unknown


code:
package classes.Scenes.Areas.Forest
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.Scenes.Monsters.Goblin;
	import classes.internals.WeightedDrop;

	public class TamanisDaughters extends Goblin
	{
		private function midRoundMadness():void {
			var selector:Number = rand(4);
			if (selector == 0) {
				outputText("A slender hand reaches inside your " + player.armorName + " and gives your ", false);
				if (player.balls > 0) {
					if (rand(2) == 0) outputText(player.multiCockDescriptLight(), false);
					else outputText(player.ballsDescriptLight(), false);
				}
				else outputText(player.multiCockDescriptLight(), false);
				outputText(" a gentle squeeze.  You twist away but your breathing gets a little heavier.\n\n", false);
			}
			else if (selector == 1) {
				outputText("A girl latches onto your " + player.legs() + " and begins caressing your body lovingly, humming happily.  You quickly shake her loose but the attention makes you blush a little more.\n\n", false);
			}
			else if (selector == 2) {
				outputText("One of your daughters launches onto your back and presses her hard, pierced nipples against your neck.  She whispers in your ear, \"Twist my nipples dad!\"\n\n", false);
				outputText("You reach back and throw her off, but her perverted taunts still leave you feeling a little hot under the collar.\n\n", false);
			}
			else outputText("A daughter lays down in front of you and starts jilling herself on the spot.  It's impossible to not glance down and see her or hear her pleasured moans.  You step away to remove the distraction but it definitely causes some discomfort in your " + player.armorName + ".\n\n", false);
			game.dynStats("lus", 1 + player.lib/15+rand(player.cor/30));
		}

		private function tamaniShowsUp():void {
			if (TamainsDaughtersScene.tamaniPresent) {
				if (rand(4) == 0) goblinDrugAttack(); //Tamani already there - chance of potion
			}
			else if (rand(6) == 0) {
				TamainsDaughtersScene.tamaniPresent = true;
				outputText("A high-pitched yet familiar voice calls out, \"So this is where you skanks ran off to---wait a second.  Are you trying to poach Tamani's man!?\"\n\n", false);
				outputText("You can see Tamani lurking around the rear of the goblin pack, visibly berating her daughters.  On one hand it sounds like she might help you, but knowing goblins, she'll probably forget about her anger and help them subdue you for more cum...\n\n", false);
				//(+5 mob strength)
				str += 5;
				//(+5 mob toughness)
				tou += 5;
				HP += 10;
				//(-20 mob lust)
				lust -= 20;
				//append combat desc
				long += " Tamani lurks in the back of the crowd, curvier than her brood and watching with a mixture of amusement and irritation.  She runs a hand through her pink and black hair, waiting for an opportunity to get involved...";
			}
		}

		override protected function performCombatAction():void
		{
			var select:int = 1;
			//mid-round madness!
			midRoundMadness();
			tamaniShowsUp();

			if (special1 != null) select++;
			if (special2 != null) select++;
			if (special3 != null) select++;
			switch (rand(select)) {
				case 0:
					createStatusEffect(StatusEffects.Attacks, int(flags[kFLAGS.TAMANI_NUMBER_OF_DAUGHTERS] / 20), 0, 0, 0); //Tamani's Daughters get multiattacks!
					if (statusEffectv1(StatusEffects.Attacks) > 20) addStatusValue(StatusEffects.Attacks, 1, -(statusEffectv1(StatusEffects.Attacks) - 20));
					eAttack();
					break;
				case 1:
					special1();
					break;
				case 2:
					special2();
					break;
				default:
					special3();
					break;
			}
			combatRoundOver();
		}

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

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			if (pcCameWorms){
				outputText("\n\nYour foes seem visibly disgusted and leave, telling you to, \"quit being so fucking gross...\"");
				game.combat.cleanupAfterCombat();
			} else {
				game.forest.tamaniDaughtersScene.loseToDaughters();
			}
		}

		public function TamanisDaughters()
		{
			super(true);
			this.a = "the group of ";
			this.short = "Tamani's daughters";
			this.imageName = "tamanisdaughters";
			this.long = "A large grouping of goblin girls has gathered around you, surrounding you on all sides.  Most have varying shades of green skin, though a few have yellowish or light blue casts to their skin.  All are barely clothed, exposing as much of their flesh as possible in order to excite a potential mate.  Their hairstyles are as varied as their clothing and skin-tones, and the only things they seem to have in common are cute faces and curvy forms.  It looks like they want something from you.";
			this.plural = true;
			this.pronoun1 = "they";
			this.pronoun2 = "them";
			this.pronoun3 = "their";
			this.createVagina(false, VAGINA_WETNESS_DROOLING, VAGINA_LOOSENESS_TIGHT);
			this.createStatusEffect(StatusEffects.BonusVCapacity, 40, 0, 0, 0);
			createBreastRow(Appearance.breastCupInverse("D"));
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_DRY;
			this.createStatusEffect(StatusEffects.BonusACapacity,25,0,0,0);
			this.tallness = 40;
			this.hipRating = HIP_RATING_AMPLE+1;
			this.buttRating = BUTT_RATING_NOTICEABLE+1;
			this.skinTone = "greenish gray";
			this.hairColor = "pink";
			this.hairLength = 16;
			initStrTouSpeInte(55, 30, 45, 50);
			initLibSensCor(70, 70, 50);
			this.weaponName = "fists";
			this.weaponVerb="tiny punch";
			this.armorName = "leather straps";
			this.bonusHP = 50 + (int(flags[kFLAGS.TAMANI_NUMBER_OF_DAUGHTERS] / 2) * 15);
			if (bonusHP > 3350) bonusHP = 3350;
			this.lust = 30;
			this.lustVuln = .65;
			this.temperment = TEMPERMENT_RANDOM_GRAPPLES;
			this.level = 8 + (Math.floor(flags[kFLAGS.TAMANI_NUMBER_OF_DAUGHTERS] / 20));
			if (level > 30) level = 30;
			this.gems = rand(15) + 5;
			this.drop = new WeightedDrop().
					add(consumables.GOB_ALE,5).
					addMany(1,consumables.L_DRAFT,
							consumables.PINKDYE,
							consumables.BLUEDYE,
							consumables.ORANGDY,
							consumables.PURPDYE);
			this.special1 = goblinDrugAttack;
			this.special2 = goblinTeaseAttack;
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Areas.Forest
{
	import classes.*;
	import classes.internals.*;
	import classes.GlobalFlags.kACHIEVEMENTS;
	import classes.GlobalFlags.kFLAGS;

	public class TentacleBeast extends Monster
	{
		private function tentaclePhysicalAttack():void {
			outputText("The shambling horror throws its tentacles at you with a murderous force.\n", false);
			var temp:int = int((str + weaponAttack) - Math.random()*(player.tou) - player.armorDef);
			if (temp < 0) temp = 0;
			//Miss
			if (temp == 0 || (player.spe - spe > 0 && int(Math.random()*(((player.spe-spe)/4) +80)) > 80)) {
				outputText("However, you quickly evade the clumsy efforts of the abomination to strike you.", false);
			}
			//Hit
			else {
				outputText("The tentacles crash upon your body mercilessly. ", false);
				player.takeDamage(temp, true);
			}
			combatRoundOver();
		}
		private function tentacleEntwine():void {
			outputText("The beast lunges its tentacles at you from all directions in an attempt to immobilize you.\n", false);
			//Not Trapped yet
			if (player.findStatusEffect(StatusEffects.TentacleBind) < 0) {
				//Success
				if (int(Math.random()*(((player.spe)/2))) > 15 || (player.findPerk(PerkLib.Evade) >= 0 && int(Math.random()*(((player.spe)/2))) > 15)) {
					outputText("In an impressive display of gymnastics, you dodge, duck, dip, dive, and roll away from the shower of grab-happy arms trying to hold you. Your instincts tell you that this was a GOOD thing.\n", false);
				}
				//Fail
				else {
					outputText("While you attempt to avoid the onslaught of pseudopods, one catches you around your " + player.foot() + " and drags you to the ground. You attempt to reach for it to pull it off only to have all of the other tentacles grab you in various places and immobilize you in the air. You are trapped and helpless!!!\n\n", false);
					//Male/Herm Version:
					if (player.hasCock()) outputText("The creature, having immobilized you, coils a long tendril about your penis. You shudder as the creature begins stroking your cock like a maid at a dairy farm in an attempt to provoke a response from you. Unable to resist, your " + player.cockDescript(0) + " easily becomes erect, signaling to the creature that you are responsive to harsher stimulation.\n", false);
					//Female Version:
					else if (player.hasVagina()) outputText("The creature quickly positions a long tentacle with a single sucker over your clitoris. You feel the power of the suction on you, and your body quickly heats up.  Your clit engorges, prompting the beast to latch the sucker onto your " + player.clitDescript() + ".\n", false);
					//Genderless
					else outputText("The creature quickly positions a long tentacle against your " + player.assholeDescript() + ". It circles your pucker with slow, delicate strokes that bring unexpected warmth to your body.\n", false);
					game.dynStats("lus", (8+player.sens/20));
					player.createStatusEffect(StatusEffects.TentacleBind,0,0,0,0);
				}
			}
			combatRoundOver();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			if (hpVictory) {
				outputText("The creature lets out an ear-piercing screech as it collapses upon itself. Its green coloring quickly fades to brown as the life drains from it, leaving you victorious.", true);
				game.awardAchievement("Tentacle Beast Slayer", kACHIEVEMENTS.GENERAL_TENTACLE_BEAST_SLAYER);
			} else {
				outputText("The tentacle beast's mass begins quivering and sighing, the tentacles wrapping around each other and feverishly caressing each other.  It seems the beast has given up on fighting.", false);
			}
			if (findStatusEffect(StatusEffects.PhyllaFight) >= 0) {
				removeStatusEffect(StatusEffects.PhyllaFight);
				game.desert.antsScene.phyllaTentacleDefeat();
			}
			else {
				if (!hpVictory && player.gender > 0 && flags[kFLAGS.SFW_MODE] <= 0) {
					outputText("  Perhaps you could use it to sate yourself?", true);
					game.doYesNo(game.forest.tentacleBeastScene.tentacleVictoryRape,game.combat.cleanupAfterCombat);
				} else {
					game.combat.cleanupAfterCombat();
				}
			}
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			if (hpVictory) {
				outputText("Overcome by your wounds, you turn to make a last desperate attempt to run...\n\n");
				if (findStatusEffect(StatusEffects.PhyllaFight) >= 0) {
					removeStatusEffect(StatusEffects.PhyllaFight);
					outputText("...and make it into the nearby tunnel.  ");
					game.desert.antsScene.phyllaTentaclePCLoss();
				} else
					game.forest.tentacleBeastScene.tentacleLossRape();
			} else {
				outputText("You give up on fighting, too aroused to resist any longer.  Shrugging, you walk into the writhing mass...\n\n");
				if (findStatusEffect(StatusEffects.PhyllaFight) >= 0) {
					removeStatusEffect(StatusEffects.PhyllaFight);
					outputText("...but an insistent voice rouses you from your stupor.  You manage to run into a nearby tunnel.  ");
					game.desert.antsScene.phyllaTentaclePCLoss();
				} else
					doNext(game.forest.tentacleBeastScene.tentacleLossRape);
			}
		}

		override protected function performCombatAction():void
		{
			//tentacle beasts have special AI
			if (rand(2) == 0 || findStatusEffect(StatusEffects.TentacleCoolDown) >= 0)
				special1();
			else special2();
		}

		public function TentacleBeast()
		{
			trace("TentacleBeast Constructor!");
			this.a = "the ";
			this.short = "tentacle beast";
			this.imageName = "tentaclebeast";
			this.long = "You see the massive, shambling form of the tentacle beast before you.  Appearing as a large shrub, it shifts its bulbous mass and reveals a collection of thorny tendrils and cephalopodic limbs.";
			// this.plural = false;
			this.createCock(40,1.5);
			this.createCock(60,1.5);
			this.createCock(50,1.5);
			this.createCock(20,1.5);
			this.balls = 0;
			this.ballSize = 0;
			this.cumMultiplier = 3;
			// this.hoursSinceCum = 0;
			this.pronoun1 = "it";
			this.pronoun2 = "it";
			this.pronoun3 = "its";
			this.createBreastRow(0,0);
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_SLIME_DROOLING;
			this.tallness = rand(9) + 70;
			this.hipRating = HIP_RATING_BOYISH;
			this.buttRating = BUTT_RATING_BUTTLESS;
			this.skinTone = "green";
			this.skinType = SKIN_TYPE_PLAIN;
			this.skinDesc = "bark";
			this.hairColor = "green";
			this.hairLength = 1;
			initStrTouSpeInte(58, 25, 35, 45);
			initLibSensCor(90, 20, 100);
			this.weaponName = "whip-tendril";
			this.weaponVerb="thorny tendril";
			this.weaponAttack = 1;
			this.armorName = "rubbery skin";
			this.armorDef = 1;
			this.bonusHP = 250;
			this.lust = 10;
			this.lustVuln = 0.8;
			this.temperment = TEMPERMENT_LOVE_GRAPPLES;
			this.level = 6;
			this.gems = rand(15) +5;
			this.drop = new WeightedDrop(null, 1);
			this.special1 = tentaclePhysicalAttack;
			this.special2 = tentacleEntwine;
			this.special3 = tentaclePhysicalAttack;
			this.tailType = TAIL_TYPE_DEMONIC;
			checkMonster();
		}

	}

}


code:
/**
 * Created by Kitteh6660. Glacial Rift is a new endgame area with level 18-22 encounters, guaranteed to help you grind to level 33.
 * Currently a Work in Progress.
 *
 * Please see this project. (This is not mine.) http://forum.fenoxo.com/thread-10719.html
 */

/*
 * TODO
 *
 */
package classes.Scenes.Areas
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.Scenes.Areas.GlacialRift.*;
	import classes.Scenes.NPCs.GooArmor;

	use namespace kGAMECLASS;

	public class GlacialRift extends BaseContent
	{
		public var valkyrieScene:ValkyrieScene = new ValkyrieScene();
		public var yetiScene:YetiScene = new YetiScene();
		public var giantScene:FrostGiantScene = new FrostGiantScene();

		public function GlacialRift()
		{
		}

		public function exploreGlacialRift():void {
			flags[kFLAGS.DISCOVERED_GLACIAL_RIFT]++
			doNext(playerMenu);

			var choice:Array = [];
			var select:int;

			//Build choice list!
			choice[choice.length] = 0; //Valkyrie
			choice[choice.length] = 1; //Yeti
			choice[choice.length] = 2; //Frost Giant
			if ((flags[kFLAGS.HARPY_QUEEN_EXECUTED] != 0 || flags[kFLAGS.HEL_REDUCED_ENCOUNTER_RATE] > 0) && flags[kFLAGS.VALARIA_AT_CAMP] == 0 && player.armor != armors.GOOARMR) choice[choice.length] = 3; //Valeria
			if (rand(3) == 0) choice[choice.length] = 4; //Freebie items!
			if (rand(15) == 0 && player.hasKeyItem("Camp - Ornate Chest") < 0) choice[choice.length] = 5; //Ornate Chest
			if (flags[kFLAGS.ANZU_PALACE_UNLOCKED] < 1) choice[choice.length] = 6; //Find Anzu's palace
			choice[choice.length] = 99; //Find nothing!

			//DLC april fools
			if (isAprilFools() && flags[kFLAGS.DLC_APRIL_FOOLS] == 0) {
				getGame().aprilFools.DLCPrompt("Extreme Zones DLC", "Get the Extreme Zones DLC to be able to visit Glacial Rift and Volcanic Crag and discover the realms within!", "$4.99");
				return;
			}
			//Helia monogamy fucks
			if (flags[kFLAGS.PC_PROMISED_HEL_MONOGAMY_FUCKS] == 1 && flags[kFLAGS.HEL_RAPED_TODAY] == 0 && rand(10) == 0 && player.gender > 0 && !kGAMECLASS.helScene.followerHel()) {
				kGAMECLASS.helScene.helSexualAmbush();
				return;
			}
			select = choice[rand(choice.length)];
			switch(select) {
				case 0: //Valkyrie
					outputText("Making your way across the hard-packed ice of the Rift, you’re surprised to see the thick gray clouds part overhead.  You see a beautiful woman descend from on high, her snow-white wings flapping powerfully behind her back.  Armed with a long spear and shield, and clad in a bronze cuirass and a winged helm, she looks every bit the part of a mighty warrior.\n\n", true)
					outputText("She touches down gently a few feet before you, her shield and spear raised.  \"You seem a worthy sort to test my skills against, wanderer.  Prepare yourself!\" she shouts, bearing down on you.  She doesn’t look like she’s going to back down -- you ready your " + player.weaponName + " for a fight!")
					startCombat(new Valkyrie());
					break;
				case 1: //Yeti
					outputText("You grow tired trudging through the hard-packed snow under you, shielding your face with an arm as the wind lashes against you, slowing your progress. The whistle of the wind rings in your ears, only broken with the dull crunch of snow compacting underfoot. You can’t help but regret wandering into this storm and wish for shelter and warmth. Your body freezes at the sound of a loud crack, and turning your head to see the source of the noise, you notice too late that your lower body is sinking in the snow floor. You flail your limbs as your body is swept under by the moving snow, and you feel yourself sliding down some sort of shaft: it’s too dark to see where you are going. With a thump, you come to a stop.\n\n", true)
					if (flags[kFLAGS.MET_YETI_FIRST_TIME] <= 0) {
						outputText("Quickly wiping the snow off your body, you take in your surroundings. There are torches overhead that provide light and a small amount of warmth, making the ice cavern almost beautiful to be in, the light reflecting and shimmering off the polished ice walls, ceiling, and large icicles. There are a number of holes like the one you must have came out of, like a network of chutes that all lead to your location. You are surprised to find something under you, a large pile of white furs broke your fall. Though you are unnerved to find a large collection of bones lining the sides of the ice cavern, all white like snow, cleaned to a shine. Taking all this in, it’s obvious you are in someone’s or something’s residence. ")
						if (silly()) {
							outputText("You notice the bodies of a number of strange, bipedal horse-like creatures, all covered in thick white fur hanging from the nearby wall; laying beneath one is a strange metallic cylinder, not unlike a sword hilt, that gives off a strange, soft heat. ")
						}
						outputText("You brush off the snow and get to your feet, turning your head as you notice a passageway.\n\n")
						flags[kFLAGS.MET_YETI_FIRST_TIME] = 1
					}
					else {
						outputText("Taking in the familiar surroundings, you realize you must have fallen through one of those chutes again. You begin to wonder if they are for the Yeti’s use, or if they are meant to bring in unsuspecting travelers. A meal delivery service set up with their limited ice magic? You shake off the snow on you and get to your feet. Looking to the passage, sure enough shadows dance along the walls as the thumps reach your ears.\n\n")
					}
					outputText("Hearing a thunderous roar, you ready yourself for a fight");
					if (player.weaponName != "fists") outputText(", holding your " + player.weaponName + " at the ready");
					outputText(". A massive hulking creature barrels around the corner and sets its gaze on you, its clawed hands and feet launching its body over the iced caverns with ease as you stare the beast down. The white blur of an ice yeti attacks you!")
					startCombat(new Yeti());
					break;
				case 2: //Frost Giant
					outputText("You wander the frozen landscape of the Rift, frozen rocks, frosted hills and forested mountains your only landmarks. As you cross the peak of a rather large, lightly forested hill, you come face to gigantic face with a Frost Giant! He belches fiercely at you and you tumble back down the hill. He mostly steps over it as you come to your senses. You quickly draw your " + player.weaponName + " and withdraw from the hill to prepare for battle.\n\n", true);
					startCombat(new FrostGiant());
					break;
				case 3: //Find Valeria! She can be found there if you rejected her offer initially at Tower of the Phoenix or didn't find her. She can never be Lost Forever.
					spriteSelect(79);
					flags[kFLAGS.VALERIA_FOUND_IN_GLACIAL_RIFT] = 1;
					outputText("As you make your way across the Rift's icy extremities, you hear a metallic CLANK CLANK approaching through the snow flurries. You turn in time to see a suit of plated mail charging toward you, its helm and limbs filled with bright blue goo. It skids to a stop a few yards away, a greatsword forming from the goo of its hand. A beautiful, feminine face appears beneath the armor’s visor grinning at you. You suddenly recognize her face!\n\n", true)
					outputText("\"This is my territory!\" she shouts, bringing her two-handed sword to bare. \"You’ll give me your fluids, or I’ll take them.\"")
					addButton(0, "Fight", fightValeria);
					addButton(1, "Submit", kGAMECLASS.valeria.pcWinsValeriaSparDefeat, true);
					break;
				case 4: //Find item!
					var itemChooser:Number = rand(2);
					if (itemChooser == 0) {
						outputText("As you cross one of the floating ice sheets that make up the bulk of the rift, your eyes are drawn to a bright glint amidst the white backdrop.  As you eagerly approach the gleam, you discover a single tiny spire of ice, jutting from the surrounding snow.  You pluck it gently from the ground, give it a quick glance over and, satisfied that it won’t try and kill you, drop it in your bag. ", true)
						inventory.takeItem(consumables.ICICLE_, camp.returnToCampUseOneHour);
					}
					else if (itemChooser == 1) {
						outputText("As you make your way across the icy wastes, you notice a small corked ivory horn half-buried under the snow, filled with a thick sweet-looking liquor. You stop and dig it up, sniffing curiously at the liquid. The scent reminds you of the honey secreted by the bee-girls of Mareth, though with hints of alcohol and... something else. You place the horn of mead in your bag and continue on your way. ", true)
						inventory.takeItem(consumables.GODMEAD, camp.returnToCampUseOneHour);
					}
					break;
				case 5: //Find ornate chest!
					var gemsFound:int = 400 + rand(400);
					outputText("While you're minding your own business, you spot an ornately-decorated chest somewhat buried in the snow. You walk on the snowy grounds you finally reach the chest. As you open the chest, you find " + String(gemsFound) + " gems inside the chest! You pocket the gems and haul the chest home. It looks nice and would make a good storage.");
					player.createKeyItem("Camp - Ornate Chest", 0, 0, 0, 0);
					for (var i:int = 0; i < 4; i++) {
						inventory.createStorage();
					}
					player.gems += gemsFound;
					statScreenRefresh();
					outputText("\n\nYou now have " + num2Text(inventory.itemStorageDirectGet().length) + " storage item slots at camp.");
					doNext(camp.returnToCampUseOneHour);
					break;
				case 6: //Find Anzu's Palace!
					getGame().dungeons.palace.anzuScene.initialPalaceEncounter();
					break;
				default:
					outputText("You spend an hour trudging through the bleak and bitingly cold glaciers but you don’t find anything interesting.", true);
					doNext(camp.returnToCampUseOneHour);
			}
		}

		private function fightValeria():void {
			outputText("You ready your " + player.weaponName + " for a fight!", true)
			startCombat(new GooArmor());
		}
	}

}


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

	public class FrostGiant extends Monster
	{
		private function giantStrengthLoss(magnitude:int = 0):void {
			game.dynStats("str", -magnitude);
			player.addStatusValue(StatusEffects.GiantStrLoss, 2, magnitude);
		}

		public function giantAttackPunch():void {
			var damage:int = 0;
			outputText("The giant strides toward you, closing the distance faster than you can run. He rears back and strikes at you!  ");
			if (player.getEvasionRoll()) {
				outputText("You deftly dodge the jumbo Jotun's paltry punch, spinning swiftly to charge your " + player.weaponName + " at his hand, leaving what looks like a crack. The giant roars in outrage, shaking snow from trees and making your " + player.armorName + " vibrate. He appears angrier than before.");
			}
			else {
				if (rand(player.spe + 40) < spe) {
					outputText("You take the full force of his grand slam, sending you flying a good 40 feet, plunging through a snowdrift. As you right yourself, his laugh shakes the ground, \"Puny! Haaaa!\" ");
					damage = ((str + 50) + rand(100))
					damage = player.reduceDamage(damage);
					if (damage < 40) damage = 40;
					player.takeDamage(damage, true);
				}
				else {
					outputText("You nearly avoid the giant's fist, stumbling as you regain your footing. The giant's growl is a deep bass as he bellows, \"Bah! Luck!\" ");
					damage = rand(str);
					damage = player.reduceDamage(damage);
					player.takeDamage(damage, true);
				}
			}
			combatRoundOver();
		}

		public function giantGrab():void {
			outputText("The giant yells something you don't understand and charges at you, hands outstretched!  ");
			if (player.getEvasionRoll()) {
				outputText("You ");
				if (rand(player.spe) < spe) outputText("barely");
				else outputText("ably");
				outputText(" avoid his charge, jumping just in time to avoid his hands, and then his feet. He's unable to stop himself in time and collides head first with a boulder slightly smaller than his head. ");
				var giantDmg:Number = 10 + rand(20);
				HP -= giantDmg;
				outputText("The giant takes " + giantDmg + " damage from his impact.  ");
				outputText("The giant is stunned!");
				createStatusEffect(StatusEffects.Stunned, 1, 0, 0, 0);
			}
			else {
				outputText("Your attempt to make way fails, and the giant grabs you in his very large, very cold, very strong hands. \"Now, you die!\"");
				player.createStatusEffect(StatusEffects.GiantGrabbed, 2, 0, 0, 0);
				if (player.findStatusEffect(StatusEffects.GiantStrLoss) < 0) player.createStatusEffect(StatusEffects.GiantStrLoss, 0, 0, 0, 0);
			}
			combatRoundOver();
		}
		public function giantGrabStruggle():void {
			if (rand(100) >= player.str || rand(10) == 0) giantGrabFail();
			else giantGrabSuccess();
		}
		public function giantGrabFail(struggle:Boolean = true):void {
			var damage:int = 0
			if (struggle) {
				clearOutput();
				if (player.str >= 80) {
					outputText("You push and pull and squeeze and worm with all your might, but all that does is make the giant's grip harder. ");
				}
				else if (player.str >= 60 && player.str < 80) {
					outputText("Your strength fails to help you escape this frosty situation, though the heat from the struggle is nice enough in this wasteland to nearly doze in it. The giant makes sure that doesn't happen, though. ");
					giantStrengthLoss(1);
				}
				else if (player.str >= 40 && player.str < 60) {
					outputText("Try as you might, the giant's grip is too much for your weak body; the best you can do is a few squirms and a shake. His grip remains as tough as ever. ");
					giantStrengthLoss(2);
				}
				else if (player.str >= 20 && player.str < 40) {
					outputText("The giant's grip nearly crushes you to bits right there; sheer force of will allows you to struggle and resist, though it proves futile. ");
					if (player.findPerk(PerkLib.Juggernaut) < 0 && armorPerk != "Heavy") {damage = 10 + rand(str * 0.5);
					player.takeDamage(damage, true);
					}
				}
				else if (player.str < 20) {
					outputText("The giant squeezes you mercilessly, the pressure on your body reaching critical levels. The giant doesn't seem to want to murder you, fortunately, so he lessens his grip slightly. No dice escaping it though. ");
					if (player.findPerk(PerkLib.Juggernaut) < 0 && armorPerk != "Heavy") {damage = 20 + rand(str * 0.75);
					player.takeDamage(damage, true);
					}
				}
				if (kGAMECLASS.fetishManager.compare(FetishManager.FETISH_BONDAGE)) {
					outputText("The thought of being constricted turns you on a bit. ")
					game.dynStats("lust", 5);
				}
				outputText("\n\n");
			}
			else {
				if (kGAMECLASS.fetishManager.compare(FetishManager.FETISH_BONDAGE)) {
					outputText("The thought of being constricted turns you on a bit. ")
					game.dynStats("lust", 5);
				}
				outputText("\n\n");
			}
			switch(rand(6)) {
				case 0:
				case 1:
				case 2: //Taunt
					outputText("\"Ha, ha, ha! Puny little " + player.race() + "! You cannot escape my grasp!\" He flicks your head, nearly snapping your neck, and you see stars for a moment. ")
					player.removeStatusEffect(StatusEffects.GiantGrabbed);
					damage = 10 + rand(str * 0.5);
					damage = player.reduceDamage(damage);
					player.takeDamage(damage, true);
					combatRoundOver();
					break;
				case 3:
				case 4: //Ground Pound
					outputText("The giant brings you to his face to yell at you. His scream is probably the loudest thing you've ever heard, and while your ears are still ringing he raises you up, and up, and up and then punches the ground with all his might. ");
					outputText("The force of the punch leaves you reeling for a time; you come to your senses before he tries to do anything else. ");
					player.removeStatusEffect(StatusEffects.GiantGrabbed);
					damage = 100 + rand(str * 1.5);
					damage = player.reduceDamage(damage);
					player.takeDamage(damage, true);
					combatRoundOver();
					break;
				case 5: //Throw
					outputText("\"Oh, little " + player.race() + " wants to be let go? Ha! Then GO!\" He rears back and chucks you as hard as he can against the nearest rock face. Fortunately, his aim is off and he throws you into a patch of snow. The snow helps cushion the impact, but you're still very disoriented. ");
					player.removeStatusEffect(StatusEffects.GiantGrabbed);
					player.createStatusEffect(StatusEffects.Stunned, 1 + rand(2), 0, 0, 0);
					damage = 20 + rand(str);
					damage = player.reduceDamage(damage);
					if (damage < 20) damage = 20;
					player.takeDamage(damage, true);
					combatRoundOver();
					break;
				default:
					combatRoundOver();
			}
		}
		public function giantGrabSuccess():void {
			clearOutput();
			if (player.str >= 100) outputText("You roar and force the giant's hand open. He gasps in surprise, using his other hand to close you in, but it's too late by then. You jump to the ground and roll away, readying for your next attack. ");
			if (player.str >= 80 && player.str < 100) outputText("You push, pull, squeeze, squirm and finally you escape the giant's grasp. You drop and roll and make distance before readying your weapon. ");
			if (player.str >= 60 && player.str < 80) outputText("With no small effort, you  pop out from the giant's clench. You run up his arm and jump down his back, making distance. ")
			if (player.str >= 40 && player.str < 60) outputText("Despite the cold, hard confines of the giant's hand, you manage to slip out of his hand and fall to the ground before scrambling up and running from the angry giant. ");
			if (player.str >= 20 && player.str < 40) outputText("Body aching, you exploit a light grip for a moment and drop to the ground with a hard thud. Forcing yourself to get up and MOVE, you run as quickly as your throbbing [ass] can handle. ");
			if (player.str < 20) {
				outputText("Struggling with every fiber of your being, you manage to tickle the giant into dropping you. Slightly embarrassed, you get as far away from the giant without running away as you can, and ready your weapon. You think it wise to try to escape. ");
			}
			player.removeStatusEffect(StatusEffects.GiantGrabbed);
			combatRoundOver();
		}

		public function giantBoulderThrow():void {
			outputText("The giant walks over to a boulder much larger than you and hefts it up. You had better wait and be ready to dodge, or this could be very bad. ");
			outputText("With a grunt and a shove, the giant throws the boulder directly at you!")
			if (player.findStatusEffect(StatusEffects.GiantBoulder) < 0) player.createStatusEffect(StatusEffects.GiantBoulder, 0, 0, 0, 0);
			combatRoundOver();
		}
		public function giantBoulderFantasize():void {
			outputText("You wonder how you could fuck something so large. ");
			if (player.cocks.length > 0) {
				if (player.biggestCockArea() >= 24) {
					outputText("Oh wait, you could just fuck his ass with your ");
					if (player.cocks.length > 1) outputText("collection of dicks. ");
					else outputText(" one really big cock. ");
					outputText("He might have a nice nose... You try to get a size of his nose. He’s too far away to gauge it");
				}
				else if (player.biggestCockArea() < 24) {
					outputText("You suppose you could try to fuck a smaller hole that's not usually used for sex... Maybe his nose? You can't quite make out the size of his nostrils from here")
				}
			}
			else {
				outputText("You could just crawl onto some part of him and rub, though he looks very cold to be doing something like that. You wonder if there's not a way to fuck something else... Maybe his nose? You can't tell if it has a prominent tip from here");
			}
			giantBoulderHit(1);
		}
		public function giantBoulderHit(mode:int = 0):void {
			clearOutput();
			if (mode == 0) outputText("You charge at the giant, running as fast as you can, hoping to get to him before he can throw the huge rock. However, you getting closer just makes it easier for him to hit you, and he does, the full force of the boulder hitting your upper body square-on, whipping you directly down into the snow while the boulder mercifully lands some yards away. ");
			else if (mode == 1) outputText(", but you do look up just in time to nearly avoid the large boulder he chucked your way. Scrambling to react, you jump to the side, only to realize you chose the wrong side. The boulder hits you in the back, propelling you.  Battered, beaten, bruised, you struggle to stand, when the giant picks you up, laughs in his deep, mighty bellow, and punts you over a mountain. You land several feet deep in a snowbank, and see something flying toward you before passing out. ");
			else outputText("You begin to cast, focusing intently on summoning your magic. Too focused, though, as the giant propels the boulder in an arc to you. You notice the boulder just in time to not be crushed by it, though it still hits you and you fly several dozen yards before hitting a nice, jagged rock face. ");
			if (player.findStatusEffect(StatusEffects.GiantBoulder) >= 0) player.removeStatusEffect(StatusEffects.GiantBoulder);
			var damage:int = (str * 2) + 100 + rand(250);
			damage = player.reduceDamage(damage);
			if (damage < 200) damage = 200;
			player.takeDamage(damage, true);
			outputText("\n\n");
			combatRoundOver();
		}
		public function giantBoulderMiss():void {
			clearOutput();
			outputText("His aim was perfect, if you had stood still. Watching him throw it at you gave you all the time you needed to avoid the large rock, though the debris from the impact might leave some bruises. ");
			if (player.findStatusEffect(StatusEffects.GiantBoulder) >= 0) player.removeStatusEffect(StatusEffects.GiantBoulder);
			var damage:int = 10 + rand(str / 2);
			damage = player.reduceDamage(damage);
			player.takeDamage(damage, true);
			outputText("\n\n");
			combatRoundOver();
		}

		override protected function performCombatAction():void
		{
			var chooser:Number = 0;
			chooser = rand(10);
			if (chooser < 6) giantAttackPunch(); //60% chance
			if (chooser >= 6 && chooser < 9) giantGrab(); //30% chance
			if (chooser >= 9) giantBoulderThrow(); //10% chance
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.glacialRift.giantScene.winAgainstGiant();
		}

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

		public function FrostGiant()
		{
			this.a = "the ";
			this.short = "frost giant";
			this.imageName = "frost-giant";
			this.long = "The giant reminds you of the stories you heard as a child in Ingnam, at least twenty feet tall and wider than your height. The giant's skin is a deep, icy blue with patches of frost and ice covering his body in place of armor. Fortunately for you, he's unarmed. Unfortunately for you, being as large as a house has the added benefit of boulders, trees, and handfuls of frozen dirt being ready weapons, all of which is abundant in the area. Plus those hands could probably crush you like a bug. Your battle instincts are definitely going to be tested.";
			// this.plural = false;
			this.createCock(36, 4, CockTypesEnum.HUMAN);
			this.balls = 2;
			this.ballSize = 2;
			this.cumMultiplier = 2;
			createBreastRow(Appearance.breastCupInverse("flat"));
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_NORMAL;
			this.tallness = 20*12;
			this.hipRating = HIP_RATING_BOYISH;
			this.buttRating = BUTT_RATING_TIGHT;
			this.skinTone = "deep blue";
			this.skinType = SKIN_TYPE_FUR;
			//this.skinDesc = Appearance.Appearance.DEFAULT_SKIN_DESCS[SKIN_TYPE_FUR];
			this.hairColor = "white";
			this.hairLength = 8;
			initStrTouSpeInte(120, 100, 60, 75);
			initLibSensCor(20, 15, 35);
			this.weaponName = "fists";
			this.weaponVerb="punch";
			this.weaponAttack = 27;
			this.armorName = "ice";
			this.armorDef = 17;
			this.bonusHP = 600;
			this.lust = 10;
			this.lustVuln = 0.4;
			this.temperment = TEMPERMENT_LUSTY_GRAPPLES;
			this.level = 22;
			this.gems = 45 + rand(25);
			this.drop = new WeightedDrop()
					.add(consumables.ICICLE_, 1)
					.add(null, 3);
			this.createPerk(PerkLib.Tank, 0, 0, 0, 0);
			this.createPerk(PerkLib.Tank2, 0, 0, 0, 0);
			checkMonster();
		}

	}

}


code:
package classes.Scenes.Areas.GlacialRift
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.GlobalFlags.kGAMECLASS;
	import classes.GlobalFlags.kACHIEVEMENTS;

	public class FrostGiantScene extends BaseContent
	{

		public function FrostGiantScene()
		{

		}

		public function loseToGiant():void {
			combat.cleanupAfterCombat();
		}

		public function winAgainstGiant():void {
			clearOutput();
			outputText("The giant staggers and falls down on his knees. You wonder what you should do next.");
			if (player.weaponName == "fists" && player.armor.name == "nothing" && player.shieldName == "nothing") awardAchievement("Like Chuck Norris", kACHIEVEMENTS.GENERAL_LIKE_CHUCK_NORRIS);
			menu();
			if (player.lust >= 33 && flags[kFLAGS.SFW_MODE] <= 0) {
				if (player.hasCock()) addButton(0, "Nosefuck", noseJob);
				if (player.hasVagina()) addButton(1, "RideVaginally", rideVaginally);
				addButton(2, "Ride Anally", rideAnally);
				addButton(4, "Leave", combat.cleanupAfterCombat);
			}
			else {
				combat.cleanupAfterCombat();
			}
			//addButton(3, "Suck Him Off", suckHimOff);
		}

		//Males and hermaphrodites
		private function noseJob():void {
			clearOutput();
			outputText("Looking at the fallen giant, only one option immediately springs to mind: Nosejob. You toy with the thought until you approach the giant's nose, which does in fact have nostrils of the proper size to shove your " + player.multiCockDescript() + " into. \n\n");
			outputText("You test a nostril with your hand warily, this dangerous proximity being close enough to the giant's mouth he could just as easily swallow you in an instant. The giant's breath, surprisingly, comes out warm enough that this could maybe work... \n\n");
			outputText("You reach into your " + player.armorName + " and whip out your cock");
			if (player.cocks.length > 1) outputText("s");
			outputText(". The cold air nearly instantly makes them soft, but the giant's breath eases them back to erection. You contemplate what you're about to do one more time, allowing your " + player.multiCockDescriptLight() + " to surge to full hardness. Taking a breath, you plunge into the depths. While not quite like a vagina, the giant is breathing hard to make up for the blockage you’re providing. ");
			//Multi-cock check
			if (player.cocks.length == 1) outputText("His contracting nostril massages your prick enough to get you going.");
			else outputText("His contracting nostrils massage your pricks enough to get you going.");
			outputText("After some awkward moments of fighting with the giant's sufficiently giant beard, you manage to slip into a rhythm, breathe in, cock out, breathe out, cock in. The alternating currents of cold air in and warm air out from the giant's nose is a strange feeling, but not unpleasant - the contrasts complement each other quite well, and as your balls tighten with anticipation, precum finally begins to dribble into the giant's throat. You hear the giant begin to gurgle and sputter, and you realize you better hurry this up. \n\n");
			//Balls check
			if (player.balls > 0) {
				outputText("To help speed your orgasm, you pull your balls out and let them slap against the giant's upper lip, the bristles of his mustache tickling your scrotum in ways you hadn't imagined even after all your time in this world. \n\n");
			}
			outputText("As more pre dribbles into his septum, the giant begins to sputter and cough. Knowing it's now or never, you give a few final, determined thrusts before blowing your entire load up his nose. \n\n");
			outputText("When you feel that first spurt, you hurry the rest along. The giant is now obviously irritated with the cum filling up his nasal cavities. \"EEEAAAHHHH! WHAT! WHAT IS IN MY NOSE? AAAAHHH!\" he screams, just coming back to consciousness. \n\n");
			outputText("Your spurts continue, producing more spunk as the second pass. You keep shooting ropes of jizz until finally he opens his bloodshot eyes and looks directly at you; knowing this is your cue to take your leave, you remove your " + player.multiCockDescriptLight() + " from the giant's nose and shoot your final rope into his eye. Jumping down before he can swat you off his face, the giant, now quite infuriated, looses another roar as he gets up and tries to hack out the copious gobs of cum in areas where it should not normally go.\n\n");
			outputText("As he continues to bellow and scream, you stuff your " + player.multiCockDescriptLight() + " back into your " + player.armorName + ", grab your loot and immediately DIP. The giant was mean enough before he was nasally violated, and you hear his cries well after he's beyond the horizon.");
			player.orgasm();
			combat.cleanupAfterCombat();
		}

		//Females and hermaphrodites
		private function rideVaginally():void {
			clearOutput();
			outputText("You reach into your " + player.armorName + " and rub your " + player.vaginaDescript() + " slowly, trying to ease its throbs for attention while you figure out how to calm it. As you inspect the unconscious giant's body, you notice a crack in his frost armor near the crotch. Using your " + player.weaponName + " to nick more frost away, you find that the giant is indeed male. The giant's huge cock strikes you; flaccid as it is, it still ");
			if (player.tallness < 36) outputText("dwarves your height.")
			else if (player.tallness >= 36 && player.tallness < 48) outputText("matches your height.");
			else outputText("is only slightly shorter than you are tall.");
			outputText("\n\n");
			if (player.cocks.length <= 0) outputText("Seeing no other option");
			else outputText("Deciding to give your vagina the attention it so craves");
			outputText(", you carefully remove and replace pieces of your " + player.armorName + " so you can rub your [chest] while you ready to slide your slit over the giant's cock without freezing the rest of your body.");
			outputText("Climbing to the giant's crotch, you straddle his dick and feel it before crouching. The giant's body heat makes up for the cold, warm enough to feed your hungry twat and dissuade your fears of getting stuck to the giant. You gather some juices from your " + player.vaginaDescript() + " and slather it on the cock, ready to slide yourself to release.");
			player.cuntChange(144, true, true, false);
			outputText("\n\nWith a bracing breath, you finally make contact. The giant's heat is more intense than your hand registered, and you find yourself easily able to slip back and forth. As you slide over the huge cock, it slowly grows erect, until it towers over you and you can do little more than gyrate your hips to pleasure yourself. You struggle to keep sliding, but it's futile. As you stop and ready to dismount the giant, he groans, \"No...\" and grabs a leg in each hand. You try to shout out, but before you have a chance he is quickly sliding you back and forth over his entire length, basically masturbating and taking you for the ride. Feeling every ridge and bump in his dick slide past you, it takes only a few moments for you to reach your limit.\n\n");
			if (player.hasCock()) outputText("You shoot ropes of jism from your " + player.multiCockDescriptLight() + " and cum all over his chest.  ")
			if (player.hasVagina()) outputText("Feminine juice splatters all over from your " + player.vaginaDescript() + " and onto his cock.  " )
			outputText("The giant, however, still needs his release and as he continues pumping, you reach climax more times than you can count. At last, you hear the giant moan, and he drops you on the base of his dick while he finishes himself off. Too exhausted to move, you lay there as the giant cums, gallons of cum shooting in an arc, in slow motion, landing directly on you. You barely manage to gulp down enough to keep from drowning. The giant laughs and grabs you, licks you clean, and sets you down, sheltering you from the cold with his hands and allowing you to fix your armor. Once you redress, the giant lets out a bellowing laugh and saunters off behind a mountain.");
			player.refillHunger(50);
			player.orgasm();
			combat.cleanupAfterCombat();
		}

		//All genders!
		private function rideAnally():void {
			clearOutput();
			outputText("You remove the bottom of your " + player.armorName + " slowly, trying to ease its throbs for attention while you figure out how to calm it. As you inspect the unconscious giant's body, you notice a crack in his frost armor near the crotch. Using your " + player.weaponName + " to nick more frost away, you find that the giant is indeed male. The giant's huge cock strikes you; flaccid as it is, it still ");
			if (player.tallness < 36) outputText("dwarves your height.")
			else if (player.tallness >= 36 && player.tallness < 48) outputText("matches your height.");
			else outputText("is only slightly shorter than you are tall.");
			outputText("\n\n");
			outputText("You carefully remove and replace pieces of your " + player.armorName + " so you can slide your " + player.assholeDescript() + " over the giant's cock without freezing the rest of your body.  Climbing to the giant's crotch, you straddle his dick and feel it before crouching. The giant's body heat makes up for the cold, warm enough to stuff your body. You get into position and slide yourself to release.");
			player.buttChange(144, true, true, false);
			outputText("\n\nWith a bracing breath, you finally make contact. The giant's heat is more intense than your hand registered, and you find yourself easily able to slip back and forth. As you slide over the huge cock, it slowly grows erect, until it towers over you and you can do little more than gyrate your hips to pleasure yourself. You struggle to keep sliding, but it's futile. Fortunately, you reach orgasm.  ")
			outputText("As you stop and ready to dismount the giant, he groans, \"No...\" and grabs a leg in each hand. You try to shout out, but before you have a chance he is quickly sliding you back and forth over his entire length, basically masturbating and taking you for the ride. Feeling every ridge and bump in his dick slide past you, it takes only a few moments for you to reach your limit.\n\n");
			if (player.hasCock()) outputText("You shoot ropes of jism from your " + player.multiCockDescriptLight() + " and cum all over his chest.  ")
			if (player.hasVagina()) outputText("Feminine juice splatters all over from your " + player.vaginaDescript() + " and onto his cock.  " )
			outputText("The giant, however, still needs his release and as he continues pumping, you reach climax more times than you can count. At last, you hear the giant moan, and he finally slides his entire length into you.");
			outputText("You yelp in surprise as as the giant cums, filling your bowels completely and stuffing your stomach. The giant laughs and grabs you, licks you clean, and sets you down, sheltering you from the cold with his hands and allowing you to fix your armor. Once you redress, the giant lets out a bellowing laugh and saunters off behind a mountain. You feel warm thanks to being stuffed with his cum.");
			player.refillHunger(30);
			player.orgasm();
			if(player.findStatusEffect(StatusEffects.ParasiteSlugReproduction) >= 0) player.changeStatusValue(StatusEffects.ParasiteSlugReproduction, 1, 1); //This pleases your parasite overlord
			combat.cleanupAfterCombat();
		}

		private function suckHimOff():void {
			clearOutput();
			outputText("PLACEHOLDER");
			player.refillHunger(100);
			combat.cleanupAfterCombat();
		}

		private function exitGiant():void {
			menu();
			combat.cleanupAfterCombat();
		}
	}

}


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

	public class Valkyrie extends Monster
	{
		public function spearAttack():void {
			outputText("The valkyrie lunges at you, jabbing with her longspear.  You dodge the first attack easily, ")
			var evade:String = player.getEvasionReason();
			if (evade == EVASION_EVADE) {
				outputText("and you anticipate the upcoming spear strikes, dodging her attacks thanks to your incredible evasive ability!", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_FLEXIBILITY) {
				outputText("and you use your incredible flexibility to barely fold your body and avoid her attacks!", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_MISDIRECTION) {
				outputText("and you use technique from Raphael to sidestep and completely avoid her barrage of attacks!", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_SPEED || evade != null) {
				outputText("and you successfully dodge her barrages of spear attacks!", false);
				combatRoundOver();
				return;
			}
			else if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) > 0) {
					outputText("and step away as you watch the valkyrie's blind attacks strike only air. ");
					combatRoundOver();
					return;
				}
			else
			{
				outputText("but she follows through with a rapid flurry of spear strikes, tearing into your " + (player.armor.name == "nothing" ? "" : "[armorName] and the underlying") + " flesh. ", false);
				var attacks:int = 1 + rand(3);
				var damage:int = 0
				while (attacks > 0) {
					damage += ((str) + rand(50))
					damage = player.reduceDamage(damage);
					attacks--
				}
				player.takeDamage(damage, true);
			}
			combatRoundOver();
		}

		public function shieldBash():void {
			outputText("The valkyrie feints at you with her longspear; you dodge the blow, ")
			var evade:String = player.getEvasionReason();
			if (evade == EVASION_EVADE) {
				outputText("and you anticipate the upcoming shield bash, dodging her thanks to your incredible evasive ability!", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_FLEXIBILITY) {
				outputText("and you use your incredible flexibility to barely fold your body and avoid her shield bash!", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_MISDIRECTION) {
				outputText("and you use technique from Raphael to sidestep and avoid her shield bash!", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_SPEED || evade != null) {
				outputText("and you successfully dodge her shield bash attack!", false);
				combatRoundOver();
				return;
			}
			else if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) > 0) {
					outputText("and step away as you watch the valkyrie's blind bash strikes only air. ");
					combatRoundOver();
					return;
				}
			else
			{
				outputText("but you leave yourself vulnerable as she spins around and slams her heavy shield into you, knocking you ", false);
				if (player.findPerk(PerkLib.Resolute) < 0 && rand(2) == 0)
				{
					outputText("off balance. ", false)
					player.createStatusEffect(StatusEffects.Stunned, 0, 0, 0, 0);
				}
				else outputText("backwards. ", false)
				var damage:int = ((str + 50) + rand(50))
				damage = player.reduceDamage(damage);
				player.takeDamage(damage, true);
			}
			combatRoundOver();
		}

		public function aerialRave():void {
			if (rand(2) == 0 || player.canFly() /* it would be stupid to do this with someone winged */) {
				spearAttack()
				return;
			}
			outputText("The valkyrie charges right at you!  You manage to dodge her spear-thrust, but she spins gracefully out of the attack and grabs you by the waist.  ")
			var evade:String = player.getEvasionReason();
			if (evade == EVASION_EVADE) {
				outputText("You manage to shake her hand off thanks to evasion.  ", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_FLEXIBILITY) {
				outputText("Thanks to your incredibly flexibility, her hand slips off your wrist.  ", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_MISDIRECTION) {
				outputText("Using Raphael's technique, you slip freely from her grip.", false);
				combatRoundOver();
				return;
			}
			else if (evade == EVASION_SPEED || evade != null) {
				outputText("You suddenly jerk your arm away, causing her grip to break.", false);
				combatRoundOver();
				return;
			}
			else
			{
				outputText("Before you can react, she launches into the air, propelling the two of you upwards with her powerful wings.  You struggle, but it’s no use -- until she lets go.  You cry out in terror as you fall back to the earth, crashing painfully into a convenient snowbank, while your opponent lands gracefully a few feet away. ", false);
				var damage:int = ((str + 200) + rand(100))
				damage = player.reduceDamage(damage);
				player.takeDamage(damage, true);
			}
			combatRoundOver();
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.glacialRift.valkyrieScene.winAgainstValkyrie();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.glacialRift.valkyrieScene.loseToValkyrie();
		}

		public function Valkyrie()
		{
			this.a = "a ";
			this.short = "valkyrie";
			this.imageName = "valkyrie";
			this.long = "She is a tall, pale-skinned woman with long golden locks spilling out from beneath her bronze helm.  She would look almost human, if not for the massive, powerful wings sprouting from her back, stretching perhaps a dozen feet across.  She is wearing a heavy bronze cuirass which curves perfectly around her perky C-cups, and is wielding a spear and shield as her weapons.  She has assumed the stance of a well-trained and experienced combatant, leaving few openings for you to exploit.";
			// this.plural = false;
			this.createVagina(false, 1, 1);
			createBreastRow(Appearance.breastCupInverse("C"));
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_NORMAL;
			this.tallness = 7*12;
			this.hipRating = HIP_RATING_SLENDER;
			this.buttRating = BUTT_RATING_TIGHT;
			this.skinTone = "light";
			this.skinType = SKIN_TYPE_PLAIN;
			//this.skinDesc = Appearance.Appearance.DEFAULT_SKIN_DESCS[SKIN_TYPE_FUR];
			this.hairColor = "white";
			this.hairLength = 12;
			initStrTouSpeInte(85, 70, 80, 60);
			initLibSensCor(40, 50, 15);
			this.weaponName = "spear and shield";
			this.weaponVerb="pummel";
			this.weaponAttack = 14;
			this.armorName = "bronze plates";
			this.armorDef = 17;
			this.bonusHP = 380;
			this.lust = 25 + rand(15);
			this.lustVuln = 0.46;
			this.temperment = TEMPERMENT_LUSTY_GRAPPLES;
			this.level = 18;
			this.gems = 30;
			this.drop = new WeightedDrop()
					.add(weapons.SPEAR, 1)
					.add(shields.GREATSH, 2)
					.add(consumables.W__BOOK, 4)
					.add(null, 18);
			this.wingType = WING_TYPE_HARPY
			this.wingDesc = "fluffy feathery"
			this.special1 = spearAttack;
			this.special2 = shieldBash;
			this.special3 = aerialRave;
			checkMonster();
		}

	}

}


code:
//Coded by Kitteh6660, courtesy of Savin.
package classes.Scenes.Areas.GlacialRift
{
	import classes.*;
	import classes.GlobalFlags.kFLAGS;

	public class ValkyrieScene extends BaseContent
	{

		public function ValkyrieScene()
		{
		}

		public function loseToValkyrie():void {
			outputText("Unable to resist ", true)
			if (player.HP <= 0) outputText("her onslaught")
			else outputText("your rising lust")
			outputText(", you collapse to your knees, utterly at the valkyrie’s mercy.  She plants her spear in the ground, just inches from your head, and rolls you onto your back with her foot. \n\n", false)
			if (monster.lust >= 70 && flags[kFLAGS.SFW_MODE] <= 0) loseToValkyrieForcedOral()
			else {
				outputText("With one swift, contemptuous kick to the head, she knocks you right out.", false)
				outputText("  You are utterly freezing after such long exposure to the cold.", false)
				if (player.str > 50) dynStats("str", -1);
				dynStats("str", -1);
				if (player.spe > 50) dynStats("spe", -1);
				dynStats("spe", -1);
				combat.cleanupAfterCombat();
			}
		}

		private function loseToValkyrieForcedOral():void {
			var gemPenalty:Number = (player.gems / 100) + 10 + rand(20)
			if (gemPenalty > 100) gemPenalty = 100;
			if (gemPenalty > player.gems) gemPenalty = player.gems;
			gemPenalty = Math.round(gemPenalty);
			outputText("The valkyrie stands over you, her thin skirt already soaked with the arousal you inflicted upon her. She swings one of her long legs over your head, letting you get a good look at her slick, tight cunt before she drops down atop you, smashing your face into her slit. \"You " + player.mf("bastard", "bitch") + ", trying to turn a valiant warrior into a drooling pile of lust. I won’t allow it -- you’ll finish what you started, weakling. Now lick!\n\n");
			outputText("Too ");
			if (player.HP <= 0) outputText("beaten");
			else outputText("lusty");
			outputText(" to put up any kind of a fight against your opponent, especially in this position, you don’t have much choice but to do as she asks. Your tongue snakes out, taking an experimental flick at the wet gash of the valkyrie’s vagina. Her thighs are already utterly soaked with her lust, and probing her lips sends your tongue back coated with her lubricant. \n\n");
			outputText("Apparently such a tentative lick wasn’t enough for the warrior woman, though; she squats down lower on your face, grinding her wet cunny across your face. You sputter and gasp, trying to breath under her assault, but find it difficult with her constant grinding and moving. Resigned, you grasp her hips to steady her and dig in, shooting your tongue as deep into her cunt as it will go. The valkyrie moans, grasping your shoulders to steady herself as you begin your work in earnest, giving her slit quick flicks and little bites.\n\n");
			outputText("Soon, your face is coated with her fem-juices, and you can feel your winged captor beginning to shake and shudder as you tongue-fuck her. You redouble your efforts, hoping to get her off as quickly as possible. You move your head up as far as you can with her sitting on it, giving yourself a clear line of tongue to her tiny pleasure buzzer. You put your lips to it and give her clit a hard suck, running your wet tongue all across it as you do.\n\n");
			outputText("You're rewarded by a high scream from the valkyrie and a sudden gush of femcum that squirts from her slick cunt, splattering across your chest and neck. Moaning, the girl gasps your shoulders and slams her hips into your face, grinding against you until you’re utterly soaked with her cum. By the time she’s finished, you feel light-headed from the overwhelming scent of musk and sex surrounded the two of you, but she finally lets you go and stands.\n\n")
			outputText("\"Hmm, not bad for a lusty pervert,\" she laughs, trying awkwardly to straighten out her sodden skirt. \"Maybe. . . Maybe I’ll let you do that again sometime. If you’re lucky.\"\n\n")
			outputText("Before you can respond, she reaches over and nicks " + gemPenalty + " gems from you and launches off into the sky. Half-dazed by lust of your own, you stagger to your feet and head back to camp.\n\n")
			dynStats("lust", 50);
			player.gems -= gemPenalty
			combat.cleanupAfterCombat();
			doNext(camp.returnToCampUseOneHour);
		}

		public function winAgainstValkyrie():void {
			clearOutput();
			if (monster.HP <= 0) outputText("Beaten and bloodied, the valkyrie stumbles for a moment before dropping her spear and shield.  She kneels before you, head bowed low enough that her long hair brushes the icy ground. ")
			else outputText("Unable to contain her arousal, the valkyrie drops her weapons and collapses onto her knees, slipping a hand into her short skirt. ")
			outputText("\"I submit,\" she concedes weakly, avoiding eye contact with you.  \"I was too weak to defeat you, it seems.  Do with me what you will. \"")
			//(Display Options:
			//-If Male: [Aerial Fuck] [Fuck Anal] [Leave]
			//-If Female: [Get Licked] [Scissor]
			//-If Herm: All Options)
			menu();
			if (player.lust >= 33 && flags[kFLAGS.SFW_MODE] <= 0) {
				if (player.hasCock()) {
					addButton(0, "Aerial Fuck", valkyrieAerialFuck);
					addButton(1, "Anal Fuck", valkyrieAnalFuck);
				}
				if (player.hasVagina()) {
					addButton(2, "Get Licked", valkyrieLicksYou);
					addButton(3, "Scissor", valkyrieScissor);
				}
				addButton(4, "Leave", combat.cleanupAfterCombat);
			}
			else {
				combat.cleanupAfterCombat();
			}
		}

		//Aerial Fuck
		private function valkyrieAerialFuck():void {
			clearOutput();
			outputText("Standing over the defeated valkyrie, your eyes alight to her great white wings. They’re certainly powerful enough to keep a strong, fully armored woman aloft. . . So why not the both of you? You haul the warrior woman to her feet, free your " + player.cockDescript() + " from your " + player.armorName + ", and grip her in a tight embrace. You give her a hard slap on the ass and tell her to fly.\n\n")
			outputText("She hesitates for just a moment, prompting another harsh spank. Unable to resist your desires, the defeated girl unfolds her powerful wings and with a mighty flap, launches into the air. You soar on high, quickly rising above the icy wastes to look down upon the northern reaches of Mareth far below you. You can see other creatures roaming the wastes -- giants and vikings and other, low-flying valkyries, looking like little more than ants beneath you. The realization of your height over the world, combined with the closeness of the valkyrie girl, her breasts heaving into your chest and her breath hot on your cheek, serve to make your " + player.cockDescript() + " rock hard between the two of you, sandwiched snugly between your bellies.\n\n");
			outputText("Suddenly, you realize that without letting go of the girl, you aren’t liable to get your dick inside her. Well, shit. You lock eyes with the valkyrie, who gives you a shy smile and, to your surprise, wraps her arms tightly around you. You decide to trust her, and free one of your hands from her. You grab your " + player.cockDescript() + " and lift her skirt, guiding it smoothly into her wet and waiting cunt. She gasps as you enter her tight passage, and you quickly grab her again before she can forget to hold onto you.\n\n");
			outputText("Now inside her, you command the valkyrie to fly as fast as she can to wherever she’d like to go. She smiles and nods, giving her wings a mighty thrust toward the ocean. When she does, her vaginal muscles contract hard around your cock, squeezing you wonderfully with each beat of her powerful wings. You hold onto the valkyrie for dear life, kissing and caressing her soft neck and cheeks as she flies, letting each of her graceful motions gently massaging your dick.\n\n");
			outputText("She seems to be taking no little pleasure from flying full, either, and is soon moaning lewdly into your neck, abandoning her once-proud visage for that of a lusty maid. She wraps her legs around your waist, burying just a little more of your cock inside her until ")
			if (player.cockArea(0) >= 16) outputText("she can take no more of you.  ")
			else outputText("there is no more of you to take.  ")
			outputText("You return the favor, starting to buck your hips into her contracting passage, fucking her with quick, short strokes that keep the two of you close together.\n\n");
			outputText("\"I... Gotta land,\" she moans. Her muscles are contracting harder and faster now, and you can feel her slick fem-juice now leaking out around your prick. You give her a little nod, already close to the edge yourself, but it looks like it’s too late! The girl screams, clamping down hard on your cock as she cums, squirting her juices onto her thighs and yours. The mid-air orgasm, however, causes her to forget her wings, and soon you’re plummeting toward the earth!\n\n");
			outputText("You scream, half in pleasure and half in terror as your cock unloads inside her, pumping your hot load into her sodden box as the icy ground rises up to meet you. \n\n");
			player.orgasm();
			if (player.canFly())
				outputText("You try to beat your own wings to save yourself, but you have too much momentum and the valkyrie in all her heavy armor is completely entwined around you, refusing to let go as you both cum.\n\n")
			else outputText("You clutch at the valkyrie and brace for the inevitable, cumming more and more inside her despite your impending doom.\n\n");
			outputText("Then suddenly, the valkyrie spreads her wings and flies, pulling up with so little room to spare that you can feel your cheek brush the snow. Panting, she flaps her wings one last time before setting the two of you down on the coast, overlooking the glacial drop into the frigid water.\n\n");
			outputText("You shudder, reeling from the orgasm and near - death experience at the same time. No less exhausted, the valkyrie collapses onto you, her head coming to rest on your lap. It seems you made a good impression on the valkyrie as she drifts off to sleep, your cum and hers pooling between her legs. You fish a blanket (and a few gems) out of her pack, cover her up as best you can, and stumble on back to camp.");
			combat.cleanupAfterCombat();
		}
		//Anal Fuck
		private function valkyrieAnalFuck():void {
			clearOutput();
			outputText("You grab the defeated valkyrie by the hair and push her down onto all fours. She groans as you circle around behind her, giving her ass a hard slap. Defeated, though, she does not try to resist you as you kneel down behind her and flip up her skirt, revealing her lush ass cheeks, her slick cunt, and her tight, puckered little asshole. You reach into your " + player.armorName + " and pull out your " + player.cockDescript() + ", stroking yourself for warmth until your can get your shaft tucked in between the valkyrie’s butt.\n\n");
			outputText("You grab her hips and start to thrust upwards and back, slowly hotdogging the defeated girl’s ass, stopping only to slather a bit of her drooling cunt juices onto your shaft for some much-needed lubricant. You give her ass a quick, playful slap, making her reflexively squeeze down on your cock. Laughing, you get into a nice rhythm, spanking her once every few thrusts to get a little extra thrill out of her.\n\n");
			outputText("To your surprise, the valkyrie looks over her shoulder and, face flush with anxious lust, whispers, \"Well. . . What are you waiting for, huh? Just. . . stick it in already!\"\n\n");
			outputText("Well, if she’s so eager. You lean back and thrust in, slamming your " + player.cockDescript() + " into her tight pucker. She had already tried to relax, but your sudden and forceful intrusion makes her clamp down hard, squeezing your shaft like a wet silken vice. You moan as you shove more and more of your shaft into her blessedly warm depths, feeding her ass your cock one inch at a time until ");
			if (player.cockArea(0) >= 16) outputText("you bottom out.  ");
			else outputText("hilt the valkyrie.  ");
			outputText("She screams in pleasure and pain as you hammer into her backdoor, but settles down once you’ve stopped your advance, unable to continue. Slowly, you begin to rock your hips into her, fucking her ass slow and gentle.\n\n");
			outputText("You smile as she begins to moan and wiggle her hips, finally getting into the assfuck you’re giving her. Now that she’s settled, you pick up the pace, starting to thrust faster and more forcefully. You keep your increase gradual, letting the valkyrie keep up so that by the time you’re roughly pounding her ass, she’s groping herself and yelling \"Fuck me harder! Fuck me harder!\" You oblige her, ramming her ass and resuming your spanking, abusing her tush until she’s screaming.\n\n");
			outputText("With such a tight, eager partner, you manage to last quite some time. Yet, all good things come to an end. With a mighty roar, you slam your cock as far into her as it will go and cum, painting her insides with your seed. She, too, climaxes as you fill her, her pucker squeezing you for everything you’re worth as her unused cunny squirts a bit of femcum onto her thighs and legs. Laughing gaily, you keep on pounding her ass until you’re utterly spent and deflating, and your partner has collapsed, her face buried in the snow.\n\n")
			outputText("You withdraw with a wet “POP!”, and watch with a grin as your seed trickles out of her now-gaping anus, pooling with her own juices beneath her. You give her bruised, bright-red butt a gentle pat as you sheathe your cock back in your armor and head on back to camp, leaving your insensate lover in a cun-soaked heap on the ice.")
			player.orgasm();
			combat.cleanupAfterCombat();
		}
		//Get Licked
		private function valkyrieLicksYou():void {
			clearOutput();
			outputText("You decide to take advantage of the valkyrie girl’s kneeling state. You walk up to her and open the crotch of your " + player.armorName + ", revealing your " + player.vaginaDescript() + ". Before she can react, you grab the back of her blonde head and mash her face into your cunt. You tell her to lick, and to your surprise, she does so without hesitation.\n\n");
			outputText("The girl’s tongue is surprisingly skilled. She quickly teases it across your clitty, making you moan with sudden pleasure right away. You can see her smirking beneath you as she begins to tease and play with your pleasure buzzer, using the flat of her tongue to tickle the sensitive flesh around it. You return her grin, urging her on with little pats of the head and shoulders, even reaching down to cup one of her perky breasts beneath her breastplate.\n\n");
			outputText("She finally slips her tongue in and starts to caress the walls of your " + player.vaginaDescript() + ", running her soft, warm tongue along your innermost depths with delightful speed and gentleness. You smile and run your hands through her long hair, stroking her as she grips your hips and buries her face in your twat, utterly submitting to your pleasure.\n\n");
			outputText("You begin to grind your slit into her face as she eats you out, rubbing your cunt along her nose and forehead to the beat of her tongue’s skillful ministrations. After a few blissful minutes of this, though, you feel one of her hands begin to creep forward. You give her a little nod as she peels apart the cheeks of your " + player.buttDescript() + " and runs the tip of a finger across your [asshole].\n\n");
			outputText("You let out a little gasp as the valkyrie slips a finger into your asshole. She makes a slow, steady progression inward, fingering your asshole gently as she picks up the pace of her tonguefucking. Through your innermost depths, you feel her tongue and finger nearly touch, separated by only the thinnest of walls. You shudder as they rub and caress each other through your vaginal wall, sending incredible, mind-rending spikes of pleasure up through your body.\n\n");
			outputText("You cannot resist her double attack for long. Grabbing the valkyrie’s head, you force her face between your legs, getting every last bit of her tongue inside you as you can as you climax, spraying your femcum all across her face");
			if (player.hasCock()) outputText(" as your dick unloads, spraying her hair with your spunk");
			outputText(".\n\n");
			outputText("Utterly satisfied, you let the valkyrie go. She collapses, dragging her finger and tongue out of you before she face-plants in the snow. You giggle, giving her a pat on her cum-soaked head before grabbing a few of your gems and heading back to camp.");
			player.orgasm();
			combat.cleanupAfterCombat();
		}
		//Scissor
		private function valkyrieScissor():void {
			clearOutput();
			outputText("You gently push the kneeling valkyrie onto her back and unclasp your " + player.armorName +" just enough to reveal your " + player.vaginaDescript() + ". The girl squirms a bit, but a harsh word from you stops her in her tracks as you spread her legs and get in position. With ease, you heft one of her long legs over your shoulder, pressing her slick cunt against yours.")
			outputText("You give her a little grin and begin to grind against her leg, rubbing your " + player.vaginaDescript() + " along her thighs, feeling her smooth skin part your pussylips ever so slightly. Unwilling to just sit there, you’re gratified to see your partner begin to rub her own cunt against yours, returning your affections. Now that it’s a real two-way, you pick up the pace a little, settling into a good rhythm with the valkyrie.")
			outputText("You reach over and, with a little help from your lover, unclasp her breastplate. Now guarded by only a thin shift, you grasp her perky breasts and begin to squeeze and fondle them, working in a few pinches to her tiny nipples and rough gropes as you play with her soft chest. She lets out a little gasp at each grope or tease, eventually returning the favor, sliding her hands into your " + player.armorName + " and grabbing your " + player.breastDescript(0) + ". She gives your nipples a hard tweak, eliciting a sharp hiss from your lips.")
			outputText("You spend the next few minutes happily grinding and groping each other, but that doesn’t seem to quite do it for the valkyrie girl. She reaches up and, to your surprise, wraps you in a tight embrace. \"Please... Faster. I need this so badly...\" she admits, kissing your neck as she bucks her hips against you. Well, well. You happily agree to her request, picking up your pace until you’re well and truly fucking her, grinding your hips into each other as the valkyrie kisses and caresses you, surprisingly tender for someone who seemed so stoic and prideful a few minutes ago.")
			outputText("You cup her cheeks and give her a kiss full on the lips. When you break it, she’s smiling beautifully. That smile, and her pussy stroking yours, sends you over the edge. You hold your winged lover tight and cum, moaning into her shoulder as you ride out a powerful orgasm. Still smiling, the valkyrie wraps her wings around you and lets out a little moan, and you feel her squirting onto you, soaking your already sodden crotch with her femspunk.")
			outputText("Exhausted from the playful sex, the valkyrie collapses on her back, utterly spent. You give her a pat on the cheek and a quick kiss before grabbing a few gems and heading on back to camp. ")
			player.orgasm();
			combat.cleanupAfterCombat();
		}

	}

}


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

	public class Yeti extends Monster
	{
		public var tempSpeedLoss:Number = 0;

		public function yetiClawAndPunch():void {
			if (player.getEvasionRoll()) {
				outputText("The yeti beast charges at you, though his claws only strike at air as you move nimbly over the ice flooring beneath you. The beast lets out an annoyed snarl.")
			}
			else {
				if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) > 0) {
					outputText("The yeti furiously charges at you but blind as he is, he ends up running into the wall face-first instead. ");
					var yetiDamage:Number = 30 + rand(50);
					HP -= yetiDamage;
					outputText("The beast takes " + yetiDamage + " damage. ");
					if (rand(2) == 0) {
						outputText("He is now stunned.");
						createStatusEffect(StatusEffects.Stunned, 2, 0, 0, 0);
					}
					combatRoundOver();
					return;
				}
				outputText("Like a white blur the yeti charges you, striking at you with his claws and slashing over your " + player.armorName + " before a fist collides with your side, sending you sliding over the icy floor. ")
				var damage:Number = str + 25 + rand(50);
				damage = player.reduceDamage(damage);
				player.takeDamage(damage, true);
			}
			combatRoundOver();
		}
		public function yetiTackleTumble():void {
			if (player.getEvasionRoll()) {
				//yeti takes moderate damage
				outputText("Sensing the beast’s intentions as you hear the cracking of ice under his feet, you dart to the side as the beast launches at you. With wide eyes, the ice yeti collides face first into the wall of the cave with a yelped growl. It rubs its face as it glares at you. ");
				var yetiDamage:Number = 30 + rand(50);
				HP -= yetiDamage;
				outputText("The beast takes " + yetiDamage + " damage.");
			}
			else {
				//take heavy damage
				outputText("The beast’s hind claws dig into the ice before his giant furred body launches at you and he collides with you in a brutal tackle. The pair of you are sent rolling around on the floor as you trade blows with the furred beast, and then he lifts you up and tosses you aside, your body hitting the ice walls with a groan. You shakily get to your feet. ");
				var damage:Number = str + 50 + rand(150);
				damage = player.reduceDamage(damage);
				player.takeDamage(damage, true);
			}
			combatRoundOver();
		}
		public function yetiSnowball():void {
			if (player.getEvasionRoll()) {
				outputText("The beast steps back, magic condensing mist into ice within his hand. With narrow eyes you ready your body, and as soon as the ball of frost is whipped at you, you dart to the side avoiding it. The ice shatters uselessly against the wall, the ice yeti looking quite annoyed in your direction. ");
			}
			else {
				if (findStatusEffect(StatusEffects.Blind) >= 0 && rand(3) > 0) {
					outputText("The beast takes a step back, mist forming into a ball in his clenched fist. It condenses into a ball before your eyes, and with a growl the beast whips it at you. Blind as he is, the ball ends up missing you and hitting the wall instead.");
					combatRoundOver();
					return;
				}
				outputText("The beast takes a step back, mist forming into a ball in his clenched fist. It condenses into a ball before your eyes, and with a growl the beast whips it at you. The ball slams into your " + player.armorName + " and explodes into frost, you hiss at the sting. The frost is also restricting your movement. ");
				var damage:Number = (str / 2) + rand(20);
				damage = player.reduceDamage(damage);
				player.takeDamage(damage, true);
				tempSpeedLoss += 10;
				game.dynStats("spe", -10);
			}
			combatRoundOver();
			//take slight damage, reduce speed
			//nothing
		}
		public function yetiTease():void {
			//lust increased
			if (rand(player.lib + player.cor) >= 30 && rand(3) > 0) {
				outputText("You stare the beast down, though it looks like he’s distracted, with a hand dipping down to fondle his own ballsack. As your eyes follow it, you see a girthy red tip peeking out of his sheath, looking slick and releasing a wisp of steam in the air. Watching something so lewd has brought warmth to your body in this frozen cave, and you begin to wonder if his intentions are to eat or fuck you.")
				game.dynStats("lust", 20 + rand(10));
			}
			else outputText("The beast before you seems a bit distracted, a hand dipping to fondle his ballsack, but you keep your focus fixed on the monsters face, unwilling to let your guard waver for even a moment.");
			combatRoundOver();
		}

		override protected function performCombatAction():void
		{
			var chooser:Number = 0;
			chooser = rand(10);
			if (chooser < 2) eAttack();
			if (chooser >= 2 && chooser < 4) yetiClawAndPunch(); //40% chance
			if (chooser >= 4 && chooser < 7) yetiTackleTumble(); //30% chance
			if (chooser >= 7 && chooser < 9) yetiTease(); //20% chance
			if (chooser >= 9) yetiSnowball(); //10% chance
		}

		override public function defeated(hpVictory:Boolean):void
		{
			game.dynStats("spe", tempSpeedLoss);
			game.glacialRift.yetiScene.winAgainstYeti();
		}

		override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void
		{
			game.dynStats("spe", tempSpeedLoss);
			game.glacialRift.yetiScene.loseToYeti();
		}

		public function Yeti()
		{
			this.a = "a ";
			this.short = "yeti";
			this.imageName = "yeti";
			this.long = "You are fighting an ice yeti, a savage of the north built to endure and hunt in the unforgiving cold. Every inch of its body is covered in a thick white pelt, though you can still make out the definition of bulging muscles from underneath. Its face is beastial, with narrow slitted eyes, and a pressed in feline nose all over a large maw of sharp, jagged teeth. It’s a menacing sight to behold. It standing about eight feet tall, with long tree trunk wide limbs ending in claws sharp enough to dig into thick ice. There’s no question about gender; it’s obviously a male. A large, thick sheath  protects his manhood from the freezing weather, and below are a pair of baseball sized testicles, held tight against his warm body by a heavy, furred ballsack.";
			// this.plural = false;
			this.createCock(12, 1.5, CockTypesEnum.HUMAN);
			this.balls = 2;
			this.ballSize = 2;
			this.cumMultiplier = 2;
			createBreastRow(Appearance.breastCupInverse("flat"));
			this.ass.analLooseness = ANAL_LOOSENESS_TIGHT;
			this.ass.analWetness = ANAL_WETNESS_NORMAL;
			this.tallness = 8*12;
			this.hipRating = HIP_RATING_BOYISH;
			this.buttRating = BUTT_RATING_TIGHT;
			this.skinTone = "light";
			this.skinType = SKIN_TYPE_FUR;
			//this.skinDesc = Appearance.Appearance.DEFAULT_SKIN_DESCS[SKIN_TYPE_FUR];
			this.hairColor = "white";
			this.hairLength = 8;
			initStrTouSpeInte(95, 80, 60, 50);
			initLibSensCor(40, 20, 45);
			this.weaponName = "fists";
			this.weaponVerb="punch";
			this.weaponAttack = 8;
			this.armorName = "thick fur";
			this.armorDef = 3;
			this.bonusHP = 400;
			this.lust = 10;
			this.lustVuln = 0.4;
			this.temperment = TEMPERMENT_LUSTY_GRAPPLES;
			this.level = 20;
			this.gems = 35 + rand(25);
			this.drop = NO_DROP;
			this.createStatusEffect(StatusEffects.GenericRunDisabled, 0, 0, 0, 0);
			checkMonster();
		}

	}

}