code:
package classes.Scenes.Places.TelAdre {

	import classes.GlobalFlags.kFLAGS;

	public class Gym extends TelAdreAbstractContent {

		public function Gym() {}

		public function gymDesc():void {
			//PREGGO ALERT!
			if (flags[kFLAGS.PC_IS_A_GOOD_COTTON_DAD] + flags[kFLAGS.PC_IS_A_DEADBEAT_COTTON_DAD] == 0 && telAdre.cotton.pregnancy.isPregnant) {
				telAdre.cotton.cottonPregnantAlert();
				return;
			}
			spriteSelect(null);
			clearOutput();
			outputText("Even though Ingnam, your hometown, was a large, prosperous village, you never saw a gym before coming to Tel'Adre.  The structure itself has numerous architectural differences from the surrounding buildings: short, waist-high walls, an arched ceiling supported by simple columns, and a sand-covered floor.  Perhaps the only 'normal' rooms inside are the changing stands and bathrooms, which ");
			if (player.cor < 35) outputText("thankfully ");
			else if (flags[kFLAGS.PC_FETISH] > 0 || player.cor > 80) outputText("unfortunately ");
			outputText("have full sized walls to protect their users' privacy.  A breeze blows by, revealing that the open-air design provides great ventilation.  You note a wall of weights of different sizes and shapes, perfect for building muscle and bulking up.  There are also jogging tracks and even a full-sized, grass-covered track out back for centaurs to run on.  Though some of the equipment seems a bit esoteric in nature, you're sure you can make use of most of this stuff.\n\n");

			outputText("Though the gym sees heavy use by the city guard and various citizens, it's not too busy at present.");
			//(Add possible character descripts here)
			//(An extraordinarily well-muscled centaur male is by the weights, lifting some huge dumbbells and sweating like crazy.  In true centaur fashion, he's not wearing any clothes, but then again, male centaurs don't have much that regular clothes would hide.)
			//(There's a lizan girl jogging laps on one of the tracks.  She's quite thin, but her muscles have a lean definition to them.  She's wearing a one-piece, spandex leotard that hugs her tight ass and pert, b-cup breasts nicely.)
			outputText("  There's a centauress in a tank-top just inside the doorway with huge, rounded melons and perky nipples, but she merely coughs to get you to look up and says, \"");
			if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) outputText("10 gems an hour to use the facilities here, or 500 for a life-time membership.\"  She has her hands on her hips, and it looks you'll have to pay ten gems to actually get to use any of this stuff.");
			else outputText("Oh, welcome back " + player.short + ".  Have a nice workout!\"");

			if (player.gems < 10 && flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) {
				outputText("\n\nYou reach into your pockets for the fee and come up empty.  It looks like you don't have enough money to use the equipment or meet anyone.  Damn!");
				//(back to tel'adre streets)
				doNext(telAdre.telAdreMenu);
				return;
			}
			telAdre.lottie.lottieAppearance();
			if (flags[kFLAGS.LOPPE_MET] > 0 && flags[kFLAGS.LOPPE_DISABLED] == 0) {
				outputText("\n\nYou spot Loppe the laquine wandering around, towel slung over her shoulder.  When she sees you, she smiles and waves to you and you wave back.");
			}
			if (game.time.hours > 9 && game.time.hours <= 15) telAdre.heckel.heckelAppearance();
			gymMenu();
		}

		private function gymMenu():void {
			menu();
			//Core gym interactions
			addButton(0, "ChangeRoom", telAdre.jasun.changingRoom).hint("Take a look around the changing rooms, perhaps you will meet someone?");
			addButton(1, "Jog", goJogging).hint("Put the jogging track to use.");
			addButton(2, "LiftWeights",weightLifting).hint("Do some good old-fashioned weight-lifting to challenge your strength.");

			//addButton(3, "Go Swimming", goSwimming);
			if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0 && player.gems >= 500)
				addButton(4, "Life Member", buyGymLifeTimeMembership).hint("Buy lifetime membership for 500 gems? It could save you gems in the long run.", "Lifetime Membership");
			else if (flags[kFLAGS.LIFETIME_GYM_MEMBER] > 0)
				addButtonDisabled(4, "Life Member", "You already have the lifetime membership. So go ahead and use the facilities.", "Lifetime Membership");
			else
				addButtonDisabled(4, "Life Member", "You cannot afford to purchase the lifetime membership for the gym. You need 500 gems.", "Lifetime Membership");
			//NPCs
			if (flags[kFLAGS.PC_IS_A_DEADBEAT_COTTON_DAD] == 0 && telAdre.cotton.cottonsIntro()) addButton(5, flags[kFLAGS.COTTON_MET_FUCKED] > 0 ? "Cotton" : "Horsegirl", telAdre.cotton.cottonGreeting).hint((flags[kFLAGS.COTTON_MET_FUCKED] > 0  ? "Do some yoga with cotton or otherwise spend time with her." : "Approach the packing horse-girl....horse-herm?"));
			if (game.time.hours > 9 && game.time.hours <= 15) addButton(6, flags[kFLAGS.MET_HECKEL] > 0 ? "Heckel" : "Hyena", telAdre.heckel.greetHeckel).hint((flags[kFLAGS.MET_HECKEL] > 0 ? "Go talk to Heckel, and maybe do some training together." :"Approach the run-hungry hyena."));
			if (telAdre.ifris.ifrisIntro()) addButton(7, flags[kFLAGS.MET_IFRIS] > 0 ? "Ifris" : "Demon-Girl", telAdre.ifris.approachIfris).hint((flags[kFLAGS.MET_IFRIS] > 0 ? "Give Ifris something to look at: You. Or maybe not?" : "Chat up the demon-girl. Maybe you can impress her?"));
			addButton(8, flags[kFLAGS.LOTTIE_ENCOUNTER_COUNTER] > 0 ? "Lottie" : "Pig-Girl", telAdre.lottie.lottieAppearance(false)).hint((flags[kFLAGS.LOTTIE_ENCOUNTER_COUNTER] > 0 ? "Go talk to Lottie, and maybe do some training together." : "Walk over to the pig-lady and chat her up. Maybe take a swim yourself?"));
			if (flags[kFLAGS.LOPPE_MET] > 0 && flags[kFLAGS.LOPPE_DISABLED] == 0) addButton(9, "Loppe", telAdre.loppe.loppeGenericMeetings).hint("Meet Loppe to talk or have some fun.");
			if (telAdre.pablo.pabloIntro() && flags[kFLAGS.PABLO_FREAKED_OUT_OVER_WORMS] != 1) addButton(10, flags[kFLAGS.PABLO_MET] > 0 ? "Pablo" : "Imp?", telAdre.pablo.approachPablo);
			addButton(14, "Leave", telAdre.telAdreMenu).hint("Go back outside.");
		}

		private function buyGymLifeTimeMembership():void {
			clearOutput();
			//[Buy LifeTime Membership]
			if (silly()) outputText("You yell \"Shut up and take my gems!\" as you pull out your gem-pouch. \n\n"); //Shut up and take my gems!
			outputText("You fish into your pouches and pull out 500 gems, dumping them into the centaur's hands.  Her eyes widen as she turns and trots towards a counter in the back.  She leans over as she counts, giving you a generous view down her low-cut top at the cleavage she barely bothers to conceal.");
			if (player.hasCock()) {
				outputText("  It brings a flush to your face that has nothing to do with exercise.  Maybe you'll be able to con her into some alone time later?");
				dynStats("lus", (10+player.lib/10));
			}
			outputText("\n\n[b: Key item gained: Gym Membership!]");
			player.createKeyItem("Gym Membership", 0, 0, 0, 0);
			flags[kFLAGS.LIFETIME_GYM_MEMBER] = 1;
			player.gems -= 500;
			statScreenRefresh();
			//[Bring up gym menu]
			gymMenu();
		}

		private function weightLifting():void {
			clearOutput();
			//Too tired?  Fuck off.
			if (player.fatigue > player.maxFatigue() - 25) {
				outputText("There's no way you could exercise right now - you're exhausted!  ");
				if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) outputText("It'd be better to save your money and come back after you've rested.");
				doNext(telAdre.telAdreMenu);
				return;
			}
			//Deduct gems if not a full member.
			if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) {
				player.gems -= 10;
				statScreenRefresh();
			}
			//[Lift Weights] +25 fatigue!
			player.changeFatigue(25);
			//TEXTS!
			outputText("You walk up to the weights and begin your workout.  ");
			//(< 25 str)
			if (player.str100 < 25) outputText("You have to start out on the smaller weights to the left side of the rack due to your strength, but even so, you manage to work up a good burn and a modest sweat.");
			//(< 40 str)
			else if (player.str100 < 40) outputText("You heft a few of the weights and select some of the ones just to the left of the middle.  It doesn't take you long to work up a sweat, but you push on through a variety of exercises that leave your body feeling sore and exhausted.");
			//(< 60 str)
			else if (player.str100 < 60) outputText("You smile when you grip a few of the heavier weights on the rack and start to do some lifts.  With a start, you realize you're probably stronger now than Ingnam's master blacksmith, Ben.  Wow!  This realization fuels you to push yourself even harder, and you spend nearly an hour doing various strength-building exercises with the weights.");
			//(<80 str)
			else if (player.str100 < 80) outputText("You confidently grab the heaviest dumbbells in the place and heft them.  It doesn't take long for you to work up a lather of sweat and feel the burn thrumming through your slowly tiring form.  The workout takes about an hour, but you feel you made some good progress today.");
			//(<90)
			else if (player.str100 < 90) outputText("You grab the heaviest weights they have and launch into an exercise routine that leaves you panting from exertion.  Setting the weights aside, you flex and marvel at yourself – you could probably arm wrestle a minotaur or two and come out victorious!");
			//(else)
			else outputText("This place barely has anything left to challenge you, but you take the heaviest weights you can get your mitts on and get to it.  By the time an hour has passed, you've worked up a good sweat, but without heavier weights you probably won't get any stronger.");
			//Stat changes HERE!
			if (player.str100 < 90) dynStats("str", .5);
			if (player.tou100 < 40) dynStats("tou", .3);
			//Body changes here
			//Muscleness boost!
			outputText(player.modTone(85,5+rand(5)));
			promptShowers();
		}

		private function goJogging():void {
			clearOutput();
			//Too tired?  Fuck off.
			if (player.fatigue > player.maxFatigue() - 30) {
				outputText("There's no way you could exercise right now - you're exhausted!  ");
				if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) outputText("It'd be better to save your money and come back after you've rested.");
				doNext(telAdre.telAdreMenu);
				return;
			}
			//Deduct gems if not a full member.
			if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) {
				player.gems -= 10;
				statScreenRefresh();
			}
			//[Jogging] +30 fatigue!
			player.changeFatigue(30);
			//Text!
			outputText("You hit the jogging track, ");
			//(<25 tou)
			if (player.tou100 < 25) outputText("but you get so winded you have to stop after a few minutes.  Determined to improve, you force yourself to stay at a fast walk until you can run again.");
			//(<40 tou)
			else if (player.tou100 < 40) outputText("but your performance isn't that great.  You nearly stop jogging a few times but manage to push through until you're completely exhausted.");
			//(<60 tou)
			else if (player.tou100 < 60) outputText("and you do quite well.  You jog around for nearly an hour, working up a healthy lather of sweat.  Even your " + player.legs() + " tingle and burn with exhaustion.");
			//(<80 tou)
			else if (player.tou100 < 80) outputText("and it doesn't faze you in the slightest.  You run lap after lap at a decent clip, working yourself until you're soaked with sweat and fairly tired.");
			//(<90 tou)
			else if (player.tou100 < 90) outputText("and you have a terrific time.  You can keep yourself just below your sprinting speed for the entire time, though you work up a huge amount of sweat in the process.");
			//else)
			else outputText("and it barely challenges you.  You run at a sprint half the time and still don't feel like you're improving in the slightest.  Still, you do manage to burn a lot of calories.");
			//Stat changes HERE!
			if (player.spe100 < 40) dynStats("spe", .3);
			if (player.tou100 < 90) dynStats("tou", .5);

			//If butt is over 15 guaranteed reduction
			if (player.butt.rating >= 15) {
				outputText("\n\nAll that running must have done some good, because your " + player.buttDescript() + " feels a little less bouncy.");
				player.butt.rating--;
			}
			else {
				if (player.butt.rating >= 10 && rand(3) == 0) {
					outputText("\n\nThe jogging really helped trim up your " + player.buttDescript() + ".");
					player.butt.rating--;
				}
				else if (player.butt.rating >= 5 && rand(3) == 0) {
					outputText("\n\nYour " + player.buttDescript() + " seems to have gotten a little bit more compact from the work out.");
					player.butt.rating--;
				}
				else if (player.butt.rating > 1 && rand(4) == 0) {
					outputText("\n\nYour " + player.buttDescript() + " seems to have gotten a little bit more compact from the work out.");
					player.butt.rating--;
				}
			}//If hips is over 15 guaranteed reduction
			if (player.hips.rating >= 15) {
				outputText("\n\nIt feels like your " + player.hipDescript() + " have shed some pounds and narrowed.");
				player.hips.rating--;
			}
			else {
				if (player.hips.rating >= 10 && rand(3) == 0) {
					outputText("\n\nIt feels like your " + player.hipDescript() + " have shed some pounds and narrowed.");
					player.hips.rating--;
				}
				else if (player.hips.rating >= 5 && rand(3) == 0) {
					outputText("\n\nIt feels like your " + player.hipDescript() + " have shed some pounds and narrowed.");
					player.hips.rating--;
				}
				else if (player.hips.rating > 1 && rand(4) == 0) {
					outputText("\n\nIt feels like your " + player.hipDescript() + " have shed some pounds and narrowed.");
					player.hips.rating--;
				}
			}

			//Thickness decrease!
			outputText(player.modThickness(1,5+rand(2)));
			//Muscleness boost!
			outputText(player.modTone(100,2+rand(4)));
			promptShowers();
		}

		private function promptShowers():void {
			outputText("\n\nDo you want to hit the showers before you head back to camp?");
			if (flags[kFLAGS.BROOKE_MET] == 1) {
				menu();
				if (flags[kFLAGS.DISABLED_SEX_MACHINE] == 0) {
					addButton(0, "\"Showers\"", telAdre.sexMachine.exploreShowers);
					addButton(1, "Showers", telAdre.brooke.repeatChooseShower);
					addButton(4, "Leave", camp.returnToCampUseOneHour);
				}
				else {
					doYesNo(telAdre.brooke.repeatChooseShower, camp.returnToCampUseOneHour);
				}
			}
			else doYesNo(telAdre.sexMachine.exploreShowers, camp.returnToCampUseOneHour);
		}
	}
}


code:
package classes.Scenes.Places.TelAdre {
	import classes.BodyParts.*;
	import classes.GlobalFlags.kFLAGS;
	import classes.CockTypesEnum;
	import classes.display.SpriteDb;
	import classes.internals.*;

	public class Ifris extends TelAdreAbstractContent {
public function Ifris(){

}
//Hours - 15+

public function ifrisIntro():Boolean {
	if (game.time.hours >= 15) {
		if (flags[kFLAGS.MET_IFRIS] > 0) outputText("\n\nIfris is standing in the corner of the room, wearing her usual black bikini and eyeing you as soon as you walk in.");
		else outputText("\n\nIn the corner of the room stands a lone figure, her bright cherry-red skin making her stand out.  A long, spaded tail swishes behind her slowly, the length much thicker than most demon tails you've seen.  She couldn't be more than five feet tall, her slender, lithe form looking more athletic than muscular.  A black bikini covers just enough to be modest, her supple C-cup breasts more perky than they have a right to be.  She slowly rolls a lock of springy, curly hair around one index finger, her glowing crimson gaze set on a nearby weight-lifting machine incredulously.  Feeling your eyes on her glistening, oiled skin, she slowly turns them to you instead.");
		return true;
	}
	return false;

}

//2-Approach and Greeting-
public function approachIfris():void {
	spriteSelect(SpriteDb.s_ifris);
	clearOutput();
	if (flags[kFLAGS.MET_IFRIS] == 0) {
		flags[kFLAGS.MET_IFRIS] = 1;
		outputText("The curious, appraising gaze on her pretty face turns into a pleased smile as you walk over, and her clawed toes click gently on the floor as she takes the last few steps to meet you. As you open your mouth to speak she preempts you, those pretty, black-painted lips parting, a voice too husky and smooth to be up to any good greeting you.\n\n");

		outputText("\"Hello, darling. I'm so glad you decided to join me... You can call me Ifris.\" She tilts her head to the side cutely, gazing up at you through her lashes.\n\n");

		outputText("You give her your name, mouth suddenly feeling a little too dry for some reason as she gives you that sultry smile and lingering gaze.\n\n");

		outputText("\"It's nice to meet you. Are you here to use the machines, or were you just hoping to watch the pretty bodies working up a sweat?\" she giggles cutely, two of her clawed fingers covering her mouth demurely.\n\n");
	}
	//2a-Repeat approach, no sex-
	else if (flags[kFLAGS.TIMES_FUCKED_IFRIS_BLOWJOB] + flags[kFLAGS.TIMES_FUCKED_IFRIS_LICKED] == 0) {
		outputText("Ifris grins as you walk over again, the devil girl's dark tongue dabbing at her even darker lips as she all but coos up at you.\n\n");

		if (flags[kFLAGS.IFRIS_SHOWED_OFF] == 0) outputText("\"Hello darling... here to actually give me a show?\"\n\n");
		else outputText("\"Hello darling... here to give another show? I did so enjoy your last performance.\"\n\n");
	}
	//2b-Repeat approach, had oral-
	else {
		outputText("Ifris grins as you walk over again, the devil girl's dark tongue dabbing at her even darker lips. A small shudder runs through you as you imagine her remembering your flavor...\n\n");

		outputText("\"Hello darling... so lovely to see you. Are you here to give me a show this time? Or do you think you want to try to beat your last record?\"\n\n");

		outputText("A bit confused, you ask her what record she's talking about, only to evoke a small, cute laugh from her.\n\n");

		outputText("\"How long you can lift that much before my attentions are too distracting, of course.\"\n\n");
	}
	outputText("(You could go ahead and work out while she watches, ask her to join you, or leave.)");
	//Work out || Ask Her To Join || Leave?
	menu();
	if (player.fatigueLeft() >= 30) {
		addButton(0, "Work Out", workOutForIfris);
		addButton(1, "Join Me?", askIfrisToJoinYou);
	} else {
		addDisabledButton(0, "Work Out", "There's no way you could work out as tired as you are.  Maybe you could come back to flirt with the demonic-looking girl during your next workout.");
		addDisabledButton(1, "Join Me?", "There's no way you could work out as tired as you are.  Maybe you could come back to flirt with the demonic-looking girl during your next workout.");
	}
	addButton(14, "Leave", telAdre.gym.gymDesc);
}
//3a-PC responds they want to work out-
private function workOutForIfris():void {
	spriteSelect(SpriteDb.s_ifris);
	clearOutput();
	outputText("You smile to the devil-looking-girl and tell her you're just here to get your work-out on.\n\n");

	outputText("\"Oh, don't mind me, then. Please, by all means.\" She gestures to the bench-press, stepping back and watching you with a smile.\n\n");

	outputText("\"I hope you don't mind if I keep you company. I'd love to... see you in action.\"\n\n");
	//WORK OUT or SHOW OFF?
	menu();
	addButton(0, "Work Out", liftWhileIfrisWatches).hint("Excersize normally.");
	addButton(1, "Show Off", showOffForIfris).hint("Give her a display of your strength.");
	if (player.str > 90) addNextButton("Go All Out", ifrisAllOut).hint("Show Ifris what you can really do.");
}
//3b-PC asks if she'd like to join them-
private function askIfrisToJoinYou():void {
	spriteSelect(SpriteDb.s_ifris);
	clearOutput();
	outputText("You ask Ifris if she'd like to join you in some exercises. Her eyes glint mischievously, obviously finding unintended meaning in your words, and you can't help but blush.\n\n");

	outputText("\"That's sweet of you, darling... but I don't want to get in the way. I'll just wait my turn. Don't worry about me at all.\"\n\n");

	outputText("You shrug at her response, but there's something about the way she eyes you now...");
	//WORK OUT or SHOW OFF?
	menu();
	addButton(0, "Work Out", liftWhileIfrisWatches).hint("Excersize normally.");
	addButton(1, "Show Off", showOffForIfris).hint("Give her a display of your strength.");
	if (player.str > 90) addNextButton("Go All Out", ifrisAllOut).hint("Show Ifris what you can really do.");
}

//4a-PC does a modest work out-
private function liftWhileIfrisWatches():void {
	spriteSelect(SpriteDb.s_ifris);
	flags[kFLAGS.IFRIS_SHOWED_OFF]++;
	clearOutput();
	if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) {
		outputText("The centauress working the door walks up to collect her fee, and you drop 10 gems for an hour workout into her hand.\n\n");
		player.gems -= 10;
		statScreenRefresh();
	}
	outputText("You set the machine to a weight that you know won't be too much for you and lay back on the bench. You feel her eyes on your form, a little shiver running down your spine as she openly admires you as you take a grip on the handlebars and push. It's not long before you've worked up a nice sweat, your muscles burning, but you can't shake that distracted feeling as she gazes at you so appreciatively.\n\n");

	outputText("As you finish your sets, she smiles a little wider at you, reaching over and tracing one fingertip teasingly along your jawline.\n\n");

	outputText("\"Mmm... lovely. Maybe next time I'll get to see a little more.\" She grins a little then, exposing her fanged teeth to you briefly before she turns and slinks from the gym, her posh little bottom swaying more than it has any real right to. You can't help but stare until she's gone, and you shake your head, trying to clear it to go about your business...");
	//Stat changes HERE!
	if (player.str100 < 90) dynStats("str", .5);
	if (player.tou100 < 40) dynStats("tou", .3);
	dynStats("lus", 5);
	//Body changes here
	//Muscleness boost!
	outputText(player.modTone(85,5+rand(5)));
	player.changeFatigue(30);
	doNext(camp.returnToCampUseOneHour);
}
//4b-PC decides to show off, possible strength requirement?-
private function showOffForIfris():void {
	spriteSelect(SpriteDb.s_ifris);
	flags[kFLAGS.IFRIS_SHOWED_OFF]++;
	player.changeFatigue(30);
	clearOutput();
	if (flags[kFLAGS.LIFETIME_GYM_MEMBER] == 0) {
		outputText("The centauress working the door walks up to collect her fee, and you drop 10 gems for an hour workout into her hand.\n\n");
		player.gems -= 10;
		statScreenRefresh();
	}
	outputText("You look at the settings on the machine for a moment before deciding to give the red cutie something to really remember. You set the bar on the bottom rung, rubbing your hands together a few times in preparation as you lay on the bench. Her red eyes go a little wide, slender black eyebrows lifting on her smooth forehead as she watches you. You can't help but feel as though she's almost rooting for you, the way she does a cute little hop and clasps her hands together...\n\n");

	//4b2-PC fails strength requirement considerably!-
	if (player.str < 40) {
		outputText("Gripping the bars tightly, you grit your teeth and give a mighty push upwards! Or not so much, though you struggle valiantly against the weight. You just can't seem to budge it however, and a sharp pain in your arms tells you just what a bad idea this was! You give a cry of pain, releasing the bar and rubbing your biceps.\n\n");

		outputText("Ifris only rolls her eyes, flipping a hand at you dismissively as she walks away, murmuring.\n\n");

		outputText("\"I've no time for show-offs who can't back it up, darling.\"\n\n");

		outputText("Humiliated, you stand and leave, nursing your sore body and ego.");
		//Reset 'shown off for ifris'
		flags[kFLAGS.IFRIS_SHOWED_OFF] = 0;
		player.takeDamage(10);
		doNext(camp.returnToCampUseOneHour);
		return;
	}
	//4b1-PC fails strength requirement!-
	if (player.str < 75) {
		outputText("Gripping the bars tightly, you grit your teeth and give a mighty push upwards! Your muscles strain and you grunt with effort, but the considerable weight barely budges. You hear her make a little disappointed, \"awww...\" as she watches you for a few long moments, but no matter how much the humiliation motivates you, you just can't seem to do it.\n\n");

		outputText("\"Oh well...\" She sighs, clearly crestfallen. Cocking one fist on her hip, she gives your " + player.leg() + " a light pat as she leaves your presence, vanishing out the door within moments.\n\n");

		outputText("Well, at least you had the good sense to stop before you hurt yourself...\n\n");
		doNext(camp.returnToCampUseOneHour);
		flags[kFLAGS.IFRIS_SHOWED_OFF] = 0;
		return;
	}
	//4b5-PC masculinity > 60, corruption > 75, has cow features-
	if (player.isGenderless() || (player.femininity < 40 && !player.isPureEnough(75) && player.face.type == Face.COW_MINOTAUR)) {
		outputText("Ifris watches you for a moment as you move down to the bench, but her eyes clearly wander elsewhere now and then. The pleasant smile never leaves her pretty face, but it's clear she's distracted or even disinterested for some reason. Soon enough she turns to leave, a bored little sigh leaving her. Her hips sway with a sexy gait as though it were natural, though nothing about her seems particularly excited at the moment...");
		//Stat changes HERE!
		if (player.str100 < 90) dynStats("str", .5);
		if (player.tou100 < 40) dynStats("tou", .3);
		//Body changes here
		//Muscleness boost!
		outputText(player.modTone(85,5+rand(5)));
		doNext(camp.returnToCampUseOneHour);
		return;
	}
	//4b3-PC succeeds! Is male/herm-
	if (player.hasCock()) {
		//Double dickings!
		if (player.cockTotal() > 1 && rand(2) == 0 && player.cockThatFits(70) != -1 && player.cockThatFits2(70) != -1) {
			ifrisDP();
			return;
		}
		//First time
		if (flags[kFLAGS.TIMES_FUCKED_IFRIS_BLOWJOB] == 0) {
			outputText("Gripping the bars tightly, you grit your teeth and give a mighty push upwards! Your muscles strain and you grunt with effort, a little amazed gasp leaving the red beauty's lips as the weights lift slowly but surely. You can't help but grin proudly as your elbows lock, the weight completely lifted, and you bring it back down, only to push again.\n\n");

			outputText("Ifris moves closer, her oiled skin glistening as she watches your muscles straining, bending in to get a closer look. As you look down you notice her bend forward, the weight momentarily forgotten as those luscious, perfect mounds of tit-flesh almost spill out of her bikini top. She grins slowly at you, following your gaze, and even giving a teasing little shake, making the orbs jiggle.\n\n");

			outputText("\"Mmm, keep going, darling... I like what I see,\" she all but purrs out.\n\n");

			outputText("Spurred on by your ego, you lift the huge weight with seeming effortlessness.  The devil-girl seems to move closer as your muscles burn and strain. Suddenly you feel one of her slender hands sliding up your " + player.leg() + ", the smooth palm stroking your thigh, and then cupping your crotch. A surge of arousal ripples through your cock, making the length twitch and immediately begin to swell as she squeezes, making you pause in your efforts.\n\n");

			outputText("\"Mmmm, don't stop now,\" she teases in that husky voice, even as she grips the waistband of your bottoms, tugging them down suddenly and exposing your member then and there. Those lithe, soft fingers wrap around the base of the shaft, squeezing gently in soft, pulsing grips as she watches it harden completely. Her eyes stay fixated on your dick, a dark, nearly-black tongue dabbing her lips as she gives a slow, almost languid stroke up the shaft.\n\n");

			outputText("You groan under her ministrations - the way she grips your cock so teasing, but so effective. Within moments you're so distracted by her fleeting caresses and squeezes that you almost slip, and decide to rest, letting the weights settle. Ifris gives a cute little giggle, her grip finally tightening on your sweaty, throbbing member as she bends in, letting her dark, plush lips meet the head in a sensual kiss. Your body felt so sore and tired, but the kiss to your swollen glans is like a lightning bolt through you, and a little groan leaves you.\n\n");

			outputText("Pleased with her effect on you thus far, her gaze shifts to your face while her lovely mouth parts, the heat of her breath much greater than a normal human by several degrees.  It washes over your cock in heavy, moist puffs. With a little teasing flick of her wet tongue over the tip of your shaft, she takes it into her mouth, suckling gently. The devil's mouth is so wet, so delightfully hot, her cheeks hollowing out almost instantly as she sucks hard on that pulsing tip. Slowly she descends, thick cock-pillows smoothly gliding down your shaft as she takes more and more into her mouth. There isn't even a pause as you hit the back of her throat and she keeps going, eyes narrowing in lust as she gazes at your expression when her lips meet your crotch in the most intimate kiss you can imagine.\n\n");

			outputText("Suddenly it seems she loses her patience for teasing, much to your delight, and the hard, long pull on your cock as she pulls back is like heaven, her cheeks caved inward. She descends quickly, all but face-fucking herself on your rod again and again, lewd, wet squelching rising up from her stuffed throat. It isn't long before you're groaning in ecstasy, wishing you had the strength to grip her head, make her slow down so you can draw it out and enjoy it, but all too soon the pleasure is rushing up to meet you, your " + player.ballsDescriptLight() + " tightening, even as she cups ");
			if (player.balls > 0) outputText("them and gently squeezes the sack.\n\n");
			else if (player.hasVagina()) outputText("your lower lips and gently squeezes.\n\n");
			else outputText("your taint and gently squeezes.\n\n");

			outputText("Just as you can take no more, the pretty devil buries her face in your crotch, swallowing around your dick desperately. You give a shout of pleasure as your length swells and twitches, the hot bursts of your seed pumping down into her belly. She waits patiently, almost looking like she's smiling around the base of your dick, even as her eyes flutter, almost rolling back in her head. Finally the bursts of your cum subside and she slowly pulls up off your shaft, giving the oversensitive tip one last hard, almost painful suckle before parting from your flesh with a lewd plop. She licks her lips slowly, leaving you panting and feeling light-headed as she rises, only giving your cock a gentle pat as she passes by, leaving with a spring in her step and a trail of glistening wetness down her thighs...");
		}
		//5a-Repeat oral scene, male/herm-
		else {
			outputText("Ifris all but squeals in delight as you tell her you're totally up for smashing that record, a wide grin spreading her thick lips, briefly worrying you when you see those sharp teeth of hers... but then you remind yourself how good she is with them, as you lay back onto the bench, gripping the bars above you. The devil girl doesn't even wait this time, tugging your bottoms down right away to get at your " + player.cockDescript(0) + ". She sits upon your " + player.legs() + ", her posh butt so nice and soft against you as she waits for you to begin.\n\n");

			outputText("The moment you lift the weight for the first time, she bends down, rubbing her smooth cheek against your half-turgid member");
			if (player.balls > 0) outputText(", her hand cupping your " + player.ballsDescriptLight());
			outputText(". Smiling, she watches you carefully, her tongue sliding out of her lips, laving up the underside of the shaft, urging it on its final steps to full hardness. She groans in desire as she takes your " + player.cockHead() + " into her mouth once again, pulling a moan from you with her first, hard suckle upon your sensitive tip; it seems she doesn't want to tease anymore.\n\n");

			outputText("The sexy little dark-haired devil takes your dick to the ");
			if (player.hasSheath()) outputText("sheath");
			else outputText("base");
			outputText(" in her throat once again, holding there until you push the weight up, sliding up the length with your movement, and then back down as you lower, encouraging your exercise with the pleasure of her sweet mouth. Knowing you can't keep it up forever though, she merely urges you to do better before giving in, her hand gripping the base of your " + player.cockDescript(0) + " tightly as her head starts to bob purposefully up and down your massive length.\n\n");

			outputText("With your strength spent, your lips dry from your constant moans, and your " + player.cockDescript(0) + " throbbing so wonderfully, Ifris smiles around your shaft as she feels your orgasm closing in. She doesn't stop this time, still bobbing along your shaft, tongue mercilessly undulating against the underside, as your peak rushes to meet you. She swallows those spurts of cum expertly, pulling back between each one to catch a burst in her mouth and taste it, and then shoving you back down her throat to swallow the next, alternating in an erotic rhythm until you're spent.\n\n");

			outputText("With that slow, almost painfully-hard suckle, she pops from the " + player.cockHead() + " of your " + player.cockDescript(0) + " out and sucks in a deep breath, giggling and leaning down to kiss you.  She murmurs, \"You do better each time, darling. I'll see you again I hope.\"  With that, she's leaving you again, all but skipping out the door, that wetness trickling down her long, red legs...");
		}
		flags[kFLAGS.TIMES_FUCKED_IFRIS_BLOWJOB]++;
	}
	//4b4-PC succeeds! Is female!-
	else if (player.hasVagina()) {
		if (flags[kFLAGS.TIMES_FUCKED_IFRIS_LICKED] == 0) {
			outputText("Gripping the bars tightly, you grit your teeth and give a mighty push upwards! Your muscles strain and you grunt with effort, a little amazed gasp leaving the red beauty's lips as the weights lift slowly but surely. You can't help but grin proudly as your elbows lock, the weight completely lifted, and you bring it back down, only to push again.\n\n");

			outputText("Ifris moves closer, her oiled skin glistening as she watches your muscles straining, bending in to get a closer look. As you look down you notice her bend forward, the weight momentarily forgotten as those luscious, perfect mounds of tit-flesh almost spill out of her bikini top. She grins slowly at you, following your gaze, and even giving a teasing little shake, making the orbs jiggle.\n\n");

			outputText("\"Mmm, keep going, darling... I like what I see,\" she all but purrs out.\n\n");

			outputText("Spurred on by your ego, this huge weight seems effortless. Suddenly one of the beauty's hands reaches out, smoothing over your toned belly as she grins rather devilishly at you.  Her fingers hook in your bottoms and you give a little jump as her plush, dark lips meet your belly, kissing your skin and even flicking her unnaturally-warm tongue against it to taste your sweat. One of her slender hands slips beneath your waistband, her fingers sliding over your pussy-lips teasingly, making a soft moan fall from your throat. Expertly she teases your folds, making you pause in your lifting to gaze down at the luscious beauty as she gazes right back up at you. Finding your sex wet and inviting, she curls her digits, sliding them deep within you in a sudden, quick push, making you cry out as you grip her fingers so nice and tightly.\n\n");

			outputText("You let the weights rest, all but forgotten as your fingers bury in her soft, curly hair, moans of pleasure and desire leaving your lips. She pushes your top open, exposing your nipples to her exploring mouth, suckling upon one eagerly as she finger-fucks your pussy as deep as her slender fingers can go. Every time her hand curls against you, those fingers scissoring nice and deep within your soaked tunnel, you feel her palm rubbing over your clit again and again.\n\n");

			outputText("The warmth in your belly grows and spreads as the sensual, intense sex grows more urgent, and soon enough the black-haired beauty pulls from your nipples, her fingers sliding from your dripping slit just long enough to push your bottoms down completely. She bends in, those thick dick-sucking lips put to a much different use as they press to your pussy and suckle upon it, her heated tongue sliding deep within you, lashing against your sensitive walls, much to your delight. Her tail sways quicker behind her as she suckles on your pussy like her life depends on it... and that's more than you could ever ask for right then and there.\n\n");

			outputText("Your back arches, ");
			if (player.isNaga()) outputText("your powerful tail flexing to and fro while your belly clenches");
			else outputText("toes curling while your belly clenches");
			outputText(", and your muscles contract as your orgasm hits. A muffled moan leaves Ifris, invading your cunt as you clutch her head to you, riding her pretty face, lost in your tide of ecstasy. When you finally come down, she pulls free of your pussy with a cute little gasp, followed by a giggle. Looking down through your hazy eyes, you see her lovely face glistening with your own juices, and she gives your thigh a little kiss. Standing up, she turns and leaves you laying there panting, a spring in her step, and a trail of clear wetness leaking down her inner thighs...");
		}
		//5b-Repeat oral scene, female-
		else {
			outputText("Ifris all but squeals in delight as you tell her you're totally up for smashing that record, a wide grin spreading her thick lips, briefly worrying you when you see those sharp teeth of hers... but then you remind yourself how good she is with them, as you lay back onto the bench, gripping the bars above you. The devil girl doesn't even wait this time, leaning up to give your cheek a little peck as she pulls your " + player.chestDesc() + " free of your top.\n\n");

			outputText("She leans in before you've started, peppering your " + player.nippleDescript(0) + "s and ");
			if (player.biggestTitSize() >= 1) outputText("breasts");
			else outputText("chest");
			outputText(" with soft kisses, teasing the nubs to hardness with flicks of her tongue. You eagerly lift your " + player.legs() + " as she slides down, pulling your bottoms away to expose your moistening cunt to her hungry gaze.  Urging your " + player.legs() + " apart, she crawls between them, tail swaying behind her as she waits for you to begin. You comply with her wishes, eager to feel the pleasure of her mouth more than the burn of your exercise, and you're not left wanting.\n\n");

			outputText("With the first push, that long devil-tongue slides up along your " + player.vaginaDescript() + ", not teasing, but firmly lapping between the lips, spreading them slightly as she tastes you. With a pretty little moan, Ifris laves her tongue up your pussy over and over again as you pump your iron, enjoying your flavor, but knowing you'll need more to really get you going. Two fingers spread your " + player.vaginaDescript() + " open as her lips seal over your " + player.clitDescript() + ", suckling it gingerly, tongue swirling over it. Her fingers pump into you nice and quickly, your pleasureful reward for... well, you don't quite understand why this gets her excited, nor do you care.\n\n");

			outputText("That tongue joins her fingers in spreading your cunt, making you cry out in pleasure and surprise, leaving the weights unattended as you arch hard. Your orgasm rips through you, making your body shudder under the intensity as she laps up and suckles down your release eagerly, her ministrations softening, slowing to draw out your orgasm and let you enjoy it. As you come down, she slowly rises up, giving you another of those lecherous, devious grins before climbing off you.\n\n");

			outputText("\"Always a pleasure, darling. I can't wait to see you again soon...\" And she's leaving you once more, her butt swaying more than usual, moisture leaking down her long, slender legs...");
		}
		flags[kFLAGS.TIMES_FUCKED_IFRIS_LICKED]++;
	}
	//Stat changes HERE!
	if (player.str100 < 90) dynStats("str", .5);
	if (player.tou100 < 40) dynStats("tou", .3);
	player.orgasm('Generic');
	//Body changes here
	//Muscleness boost!
	outputText(player.modTone(85,5+rand(5)));
	doNext(camp.returnToCampUseOneHour);
}

//Ifrs double-penetrates herself on you while you work out.
private function ifrisDP():void {
	outputText("You set the machine to an impressive weight that you're sure you can handle and set to work, your muscles rippling and tightening as they repeatedly raise and lower the weight for the demonic-looking woman's amusement.  Feeling Ifris' glowing, crimson visage devouring in your workout, you push yourself harder, working up a sheen of sweat that drips from your body.  Your arms haven't yet begun to burn, but deep inside your chest, your heart is beating faster, either from the oiled gym-junky's gaze or the constant, heavy lifting - perhaps both.\n\n");
	outputText("With the first set finished, you lower the bar until the weight is released from your well-developed musculature.  The demonic beauty is leaning down, over your " + player.chestDesc() + ", drinking in every sweat-slicked part of you.  With her breasts wobbling dangerously, her glossy, dark lips slowly part to blow you a kiss.  Then, the onyx pillows open to purr, \"Mmmm... marvelous work darling.\"  She leans a little lower, letting her slick breasts rub over the crotch of your " + player.armorName + " as she asks, \"Do you think... you could lift more?  Enough to truly handle anything the world might throw at you?\"  Ifris trails her fingers over your " + player.armorName + ", slowly undoing the equipment with each enunciated syllable.\n\n");

	outputText("Spurred on by the crimson cutie's urgings, you set the machine a bit higher and set your mind to lifting, trusting her to follow through on her teases.  You flex and strain, hefting the heavier weight higher and higher, until you've completely raised it.  As soon as you reach that glorious apex, your coverings fall away to expose your " + player.multiCockDescriptLight() + " to the musky gym air.  They pulsate, slowly filling with blood while you hold the bulky weights aloft.  You gradually bring the machine back down, exhaling a moan of relief once Ifris takes two of your half-swollen shafts in her hands, feeling the flesh filling out between her hot, oiled fingers.\n\n");

	outputText("\"Mmmm... don't stop darling.  You're... more than a handful.  Just keep lifting, and I'll take care of everything down here,\" promises the sultry voice of your companion.  Nodding in understanding, you return to the task you've been given - putting on a show in exchange for sexual pleasure.  Your [cocks] fill, to the muscle-focused demon's delight, getting coos of pleased surprise as they fully engorge.  She strokes them slowly, letting the tightening dick-flesh slide through her oily grip a few times to make sure you're absolutely ready, always stopping the moment you start to hesitate in your assigned workout.\n\n");

	outputText("After five big pushes, the hands disappear, but only long enough for her light, toned body to climb atop your own, the oiled thighs sliding up your sweat-glazed form towards your groin.  Ifris coos, \"Mmm... keep at it, my darling.  Fitness is its own reward...\"\n\n");

	outputText("You gasp at the pleasant sensation of her moist swimsuit against " + player.oMultiCockDesc() + " and start to push yourself, straining harder, grunting as you begin to feel the onset of fatigue.  Just before the next lift, Ifris squeezes two of your " + player.multiCockDescriptLight() + ", angling them straight up.  You pause in confusion a moment, until you feel wet lips on one and tight, oiled skin squeezing the other.  Like you've been charged by lightning, energy fills your body, and you push yourself to keep going.  As the bar rises, Ifris' pussy and asshole lower, squeezing the two lucky dicks in her hot, clenching innards.  Holding that position, you struggle to control your muscles and adjust to the exquisite pleasure.  The bar lowers slowly, but Ifris' holes levitate in the same motion, coming just up off your sensitive, hungry shafts.\n\n");

	outputText("The demonic-looking woman's tortuous orifices keep you hard, battling through the tide of pleasure so that you can keep lifting, and in return receive even more sensation.  Your arms are starting to feel sore, and lifting such enormous quantities of mass is getting harder and harder.  Ifris still seems pleased with your progress, and she murmurs words of encouragement.  \"So... strong... mmmhmmm, go on.  You can do it.\"  Her pussy squeezes and ripples around the main dick while her sphincter clamps tight on the other, massaging you to compensate for the slower speeds.  Droplets of sweat drip onto you, mingling with your own exhausted beads and falling to the floor, both of you soaked with the stink of exercise and sex.\n\n");

	outputText("Ifris leans down and twines her arms around your shoulders, resting her head in the nape of your neck, her dark tongue licking the salt from you [skin].  Your whole body is shaking, trapped between the desire to cave in to the crimson beauty's body and the need to support the machine's tremendous load.  Hot and trembling, your arms feel like they're melting into weak, burning rubber.  Ifris senses this, and she says, \"Set it down and release... release for me, darling.\"\n\n");

	outputText("You set the machine's bar back in place, letting your worn-out limbs go slack across Ifris's body, your hands coming to rest on her tight, squeezable butt.  The two slick holes start a whole new wave of contractations, and without the distraction of the weights, you're unable to resist.  ");
	//(Knotting - req's 2 dogdicks!)
	if (player.dogCocks() >= 2) {
		outputText("Both your canine cocks bloat with seed, the knot's distending and stretching so wide that Ifris couldn't pull off if she wanted.  A moment later, the twin dog-dicks explode pillars of alabaster cream, painting the truly knotted woman's innards white.  ");
		if (player.cumQ() >= 1000) outputText("She groans and moans as she's filled, her body distending to deal with the unholy amount of seed your cocks can spew.  ");
		outputText("Throughout the massive release, you're softly grunting, held immobile by your animalistic body's instincts as your peckers try their damnedest to impregnate your overly fit mate.  You're still cumming, but your knots are starting to deflate at last.  ");
	}
	//(Nodule growing, unholy demonocity)
	else if (player.countCocksOfType(CockTypesEnum.DEMON) >= 2) {
		outputText("Both your demonic cocks explode inside Ifris, the nodules along each shaft swelling out, thickening to stroke and caress your oily lover's inner walls.  A moment later, the tainted tips explode out, spurting demon-spunk into both silky tunnels.  ");
		if (player.cumQ() >= 1000) outputText("She groans and moans as she's filled, her body distending to deal with the unholy amount of seed your cocks can spew.  ");
		outputText("At the same time, your hands squeeze hard on her butt-cheeks and your hips start to jack-hammer against her, slamming into her as if she was a worthless piece of meat for you to impregnate.  You shiver, feeling not entirely in control of yourself, the demonic influence of your tainted members robbing you of control.  ");
	}
	//Flaring - req's 2 horsecocks!)
	else if (player.countCocksOfType(CockTypesEnum.HORSE) >= 2) {
		outputText("Both your equine cocks explode inside Ifris, their tips swelling outward into thick flares that plug her stuffed channels.  A moment later, the swollen tips unleash pillars of alabaster cream, painting everything above the flares white.  ");
		if (player.cumQ() >= 1000) outputText("She groans and moans as she's filled, her body distending to deal with the unholy amount of seed your cocks can spew.  ");
		outputText("Your hips begin to rock and thrust, and no matter what you try to do, you cannot seem to still your body, your animal instincts owning your waist as you inseminate your seductive, teasing lover's body.  ");
	}
	//(Tentacle pistoning + head-mushrooming)
	else if (player.countCocksOfType(CockTypesEnum.TENTACLE) >= 2) {
		outputText("Both your plant-like pricks explode inside Ifris, the purplish tips swelling up inside her to disproportionate sizes.  A moment later, the vine-dicks explode out twin pillars of ropey seed, painting her inner walls with spunk.  ");
		if (player.cumQ() >= 1000) outputText("She groans and moans as she's filled, her body distending to deal with the unholy amount of seed your cocks can spew.  ");
		outputText("At the same time, both tentacle-shafts curl and piston, winding around in other in the space between your bodies, curling and thrusting to rub every inch of your sensitive, prehensile shafts against Ifris' pussy-walls.  You shake and shudder, feeling more like a tentacle beast than a " + player.mf("man","woman") + ".  ");
	}
	//(Anemone - stinging funtimes)
	else if (player.countCocksOfType(CockTypesEnum.ANEMONE) >= 2) {
		outputText("Both your unusual, aquatic cocks explode inside Ifris, their shafts thickening as the prepare for release.  A moment later, they explode out twin pillars of alabaster cum, painting her inner walls with gooey spunk.  ");
		if (player.cumQ() >= 1000) outputText("She groans and moans as she's filled, her body distending to deal with the unholy amount of seed your cocks can spew.  ");
		outputText("At the same time, your stinging cilia go wild, pricking her inside and out, uncontrollably forcing aphrodisiacs into your partner's shuddering, orgasmic body.  The drugs force her to climb to whole new plateaus of pleasure, making her squeal with unrepentant pleasure.  You convulse and get off even more forcefully from using your strange members in such a way.  ");
	}
	//(Standard)
	else {
		outputText("Both your cocks explode inside Ifris, submitting alabaster pillars to her request for your release.  The red-hued sexpot exhales a happy hum and rocks her hips back and forth, her oily, lubricated holes squeezing your dicks for every drop of delectable seed.  ");
		if (player.cockTotal() > 2) {
			outputText("The ");
			if (player.cockTotal() == 1) outputText("one unbound prick remaining paints the muscular woman's lower back with goo, but she doesn't seem to mind.");
			else outputText("other, unbound pricks paint the muscular woman's lower back in goo, but she doesn't seem to mind.");
			outputText("  ");
		}
	}
	//(ALL GO HERE - NOT NEW PG)
	outputText("She purrs, \"Delightful,\" into your ear and plants a wet kiss on you, surely leaving a dusky, black lip-print on your neck.\n\n");

	outputText("The last few contractions work through you, emptying the last of your load inside Ifris and allowing you to feel utterly, completely at peace.  Sliding up, she lets your slowly-deflating cocks ");
	if (player.dogCocks() >= 2) outputText("noisily pop free");
	else outputText("slide");
	outputText(" from her sperm-glazed snatch and anus.  Her body's warmth vanishes as she stands, and with a wink, she reattaches her bikini bottom, the tight garment moulding to her soaked camel-toe and holding in all of your leavings.  She walks away without another word, ");
	if (player.cumQ() >= 1000) outputText("her body bloated with cum and sloshing audibly with every step");
	else if (player.cumQ() >= 500) outputText("her belly bloated and gurgling with every step");
	else outputText("her body double-stuffed with seed");
	outputText(".  You slump back and breathe heavy, feeling like you've just run a marathon.\n\n");

	outputText("It is some time until you gain the energy to rise.");
	player.changeFatigue(10);
	//Stat changes HERE!
	if (player.str100 < 90) dynStats("str", .75);
	if (player.tou100 < 40) dynStats("tou", .5);
	player.orgasm('Generic');
	//Body changes here
	//Muscleness boost!
	outputText(player.modTone(85,5+rand(5)));
	doNext(camp.returnToCampUseOneHour);
}
	public function ifrisAllOut():void {
		clearOutput();
		outputText("You explain she's in for " + (flags[kFLAGS.IFRIS_SHOWED_OFF] > 0 ? "much more this time" : "more than she expects") + ", giving her a wink as you set all the weight. Raising a brow at you, Ifris is skeptical but very excited. Gripping the bar as you settle onto the bench, you take a few breaths in preparation for the show.");
		outputText("\n\nWith ease, you lift the bar and smoothly carry it from apex down to your face and back again. You demonstrate perfect control despite the visible muscles contracting in your [arms]. While this certainly impresses the devil girl, it's hardly new to her, and she crosses her arms expectantly for what more you have to show. Ready to turn it up a notch, you tell her to get on top of the bar.");
		outputText("\n\n[say: Excuse me?] Ifris says in surprise. She's quite nimble, surely, so keeping herself steady on there should be no problem. You lower the bar close to your chest and invite her on. She hesitates, but gets herself layed upon the bar in short order.");
		outputText("\n\nAs you push the bar up, Ifris shakes a little as she maintains her position, soon chuckling as you raise her a full arm's length into the air. [say: This is impressive, if a bit silly,] she says with a laugh. Though you don't plan to say it out loud, she's adding quite a fair amount of weight, however this is still nothing you can't handle.");
		outputText("\n\nThe sight of her toned body just above you is tantalizing, and as she gazes down at your flexing form beneath her, it's clear she finds you just as tantalizing if not much more. [say: A body as finely-honed as yours deserves to be admired greatly,] Ifris tells you, adequately confirming the efficacy of your display. Feeling the burn, you conclude this would be a good time to rest." + (player.hasCock() ? " Take up her offer to be properly admired?" : ""));
		if (player.hasCock()) {
			menu();
			addNextButton("Sex", ifrisShowerSex).hint("Yeah, fuck Ifris.").disableIf(!player.hasCock(), "This scene requires you to have a cock");
			addNextButton("Nah", ifrisThot).hint("Nah, fuck Ifris.");
		} else doNext(ifrisThot);
	}

	public function ifrisShowerSex():void {
		clearOutput();
		outputText("You push the bar up onto the holder and tell Ifris that, yes, your body does deserve proper admiration. Getting up from the bench, you extend a hand and invite her to join you for the real work-out.");
		outputText("\n\nThe devil hops off the bar and takes your hand. [say: Lead the way.]");
		outputText("\n\nYou bring Ifris into the shower room, dragging her into a stall with you. At your command, as if it were even needed, she strips away her bikini" + (player.isNaked() ? "" : "as you relieve yourself of your own coverings") + ". Garments tossed aside, she throws herself upon your [chest], running a hand along the side of your body. [say: You have such stunning strength in these muscles,] she says alluringly. You clasp your hands on her firm butt, explaining you have more to stun her with than that.");
		outputText("\n\nYour [cock] slips between her thighs, eliciting squirms from her as it rubs against her toned, red flesh. Purring at you, Ifris urges, [say: Then stop teasing and just take what you want!]");
		outputText("\n\nPressing her body against the stall wall, you thrust forward, slamming the length of your dick inside her. " + (player.longestCockLength() < 5 ? "[say: I guess with a few hundred " + (!flags[kFLAGS.USE_METRICS] ? "pounds" : "kilos") + " of force behind it, even a thumbtack is gonna do some damage,] she teases, grinning" : "She grunts and curls her toes as she accepts the forceful intrusion") + ". Her sultry stare begs you for more, which you quickly oblige with another thrust. Ifris wraps her arms around you, feeling every contour of your muscles as you move. [say: I want it as hard as you can give--] she whispers, before being cut off by a kiss. You'll give her what you want to give her.");
		outputText("\n\nWhile you pump faster, the wet slapping noises of your romp is catching the attention of everyone else in the shower room. Most choose to ignore it; however, a few patrons take a peak at the action. Ifris's eyes roll back, her moans making it obvious she isn't going to hide from the spectators. You grip her body tight, feeling the firm give of her trim form, unashamed to be seen dominating a woman with a body like hers. Rhythmically pumping away, you feel your orgasm building.");
		outputText("\n\nRe-adjusting as she has gradually slid down, you push Ifris higher up against the wall, shoving your [cock] directly up inside her as you get comfortable. Her insides writhe and shake in response, already having an orgasm of her own. The red devil screams out her ecstasy, breaking into groans and yelps as you fuck her harder. Soon, your loins tense up and fire shot after shot of semen inside her, one after another, spattering against her cervix. " + (flags[kFLAGS.WATERSPORTS_ENABLED] > 0 ? "Under the over-stimulation, her muscles begin giving out, and she wets herself on you, spraying warm fluid over the base of your cock, trailing pee down your [legs] to the drain below" : "She shudders and shakes, thrown into bliss by the seed of a powerful [man] filling her") + ". You take a breather and set the mind-numbed athlete down. Her eyes glaze over as she half-consciously looks up at you.");
		outputText("\n\nYou wind down from the exertion with a relaxing rinse in the shower. The water hitting Ifris does little to shake her from her orgasmic stupor. When you feel properly rinsed, you exit the stall and gather your things before leaving the gym behind.");
		player.orgasm('Dick');
		doNext(camp.returnToCampUseOneHour);
	}

	public function ifrisThot():void {
		clearOutput();
		outputText("Setting the bar, and the woman, up onto its waiting position, you get back up from the bench. You thank the devil for her admiration and turn to leave" + (player.hasCock() ? ". Ifris clambers over to stop you. [say: Hold on! Don't you... want more?]" : ", feeling her eyes linger on your body as you walk away. [say: Any time, darling... I love to see what you can do.]"));
		outputText("\n\nYou just want to go home, but it was a nice work-out. Heading out of the gym, you believe you hear a whimper from her as she sits back down in a huff.");
		doNext(camp.returnToCampUseOneHour);
	}
}
}

license: unknown


code:
package classes.Scenes.Places.TelAdre {
import classes.ItemType;
import classes.Scenes.Inventory;

/**
 * Updated strings
 * @ContentAuthor Starglider
 */
public class JewelryShop extends Shop {
	private var firstEntry:Boolean = true;

	public override function enter():void {
		spriteSelect(sprite);
		clearOutput();
		if(firstEntry){
			outputText("Among the many markets of Tel'Adre, one oddity manages to snare " +
					"your attention. A simple stall with an askew sign reading 'Jewels!' in calamitous cursive. Its wares are " +
					"mostly shrouded by a hole-riddled awning, though small rays of desert sun make use of the tears to " +
					"playfully dazzle a collection of tarnished treasures. Metal-laced glassware, necklaces, rings, baubles, " +
					"clasps and more are haphazardly hung from the latticed walls.\n\n" +
					"In the uneven glow of glinting glassware sits a short figure, no more than 4 feet tall. His appearance is " +
					"shrouded by the hood and wraps of an all-concealing shawl, the opaque fabric patterned with distant " +
					"dunes and trimmed in a glimmer of gold-threaded tassles.\n\n" +
					"Your staring is interrupted by a passerby eclipsing your vision, and before you can even consider the " +
					"interruption you notice the one manning the stall is gone. Not a blink of the eye later and your wrist is " +
					"grasped by spindly fingers covered in a ratty, dirty gauze, the slightest hint of emerald scales revealing " +
					"themselves through cracks and tears. Despite the initial urge to stand your ground, the cloaked figure's " +
					"two-handed grip is surprisingly overbearing for such a short man. \"Ah! Don't be ssshy! Don't be ssshy... " +
					"I could sssee your interesst, a [man] with a sssharp eye for beauty!\" He waffles disarmingly as he " +
					"drags you to the stall, his short, strained movements causing his impressive collection of bangles to " +
					"clatter together noisily. Once getting you off the street, he hops onto the rackety counter, which " +
					"miraculously doesn't fall apart.\n\n" +
					"He gestures around to the multitude of adornments hanging in the stall. \"Beautiful baubless and " +
					"gleaming gemstoness, only the finesst jewelry for the presstigious patron! Keheh!\" The merchant " +
					"cackles as he grinds his gauzy gloves together, creating a rather discomforting, scratchy sound.");
			firstEntry =false;
		} else {
			outputText("The jewelry merchant perks his head up a little as he sees you " +
					"approach, hailing your visit with a welcoming wave. \"Kehehehe! Greetingss again, traveler. " +
					"Ssscrounged up the gemss to adorn yoursself with my waress? Let uss hope sso...\" He goes silent, " +
					"knitting his gauzed fingers together as he observes your perusal.");
		}
		outputText("\n\n");
		doNext(inside);
	}

	protected override function inside():void {
		clearOutput();
		outputText("\"So what will it be?\"");
		menu();
		addButton(0, "Normal Rings", normalRings);
		addButton(1, "Special Rings", specialRings);
		addButton(2, "Enchanted Rings",enchantedRings);
		addButton(5, "Jewelry Box",curry(confirmBuy, null, 500, Inventory.STORAGE_JEWELRY_BOX));
		addButton(14, "Leave", telAdre.telAdreMenu);
	}
	protected override function confirmBuy(itype:ItemType = null, priceOverride:int = -1, keyItem:String = ""):void {
		clearOutput();
		if (isJewelryBox(keyItem)) {
			if (player.hasKeyItem(Inventory.STORAGE_JEWELRY_BOX)) {
				outputText("You already own a jewelry box!");
				doNext(inside);
				return;
			}
			outputText("Your eyes rest on the shelf beyond the merchant, this one stocked with small " +
					"wooden boxes. The merchant, following your eyes with greed in his own, snatches a box off the shelf " +
					"and strokes its surface gently, producing a light hum \"Ah! Keen again, what proud jewelry owner " +
					"would be without ssafe sstorage for their pricelesss gemss? Not you, not for a ssmall fee! Yess, with " +
					"one of thesse lockboxess, no marauder or ssilly fox in tightss wielding a kebab will ssnatch from you " +
					"your preciouss accesssoriess. If only chasstity beltss were as sstrong as my boxess... Ah, wouldn't be " +
					"much fun, though, would it? Keheheheh! 500 gemss!\"");
		} else {
			outputText("The merchant stares at your hands as you point out the item with an almost " +
					"palpable excitement. \"Ah, excellent choice!\" He scoops up the accessory and hefts it a couple times in " +
					"his palm, \"Keheh, I'd be willing to part with it for, ssay, "+itype.value+" gems?\"");
		}
		super.confirmBuy(itype, priceOverride, keyItem);
	}

	protected override function noBuyOption(itype:ItemType = null, keyItem:String = ""):void {
		clearOutput();
		if(isJewelryBox(keyItem)){
			outputText("You decline with a firm hand and a shake of your head, prompting the " +
					"merchant to whisper a growl. \"Bah, fine! You'd besst have a good hiding place, then.\" He leans a little " +
					"beyond the counter on his spindly arms, taking a look at your [butt]. He's stoic at first, " +
					"but he settles down to the tune of a chuckle.");
		} else {
			outputText("You decline the offer, causing the merchant to scoff and cross his arms. " +
					"\"Mmn, dissappointing. Kehehehe, ssuit yourself!\"");
		}
		doNext(inside);
	}

	protected override function debit(itype:ItemType = null, priceOverride:int = -1, keyItem:String = ""):void {
		if (isJewelryBox(keyItem)) {
			outputText("You nod a bit skeptically, but hand over the 500 gems. It's worth the " +
					"organizational value. You reach out to take the box from the counter, but he hisses rather alarmingly, " +
					"moving an arm to block you. Taken aback, you watch on as the odd little merchant checks the gem's " +
					"authenticity with dice-rolling and tapping. \"Sseemsss all's in order. Thank you kindly! Keheheh...\"\n\n" +
					"More carefully, you pick up the box without hassle and stow it away as the merchant does the same " +
					"with your gems");
		} else {
			outputText("The minute you finish counting out your gems, he snatches them from " +
					"your hand and replaces it with your purchase, quietly snickering to himself as he cradles the gems in " +
					"both hands.");
		}
		super.debit(itype, priceOverride, keyItem);
	}

	private function normalRings():void {
		clearOutput();
		outputText("A standard collection of jewelry hangs from small pegs on the left side of the " +
				"stall, gemmed and set in all manner of colors. The merchant taps his fingers together impatiently as you " +
				"peruse, giddily whispering to himself. ");
		menu();
		var button:int = 0;
		addButton(button++, jewelries.SILVRNG.shortName, confirmBuy, jewelries.SILVRNG).hint(jewelries.SILVRNG.description);
		addButton(button++, jewelries.GOLDRNG.shortName, confirmBuy, jewelries.GOLDRNG).hint(jewelries.GOLDRNG.description);
		addButton(button++, jewelries.PLATRNG.shortName, confirmBuy, jewelries.PLATRNG).hint(jewelries.PLATRNG.description);
		addButton(button++, jewelries.DIAMRNG.shortName, confirmBuy, jewelries.DIAMRNG).hint(jewelries.DIAMRNG.description);
		addButton(14, "Back", inside);
	}
	private function specialRings():void {
		clearOutput();
		outputText(" On the far wall is a shelf of rings hidden behind an out of place cabinet of " +
				"glass. Tags of papyrus paper stricken with odd arcane symbols are plastered all over the transparent " +
				"surface, almost concealing the collection within.\n\n" +
				"The merchant notices your staring and cackles, motioning to the display. \"Ahh! An eye as sssharp as a " +
				"blade! You've picked the most intriguing dissplay in my sstore! Not that the resst of my waress aren't " +
				"intriguing. Thiss little duo hass a different story, however.\" He taps the glass on the side before one of " +
				"the rings, a familiar dark stone stricken with cracks of red. \"They're part of a sset, remnantss of a " +
				"tragedy you ssee. Legend hass it thesse rings were once beautiful maidenss! Thiss one here, jealouss of " +
				"itss counterpart, a bride to be. Before the ceremony, the lecherouss and jealouss maiden asssailed the " +
				"groom and sstole hiss purity. The bride to be, obsesssed with purity, sssacrificed hersself for a cursse, " +
				"turning both of their sssoulss to sstone. And so, this one here is the bride.\" His hand moves a few " +
				"inches and taps the glass again, a contrastingly smooth stone of pearly white just beside it. " +
				"\"Keheheheh... I wouldn't sssell a sssoul for cheap, would you? Let's start at 3,000.\"");
		menu();
		var button:int = 0;
		addButton(button++, jewelries.LTHCRNG.shortName, confirmBuy, jewelries.LTHCRNG).hint(jewelries.LTHCRNG.description);
		addButton(button++, jewelries.PURERNG.shortName, confirmBuy, jewelries.PURERNG).hint(jewelries.PURERNG.description);
		addButton(14, "Back", inside);
	}
	private function enchantedRings():void{
		clearOutput();
		outputText("Frankly, it's just a collection of tarnished silver and scratchy  " +
				"gold. You'd probably find better jewelry on corpses. The peddler catches on, swatting a hanging " +
				"necklace away from his wrapped " + (noFur() ? "face" : "snout") + ". \"Bah! Of coursse, of coursse... Nothing in the dissplay ssstock " +
				"would sssuit you!\" He reaches beneath the counter and pauses for a dramatic speech. \"You're a traveler " +
				"of much mysstery and power, I can smell it on you. Sssorceriess sssurely ressonate with your sssoul!\" " +
				"He delivers a small wooden box to the surface.\n\n" +
				"The box actually looks better than the jewelry you saw before. The wood is stained a brilliant color, and " +
				"laquered smooth like glass. The golden hinges are outlined in silver and shine brilliantly, the matching " +
				"locks in the front forming three identical sundials. With a single wrapped finger, the peculiar merchant " +
				"adjusts the dials, and with a subtle 'click' the box opens on its own. All the tiny drawers within unfold " +
				"like a pop-up book, revealing a small collection of rings. Their craftsmanship and elegance alone are " +
				"jaw-dropping, but there's something less tangibly appealing about them.\n\n" +
				"Seeing your expression, the shrouded man wheezes and glides a hand over the specialty wares. \"The " +
				"powerful are invigorated by thesse ssstoness, but do not be brassh! Thesse jewelss compliment their " +
				"bearer in wayss you may not be expecting! Kehehehehe...\" He fades into a bit of a cough, his reptillian " +
				"eyes revealed for but a moment.\n\n" +
				"Which tier of ring are you looking for?");
		menu();
		addButton(0, "Tier 1 rings", tieredRings, 1);

		if (player.level >= 10 || game.time.days >= 100) {
			addButton(1, "Tier 2 rings", tieredRings,2);
		}

		if (player.level >= 20 || game.time.days >= 200) {
			addButton(2, "Tier 3 rings", tieredRings,3);
		}

		addButton(14,"Back",inside);
	}
	private function tieredRings(tier:int):void{
		menu();
		var button:int = 0;
		addButton(button++, jewelries["CRIMRN"+tier].shortName, confirmBuy, jewelries["CRIMRN"+tier]).hint(jewelries["CRIMRN"+tier].description);
		addButton(button++, jewelries["FERTRN"+tier].shortName, confirmBuy, jewelries["FERTRN"+tier]).hint(jewelries["FERTRN"+tier].description);
		addButton(button++, jewelries["ICE_RN"+tier].shortName, confirmBuy, jewelries["ICE_RN"+tier]).hint(jewelries["ICE_RN"+tier].description);
		addButton(button++, jewelries["CRITRN"+tier].shortName, confirmBuy, jewelries["CRITRN"+tier]).hint(jewelries["CRITRN"+tier].description);
		addButton(button++, jewelries["REGNRN"+tier].shortName, confirmBuy, jewelries["REGNRN"+tier]).hint(jewelries["REGNRN"+tier].description);
		addButton(button++, jewelries["LIFERN"+tier].shortName, confirmBuy, jewelries["LIFERN"+tier]).hint(jewelries["LIFERN"+tier].description);
		addButton(button++, jewelries["MYSTRN"+tier].shortName, confirmBuy, jewelries["MYSTRN"+tier]).hint(jewelries["MYSTRN"+tier].description);
		addButton(button++, jewelries["POWRRN"+tier].shortName, confirmBuy, jewelries["POWRRN"+tier]).hint(jewelries["POWRRN"+tier].description);
		addButton(14, "Back", enchantedRings);

	}

	/**
	 * Check if the passed key item is a Jewelry Box
	 * @return true if a Jewelry Box
	 */
	private function isJewelryBox(keyItem:String):Boolean
	{
		return keyItem === Inventory.STORAGE_JEWELRY_BOX;
	}
}
}