code:
package com.lilithsthrone.game.dialogue.places.dominion.harpyNests;

import com.lilithsthrone.game.character.body.valueEnums.Femininity;
import com.lilithsthrone.game.character.effects.Perk;
import com.lilithsthrone.game.character.fetishes.Fetish;
import com.lilithsthrone.game.character.npc.dominion.HarpyNympho;
import com.lilithsthrone.game.character.npc.dominion.HarpyNymphoCompanion;
import com.lilithsthrone.game.character.quests.Quest;
import com.lilithsthrone.game.character.quests.QuestLine;
import com.lilithsthrone.game.dialogue.DialogueFlagValue;
import com.lilithsthrone.game.dialogue.DialogueNode;
import com.lilithsthrone.game.dialogue.responses.Response;
import com.lilithsthrone.game.dialogue.responses.ResponseCombat;
import com.lilithsthrone.game.dialogue.responses.ResponseSex;
import com.lilithsthrone.game.dialogue.utils.UtilText;
import com.lilithsthrone.game.inventory.enchanting.ItemEffectType;
import com.lilithsthrone.game.inventory.item.AbstractItemType;
import com.lilithsthrone.game.inventory.item.ItemType;
import com.lilithsthrone.game.sex.Sex;
import com.lilithsthrone.game.sex.SexAreaOrifice;
import com.lilithsthrone.game.sex.managers.universal.SMGeneric;
import com.lilithsthrone.main.Main;
import com.lilithsthrone.utils.Util;
import com.lilithsthrone.world.Weather;

/**
 * @since 0.1.8
 * @version 0.3.5.5
 * @author Innoxia
 */
public class HarpyNestNympho {

	public static final DialogueNode HARPY_NEST_NYMPHO = new DialogueNode("Harpy nest", ".", false) {

		@Override
		public int getSecondsPassed() {
			return 60;
		}

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return UtilText.parseFromXMLFile("places/dominion/harpyNests/nympho", "HARPY_NEST_NYMPHO");
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				if(!Main.game.isExtendedWorkTime()) {
					if(Main.game.getDialogueFlags().values.contains(DialogueFlagValue.bimboEncountered)) {
						return new Response("Approach [harpyNympho.name]", "Both [harpyNympho.name] and her flock are sleeping in the buildings below her nest. You'll have to come back during the day if you want to speak with her.", null);
					} else {
						return new Response("Approach matriarch", "The matriarch and her flock are sleeping in the buildings below her nest. You'll have to come back during the day if you want to speak with her.", null);
					}

				} else if (Main.game.getCurrentWeather()==Weather.MAGIC_STORM) {
					if(Main.game.getDialogueFlags().values.contains(DialogueFlagValue.nymphoEncountered)) {
						return new Response("Approach [harpyNympho.name]", "If you want to talk to [harpyNympho.name], you'll have to come back after the arcane storm has passed.", null);
					} else {
						return new Response("Approach matriarch", "If you want to talk to the matriarch, you'll have to come back after the arcane storm has passed.", null);
					}

				} else if(!Main.game.getPlayer().hasQuest(QuestLine.SIDE_HARPY_PACIFICATION)) {
					return new Response("Approach [harpyNympho.name]", "You have no need to talk to the matriarch of this nest.", null);

				} else {
					if(Main.game.getDialogueFlags().values.contains(DialogueFlagValue.nymphoEncountered)) {
						return new Response("Approach [harpyNympho.name]", "Walk to the centre of the nest and talk to [harpyNympho.name].", HARPY_NEST_NYMPHO_APPROACH) {
							@Override
							public void effects() {
								Main.game.getNpc(HarpyNympho.class).ingestFluid(Main.game.getNpc(HarpyNymphoCompanion.class), Main.game.getNpc(HarpyNymphoCompanion.class).getCum(), SexAreaOrifice.VAGINA, 250);
							}
						};
					} else {
						return new Response("Approach matriarch", "Walk to the centre of the nest and talk to the matriarch.", HARPY_NEST_NYMPHO_APPROACH) {
							@Override
							public void effects() {
								Main.game.getNpc(HarpyNympho.class).ingestFluid(Main.game.getNpc(HarpyNymphoCompanion.class), Main.game.getNpc(HarpyNymphoCompanion.class).getCum(), SexAreaOrifice.VAGINA, 250);
							}
						};
					}
				}

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_APPROACH = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			if(Main.game.getDialogueFlags().values.contains(DialogueFlagValue.nymphoEncountered)) {
				if(Main.game.getDialogueFlags().values.contains(DialogueFlagValue.nymphoPacified)) {
					return "
"
							+ "Deciding to pay [harpyNympho.Name] another visit, you set off towards the flash of pink in the centre of the nest."
							+ " As you make your way towards the sex-obsessed matriarch, you get a good look at the harpies that make up her flock."
							+ " Just as you've seen before, the vast majority of them are rather plain-looking by harpy standards; revealing them as males."
						+ "
"
						+ "
"
							+ "As you pass the groups of loitering harpies, you overhear snippets of conversation,"
							+ "[style.speechFeminine(...she let me unload in her three times last night...)]
"
							+ "[style.speechFeminine(...I love it when she's in the mood to suck cock...)]
"
							+ "[style.speechFeminine(...and then she cleaned me off with her mouth...)]
"
						+ "
"
						+ "
"
							+ "Smirking as you push through the crowds, you soon find yourself standing before the harpy they're all talking about."
							+ " Moaning and squealing in delight, [harpyNympho.name] is once again riding her favourite boy-toy, [harpyNymphoCompanion.name]."
							+ " As you come to a halt in front of them, they both suddenly let out an exceptionally loud scream, and you look down to see a slick trail of fresh cum oozing out of [harpyNympho.namePos] pussy."
							+ " After taking a few moments to catch her breath, she lifts herself up, allowing the hot load to drool out of her well-used cunt, and, leaning down to deliver a passionate kiss on her partner's lips, she calls out,"
							+ " [harpyNympho.speech(Who's next?!)]"
						+ "
"
						+ "
"
							+ "Stepping forwards, you make yourself known,"
							+ " [pc.speech(I think that would be me!)]"
						+ "
"
						+ "
"
							+ "Upon hearing your voice, [harpyNympho.name] spins round, letting out an exited squeal,"
							+ " [harpyNympho.speech("+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+"! You're back! Let's have some fun!)]"
						+ "
"
						+ "
"
							+ "Rushing towards you, [harpyNympho.name] falls to her knees."
							+ " Shuffling forwards, she looks up into your [pc.eyes],"
							+ " [harpyNympho.speech(Please! "+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+"! Let's fuck!)]"
						+ "
";

				} else {
					return "
"
							+ "Deciding to pay [harpyNympho.Name] another visit, you set off towards the flash of pink in the centre of the nest."
							+ " As you make your way towards the sex-obsessed matriarch, you get a good look at the harpies that make up her flock."
							+ " Just as you've seen before, the vast majority of them are rather plain-looking by harpy standards; revealing them as males."
						+ "
"
						+ "
"
							+ "As you pass the groups of loitering harpies, you overhear snippets of conversation,"
							+ "[style.speechFeminine(...she let me unload in her three times last night...)]
"
							+ "[style.speechFeminine(...I love it when she's in the mood to suck cock...)]
"
							+ "[style.speechFeminine(...and then she cleaned me off with her mouth...)]
"
						+ "
"
						+ "
"
							+ "Pushing through the crowds, you soon find yourself standing before the harpy they're all talking about."
							+ " Moaning and squealing in delight, [harpyNympho.name] is once again riding her favourite boy-toy, [harpyNymphoCompanion.name]."
							+ " As you come to a halt in front of them, they both suddenly let out an exceptionally loud scream, and you look down to see a slick trail of fresh cum oozing out of [harpyNympho.namePos] pussy."
							+ " After taking a few moments to catch her breath, she lifts herself up, allowing the hot load to drool out of her well-used cunt, and, leaning down to deliver a passionate kiss on her partner's lips, she calls out,"
							+ " [harpyNympho.speech(Who's next?!)]"
						+ "
"
						+ "
"
							+ "Stepping forwards, you make yourself known,"
							+ " [pc.speech(I think that would be me!)]"
						+ "
"
						+ "
"
							+ "Upon hearing your voice, [harpyNympho.name] spins around, and, catching sight of you, she lets out a frustrated sigh,"
								+ (Main.game.getPlayer().getFemininityValue()>Femininity.FEMININE_STRONG.getMinimumFemininity()
									?" [harpyNympho.speech(Eugh! It's you again! You'd better not be trying to steal any of my playthings!)]"
									:" [harpyNympho.speech(Eugh! It's you again?! What do you want this time?!)]")
						+ "
"
						+ "
"
							+ "Stepping forwards, [harpyNymphoCompanion.name] moves to protect her matriarch."
							+ " [harpyNymphoCompanion.speech(You heard her! What do you want?!)]"
						+ "
";
				}

			} else {
				return "
"
						+ "Recognising this as one of the nests that you agreed to pacify, you set off towards the flash of pink in the centre of the nest."
						+ " As you make your way across the crowded platform, you get a good look at the harpies that make up this flock."
						+ " Just as you saw from the outskirts, the vast majority of them are rather plain-looking by harpy standards; revealing them as males."
					+ "
"
					+ "
"
						+ "As you pass the groups of loitering harpies, you overhear snippets of conversation,"
						+ "[style.speechFeminine(...she let me unload in her three times last night...)]
"
						+ "[style.speechFeminine(...I love it when she's in the mood to suck cock...)]
"
						+ "[style.speechFeminine(...and then she cleaned me off with her mouth...)]
"
					+ "
"
					+ "
"
						+ "Pushing through the crowds, you soon find yourself standing before the harpy they're all talking about."
						+ " Moaning and squealing in delight, you see the matriarch of this nest unashamedly riding one of her boy-toys."
						+ " As you come to a halt in front of them, they both suddenly let out an exceptionally loud scream, and you look down to see a slick trail of fresh cum oozing out of the pink-feathered matriarch's pussy."
						+ " After taking a few moments to catch her breath, she lifts herself up, allowing the hot load to drool out of her well-used cunt, and, leaning down to deliver a passionate kiss on her partner's lips, she moans,"
						+ " [harpyNympho.speech(Ah, [harpyNymphoCompanion.Name]! I love your cock most of all!)]"
					+ "
"
					+ "
"
						+ "[harpyNymphoCompanion.speech(I love making you happy, [harpyNympho.Name],)] [harpyNymphoCompanion.Name] replies."
						+ " [harpyNymphoCompanion.speech(Do you want to go again?)]"
					+ "
"
					+ "
"
						+ "Deciding that this is an opportune moment to make yourself known, you step forwards and clear your throat."
						+ " [pc.speech(Before you do, I was hoping to talk with you for a moment.)]"
					+ "
"
					+ "
"
						+ "Upon hearing your voice, [harpyNympho.name] spins around, and, catching sight of you, she lets out a frustrated sigh."
							+ (Main.game.getPlayer().getFemininityValue()>Femininity.FEMININE_STRONG.getMinimumFemininity()
								?" [harpyNympho.speech(Who are you?! What are you doing here?! You'd better not be trying to steal any of my playthings!)]"
								:" [harpyNympho.speech(Who are you?! What are you doing here?! What do you want?!)]")
					+ "
"
					+ "
"
						+ "Stepping forwards, [harpyNymphoCompanion.name] moves to protect her matriarch."
						+ " [harpyNymphoCompanion.speech(You heard her! What do you want?!)]"
					+ "
";
			}
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if(Main.game.getDialogueFlags().values.contains(DialogueFlagValue.nymphoPacified)) {
				if (index == 1) {
					return new ResponseSex("Sex", "Have dominant sex with [harpyNympho.name].",
							true, false,
							new SMGeneric(
									Util.newArrayListOfValues(Main.game.getPlayer()),
									Util.newArrayListOfValues(Main.game.getNpc(HarpyNympho.class)),
							null,
							null), HARPY_NEST_NYMPHO_AFTER_SEX, "
"
								+ "Eager to help satisfy [harpyNympho.namePos] craving for sex, you reach down and grab her wings."
								+ " Pulling her to her feet, you step forwards, before planting a deep kiss on her [harpyNympho.lips+]."
							+ "
"
							+ "
"
								+ "[harpyNympho.Name] responds to your dominant move by letting out a excited squeal, and, enthusiastically wrapping her wings around your back, she passionately starts returning your kiss..."
							+ "
");

				} else if (index == 0) {
					return new Response("Leave", "Tell [harpyNympho.name] that you'll be back later.", HARPY_NEST_NYMPHO) {
						@Override
						public void effects() {
							Main.game.getTextStartStringBuilder().append(
									"
"
										+ "Deciding that you don't want to talk to [harpyNympho.name] right now, you turn around and take your leave."
										+ " You hear [harpyNympho.name] sighing to [harpyNymphoCompanion.name] as you walk away,"
										+ " [harpyNympho.speech(Aww! Well, looks like you get to have another go!)]"
									+ "
"
									+ "
"
										+ "Ignoring her words, you continue back across the platform, quickly finding yourself on the outskirts of the nest once again."
									+ "
");
						}
					};

				} else {
					return null;
				}

			} else {
				if (index == 1) {
					return new Response("Talk", "Try to convince [harpyNympho.name] to calm down.", HARPY_NEST_NYMPHO_TALK) {
						@Override
						public void effects() {
							Main.game.getDialogueFlags().values.add(DialogueFlagValue.nymphoEncountered);
						}
					};

				} else if (index == 2) {
					return new Response("Nympho Queen", "You feel sorry for this matriarch, only getting to have sex with the same males over and over again. Tell her how a real nympho behaves!", HARPY_NEST_NYMPHO_QUEEN,
							null, null, Util.newArrayListOfValues(Perk.NYMPHOMANIAC), Femininity.FEMININE_STRONG, null) {
						@Override
						public void effects() {
							Main.game.getDialogueFlags().values.add(DialogueFlagValue.nymphoEncountered);
							Main.game.getDialogueFlags().values.add(DialogueFlagValue.nymphoPacified);
							Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().addItem(AbstractItemType.generateItem(ItemType.HARPY_MATRIARCH_NYMPHO_LOLLIPOP), false, true));

							if(Main.game.getPlayer().getQuest(QuestLine.SIDE_HARPY_PACIFICATION) == Quest.HARPY_PACIFICATION_ONE) {
								Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_HARPY_PACIFICATION, Quest.HARPY_PACIFICATION_TWO));

							} else if(Main.game.getPlayer().getQuest(QuestLine.SIDE_HARPY_PACIFICATION) == Quest.HARPY_PACIFICATION_TWO) {
								Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_HARPY_PACIFICATION, Quest.HARPY_PACIFICATION_THREE));

							} else if(Main.game.getPlayer().getQuest(QuestLine.SIDE_HARPY_PACIFICATION) == Quest.HARPY_PACIFICATION_THREE) {
								Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_HARPY_PACIFICATION, Quest.HARPY_PACIFICATION_REWARD));
							}
						}
					};

				} else if (index == 3) {
					return new Response("Call her ugly", "You know that this would be a terrible idea...", HARPY_NEST_NYMPHO_UGLY) {
						@Override
						public void effects() {
							Main.game.getDialogueFlags().values.add(DialogueFlagValue.nymphoEncountered);
						}
						@Override
						public boolean isCombatHighlight() {
							return true;
						}
					};

				} else if (index == 0) {
					return new Response("Leave", "Tell [harpyNympho.name] that you'll be back later.", HARPY_NEST_NYMPHO) {
						@Override
						public void effects() {
							Main.game.getDialogueFlags().values.add(DialogueFlagValue.nymphoEncountered);
							Main.game.getTextStartStringBuilder().append("");
						}
					};

				} else {
					return null;
				}
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_TALK = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
						+ "[pc.speech(What I want,)] you say,"
						+ " [pc.speech(is for you to get your nest under control. The Enforcers are struggling to keep the peace, and it's members of your nest who are responsible!)]"
					+ "
"
					+ "
"
						+ "[harpyNympho.speech(Well it's not my fault if some of my playthings want to have a bit of extra fun elsewhere!)] [harpyNympho.name] replies."
						+ " [harpyNympho.speech(And anyway, you're kind of interrupting things here, so how about you turn around and go bother someone else! [harpyNymphoCompanion.Name]! Why don't you show this rude [pc.race] the way out!)]"
					+ "
"
					+ "
"
						+ "As [harpyNymphoCompanion.name] moves forwards, you realise that [harpyNympho.name] isn't going to listen to you."
						+ " You'll either have to think of another way to convince these harpies to calm down, or make them calm down by using force."
					+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				return new Response("Nympho Queen", "You feel sorry for this matriarch, only getting to have sex with the same males over and over again. Tell her how a real nympho behaves!", HARPY_NEST_NYMPHO_QUEEN,
						null, null, Util.newArrayListOfValues(Perk.NYMPHOMANIAC), Femininity.FEMININE_STRONG, null) {
					@Override
					public void effects() {
						Main.game.getDialogueFlags().values.add(DialogueFlagValue.nymphoPacified);
						Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().addItem(AbstractItemType.generateItem(ItemType.HARPY_MATRIARCH_NYMPHO_LOLLIPOP), false, true));

						if(Main.game.getPlayer().getQuest(QuestLine.SIDE_HARPY_PACIFICATION) == Quest.HARPY_PACIFICATION_ONE) {
							Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_HARPY_PACIFICATION, Quest.HARPY_PACIFICATION_TWO));

						} else if(Main.game.getPlayer().getQuest(QuestLine.SIDE_HARPY_PACIFICATION) == Quest.HARPY_PACIFICATION_TWO) {
							Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_HARPY_PACIFICATION, Quest.HARPY_PACIFICATION_THREE));

						} else if(Main.game.getPlayer().getQuest(QuestLine.SIDE_HARPY_PACIFICATION) == Quest.HARPY_PACIFICATION_THREE) {
							Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_HARPY_PACIFICATION, Quest.HARPY_PACIFICATION_REWARD));
						}
					}
				};

			} else if (index == 2) {
				return new Response("Force compliance", "If you want these harpies to chill out, it looks as though you'll have to do it by force...", HARPY_NEST_NYMPHO_FIGHT) {
					@Override
					public boolean isCombatHighlight() {
						return true;
					}
				};

			} else if (index == 0) {
				return new Response("Leave", "Tell [harpyNympho.name] that you'll be back later.", HARPY_NEST_NYMPHO) {
					@Override
					public void effects() {
						Main.game.getTextStartStringBuilder().append(
								"
"
									+ "Deciding that now isn't the best time to start a confrontation, you turn around and take your leave."
									+ " You hear [harpyNympho.name] complaining to [harpyNymphoCompanion.name] as you walk away,"
									+ " [harpyNympho.speech(Well that was a waste of our time! Come on [harpyNymphoCompanion.name], this time I want you to use my mouth!)]"
								+ "
"
								+ "
"
									+ "Ignoring her words, you continue back across the platform, quickly finding yourself on the outskirts of the nest once again."
								+ "
");
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_UGLY = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
						+ "Realising that you're going to have to force [harpyNympho.name] to get her nest under control, you decide to draw her into a confrontation,"
						+ " [pc.speech(Well, if you aren't going to calm your nest down, can you at least agree to put up some walls around your nest?"
						+ " It's not nice having to see a harpy as ugly as you every time I walk past your nest.)]" //Innoxia's next-level witticisms!
					+ "
"
					+ "
"
						+ "[harpyNympho.Name] lets out a furious scream, and, flapping her wings, she shouts out to her companion, "
						+ "[harpyNympho.speech([harpyNymphoCompanion.Name]! Get [pc.herHim]! Get [pc.herHim]! That fucker! [pc.She] said I was ugly!)]"
					+ "
"
					+ "
"
						+ "Looking almost as furious as [harpyNympho.name] does, [harpyNymphoCompanion.name] jumps forwards, eager to please her matriarch as she launches into a furious assault."
					+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				return new ResponseCombat("Fight", "[harpyNymphoCompanion.Name] rushes to do her matriarch's bidding!", Main.game.getNpc(HarpyNymphoCompanion.class));

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_QUEEN = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() { // Mock her for only having one partner at once, she gets flustered, you describe multiple harpies fucking her, she breaks and falls to her knees admitting that you're better than she is
			return "
"
					+ "[pc.speech(So, do you only fuck one of your little boy-toys here at a time?)] you ask in a derisory tone."
					+ " [pc.speech(Because you know you could be doing a lot more than that, right?)]"
				+ "
"
				+ "
"
					+ "For a moment, [harpyNympho.name] seems to be caught off guard, and stumbles over her words as she responds,"
					+ " [harpyNympho.speech(W-Well, I mean, I like to make each harpy feel special!)]"
				+ "
"
				+ "
"
					+ "The murmurs of conversation that had been surrounding you up until this point start to fade away, and you realise that the crowds of male harpies all around you are listening in closely."
					+ " From the moment you stepped foot inside [harpyNympho.namePos] nest, you could feel her flock's gaze resting on your beautiful figure, and now, loudly critiquing their matriarch's sexual skills,"
						+ " you're getting their full attention."
				+ "
"
				+ "
"
					+ "Striking the most sensual pose you can muster, you continue,"
					+ " [pc.speech(You know, you're hoarding all these gorgeous harpies here for your own personal use, but you're only willing to fuck them one at a time?!"
					+ " That's kind of unfair, don't you all agree?)]"
				+ "
"
				+ "
"
					+ "Turning to address the crowd as you ask that last question, the entire flock responds by calling out in agreement."
					+ " Your beautiful features and potent arcane aura are obviously having a strong effect on these harpies, which, combined with talking about sex in such an open manner, has turned them over to your side."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(But, w-what should I be doing then?)] [harpyNympho.name] nervously asks."
					+ " [harpyNympho.speech(I didn't realise I was being unfair...)]"
				+ "
"
				+ "
"
					+ "[pc.speech(Oh, there's lots of things you could be doing,)] you say, walking closer to her."
					+ " [pc.speech(like having your pussy, ass and mouth all used at the same time. Or allowing your nest to run a train on your slutty little cunt here.)]"
				+ "
"
				+ "
"
					+ "As you say that, you reach down and grab [harpyNympho.namePos] exposed pussy."
					+ " She lets out a little squeak, and, leaning into you, moans,"
					+ " [harpyNympho.speech(Yes... I'll do that... What else?)]"
				+ "
"
				+ "
"
					+ "[pc.speech(I think it's obvious by now what you need to do,)] you moan into her ear."
					+ " [pc.speech(Kneel down and accept that I'm the one in charge here.)]"
				+ "
"
				+ "
"
					+ "Realising that her flock has been mesmerised by your words, [harpyNympho.name] falls down onto her knees before you."
					+ " Looking up with big, lust-filled eyes, she moans, [harpyNympho.speech("+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+", please teach me!"
							+ " I'll calm the flock down for you! Please "+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+", tell me what to do!)]"
				+ "
"
				+ "
"
					+ "You can't help but let out a little laugh as the matriarch submits to you."
					+ " [pc.speech(Good girl! You'll do exactly as I say from now on, understood?!)]"
				+ "
"
				+ "
"
					+ "[harpyNympho.Name] shuffles closer, continuing to let out little moaning noises as she responds,"
					+ " [harpyNympho.speech(Yes "+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+"! I'll do what you say!"
							+ " Please, "+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+", I have something for you!)]"
				+ "
"
				+ "
"
					+ "Producing a cock-shaped lollipop, [harpyNympho.name] holds it out towards you."
					+ " [harpyNympho.speech("+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+", this will make you look like me! I-If you want to look like me, that is...)]"
					+ " You take the lollipop in recognition of [harpyNympho.namePos] submission, but you're unsure whether you'll actually use it..."
				+ "
"
				+ "
"
					+ "[pc.speech(Good girl!)] you say. [pc.speech(Now, you're going to get your nest to calm down, aren't you?)]"
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Yes "+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+"! I'll be able to relieve all their stress if I start letting them use me all at once!)]"
				+ "
"
				+ "
"
					+ "Thanks to your own obsession with sex, your powerful arcane aura, and your good looks, you've been able to subdue [harpyNympho.namePos] nest without fighting!"
					+ " Looking down at the still-moaning matriarch, you wonder if you should give her some one-to-one tuition..."
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			 if (index == 1) {
				return new ResponseSex("Sex", "Have dominant sex with [harpyNympho.name].",
						true, false,
						new SMGeneric(
								Util.newArrayListOfValues(Main.game.getPlayer()),
								Util.newArrayListOfValues(Main.game.getNpc(HarpyNympho.class)),
						null,
						null), HARPY_NEST_NYMPHO_AFTER_SEX, "
"
							+ "Eager to help satisfy [harpyNympho.namePos] craving for sex, you reach down and grab her wings."
							+ " Pulling her to her feet, you step forwards, before planting a deep kiss on her [harpyNympho.lips+]."
						+ "
"
						+ "
"
							+ "[harpyNympho.Name] responds to your dominant move by letting out a excited squeal, and, enthusiastically wrapping her wings around your back, she passionately starts returning your kiss..."
						+ "
");

			} else if (index == 0) {
				return new Response("Leave", "Decide to take your leave.", HARPY_NEST_NYMPHO) {
					@Override
					public void effects() {
						Main.game.getTextStartStringBuilder().append(
								"
"
									+ "Deciding that your work here is done, you turn around and start to walk back the way you came."
									+ " You hear [harpyNympho.name] calling out to her harpies as you leave,"
									+ " [harpyNympho.speech(You heard our new leader! Let's try starting with three of you at once!)]"
								+ "
"
								+ "
"
									+ "Smirking as you hear that, you continue back across the main platform, quickly finding yourself on the outskirts of the nest once again."
								+ "
");
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_FIGHT = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
					+ "Realising that [harpyNympho.name] isn't going to listen to reason, you make your final demand,"
					+ " [pc.speech(You're either going to get your nest to calm down right now, or I'm going to make you!)]"
				+ "
"
				+ "
"
					+ "[harpyNympho.Name] lets out an angry cry, and she shouts out to her companion,"
					+ " [harpyNympho.speech([harpyNymphoCompanion.Name], throw this [pc.race] out already! Nobody talks to me like that and gets away with it!)]"
				+ "
"
				+ "
"
					+ "[harpyNymphoCompanion.name] immediately runs forwards, eager to please her matriarch as she launches into a furious assault."
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				return new ResponseCombat("Fight", "[harpyNymphoCompanion.Name] rushes to do her matriarch's bidding!", Main.game.getNpc(HarpyNymphoCompanion.class));

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_FIGHT_LOSE = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
					+ "You fall to the floor, totally beaten."
					+ " As you collapse, [harpyNymphoCompanion.name] jumps down on top of you, pinning you to the floor as she calls out to her matriarch,"
					+ " [harpyNymphoCompanion.speech([harpyNympho.Name]! I did it!)]"
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Well done, [harpyNymphoCompanion.name]!)] you hear [harpyNympho.name] respond."
					+ " [harpyNympho.speech(You're going to get a reward for this!)]"
				+ "
"
				+ "
"
					+ "As [harpyNymphoCompanion.name] continues holding you down, [harpyNympho.name] calls out for her flock to come and help."
					+ " Rushing to obey their matriarch, several harpies dash forwards and pin your [pc.arms] and [pc.legs] to the floor."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Keep on holding [pc.herHim] still, everyone!)] [harpyNympho.name] calls out, pulling [harpyNymphoCompanion.name] off of you."
					+ " [harpyNympho.speech(I've got a fun little punishment planned!)]"
				+ "
"
				+"
"
					+ "[harpyNympho.speech([harpyNymphoCompanion.name], fetch me one of my lollipops!)]"
					+ " [harpyNympho.name] laughs, stepping forwards to tower over you."
					+ " [harpyNympho.speech(I know what your problem is; you just wish you were me! Well, my special little lollipops can help with that!)]"
				+ "
"
				+ "
"
					+ "[pc.speechNoEffects(Let me go!)] you shout, struggling against the harpies holding you down."
					+ " You're too weak to shake them off, however, and they easily continue to pin you to the floor, holding you quite still as [harpyNympho.name] stoops down next to your face."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Shh! Don't struggle so much,)]"
					+ " she moans,"
					+ " [harpyNympho.speech(this will all be over soon!)]"
				+ "
"
				+ "
"
					+ "[harpyNymphoCompanion.name] comes running over, and you see her hand over a pink, cock-shaped lollipop to [harpyNympho.name]."
					+ " With a mischievous grin on her face, the pink-feathered matriarch orders her boy-toy to hold your mouth open, and, leaning in, [harpyNympho.name] forcefully tries to shove the lollipop into your mouth."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Be a good [pc.girl]! You'll like it, I promise!)]"
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				if(Main.game.isSpittingDisabled()) {
					return Response.getDisallowedSpittingResponse("Lips sealed");
				}
				return new Response("Lips sealed", "Don't let [harpyNympho.Name] get that strange lollipop into your mouth...", HARPY_NEST_NYMPHO_FIGHT_LOSE_PUNISHMENT_NO_TF);

			} else if (index == 2) {
				return new Response("Open wide",
						"Allow [harpyNympho.Name] to push the lollipop into your mouth... [style.boldBad(Warning:)] Due to the nature of harpies needing a special form, this transformation bypasses TF preferences!",
						HARPY_NEST_NYMPHO_FIGHT_LOSE_PUNISHMENT,
						Util.newArrayListOfValues(Fetish.FETISH_TRANSFORMATION_RECEIVING),
						Fetish.FETISH_TRANSFORMATION_RECEIVING.getAssociatedCorruptionLevel(),
						null,
						null,
						null){
					@Override
					public void effects() {
						Main.game.getTextStartStringBuilder().append("
"
								+ "Obediently doing as you're told, you open your mouth and let the lollipop slide past your [pc.lips+]."
								+ " An intense, sweet flavour hits your tongue, and you find that it's quite unlike anything you've ever tasted before."
								+ " Before you know what you're doing, you're eagerly sucking and licking on the delicious candy, letting out little whining noises as you find yourself unable to stop..."
							+ "
"
							+ItemEffectType.NYMPHO_LOLLIPOP.applyEffect(null, null, null, 0, Main.game.getNpc(HarpyNympho.class), Main.game.getPlayer(), null));
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_FIGHT_BEAT_BF = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
					+ "[harpyNympho.Name] lets out an angry wail as [harpyNymphoCompanion.name] falls to the floor, defeated."
					+ " You notice a lot of the surrounding harpies glancing nervously at each other, and a few start to shuffle around to your side of the platform."
					+ " It looks as though they're getting ready to support you if you manage to defeat their matriarch."
				+ "
"
				+ "
"
					+ "You don't have too much time to ponder on these harpies' fickle nature, as [harpyNympho.Name] suddenly rushes forwards, shouting,"
					+ " [harpyNympho.speech(You're going to pay for this!)]"
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				return new ResponseCombat("Fight", "[harpyNympho.Name] looks furious as she launches her attack on you!", Main.game.getNpc(HarpyNympho.class));

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_FIGHT_LOSE_TO_MATRIARCH = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
					+ "You fall to the floor, totally beaten."
					+ " As you collapse, you hear [harpyNympho.name] ordering her flock to retrain you, and, rushing to obey their matriarch, you're quickly pinned to the floor by a group of her obedient harpies."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech([nymphoHarpyCompanion.name], are you ok?!)] you hear [nymphoHarpy.name] asking her boy-toy."
					+ " [harpyNympho.speech(Come on, I'll make you feel better!)]"
				+ "
"
				+ "
"
					+ "As the members of [harpyNympho.namePos] flock continue to hold you down, you hear the matriarch and her companion walking towards you."
					+ " Some of the harpies start laughing as you try to wriggle free, but you're too weak from the fight to offer any real resistance."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Keep on holding [pc.herHim] still!)] [harpyNympho.name] calls out."
					+ " [harpyNympho.speech(I've got a fun little punishment planned!)]"
				+ "
"
				+"
"
					+ "[harpyNympho.speech([harpyNymphoCompanion.name], fetch me one of my lollipops!)]"
					+ " [harpyNympho.name] laughs, stepping forwards to tower over you."
					+ " [harpyNympho.speech(I know what your problem is; you just wish you were me! Well, my special little lollipops can help with that!)]"
				+ "
"
				+ "
"
					+ "[pc.speechNoEffects(Let me go!)] you shout, struggling against the harpies holding you down."
					+ " You're too weak to shake them off, however, and they easily continue to pin you to the floor, holding you quite still as [harpyNympho.name] stoops down next to your face."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Shh! Don't struggle so much,)]"
					+ " she moans,"
					+ " [harpyNympho.speech(this will all be over soon!)]"
				+ "
"
				+ "
"
					+ "[harpyNymphoCompanion.name] comes running over, and you see her hand over a pink, cock-shaped lollipop to [harpyNympho.name]."
					+ " With a mischievous grin on her face, the pink-feathered matriarch orders her boy-toy to hold your mouth open, and, leaning in, [harpyNympho.name] forcefully tries to shove the lollipop into your mouth."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Be a good [pc.girl]! You'll like it, I promise!)]"
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				if(Main.game.isSpittingDisabled()) {
					return Response.getDisallowedSpittingResponse("Lips sealed");
				}
				return new Response("Lips sealed", "Don't let [harpyNympho.Name] get that strange lollipop into your mouth...", HARPY_NEST_NYMPHO_FIGHT_LOSE_PUNISHMENT_NO_TF);

			} else if (index == 2) {
				return new Response("Open wide",
						"Allow [harpyNympho.Name] to push the lollipop into your mouth... [style.boldBad(Warning:)] Due to the nature of harpies needing a special form, this transformation bypasses TF preferences!",
						HARPY_NEST_NYMPHO_FIGHT_LOSE_PUNISHMENT,
						Util.newArrayListOfValues(Fetish.FETISH_TRANSFORMATION_RECEIVING),
						Fetish.FETISH_TRANSFORMATION_RECEIVING.getAssociatedCorruptionLevel(),
						null,
						null,
						null){
					@Override
					public void effects() {
						Main.game.getTextStartStringBuilder().append("
"
								+ "Obediently doing as you're told, you open your mouth and let the lollipop slide past your [pc.lips+]."
								+ " An intense, sweet flavour hits your tongue, and you find that it's quite unlike anything you've ever tasted before."
								+ " Before you know what you're doing, you're eagerly sucking and licking on the delicious candy, letting out little whining noises as you find yourself unable to stop..."
							+ "
"
							+ItemEffectType.NYMPHO_LOLLIPOP.applyEffect(null, null, null, 0, Main.game.getNpc(HarpyNympho.class), Main.game.getPlayer(), null));
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_FIGHT_BEAT_NYMPHO = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
					+ "[harpyNympho.NamePos] flock, just a moment ago cheering and shouting support for their matriarch, falls completely silent as they see her slump to the floor, defeated."
					+ " Walking forwards, you tower over the panting mass of pink feathers, and you hear an erotic moan slip out from between [harpyNympho.namePos] lips as she pushes herself up onto her knees."
					+ " [harpyNympho.speech(Y-You're so... powerful...)]"
				+ "
"
				+ "
"
					+ "[pc.speech(That's right,)] you respond,"
					+ " [pc.speech(I don't care how you normally determine a flock's leader up here in the Nests; I'm in charge now!)]"
				+ "
"
				+ "
"
					+ "Your arcane aura is clearly having a strong effect on [harpyNympho.name], and you hear her letting out another lewd moan as she responds,"
					+ " [harpyNympho.speech(Y-Yes, "+(Main.game.getPlayer().isFeminine()?"mistress":"master")+"! I'll do as you ask!)]"
				+ "
"
				+ "
"
					+ "Seeing their matriarch submit to you, the rest of the harpies fall to their knees, bowing down to you as you issue your orders,"
					+ " [pc.speech(You're all going to calm down, understand?! No more feuds, and no more attacking travellers through the Harpy Nests!)]"
				+ "
"
				+ "
"
					+ "A chorus of eager agreements rise up from the surrounding crowd, and you find yourself smirking as you look back down at the defeated matriarch at your feet."
					+ " Shuffling closer, [harpyNympho.name] holds up a pink cock-shaped lollipop."
					+ " [harpyNympho.speechNoEffects("+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+"! Please, have one of my special lollipops! This will make you look like me! I-If you want to look like me, that is...)]"
					+ " You take the lollipop in recognition of [harpyNympho.namePos] submission, but you're unsure whether you'll actually use it..."
				+ "
"
				+ "
"
					+ "[pc.speech(Good girl!)] you say. [pc.speech(Now, you're going to get your nest to calm down, aren't you?)]"
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Yes, "+(Main.game.getPlayer().isFeminine()?"Mistress":"Master")+"! I'll keep them under control!)]"
				+ "
"
				+ "
"
					+ "Thanks to your victory over [harpyNympho.name], and the power of your arcane aura, you've been able to subdue this once-troublesome nest!"
					+ " Looking down at the matriarch, you wonder if you should publicly prove to all these harpies who's in control here..."
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			 if (index == 1) {
				return new ResponseSex("Sex", "Have dominant sex with [harpyNympho.name].",
						true, false,
						new SMGeneric(
								Util.newArrayListOfValues(Main.game.getPlayer()),
								Util.newArrayListOfValues(Main.game.getNpc(HarpyNympho.class)),
						null,
						null), HARPY_NEST_NYMPHO_AFTER_SEX, "
"
							+ "Eager to show this nest who's in charge, you reach down and grab [harpyNympho.namePos] wings."
							+ " Pulling her to her feet, you step forwards, before planting a deep kiss on her [harpyNympho.lips+]."
						+ "
"
						+ "
"
							+ "[harpyNympho.Name] responds to your dominant move by letting out a excited squeal, and, enthusiastically wrapping her wings around your back, she passionately starts returning your kiss..."
						+ "
");

				} else if (index == 0) {
					return new Response("Leave", "Decide to take your leave.", HARPY_NEST_NYMPHO) {
						@Override
						public void effects() {
							Main.game.getTextStartStringBuilder().append(
								"
"
									+ "Deciding that your work here is done, you turn around and start to walk back the way you came."
									+ " You hear [harpyNympho.name] calling out to her harpies as you leave,"
									+ " [harpyNympho.speech(That's our new leader now! Show some respect!)]"
								+ "
"
								+ "
"
									+ "Smirking as you hear that, you continue back across the main platform, quickly finding yourself on the outskirts of the nest once again."
								+ "
");
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_FIGHT_LOSE_PUNISHMENT_NO_TF = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
					+ "With a determined yank, you finally manage to pull one of your [pc.arms] free from the harpy's clutches."
					+ " Before they're able to restrain you again, you grab the lollipop out of [harpyNympho.namePos] feathered hand, before smashing it on the floor beneath you."
				+ "
"
				+"
"
					+ "[harpyNympho.speech(Silly [pc.girl]! That's not going to make this any easier for you!)]"
					+ " [harpyNympho.name] laughs, dropping down onto all fours directly over your face."
					+ " [harpyNympho.speech(Come on [harpyNymphoCompanion.name]! Let's carry on from where we left off! This naughty [pc.girl] can be on cleanup duty!)]"
				+ "
"
				+"
"
					+ "[harpyNymphoCompanion.name] lets out a little laugh,"
					+ " [harpyNymphoCompanion.speech(That sounds fun!)]"
				+ "
"
				+ "
"
					+ "With [harpyNympho.namePos] pussy hovering above your face, you're held in position and forced to watch as [harpyNymphoCompanion.name] lifts up her skirt and pulls down her underwear."
					+ " Stepping forwards, you see her tiny little avian cock standing to attention, and with a thrust of her hips, she slides into [harpyNympho.namePos] wet cunt."
					+ " Some of the cum from [harpyNympho.namePos] previous creampie oozes out around [harpyNymphoCompanion.namePos] little cock, and you flinch as the salty jizz drips down onto your face."
				+ "
"
				+ "
"
					+ "For the next few hours, you're forced to act as [harpyNympho.namePos] personal pussy-cleaner."
					+ " One after another, the harpies of [harpyNympho.namePos] flock take turns fucking their sex-crazed matriarch."
					+ " She insists that each one finish inside of her, and after receiving each creampie, she lowers herself down onto your face, forcing you to lick her clean before the next excited harpy's turn."
				+ "
"
				+ "
"
					+ "You eventually lose count of how many times you're forced to endure this humiliation, but, after what seems like an eternity, [harpyNympho.name] declares that she needs a break."
					+ " Standing up, she orders her harpies to release you, before grinning down at your cum-coated face."
					+ " [harpyNympho.speech(I think you've learnt your lesson, haven't you?! Now, get out my sight!)]"
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				return new Response("Thrown out", "Having had their fun, you're quickly thrown out of the nest.", HARPY_NEST_NYMPHO) {
					@Override
					public void effects() {
						Main.game.getTextStartStringBuilder().append(
								"
"
									+ "Finally given an opportunity to escape, you do as [harpyNympho.name] commands."
									+ " Jumping to your feet, you run away across the platform, leaving the harpies' mocking laughter behind as you quickly find yourself on the outskirts of the nest once again..."
								+ "
");
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_FIGHT_LOSE_PUNISHMENT = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			return "
"
					+ "As the lollipop's transformative effects come to an end, the harpies' grip on your [pc.arms] and [pc.legs] loosens."
					+ " Blinking slowly a few times, you let out a lewd moan,"
					+ " [pc.speech(Oh, fuck! I need to fuck something, right now!)]"
				+ "
"
				+ "
"
					+ "The flock of harpies bursts out into laughter, and the ones who were holding you down finally release you before backing off."
					+ " Scrambling to your knees, you find yourself looking up at [harpyNympho.Name] as she continues towering over you."
				+ "
"
				+ "
"
					+ "[harpyNympho.speech(Well, you're not taking any of my playthings! And anyway, before you run off and get fucked like a horny slut, I've still got some plans for you!)]"
					+ " [harpyNympho.name] laughs, dropping down onto all fours directly over your face and forcing you down onto your back once more."
					+ " [harpyNympho.speech(Come on, [harpyNymphoCompanion.name]! Let's carry on from where we left off! This naughty [pc.girl] can be on cleanup duty!)]"
				+ "
"
				+"
"
					+ "[harpyNymphoCompanion.name] lets out a little laugh,"
					+ " [harpyNymphoCompanion.speech(That sounds fun!)]"
				+ "
"
				+ "
"
					+ "With [harpyNympho.namePos] pussy hovering above your face, you're held in position and forced to watch as [harpyNymphoCompanion.name] lifts up her skirt and pulls down her underwear."
					+ " Stepping forwards, you see her tiny little avian cock standing to attention, and with a thrust of her hips, she slides into [harpyNympho.namePos] wet cunt."
					+ " Some of the cum from [harpyNympho.namePos] previous creampie oozes out around [harpyNymphoCompanion.namePos] little cock, and you flinch as the salty jizz drips down onto your face."
				+ "
"
				+ "
"
					+ "For the next few hours, you're forced to act as [harpyNympho.namePos] personal pussy-cleaner."
					+ " One after another, the harpies of [harpyNympho.namePos] flock take turns fucking their sex-crazed matriarch."
					+ " She insists that each one finish inside of her, and, after receiving each creampie, she lowers herself down onto your face, forcing you to lick her clean before the next excited harpy's turn."
				+ "
"
				+ "
"
					+ "You eventually lose count of how many times you're forced to endure this humiliation, but, after what seems like an eternity, [harpyNympho.name] declares that she needs a break."
					+ " Standing up, she orders her harpies to release you, before grinning down at your cum-coated face."
					+ " [harpyNympho.speech(I think you've learnt your lesson, haven't you?! Now, get out my sight!)]"
				+ "
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				return new Response("Thrown out", "Having had their fun, you're quickly thrown out of the nest.", HARPY_NEST_NYMPHO) {
					@Override
					public void effects() {
						Main.game.getTextStartStringBuilder().append(
								"
"
									+ "Finally given an opportunity to escape, you do as [harpyNympho.name] commands."
									+ " Jumping to your feet, you run away across the platform, leaving the harpies' mocking laughter behind as you quickly find yourself on the outskirts of the nest once again..."
								+ "
");
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode HARPY_NEST_NYMPHO_AFTER_SEX = new DialogueNode("Harpy nest", ".", true) {

		@Override
		public String getLabel() {
			return "[harpyNympho.NamePos] nest";
		}

		@Override
		public String getContent() {
			if(Sex.getNumberOfOrgasms(Main.game.getNpc(HarpyNympho.class)) >= Main.game.getNpc(HarpyNympho.class).getOrgasmsBeforeSatisfied()) {
				return "
"
							+ "As you step back from [harpyNympho.name], she sinks to the floor, totally worn out from her orgasm"+(Sex.getNumberOfOrgasms(Main.game.getNpc(HarpyNympho.class)) > 1?"s":"")+"."
							+ " The surrounding harpies, having watched the whole thing, kneel in submission as you finish with their matriarch."
						+ "
";
			} else {
				return "
"
							+ "As you step back from [harpyNympho.name], she sinks to the floor, letting out a desperate whine as she realises that you've finished with her."
							+ " Her feathered hands dart down between her legs, and she frantically starts masturbating as she seeks to finish what you started."
							+ " The surrounding harpies, having watched the whole thing, kneel in submission as you finish with their matriarch."
						+ "
";
			}
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 0) {
				return new Response("Leave", "Having had your fun, you decide to leave.", HARPY_NEST_NYMPHO) {
					@Override
					public void effects() {
						Main.game.getTextStartStringBuilder().append(
								"
"
									+ "Having put [harpyNympho.name] in her place, you walk back across the platform, quickly finding yourself on the outskirts of the nest once again."
								+ "
");
					}
				};

			} else {
				return null;
			}
		}
	};
}


code:
package com.lilithsthrone.game.dialogue.places.dominion.harpyNests;

import java.util.ArrayList;
import java.util.List;

import com.lilithsthrone.game.character.quests.Quest;
import com.lilithsthrone.game.character.quests.QuestLine;
import com.lilithsthrone.game.character.race.Subspecies;
import com.lilithsthrone.game.dialogue.DialogueFlagValue;
import com.lilithsthrone.game.dialogue.DialogueNode;
import com.lilithsthrone.game.dialogue.encounters.Encounter;
import com.lilithsthrone.game.dialogue.responses.Response;
import com.lilithsthrone.game.dialogue.responses.ResponseEffectsOnly;
import com.lilithsthrone.game.dialogue.utils.UtilText;
import com.lilithsthrone.game.inventory.item.AbstractItemType;
import com.lilithsthrone.game.inventory.item.ItemType;
import com.lilithsthrone.main.Main;
import com.lilithsthrone.utils.Colour;
import com.lilithsthrone.world.WorldType;
import com.lilithsthrone.world.places.PlaceType;

/**
 * @since 0.1.0
 * @version 0.3.4
 * @author Innoxia
 */
public class HarpyNestsDialogue {

	public static final DialogueNode OUTSIDE = new DialogueNode("Harpy Nests", "Harpy Nests", false) {

		@Override
		public int getSecondsPassed() {
			return 5*60;
		}

		@Override
		public String getContent() {
			return "
"
						+ "An arrow-shaped sign sits in the middle of the street, and as you approach, you see that it's sporting the words 'Harpy Nests'."
						+ " Looking to the side of the road in the direction that the arrow is pointing, you find yourself looking up at one of the tallest buildings in Dominion."
					+ "
"
					+ "
"
						+ "At eight stories in height, it's not exactly a sky-scraper, but with the larger of Dominion's buildings typically only being four or five stories tall,"
							+ " this structure is large enough to clearly stand out as a building of some importance."
						+ " Despite its unusual height, the only other feature setting it apart from all the other buildings in this area are the pair of huge glass doors set into its frontage."
					+ "
"
					+ "
"
						+ "Looking through the doors, you see a brightly-lit, extravagantly-decorated lobby."
						+ " Rows of elevators are set into either side of the room, and you notice that there are an unusual amount of harpies loitering around on the many comfortable-looking sofas that litter the area."
					+ "
"
					+ "
"
					+ (Main.game.getPlayer().isAbleToFly()
						? "It's obvious from even a cursory glance that this building is the entrance to the rooftop Harpy Nests, but seeing as you're able to fly, you don't really have much use for the elevators inside."
						: "It's obvious from even a cursory glance that this building is the entrance to the rooftop Harpy Nests, and you wonder if you should step inside and make use of one of the elevators.")
					+"
";
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if (index == 1) {
				return new ResponseEffectsOnly("Harpy Nests", "Travel up to the Harpy Nests."){
					@Override
					public void effects() {

						if(Main.game.getPlayer().isAbleToFly()) {
							Main.game.getTextStartStringBuilder().append(
									"
"
										+ "Spreading your wings, you dash into a forwards sprint, and with a little jump and a powerful flap, you take off into the air."
										+ " Quickly gaining altitude, you circle back towards the tall building, looking for an easy spot to land."
										+ " Thankfully, the structure's steepled roof has had a flat platform built over the top of it, and with another flap of your wings, you gracefully swoop down to land on top of it."
									+ "
"
									+ "
"
										+ "Looking around, you see that the only exit from the platform is a ramp that leads straight down into the building's top floor, and a sign above the opening reads 'Harpy entrance'."
										+ " Walking down the ramp, you push open a little door and step inside."
									+ "
");

						} else {
							Main.game.getTextStartStringBuilder().append(
									"
"
										+ "Pushing open one of the large glass doors, you step forwards into the lobby."
										+ " Although there's a front desk, it's currently surrounded by a group of bickering harpies, and from what snippets of conversation you can catch,"
											+ " it sounds like they're arguing with the receptionist, and each other, over what colour of feather is the most attractive."
									+ "
"
									+ "
"
										+ "Looking around, you don't see any other members of the building's staff, so, assuming that they're available for just anyone to use, you head over to one of the elevators and step inside."
										+ " Pressing the button on the control panel marked 'up', the elevator's doors slide shut, and with a hum of arcane energy, it lurches into motion."
									+ "
"
									+ "
"
										+ "Quickly lifting you up to the top of the building, the elevator's doors ping open, and you find yourself stepping out into the building's top floor."
									+ "
");
						}

						Main.mainController.moveGameWorld(WorldType.HARPY_NEST, PlaceType.HARPY_NESTS_ENTRANCE_ENFORCER_POST, true);
					}
				};

			} else {
				return null;
			}
		}
	};

	public static final DialogueNode ENTRANCE_ENFORCER_POST = new DialogueNode("Enforcer post", ".", true) {

		@Override
		public int getSecondsPassed() {
			return 60;
		}

		@Override
		public String getContent() {
			UtilText.nodeContentSB.setLength(0);

			UtilText.nodeContentSB.append(
					"
"
						+"You find yourself standing in yet another large, unpartitioned lobby, but this one has quite a different atmosphere than the one on the ground floor."
						+ " Everywhere you look, uniformed Enforcers are standing guard, carefully tracking each passerby with a suspicious gaze."
						+ " A large desk, manned by yet more Enforcers, sits between you and the door marked 'Harpy Nests Entrance'."
					+ "
");

			if(!Main.game.getDialogueFlags().values.contains(DialogueFlagValue.hasHarpyNestAccess)) {
				UtilText.nodeContentSB.append(
						"
"
							+ "Although none of them are really paying you any attention at the moment, it looks like you're going to have to talk to one of these Enforcers if you want to get past that desk and out into the Harpy Nests."
						+ "
");
			} else {
				UtilText.nodeContentSB.append(
						"
"
							+ "After having spoken to one of the Enforcers and secured a pass, you're free to come and go from the Harpy Nests as you please."
						+ "
"
						+(Main.game.getPlayer().getLevel()<5
								? "
"
								+ "It's recommended that you be at least level 5 before exploring the Harpy nests!"
							+ "
"
							:""));
			}

			return UtilText.nodeContentSB.toString();
		}

		@Override
		public boolean isTravelDisabled() {
			return !Main.game.getDialogueFlags().values.contains(DialogueFlagValue.hasHarpyNestAccess);
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if(index==0) {
				return null;
			}
			if (index == 1) {
				return new ResponseEffectsOnly("To street level", "Travel back down to Dominion's streets."){
					@Override
					public void effects() {
						if(Main.game.getPlayer().isAbleToFly()) {
							Main.game.getTextStartStringBuilder().append(
									"
"
										+ "Stepping back out through the same door you used to enter the Enforcer post, you spread your wings and swoop back down to street level."
									+ "
");

						} else {
							Main.game.getTextStartStringBuilder().append(
									"
"
										+ "Stepping into the same elevator you used to ride up to the Enforcer post, you soon find yourself travelling back down to street level."
									+ "
");
						}

						Main.mainController.moveGameWorld(WorldType.DOMINION, PlaceType.DOMINION_HARPY_NESTS_ENTRANCE, true);
					}
				};
			}

			List<Response> responses = new ArrayList<>();

			if(!Main.game.getDialogueFlags().values.contains(DialogueFlagValue.hasHarpyNestAccess)) {
				responses.add(
						new Response("Request access", "Walk up to the desk and ask if you can visit the Harpy Nests.", ENTRANCE_ENFORCER_POST_ASK_FOR_ACCESS) {
							@Override
							public void effects() {
								Main.game.getDialogueFlags().values.add(DialogueFlagValue.hasHarpyNestAccess);
								Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().addItem(AbstractItemType.generateItem(ItemType.getLoreBook(Subspecies.HARPY)), false, true));
							}
						});

			} else {
				if(!Main.game.getPlayer().hasQuest(QuestLine.SIDE_HARPY_PACIFICATION)) {
					responses.add(
							new Response("Angry Harpies", "Ask one of the Enforcers about the recent troubles in the Harpy Nests.", ENTRANCE_ENFORCER_POST_ASK_ABOUT_RIOTS) {
								@Override
								public void effects() {
									Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().startQuest(QuestLine.SIDE_HARPY_PACIFICATION));
								}
							});

				} else {
					if(Main.game.getPlayer().getQuest(QuestLine.SIDE_HARPY_PACIFICATION) == Quest.HARPY_PACIFICATION_REWARD && !Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)) {
						responses.add(
								new Response("Report back", "Report to the Enforcer that you've calmed the three matriarchs down.", ENTRANCE_ENFORCER_POST_COMPLETED_PACIFICATION) {
									@Override
									public void effects() {
										Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_HARPY_PACIFICATION, Quest.SIDE_UTIL_COMPLETE));
										Main.game.getPlayer().incrementMoney(5000);
									}
								});

					} else if(!Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)){
						responses.add(
								new Response("Report back", "You haven't calmed the three matriarchs down yet!", null));
					}
				}
			}

			if(Main.game.getPlayer().hasQuest(QuestLine.SIDE_BUYING_BRAX)
					&& Main.game.getPlayer().getQuest(QuestLine.SIDE_BUYING_BRAX)==Quest.BUYING_BRAX_LOLLIPOPS
					&& !Main.game.getPlayer().hasItemType(ItemType.CANDI_CONTRABAND)) {
				responses.add(
						new Response("Candi's lollipops", "Ask a nearby Enforcer about collecting the box of lollipops which Candi has requested.", ENTRANCE_ENFORCER_POST_CANDIS_LOLLIPOPS) {
					@Override
					public void effects() {
						Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().addItem(AbstractItemType.generateItem(ItemType.CANDI_CONTRABAND), false));
						Main.game.getTextEndStringBuilder().append(Main.game.getPlayer().setQuestProgress(QuestLine.SIDE_BUYING_BRAX, Quest.BUYING_BRAX_DELIVER_LOLLIPOPS));
					}
				});

			}

			for(int i=0;i<responses.size();i++) {
				if(index-2==i) {
					return responses.get(i);
				}
			}

			return null;

		}
	};

	public static final DialogueNode ENTRANCE_ENFORCER_POST_ASK_FOR_ACCESS = new DialogueNode("Enforcer post", ".", true) {

		@Override
		public int getSecondsPassed() {
			return 2*60;
		}

		@Override
		public String getContent() {

			if (Main.game.getPlayer().getQuest(QuestLine.MAIN) == Quest.MAIN_1_E_REPORT_TO_ALEXA) {
				return "
"
						+"As you approach the desk, one of the Enforcers, a minor wolf-girl, catches your eye and calls out to you, "
						+ "[style.speechFeminine(Hey you, yeah you, come here!)]"
					+ "
"
					+ "
"
						+ "You do as she asks and walk over towards her."
						+ " Stopping just short of the desk, you look down and explain why you're here, "
						+ "[pc.speech(Hi, I'm here to find a harpy matriarch called Alexa, you wouldn't happen to know where she is, would you?)]"
					+ "
"
					+"
"
						+"A look of surprise crosses the wolf-girl's face as you mention that name. "
						+ "[style.speechFeminine(Well, I don't know where exactly in the Nests any particular harpies are, but if it's the matriarch you're after with that name, then watch out; she's trouble."
						+ " She's got a reputation for being extremely quick to take offence at anything, even for a harpy, so choose your words wisely when you find her.)]"
					+ "
"
					+ "
"
						+ "[pc.speech(Ok, I'll be careful, thanks!)] you reply, but before you can leave, the wolf-girl has a few last things to say."
					+ "
"
					+"
"
						+ "[style.speechFeminine(Wait, hold on a moment. I don't know if you know what happened here recently, but I'd better inform you of the facts before you go out there."
						+ " Basically, some idiot dog-girl decided to say to Alexa that she wasn't as pretty as another matriarch she'd seen."
						+ " Well, after Alexa got her flock to fuck that dog-girl into a broken mess, she decided to go and see how pretty this other matriarch was."
						+ " One thing led to another, and within about twenty minutes we almost had a full-blown riot on our hands.)]"
					+ "
"
					+ "
"
						+ "The wolf-girl leans back in her chair, before gesturing to the room for emphasis as she continues,"
						+ " [style.speechFeminine(It took far more Enforcers than you see here to get things back under control."
						+ " Tensions are still running high in the Nests, so make sure you don't do anything to offend any of the matriarchs, ok?"
						+ " These harpies may look weak, but they're no joke if you piss them off, so remember to mind your manners out there!)]"
					+ "
"
					+ "
"
						+ "She bends down to retrieve something from under her desk, and, straightening back up, she holds out a little booklet."
						+ " Reaching out to take it, you look down to see the words 'All about Harpies' on the front cover."
						+ " [style.speechFeminine(Here you go, make sure you've read through and understood all this before going out into the nests. Oh, and please try to be careful out there!)]"
					+ "
"
					+ "
"
						+ "[pc.speech(Alright, I'll be careful...)] you respond, and, after the wolf-girl gives you a pass to show to any other Enforcers that try to stop you, you're allowed to proceed out into the Harpy Nests."
					+ "
"
					+ (Main.game.getPlayer().getLevel()<5
							?"
"
								+ "Just before you step out into the Nests, the wolf-girl calls after you,"
								+ " [style.speechFeminine(I'm serious about these harpies! They're far more dangerous than any old mugger you might meet in the alleyways below!)]"
							+ "
"
							+ "
"
								+ "It's recommended that you be at least level 5 before exploring the Harpy nests!"
							+ "
"
							:"");

			} else {
				return "
"
						+"As you approach the desk, one of the Enforcers, a lesser cat-boy, catches your eye and calls out to you, "
						+ "[style.speechMasculine(Hey you, come over here!)]"
					+ "
"
					+ "
"
						+ "You do as he asks and walk over towards him."
						+ " Stopping just short of the desk, you look down and greet him, "
						+ "[pc.speech(Hi, I'm just up here to have a look around the Harpy Nests, don't mind me.)]"
					+ "
"
					+"
"
						+"The cat-boy raises one eyebrow and leans back in his chair. "
						+ "[style.speechMasculine(Oh you are, are you? And do you know anything about harpies?)]"
					+ "
"
					+ "
"
						+ "[pc.speech(Erm...)] you stumble, not sure what you should say."
					+ "
"
					+"
"
						+ "[style.speechMasculine(Eugh... Well, it's my job to make sure nobody goes out there unprepared, so listen up!"
						+ " I don't know if you know what happened here recently, but some idiot dog-girl decided to say to one flock's matriarch that she wasn't as pretty as another matriarch she'd seen."
						+ " Well, after getting her flock to, erm, 'play' with the dog-girl for a while, she decided to go and see how pretty this other matriarch was."
						+ " One thing led to another, and within about twenty minutes we almost had a full-blown riot on our hands.)]"
					+ "
"
					+ "
"
						+ "The cat-boy leans back in his chair, before gesturing to the room for emphasis as he continues,"
						+ " [style.speechMasculine(It took almost triple the amount of Enforcers you see here to get things back under control."
						+ " Tensions are still running high in the Nests, so make sure you don't do anything to offend any of the matriarchs, ok?"
						+ " These harpies may look weak, but they're no joke if you piss them off, so remember to mind your manners out there!)]"
					+ "
"
					+ "
"
						+ "He bends down to retrieve something from under his desk, and, straightening back up, he holds out a little booklet."
						+ " Reaching out to take it, you look down to see the words 'All about Harpies' on the front cover."
						+ " [style.speechMasculine(Here you go, make sure you've read through and understood all this before going out into the nests. Oh, and be careful out there!)]"
					+ "
"
					+ "
"
						+ "[pc.speech(Alright, I'll be careful...)] you respond, and, after the cat-boy gives you a pass to show to any other Enforcers that try to stop you, you're allowed to proceed out into the Harpy Nests."
					+ "
"
					+ (Main.game.getPlayer().getLevel()<5
							?"
"
								+ "Just before you step out into the Nests, the cat-boy calls after you,"
								+ " [style.speechMasculine(I'm serious about these harpies! They're far more dangerous than any old mugger you might meet in the alleyways below!)]"
							+ "
"
							+ "
"
								+ "It's recommended that you be at least level 5 before exploring the Harpy nests!"
							+ "
"
							:"");
			}
		}

		@Override
		public boolean isTravelDisabled() {
			return !Main.game.getDialogueFlags().values.contains(DialogueFlagValue.hasHarpyNestAccess);
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			return ENTRANCE_ENFORCER_POST.getResponse(0, index);
		}
	};

	public static final DialogueNode ENTRANCE_ENFORCER_POST_ASK_ABOUT_RIOTS = new DialogueNode("Enforcer post", ".", false) {

		@Override
		public int getSecondsPassed() {
			return 5*60;
		}

		@Override
		public String getContent() {
			return "
"
						+ "Curious to find out more about the recent unrest in the harpy nests, you quickly scan the room for the most senior-looking Enforcer."
						+ " A tall, muscular horse-boy, with chevrons on his uniform marking him as a sergeant, fits the bill, and you start to walk over towards him."
						+ " He's currently giving orders to a pair of cat-girls, and you hang around for a moment, waiting for him to finish his business."
					+ "
"
					+ "
"
						+ "[style.speechMasculineStrong(Alright, report back here as soon as you get that warrant,)] you hear him say."
						+ " [style.speechMasculineStrong(These harpies are getting out of control..."
						+ " Oh, and Alice, before you go, if I hear just one more rumour about you shirking your duties to go visit your boyfriend, I'll fuck you myself! Now get out of my sight!)]"
					+ "
"
					+ "
"
						+ "[style.speechFeminine(Yes sir!)] the cat-girls call out in unison, before running off."
					+ "
"
					+ "
"
						+ "Seeing your opportunity to find out more about what's going on in the Harpy Nests, you walk up to the muscular horse-boy."
						+ " Noticing your approach, he lets out a grunt."
						+ " [style.speechMasculineStrong(What is it now? If one of those harpy bitches out there did something, I don't have the time to help you. You should have known the risks before going out there!)]"
					+ "
"
					+ "
"
						+ "[pc.speech(Actually, I was wondering if I could help you,)] you say."
						+ " [pc.speech(I couldn't help but overhear how much trouble you're having with these harpies. Perhaps I could sort them out for you?)]"
					+ "
"
					+ "
"
						+ "[style.speechMasculineStrong(Hah!)] the horse-boy laughs, [style.speechMasculineStrong(you think you could do what half the Enforcers in Dominion couldn't?!)]"
					+ "
"
					+ "
"
						+ "You give the horse-boy a very unamused frown, and after a moment of trying to stare you down, he lets out a deep sigh,"
						+ " [style.speechMasculineStrong(Eugh... I can't believe it's come to this, but I've run out of ideas...)]"
					+ "
"
					+ "
"
						+ "Pushing open a door behind him, he beckons you to follow, and you walk into a small office."
						+ " The horse-boy strides over to a solid wooden desk, before collapsing down into his chair."
						+ " Leafing through a pile of papers, he pulls out three separate sheets, before handing them over to you."
						+ " There's a portrait of an exceptionally beautiful harpy on each one, and as you take a closer look, the Enforcer starts speaking."
					+ "
"
					+ "
"
						+ "[style.speechMasculineStrong(So, as everyone's aware, the Harpy Nests are exceptionally dangerous right now."
						+ " The more prominent of the matriarchs have been at each other's throats ever since that business with the dog-girl."
						+ " We've come to an agreement with Alexa, who, if you didn't know, is the most important of the matriarchs."
						+ " Those other three, however,)] he points to the papers in your hand, [style.speechMasculineStrong(are refusing to cooperate.)]"
					+ "
"
					+ "
"
						+ "You flick between the papers as he continues,"
						+ " [style.speechMasculineStrong(That one with the blonde feathers is [bimboHarpy.name], the mean-looking one is [dominantHarpy.name], and the other one is called [nymphoHarpy.name]."
						+ " They outright refuse to get along with one another, and their little ongoing feud is causing the Nests to descend into anarchy."
						+ " We've even started to get reports of harpies attacking travellers in broad daylight! No matter how many Enforcer patrols we send out, nothing changes."
						+ " As much as I hate to admit it, it's the matriarchs who are the ones responsible for keeping law and order up here.)]"
					+ "
"
					+ "
"
						+ "[pc.speech(So you need someone to get these matriarchs under control?)] you ask."
					+ "
"
					+ "
"
						+ "[style.speechMasculineStrong(If we tried sending Enforcers in to do that, it'd be an insult to all the harpy flocks."
						+ " Alexa would probably even get involved, which is the last thing we need."
						+ " I hate asking for help like this, but if by some miracle you're able to subdue those three,)]"
						+ " he points to the papers in your hand again,"
						+ " [style.speechMasculineStrong(I could offer a five thousand flame reward.)]"
					+ "
"
					+ "
"
						+ "[pc.speech(Consider it done,)] you say, before moving to leave the office. [pc.speech(I'll be back to claim that reward!)]"
					+ "
"
					+ "
"
						+ "You hear the horse-boy grunt as he sinks down into his chair, and, closing the door behind you, you walk back out into the Enforcer Post."
					+ "
";
		}

		@Override
		public boolean isTravelDisabled() {
			return !Main.game.getDialogueFlags().values.contains(DialogueFlagValue.hasHarpyNestAccess);
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			return ENTRANCE_ENFORCER_POST.getResponse(0, index);
		}
	};

	public static final DialogueNode ENTRANCE_ENFORCER_POST_COMPLETED_PACIFICATION = new DialogueNode("Enforcer post", ".", false) {

		@Override
		public int getSecondsPassed() {
			return 2*60;
		}

		@Override
		public String getContent() {
			return "
"
						+ "You walk over towards the office where you first accepted the horse-boy Enforcer's request to pacify the Harpy Nests."
						+ " As you approach, the door opens, and an exhausted-looking, and vaguely familiar, cat-girl steps out."
						+ " She shuffles off in the direction of the elevators, and before the door swings shut, you step forwards into the office."
					+ "
"
					+ "
"
						+ ""
						+ "[style.speechMasculineStrong(Hah! Hungry for more, Alic- Oh! It's you!)] the horse-boy calls out, tucking in his shirt as he sits down in his chair."
						+ " [style.speechMasculineStrong(I heard what you've been up to out there!)]"
					+ "
"
					+ "
"
						+ "Ignoring the smell of sex that's saturating the room, you respond,"
						+ " [pc.speech(Then you must have heard that all three of those matriarchs have agreed to calm down.)]"
					+ "
"
					+ "
"
						+ "[style.speechMasculineStrong(Hah! Well, I don't know how you managed to pull it off, but we've received messages from each one of those matriarchs saying that they'll stop causing a problem!)]"
					+ "
"
					+ "
"
						+ "The muscular horse-boy produces a little brass key, and, bending down to unlock a heavy iron safe that's sitting beneath his desk, he retrieves a bag of money."
						+ " Setting it down in front of him, he grins up at you."
						+ " [style.speechMasculineStrong(I still can't believe that you actually managed to do it! Well, I'll keep my end of the bargain; here's five thousand flames!)]"
					+ "
"
					+ "
"
						+ "Stepping forwards, you take the offered bag of money, before thanking the Enforcer sergeant."
						+ " He seems to be in very high spirits, and lets out another happy exclamation as he leans back in his chair,"
						+ " [style.speechMasculineStrong(Hah! We're going to start regular patrols of the walkways to make sure another incident like this doesn't happen again."
						+ " Thanks to your efforts, and these patrols, we should be able to put a stop to all these harpy attacks!)]"
					+ "
"
					+ "
"
						+ "Having received your reward, you say farewell to the happy horse-boy, and, walking out of his office, head back into the Enforcer Post."
					+ "
"
					+ "
"
						+ "You have received: "+UtilText.getCurrencySymbol()+" 5,000"
					+ "
"
					+ "
"
						+ "The Harpy Nests are now safe to travel through!"
					+ "
";
		}

		@Override
		public boolean isTravelDisabled() {
			return !Main.game.getDialogueFlags().values.contains(DialogueFlagValue.hasHarpyNestAccess);
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			return ENTRANCE_ENFORCER_POST.getResponse(0, index);
		}
	};

	public static final DialogueNode ENTRANCE_ENFORCER_POST_CANDIS_LOLLIPOPS = new DialogueNode("Enforcer post", ".", false) {

		@Override
		public int getSecondsPassed() {
			return 2*60;
		}

		@Override
		public String getContent() {
			return UtilText.parseFromXMLFile("places/dominion/harpyNests/generic", "ENTRANCE_ENFORCER_POST_CANDIS_LOLLIPOPS");
		}

		@Override
		public boolean isTravelDisabled() {
			return !Main.game.getDialogueFlags().values.contains(DialogueFlagValue.hasHarpyNestAccess);
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			return ENTRANCE_ENFORCER_POST.getResponse(responseTab, index);
		}
	};

	public static final DialogueNode WALKWAY = new DialogueNode("Walkway", ".", false) {

		@Override
		public int getSecondsPassed() {
			return 2*60;
		}

		@Override
		public String getContent() {// if(!Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)) TODO Also harpy attack
			UtilText.nodeContentSB.setLength(0);

			UtilText.nodeContentSB.append(
					"
"
						+ "You find yourself walking down a winding, narrow walkway; part of an interconnected system of pathways, stairs, and ladders that have been built into the rooftops of Dominion."
						+ " Being able to fly, the harpies that live up here have no use for them, and there aren't many people willing to risk a harpy's wrath just for the sake of taking a stroll through the nests."
						+ " As a result, these links between the sprawling network of harpy nests are completely deserted."
					+ "
"
					+ "
"
						+ "Although these walkways don't lead directly through any nests, you're still able to observe them as you pass."
						+ " Each nest takes the form of a series of platforms, built on top of, and into, the roofs and upper floors of Dominion's residences."
						+ " While most are confined to a single building, you see that a few span multiple houses, and have several tiers of platforms built on top of one anther;"
							+ " evidence that the matriarch of that particular nest is extremely important."
					+ "
");

			switch(Main.game.getCurrentWeather()) {
				case MAGIC_STORM:
					UtilText.nodeContentSB.append(
							"
"
								+ "Due to the ongoing arcane storm, each flock has taken shelter in the building below their nest."
								+ " The only movement to be seen in the deserted nests takes the form of canvas coverings, erected to protect the harpies from the elements, billowing in the wind."
								+ " Peering over the side of the railing, you see that the streets below are similarly abandoned, with only the occasional demon to be seen wandering through the area."
							+ "
"
							+ "
"
								+ (Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)
									?"Although you've pacified the harpy nests, these walkways are dangerous at the moment, due to the ongoing arcane storm."
										+ " The harpies should all be taking shelter, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly duck out of sight."
										+ " It's probably only a matter of time before they make their move..."
									:"Although the harpies should all be taking shelter, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly duck out of sight."
										+ " It's probably only a matter of time before they make their move...")
							+ "
");
					break;
				case RAIN:
					UtilText.nodeContentSB.append(
							"
"
								+ "Due to the ongoing rain, each flock has taken shelter in the building below their nest, or beneath the canvas coverings that have been erected to protect the harpies from the elements."
								+ " The matriarch of each nest is clearly visible, even from a great distance, as they're always surrounded by other harpies eager to gain the favour of their leader."
								+ " Peering over the side of the railing, you see that the people walking down the streets below are similarly huddling beneath any shelter they can find, desperate to get out of the rain."
							+ "
"
							+ "
"
								+ (Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)
									?"You sometimes see an Enforcer patrolling a walkway off in the distance; reminding you that it's now safe for people to be travelling between the nests."
										+ " Although there's no risk of being attacked, harpies are still quite touchy by nature, and you imagine that it wouldn't be too hard to cause a confrontation if you were to go looking for trouble..."
									:"As you continue travelling down the walkways, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly fly off back to their nest."
										+ " It's probably only a matter of time before one of them decides to openly confront you...")
							+ "
");
					break;
				default:
					if(Main.game.isDayTime()) {
						UtilText.nodeContentSB.append(
								"
"
									+ "The members of each flock are sprawled out over their nest's platforms."
									+ " Most are simply lounging about beneath canvas coverings, but there are plenty to be seen sunbathing or talking in little groups."
									+ " The matriarch of each nest is clearly visible, even from a great distance, as they're always surrounded by other harpies eager to gain the favour of their leader."
									+ " Peering over the side of the railing, you see the people walking down the streets below, oblivious to what's going on high above them."
								+ "
");
					} else {
						UtilText.nodeContentSB.append(
								"
"
									+ "The members of each flock are sprawled out over their nest's platforms."
									+ " Even at night, there are still plenty of harpies to be seen lounging about or talking in little groups, their brightly-coloured feathers illuminated by a series of bright lights that cover the rooftops."
									+ " The matriarch of each nest is clearly visible, even from a great distance, as they're always surrounded by other harpies eager to gain the favour of their leader."
									+ " Peering over the side of the railing, you see the people walking down the streets below, oblivious to what's going on high above them."
								+ "
");
					}
					UtilText.nodeContentSB.append(
							"
"
								+ (Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)
									?"You sometimes see an Enforcer patrolling a walkway off in the distance; reminding you that it's now safe for people to be travelling between the nests."
										+ " Although there's no risk of being attacked, harpies are still quite touchy by nature, and you imagine that it wouldn't be too hard to cause a confrontation if you were to go looking for trouble..."
									:"As you continue travelling down the walkways, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly fly off back to their nest."
										+ " It's probably only a matter of time before one of them decides to openly confront you...")
							+ "
");
					break;

			}

			return UtilText.nodeContentSB.toString();
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if(index == 1) {
				if(Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)) {
					return new ResponseEffectsOnly(
							"Look for trouble",
							"Although you've pacified the harpy nests, you're sure that you can find a harpy who's looking for a confrontation..."){
								@Override
								public void effects() {
									DialogueNode dn = Encounter.HARPY_NEST_LOOK_FOR_TROUBLE.getRandomEncounter(true);
									Main.game.setContent(new Response("", "", dn));
								}
							};

				} else {
					return new ResponseEffectsOnly(
							"Explore",
							"Explore the walkways. Although you don't think you're any more or less likely to find anything by doing this, at least you won't have to keep travelling back and forth..."){
								@Override
								public void effects() {
									DialogueNode dn = Main.game.getActiveWorld().getCell(Main.game.getPlayer().getLocation()).getPlace().getDialogue(true, true);
									Main.game.setContent(new Response("", "", dn));
								}
							};
				}
			} else {
				return null;
			}
		}
	};

	public static final DialogueNode WALKWAY_BRIDGE = new DialogueNode("Walkway Bridge", ".", false) {

		@Override
		public int getSecondsPassed() {
			return 2*60;
		}

		@Override
		public String getContent() {// if(!Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)) TODO Also harpy attack
			UtilText.nodeContentSB.setLength(0);

			UtilText.nodeContentSB.append(
					"
"
						+ "You find yourself walking over a narrow wooden bridge; part of an interconnected system of pathways, stairs, and ladders that have been built into the rooftops of Dominion."
						+ " Being able to fly, the harpies that live up here have no use for them, and there aren't many people willing to risk a harpy's wrath just for the sake of taking a stroll through the nests."
						+ " As a result, these links between the sprawling network of harpy nests are completely deserted."
					+ "
"
					+ "
"
						+ "Although these walkways don't lead directly through any nests, you're still able to observe them as you pass."
						+ " Each nest takes the form of a series of platforms, built on top of, and into, the roofs and upper floors of Dominion's residences."
						+ " While most are confined to a single building, you see that a few span multiple houses, and have several tiers of platforms built on top of one anther;"
							+ " evidence that the matriarch of that particular nest is extremely important."
					+ "
");

			switch(Main.game.getCurrentWeather()) {
				case MAGIC_STORM:
					UtilText.nodeContentSB.append(
							"
"
								+ "Due to the ongoing arcane storm, each flock has taken shelter in the building below their nest."
								+ " The only movement to be seen in the deserted nests takes the form of canvas coverings, erected to protect the harpies from the elements, billowing in the wind."
								+ " Peering over the side of the railing, you see that the streets below are similarly abandoned, with only the occasional demon to be seen wandering through the area."
							+ "
"
							+ "
"
								+ (Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)
									?"Although you've pacified the harpy nests, these walkways are dangerous at the moment, due to the ongoing arcane storm."
										+ " The harpies should all be taking shelter, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly duck out of sight."
										+ " It's probably only a matter of time before they make their move..."
									:"Although the harpies should all be taking shelter, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly duck out of sight."
										+ " It's probably only a matter of time before they make their move...")
							+ "
");
					break;
				case RAIN:
					UtilText.nodeContentSB.append(
							"
"
								+ "Due to the ongoing rain, each flock has taken shelter in the building below their nest, or beneath the canvas coverings that have been erected to protect the harpies from the elements."
								+ " The matriarch of each nest is clearly visible, even from a great distance, as they're always surrounded by other harpies eager to gain the favour of their leader."
								+ " Peering over the side of the railing, you see that the people walking down the streets below are similarly huddling beneath any shelter they can find, desperate to get out of the rain."
							+ "
"
							+ "
"
								+ (Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)
									?"You sometimes see an Enforcer patrolling a walkway off in the distance; reminding you that it's now safe for people to be travelling between the nests."
										+ " Although there's no risk of being attacked, harpies are still quite touchy by nature, and you imagine that it wouldn't be too hard to cause a confrontation if you were to go looking for trouble..."
									:"As you continue travelling down the walkways, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly fly off back to their nest."
										+ " It's probably only a matter of time before one of them decides to openly confront you...")
							+ "
");
					break;
				default:
					if(Main.game.isDayTime()) {
						UtilText.nodeContentSB.append(
								"
"
									+ "The members of each flock are sprawled out over their nest's platforms."
									+ " Most are simply lounging about beneath canvas coverings, but there are plenty to be seen sunbathing or talking in little groups."
									+ " The matriarch of each nest is clearly visible, even from a great distance, as they're always surrounded by other harpies eager to gain the favour of their leader."
									+ " Peering over the side of the railing, you see the people walking down the streets below, oblivious to what's going on high above them."
								+ "
");
					} else {
						UtilText.nodeContentSB.append(
								"
"
									+ "The members of each flock are sprawled out over their nest's platforms."
									+ " Even at night, there are still plenty of harpies to be seen lounging about or talking in little groups, their brightly-coloured feathers illuminated by a series of bright lights that cover the rooftops."
									+ " The matriarch of each nest is clearly visible, even from a great distance, as they're always surrounded by other harpies eager to gain the favour of their leader."
									+ " Peering over the side of the railing, you see the people walking down the streets below, oblivious to what's going on high above them."
								+ "
");
					}
					UtilText.nodeContentSB.append(
							"
"
								+ (Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)
									?"You sometimes see an Enforcer patrolling a walkway off in the distance; reminding you that it's now safe for people to be travelling between the nests."
										+ " Although there's no risk of being attacked, harpies are still quite touchy by nature, and you imagine that it wouldn't be too hard to cause a confrontation if you were to go looking for trouble..."
									:"As you continue travelling down the walkways, you can't help but shake the feeling that you're being watched."
										+ " An occasional flash of colour out of the corner of your [pc.eye] confirms your suspicions, but each time you turn to face your elusive stalker, they quickly fly off back to their nest."
										+ " It's probably only a matter of time before one of them decides to openly confront you...")
							+ "
");
					break;

			}

			return UtilText.nodeContentSB.toString();
		}

		@Override
		public Response getResponse(int responseTab, int index) {
			if(index == 1) {
				if(Main.game.getPlayer().isQuestCompleted(QuestLine.SIDE_HARPY_PACIFICATION)) {
					return new ResponseEffectsOnly(
							"Look for trouble",
							"Although you've pacified the harpy nests, you're sure that you can find a harpy who's looking for a confrontation..."){
								@Override
								public void effects() {
									DialogueNode dn = Encounter.HARPY_NEST_LOOK_FOR_TROUBLE.getRandomEncounter(true);
									Main.game.setContent(new Response("", "", dn));
								}
							};

				} else {
					return new ResponseEffectsOnly(
							"Explore",
							"Explore the walkways. Although you don't think you're any more or less likely to find anything by doing this, at least you won't have to keep travelling back and forth..."){
								@Override
								public void effects() {
									DialogueNode dn = Main.game.getActiveWorld().getCell(Main.game.getPlayer().getLocation()).getPlace().getDialogue(true, true);
									Main.game.setContent(new Response("", "", dn));
								}
							};
				}
			} else {
				return null;
			}
		}
	};

}

repo_name: klorpa/Pedo

license: unknown