use of com.lilithsthrone.game.sex.PenetrationType in project liliths-throne-public by Innoxia.
the class Body method getVaginaDescription.
public String getVaginaDescription(GameCharacter owner) {
boolean isPlayer = owner.isPlayer();
descriptionSB = new StringBuilder();
Vagina viewedVagina = vagina;
if (Main.game.getPlayer().hasIngestedPsychoactiveFluidType(FluidTypeBase.GIRLCUM)) {
viewedVagina = new Vagina(vagina.getType(), vagina.getRawLabiaSizeValue(), vagina.getRawClitorisSizeValue(), Wetness.SEVEN_DROOLING.getValue(), vagina.getOrificeVagina().getRawCapacityValue() * 3, vagina.getOrificeVagina().getElasticity().getValue(), vagina.getOrificeVagina().getPlasticity().getValue(), vagina.getOrificeVagina().isVirgin());
viewedVagina.setPierced(owner, vagina.isPierced());
descriptionSB.append("<i style='color:" + Colour.PSYCHOACTIVE.toWebHexString() + ";'>The psychoactive girlcum which you recently ingested is causing your view of " + (owner.isPlayer() ? "your" : "[npc.name]'s") + " pussy to be distorted!</i> ");
}
if (isPlayer) {
if (penis.getType() != PenisType.NONE)
descriptionSB.append("Beneath your [pc.penis], you have");
else
descriptionSB.append("Between your legs, you have");
} else {
if (penis.getType() != PenisType.NONE)
descriptionSB.append("Beneath [npc.her] [npc.penis], [npc.she] has");
else
descriptionSB.append("Between [npc.her] legs, [npc.she] has");
}
switch(viewedVagina.getType()) {
case HUMAN:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " human pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " human pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case ANGEL:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " angelic pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " angelic pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case DEMON_COMMON:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " demonic pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " demonic pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case DOG_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " canine pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " canine pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case WOLF_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " lupine pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " lupine pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case ALLIGATOR_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " reptilian pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " reptilian pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case CAT_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " feline pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " feline pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case COW_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " bovine pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " bovine pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case SQUIRREL_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " squirrel-morph's pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " a") + " squirrel-morph's pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case HORSE_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " equine pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " equine pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case REINDEER_MORPH:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " rangiferine pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " rangiferine pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
case HARPY:
if (isPlayer) {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " avian pussy, with [pc.labiaSize], [pc.pussyPrimaryColour(true)] labia and [pc.pussySecondaryColour(true)] inner-walls.");
} else {
descriptionSB.append((viewedVagina.isPierced() ? " a pierced," : " an") + " avian pussy, with [npc.labiaSize], [npc.pussyPrimaryColour(true)] labia and [npc.pussySecondaryColour(true)] inner-walls.");
}
break;
default:
break;
}
// Pubic Hair:
if (Main.game.isPubicHairEnabled()) {
switch(owner.getPubicHair()) {
case ZERO_NONE:
if (isPlayer) {
descriptionSB.append(" There is no trace of any " + owner.getPubicHairType().getName(owner) + " around your pussy.");
} else {
descriptionSB.append(" There is no trace of any " + owner.getPubicHairType().getName(owner) + " around [npc.her] pussy.");
}
break;
case ONE_STUBBLE:
if (isPlayer) {
descriptionSB.append(" You have a stubbly patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around your pussy.");
} else {
descriptionSB.append(" [npc.She] has a stubbly patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around [npc.her] pussy.");
}
break;
case TWO_MANICURED:
if (isPlayer) {
descriptionSB.append(" You have a neat, manicured patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around your pussy.");
} else {
descriptionSB.append(" [npc.She] has a neat, manicured patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around [npc.her] pussy.");
}
break;
case THREE_TRIMMED:
if (isPlayer) {
descriptionSB.append(" You have a trimmed patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around your pussy.");
} else {
descriptionSB.append(" [npc.She] has a trimmed patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around [npc.her] pussy.");
}
break;
case FOUR_NATURAL:
if (isPlayer) {
descriptionSB.append(" You have a natural bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around your pussy.");
} else {
descriptionSB.append(" [npc.She] has a natural bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around [npc.her] pussy.");
}
break;
case FIVE_UNKEMPT:
if (isPlayer) {
descriptionSB.append(" You have an unkempt bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around your pussy.");
} else {
descriptionSB.append(" [npc.She] has an unkempt bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around [npc.her] pussy.");
}
break;
case SIX_BUSHY:
if (isPlayer) {
descriptionSB.append(" You have a thick, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around your pussy.");
} else {
descriptionSB.append(" [npc.She] has a thick, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around [npc.her] pussy.");
}
break;
case SEVEN_WILD:
if (isPlayer) {
descriptionSB.append(" You have a wild, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around your pussy.");
} else {
descriptionSB.append(" [npc.She] has a wild, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around [npc.her] pussy.");
}
break;
}
}
if (isPlayer) {
if (owner.getVaginaRawClitorisSizeValue() == 0) {
descriptionSB.append(" You have [pc.a_clitSize] clit, which measures less than one inch in length.");
} else {
descriptionSB.append(" You have [pc.a_clitSize] clit, which measures [pc.clitSizeInches] inch" + (owner.getVaginaRawClitorisSizeValue() == 1 ? "" : "es") + " long.");
}
} else {
if (owner.getVaginaRawClitorisSizeValue() == 0) {
descriptionSB.append(" [npc.She] has [npc.a_clitSize] clit, which measures less than one inch in length.");
} else {
descriptionSB.append(" [npc.She] has [npc.a_clitSize] clit, which measures [npc.clitSizeInches] inch" + (owner.getVaginaRawClitorisSizeValue() == 1 ? "" : "es") + " long.");
}
}
// Virgin/capacity:
if (viewedVagina.getOrificeVagina().isVirgin()) {
if (isPlayer) {
descriptionSB.append(" [style.colourSex(Within your " + Capacity.getCapacityFromValue(viewedVagina.getOrificeVagina().getStretchedCapacity()).getDescriptor() + " [pc.pussy], your hymen is still intact, as it has never been penetrated before.)]" + " [style.colourGood(You have retained your vaginal virginity.)]");
} else {
descriptionSB.append(" [style.colourSex(Within [npc.her] " + Capacity.getCapacityFromValue(viewedVagina.getOrificeVagina().getStretchedCapacity()).getDescriptor() + " [npc.pussy], [npc.her] hymen is still intact, as it has never been penetrated before.)]" + " [style.colourGood([npc.She] has retained [npc.her] vaginal virginity.)]");
}
} else {
if (isPlayer) {
descriptionSB.append(" [style.colourSex(Your pussy is " + Capacity.getCapacityFromValue(viewedVagina.getOrificeVagina().getStretchedCapacity()).getDescriptor() + ", and can comfortably take " + Capacity.getCapacityFromValue(viewedVagina.getOrificeVagina().getStretchedCapacity()).getMaximumSizeComfortableWithLube().getDescriptor() + " cocks with sufficient lubrication.)]");
for (PenetrationType pt : PenetrationType.values()) {
if (Main.game.getPlayer().getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.VAGINA)) != null && !Main.game.getPlayer().getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.VAGINA)).isEmpty() && pt.isTakesVirginity()) {
descriptionSB.append(" <span style='color:" + Colour.GENERIC_ARCANE.toWebHexString() + ";'>You lost your virginity to " + Main.game.getPlayer().getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.VAGINA)) + ".</span>");
break;
}
}
} else {
descriptionSB.append(" [style.colourSex([npc.Her] pussy is " + Capacity.getCapacityFromValue(viewedVagina.getOrificeVagina().getStretchedCapacity()).getDescriptor() + ", and can comfortably take " + Capacity.getCapacityFromValue(viewedVagina.getOrificeVagina().getStretchedCapacity()).getMaximumSizeComfortableWithLube().getDescriptor() + " cocks with sufficient lubrication.)]");
}
}
// Wetness:
switch(viewedVagina.getOrificeVagina().getWetness(owner)) {
case ZERO_DRY:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(It's completely dry and never gets wet, no matter how aroused you are.)]");
} else {
descriptionSB.append(" [style.colourSex(It's completely dry and never gets wet, no matter how aroused [npc.she] gets.)]");
}
break;
case ONE_SLIGHTLY_MOIST:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(It's slightly moist, and you need a huge amount of stimulation before you get wet.)]");
} else {
descriptionSB.append(" [style.colourSex(It's slightly moist, and [npc.she] needs a huge amount of stimulation before [npc.she] gets wet.)]");
}
break;
case TWO_MOIST:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(It's moist, but you still need a lot of stimulation before you get wet.)]");
} else {
descriptionSB.append(" [style.colourSex(It's moist, but [npc.she] still needs a lot of stimulation before [npc.she] gets wet.)]");
}
break;
case THREE_WET:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(You only need a small amount of foreplay before it gets wet enough for penetration.)]");
} else {
descriptionSB.append(" [style.colourSex([npc.She] only needs a small amount of foreplay before [npc.she] gets wet enough for penetration.)]");
}
break;
case FOUR_SLIMY:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(It's always slimy and wet, and you're ready for penetration at a moment's notice.)]");
} else {
descriptionSB.append(" [style.colourSex(It's always slimy and wet, and [npc.she]'s ready for penetration at a moment's notice.)]");
}
break;
case FIVE_SLOPPY:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(Its surface is always coated in slimy moisture, and within, your pussy is sloppy and practically begging to be fucked.)]");
} else {
descriptionSB.append(" [style.colourSex(Its surface is always coated in slimy moisture, and within, [npc.her] pussy is sloppy and practically begging to be fucked.)]");
}
break;
case SIX_SOPPING_WET:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(Your pussy is never anything less than sopping wet, and a trickle of your natural lubricant constantly dribbles from your slit.)]");
} else {
descriptionSB.append(" [style.colourSex([npc.Her] pussy is never anything less than sopping wet, and a trickle of [npc.her] natural lubricant constantly dribbles from [npc.her] slit.)]");
}
break;
case SEVEN_DROOLING:
if (isPlayer) {
descriptionSB.append(" [style.colourSex(Your pussy is so wet that it audibly squelches with every step you take, and a constant stream of juices flow from your inviting cunt.)]");
} else {
descriptionSB.append(" [style.colourSex([npc.Her] pussy is so wet that it audibly squelches with every step [npc.she] takes, and a constant stream of juices flow from [npc.her] inviting cunt.)]");
}
break;
default:
break;
}
if (viewedVagina.getOrificeVagina().isSquirter()) {
if (isPlayer) {
descriptionSB.append(" [style.colourSex(You are a squirter, and produce a considerable amount of female ejaculate each time you orgasm.)]");
} else {
descriptionSB.append(" [style.colourSex([npc.She] is a squirter, and produces a considerable amount of female ejaculate each time [npc.she] orgasms.)]");
}
}
// Elasticity & plasticity:
switch(viewedVagina.getOrificeVagina().getElasticity()) {
case ZERO_UNYIELDING:
descriptionSB.append(" [style.colourSex(It is extremely unyielding,");
break;
case ONE_RIGID:
descriptionSB.append(" [style.colourSex(It takes a huge amount of effort to stretch it out,");
break;
case TWO_FIRM:
descriptionSB.append(" [style.colourSex(It does not stretch very easily,");
break;
case THREE_FLEXIBLE:
descriptionSB.append(" [style.colourSex(It reluctantly stretches out when used as a sexual orifice,");
break;
case FOUR_LIMBER:
descriptionSB.append(" [style.colourSex(It is somewhat resistant to being stretched out,");
break;
case FIVE_STRETCHY:
descriptionSB.append(" [style.colourSex(It stretches out fairly easily,");
break;
case SIX_SUPPLE:
descriptionSB.append(" [style.colourSex(It stretches out very easily,");
break;
case SEVEN_ELASTIC:
descriptionSB.append(" [style.colourSex(It is extremely elastic,");
break;
default:
break;
}
switch(viewedVagina.getOrificeVagina().getPlasticity()) {
case ZERO_RUBBERY:
descriptionSB.append(" and will instantly return to its original size.)]");
break;
case ONE_SPRINGY:
descriptionSB.append(" and returns to its original size within a matter of hours.)]");
break;
case TWO_TENSILE:
descriptionSB.append(" and returns to its original size within a day or so.)]");
break;
case THREE_RESILIENT:
descriptionSB.append(" and will return to its original size after a couple of days.)]");
break;
case FOUR_ACCOMMODATING:
descriptionSB.append(" and takes a while to return to its original size.)]");
break;
case FIVE_YIELDING:
descriptionSB.append(" and struggles to return to its original size.)]");
break;
case SIX_MALLEABLE:
descriptionSB.append(" and loses a good portion of its original tightness.)]");
break;
case SEVEN_MOULDABLE:
descriptionSB.append(" and once stretched out, it stays that way.)]");
break;
default:
break;
}
for (OrificeModifier om : OrificeModifier.values()) {
if (owner.hasVaginaOrificeModifier(om)) {
if (owner.isPlayer()) {
switch(om) {
case MUSCLE_CONTROL:
descriptionSB.append(" You have a series of internal muscles lining the inside of your [pc.vagina], allowing you to expertly squeeze and grip down on any intruding object.");
break;
case PUFFY:
descriptionSB.append(" Your labia have swollen up into big, extra-puffy pussy lips.");
break;
case RIBBED:
descriptionSB.append(" The inside of your [pc.vagina] is lined with sensitive, fleshy ribs, which grant you extra pleasure when stimulated.");
break;
case TENTACLED:
descriptionSB.append(" Your [pc.vagina] is filled with tiny little tentacles, which wriggle and squirm with a mind of their own.");
break;
}
} else {
switch(om) {
case MUSCLE_CONTROL:
descriptionSB.append(" [npc.She] has a series of internal muscles lining the inside of [npc.her] [npc.vagina], allowing [npc.herHim] to expertly squeeze and grip down on any intruding object.");
break;
case PUFFY:
descriptionSB.append(" [npc.Her] labia have swollen up into big, extra-puffy pussy lips.");
break;
case RIBBED:
descriptionSB.append(" The inside of [npc.her] [npc.vagina] is lined with sensitive, fleshy ribs, which grant [npc.herHim] extra pleasure when stimulated.");
break;
case TENTACLED:
descriptionSB.append(" [npc.Her] [npc.vagina] is filled with tiny little tentacles, which wriggle and squirm with a mind of their own.");
break;
}
}
}
}
return UtilText.parse(owner, descriptionSB.toString());
}
use of com.lilithsthrone.game.sex.PenetrationType in project liliths-throne-public by Innoxia.
the class Body method getBreastDescription.
public String getBreastDescription(GameCharacter owner, Breast viewedBreast) {
descriptionSB = new StringBuilder();
boolean isPlayer = owner.isPlayer();
boolean playerKnowledgeOfBreasts = owner.getPlayerKnowsAreas().contains(CoverableArea.NIPPLES);
if (!isPlayer && !playerKnowledgeOfBreasts) {
descriptionSB.append("You've never seen [npc.her] naked chest, so you don't know what [npc.her] nipples look like.");
} else if (isPlayer) {
descriptionSB.append("On each of your " + (owner.hasBreasts() ? owner.getBreastShape().getName() + " breasts" : "pecs") + ", you have " + Util.intToString(owner.getNippleCountPerBreast()) + " [pc.nippleSize], ");
switch(owner.getNippleShape()) {
case NORMAL:
descriptionSB.append(" [pc.nipplePrimaryColour(true)]");
break;
case LIPS:
descriptionSB.append(" [pc.nipplePrimaryColour(true)]-lipped");
break;
case VAGINA:
descriptionSB.append(" [pc.nipplePrimaryColour(true)]-lipped");
break;
}
if (owner.getNippleCountPerBreast() > 1) {
descriptionSB.append(" [pc.nipples],");
} else {
descriptionSB.append(" [pc.nipple],");
}
switch(owner.getAreolaeShape()) {
case NORMAL:
descriptionSB.append(" with [pc.areolaeSize], circular areolae.");
break;
case HEART:
descriptionSB.append(" with [pc.areolaeSize], heart-shaped areolae.");
break;
case STAR:
descriptionSB.append(" with [pc.areolaeSize], star-shaped areolae.");
break;
}
if (owner.isPiercedNipple()) {
descriptionSB.append(" They have been pierced.");
}
if (owner.getNippleCapacity() != Capacity.ZERO_IMPENETRABLE) {
if (viewedBreast.isFuckable()) {
descriptionSB.append("</br>Your [pc.breasts] have internal, [pc.nippleSecondaryColour(true)] channels, allowing your [pc.breastCapacity] [pc.nipples] to be comfortably penetrated by " + Capacity.getCapacityFromValue(viewedBreast.getNipples().getOrificeNipples().getStretchedCapacity()).getMaximumSizeComfortableWithLube().getDescriptor() + " objects with sufficient lubrication.");
} else {
descriptionSB.append("</br>Your [pc.breasts] have internal, [pc.nippleSecondaryColour(true)] channels, but you'd need at least D-cups before your [pc.breastCapacity] [pc.nipples] could be penetrated.");
}
// Nipple elasticity & plasticity:
switch(viewedBreast.getNipples().getOrificeNipples().getElasticity()) {
case ZERO_UNYIELDING:
descriptionSB.append(" [style.colourSex(They are extremely unyielding,");
break;
case ONE_RIGID:
descriptionSB.append(" [style.colourSex(They take a huge amount of effort to stretch out,");
break;
case TWO_FIRM:
descriptionSB.append(" [style.colourSex(They do not stretch very easily,");
break;
case THREE_FLEXIBLE:
descriptionSB.append(" [style.colourSex(They reluctantly stretch out when penetrated,");
break;
case FOUR_LIMBER:
descriptionSB.append(" [style.colourSex(They are somewhat resistant to being stretched out,");
break;
case FIVE_STRETCHY:
descriptionSB.append(" [style.colourSex(They stretch out fairly easily,");
break;
case SIX_SUPPLE:
descriptionSB.append(" [style.colourSex(They stretch out very easily,");
break;
case SEVEN_ELASTIC:
descriptionSB.append(" [style.colourSex(They are extremely elastic,");
break;
default:
break;
}
switch(viewedBreast.getNipples().getOrificeNipples().getPlasticity()) {
case ZERO_RUBBERY:
descriptionSB.append(" and instantly return to their original size.)]");
break;
case ONE_SPRINGY:
descriptionSB.append(" and return to their original size within a matter of hours.)]");
break;
case TWO_TENSILE:
descriptionSB.append(" and return to their original size within a day or so.)]");
break;
case THREE_RESILIENT:
descriptionSB.append(" and will return to their original size after a couple of days.)]");
break;
case FOUR_ACCOMMODATING:
descriptionSB.append(" and take a while to return to their original size.)]");
break;
case FIVE_YIELDING:
descriptionSB.append(" and struggle to return to their original size.)]");
break;
case SIX_MALLEABLE:
descriptionSB.append(" and lose a good portion of their original tightness.)]");
break;
case SEVEN_MOULDABLE:
descriptionSB.append(" and once stretched out, they stay that way.)]");
break;
default:
break;
}
for (OrificeModifier om : OrificeModifier.values()) {
if (owner.hasNippleOrificeModifier(om)) {
switch(om) {
case MUSCLE_CONTROL:
descriptionSB.append(" You have a series of muscles lining the inside of your [pc.nipples], allowing you to expertly squeeze and grip down on any intruding object.");
break;
case PUFFY:
descriptionSB.append(" Your [pc.nipples] have swollen up to be exceptionally plump and puffy.");
break;
case RIBBED:
descriptionSB.append(" The insides of your [pc.nipples] are lined with sensitive, fleshy ribs, which grant you extra pleasure when stimulated.");
break;
case TENTACLED:
descriptionSB.append(" Your [pc.nipples] are filled with tiny little tentacles, which wriggle and squirm with a mind of their own.");
break;
}
}
}
if (!viewedBreast.getNipples().getOrificeNipples().isVirgin()) {
for (PenetrationType pt : PenetrationType.values()) {
if (owner.getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.NIPPLE)) != null && !owner.getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.NIPPLE)).isEmpty()) {
descriptionSB.append(" [style.colourArcane(You lost your nipple virginity to " + owner.getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.NIPPLE)) + ".)]");
break;
}
}
} else {
descriptionSB.append(" [style.colourGood(You have retained your nipple virginity.)]");
}
} else {
if (owner.hasNippleOrificeModifier(OrificeModifier.PUFFY)) {
descriptionSB.append(" Your [pc.nipples] have swollen up to be exceptionally plump and puffy.");
}
}
if (viewedBreast.getRawMilkStorageValue() > 0) {
descriptionSB.append("</br>You are currently producing " + viewedBreast.getRawMilkStorageValue() + "ml of [pc.milkPrimaryColour(true)] [pc.milk] (" + viewedBreast.getRawStoredMilkValue() + "ml currently stored) at [pc.a_milkRegen] rate.");
switch(viewedBreast.getMilk().getFlavour()) {
case CHOCOLATE:
descriptionSB.append(" Your [pc.milk] tastes of chocolate.");
break;
case CUM:
descriptionSB.append(" Your [pc.milk] tastes exactly like cum.");
break;
case GIRL_CUM:
descriptionSB.append(" Your [pc.milk] tastes of girl-cum.");
break;
case HONEY:
descriptionSB.append(" Your [pc.milk] tastes of honey.");
break;
case MILK:
descriptionSB.append(" Your [pc.milk] tastes like regular milk.");
break;
case MINT:
descriptionSB.append(" Your [pc.milk] tastes of mint.");
break;
case PINEAPPLE:
descriptionSB.append(" Your [pc.milk] tastes of pineapple.");
break;
case SLIME:
descriptionSB.append(" Your [pc.milk] is mostly tasteless, but very sweet.");
break;
case STRAWBERRY:
descriptionSB.append(" Your [pc.milk] tastes of strawberries.");
break;
case BEER:
descriptionSB.append(" Your [pc.milk] tastes like beer.");
break;
case VANILLA:
descriptionSB.append(" Your [pc.milk] tastes of vanilla.");
break;
}
for (FluidModifier fm : FluidModifier.values()) {
if (owner.hasMilkModifier(fm)) {
switch(fm) {
case ADDICTIVE:
descriptionSB.append(" It is highly addictive, and anyone who drinks too much will quickly become dependent on it.");
break;
case BUBBLING:
descriptionSB.append(" It fizzes and bubbles like a carbonated drink.");
break;
case HALLUCINOGENIC:
descriptionSB.append(" Anyone who ingests it suffers psychoactive effects, which can manifest in lactation-related hallucinations or sensitivity to hypnotic suggestion.");
break;
case MUSKY:
descriptionSB.append(" It has a strong, musky smell.");
break;
case SLIMY:
descriptionSB.append(" It has a slimy, oily texture.");
break;
case STICKY:
descriptionSB.append(" It's quite sticky, and is difficult to fully wash off without soap.");
break;
case VISCOUS:
descriptionSB.append(" It's quite viscous, and slowly drips in large globules, much like thick treacle.");
break;
case ALCOHOLIC:
descriptionSB.append(" It has a high alcohol content, and will get those who consume it very drunk.");
break;
}
}
}
} else {
descriptionSB.append("</br>You are not producing any milk.");
}
} else {
descriptionSB.append("On each of [npc.her] " + (owner.hasBreasts() ? owner.getBreastShape().getName() + " breasts" : "pecs") + ", [npc.she] has " + Util.intToString(owner.getNippleCountPerBreast()) + " [npc.nippleSize], ");
switch(owner.getNippleShape()) {
case NORMAL:
descriptionSB.append(" [npc.nipplePrimaryColour(true)]");
break;
case LIPS:
descriptionSB.append(" [npc.nipplePrimaryColour(true)]-lipped");
break;
case VAGINA:
descriptionSB.append(" [npc.nipplePrimaryColour(true)]-lipped");
break;
}
if (owner.getNippleCountPerBreast() > 1) {
descriptionSB.append(" [npc.nipples],");
} else {
descriptionSB.append(" [npc.nipple],");
}
switch(owner.getAreolaeShape()) {
case NORMAL:
descriptionSB.append(" with [npc.areolaeSize], circular areolae.");
break;
case HEART:
descriptionSB.append(" with [npc.areolaeSize], heart-shaped areolae.");
break;
case STAR:
descriptionSB.append(" with [npc.areolaeSize], star-shaped areolae.");
break;
}
if (owner.isPiercedNipple()) {
descriptionSB.append(" They have been pierced.");
}
if (owner.getNippleCapacity() != Capacity.ZERO_IMPENETRABLE) {
if (viewedBreast.isFuckable()) {
descriptionSB.append("</br>[npc.Her] [npc.breasts] have internal, [npc.nippleSecondaryColour(true)] channels, allowing [npc.her] [npc.breastCapacity] [npc.nipples] to be comfortably penetrated by " + Capacity.getCapacityFromValue(viewedBreast.getNipples().getOrificeNipples().getStretchedCapacity()).getMaximumSizeComfortableWithLube().getDescriptor() + " objects with sufficient lubrication.");
} else {
descriptionSB.append("</br>[npc.Her] [npc.breasts] have internal, [npc.nippleSecondaryColour(true)] channels, but [npc.she]'s need at least D-cups before [npc.her] [npc.breastCapacity] [npc.nipples] could be penetrated.");
}
// Nipple elasticity & plasticity:
switch(viewedBreast.getNipples().getOrificeNipples().getElasticity()) {
case ZERO_UNYIELDING:
descriptionSB.append(" [style.colourSex(They are extremely unyielding,");
break;
case ONE_RIGID:
descriptionSB.append(" [style.colourSex(They take a huge amount of effort to stretch out,");
break;
case TWO_FIRM:
descriptionSB.append(" [style.colourSex(They do not stretch very easily,");
break;
case THREE_FLEXIBLE:
descriptionSB.append(" [style.colourSex(They reluctantly stretch out when penetrated,");
break;
case FOUR_LIMBER:
descriptionSB.append(" [style.colourSex(They are somewhat resistant to being stretched out,");
break;
case FIVE_STRETCHY:
descriptionSB.append(" [style.colourSex(They stretch out fairly easily,");
break;
case SIX_SUPPLE:
descriptionSB.append(" [style.colourSex(They stretch out very easily,");
break;
case SEVEN_ELASTIC:
descriptionSB.append(" [style.colourSex(They are extremely elastic,");
break;
default:
break;
}
switch(viewedBreast.getNipples().getOrificeNipples().getPlasticity()) {
case ZERO_RUBBERY:
descriptionSB.append(" and instantly return to their original size.)]");
break;
case ONE_SPRINGY:
descriptionSB.append(" and return to their original size within a matter of hours.)]");
break;
case TWO_TENSILE:
descriptionSB.append(" and return to their original size within a day or so.)]");
break;
case THREE_RESILIENT:
descriptionSB.append(" and will return to their original size after a couple of days.)]");
break;
case FOUR_ACCOMMODATING:
descriptionSB.append(" and take a while to return to their original size.)]");
break;
case FIVE_YIELDING:
descriptionSB.append(" and struggle to return to their original size.)]");
break;
case SIX_MALLEABLE:
descriptionSB.append(" and lose a good portion of their original tightness.)]");
break;
case SEVEN_MOULDABLE:
descriptionSB.append(" and once stretched out, they stay that way.)]");
break;
default:
break;
}
for (OrificeModifier om : OrificeModifier.values()) {
if (owner.hasNippleOrificeModifier(om)) {
switch(om) {
case MUSCLE_CONTROL:
descriptionSB.append(" [npc.She] has a series of muscles lining the insides of [npc.her] [npc.nipples], allowing [npc.herHim] to expertly squeeze and grip down on any intruding object.");
break;
case PUFFY:
descriptionSB.append(" [npc.Her] [npc.nipples] have swollen up to be exceptionally plump and puffy.");
break;
case RIBBED:
descriptionSB.append(" The insides of [npc.her] [npc.nipples] are lined with sensitive, fleshy ribs, which grant [npc.herHim] extra pleasure when stimulated.");
break;
case TENTACLED:
descriptionSB.append(" [npc.Her] [npc.nipples] are filled with tiny little tentacles, which wriggle and squirm with a mind of their own.");
break;
}
}
}
if (!viewedBreast.getNipples().getOrificeNipples().isVirgin()) {
for (PenetrationType pt : PenetrationType.values()) {
if (owner.getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.NIPPLE)) != null && !owner.getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.NIPPLE)).isEmpty()) {
descriptionSB.append(" [style.colourArcane([npc.Name] lost [npc.her] nipple virginity to " + owner.getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.NIPPLE)) + ".)]");
break;
}
}
} else {
descriptionSB.append(" [style.colourGood([npc.Name] has retained [npc.her] nipple virginity.)]");
}
if (viewedBreast.getRawMilkStorageValue() > 0) {
descriptionSB.append("</br>[npc.She] is currently producing " + viewedBreast.getRawMilkStorageValue() + "ml of [npc.milkPrimaryColour(true)] [npc.milk] (" + viewedBreast.getRawStoredMilkValue() + "ml currently stored) at [npc.a_milkRegen] rate.");
switch(viewedBreast.getMilk().getFlavour()) {
case CHOCOLATE:
descriptionSB.append(" [npc.Her] [npc.milk] tastes of chocolate.");
break;
case CUM:
descriptionSB.append(" [npc.Her] [npc.milk] tastes exactly like cum.");
break;
case GIRL_CUM:
descriptionSB.append(" [npc.Her] [npc.milk] tastes of girl-cum.");
break;
case HONEY:
descriptionSB.append(" [npc.Her] [npc.milk] tastes of honey.");
break;
case MILK:
descriptionSB.append(" [npc.Her] [npc.milk] tastes like regular milk.");
break;
case MINT:
descriptionSB.append(" [npc.Her] [npc.milk] tastes of mint.");
break;
case PINEAPPLE:
descriptionSB.append(" [npc.Her] [npc.milk] tastes of pineapple.");
break;
case SLIME:
descriptionSB.append(" [npc.Her] [npc.milk] is mostly tasteless, but very sweet.");
break;
case STRAWBERRY:
descriptionSB.append(" [npc.Her] [npc.milk] tastes of strawberries.");
break;
case BEER:
descriptionSB.append(" [npc.Her] [npc.milk] tastes like beer.");
break;
case VANILLA:
descriptionSB.append(" [npc.Her] [npc.milk] tastes of vanilla.");
break;
}
for (FluidModifier fm : FluidModifier.values()) {
if (owner.hasMilkModifier(fm)) {
switch(fm) {
case ADDICTIVE:
descriptionSB.append(" It is highly addictive, and anyone who drinks too much will quickly become dependent on it.");
break;
case BUBBLING:
descriptionSB.append(" It fizzes and bubbles like a carbonated drink.");
break;
case HALLUCINOGENIC:
descriptionSB.append(" Anyone who ingests it suffers psychoactive effects, which can manifest in lactation-related hallucinations or sensitivity to hypnotic suggestion.");
break;
case MUSKY:
descriptionSB.append(" It has a strong, musky smell.");
break;
case SLIMY:
descriptionSB.append(" It has a slimy, oily texture.");
break;
case STICKY:
descriptionSB.append(" It's quite sticky, and is difficult to fully wash off without soap.");
break;
case VISCOUS:
descriptionSB.append(" It's quite viscous, and slowly drips in large globules, much like thick treacle.");
break;
case ALCOHOLIC:
descriptionSB.append(" It has a high alcohol content, and will get those who consume it very drunk.");
break;
}
}
}
} else {
descriptionSB.append("</br>[npc.She] is not producing any milk.");
}
} else {
if (owner.hasNippleOrificeModifier(OrificeModifier.PUFFY)) {
descriptionSB.append(" [npc.Her] [npc.nipples] have swollen up to be exceptionally plump and puffy.");
}
}
}
return UtilText.parse(owner, descriptionSB.toString());
}
use of com.lilithsthrone.game.sex.PenetrationType in project liliths-throne-public by Innoxia.
the class Body method getPenisDescription.
public String getPenisDescription(GameCharacter owner) {
boolean isPlayer = owner.isPlayer();
descriptionSB = new StringBuilder();
Penis viewedPenis = penis;
if (Main.game.getPlayer().hasIngestedPsychoactiveFluidType(FluidTypeBase.CUM)) {
viewedPenis = new Penis(penis.getType(), (int) (penis.getRawSizeValue() * 2.25f), PenisGirth.FOUR_FAT.getValue(), penis.getTesticle().getTesticleSize().getValue() * 2, (int) ((penis.getTesticle().getRawCumProductionValue() + 100) * 3.25f), penis.getTesticle().getTesticleCount());
descriptionSB.append("<i style='color:" + Colour.PSYCHOACTIVE.toWebHexString() + ";'>The psychoactive cum you recently ingested is causing your view of " + (owner.isPlayer() ? "your" : "[npc.name]'s") + " cock to be distorted!</i> ");
}
if (isPlayer) {
descriptionSB.append("You have " + UtilText.generateSingularDeterminer(viewedPenis.getSize().getDescriptor()) + " " + viewedPenis.getSize().getDescriptor() + ", " + (viewedPenis.getGirth() == PenisGirth.TWO_AVERAGE ? "" : viewedPenis.getGirth().getName() + ", ") + (viewedPenis.getRawSizeValue() >= 1 ? viewedPenis.getRawSizeValue() + "-inch" : "sub-1-inch"));
} else {
descriptionSB.append("[npc.She] has " + UtilText.generateSingularDeterminer(viewedPenis.getSize().getDescriptor()) + " " + viewedPenis.getSize().getDescriptor() + ", " + (viewedPenis.getGirth() == PenisGirth.TWO_AVERAGE ? "" : viewedPenis.getGirth().getName() + ", ") + (viewedPenis.getRawSizeValue() >= 1 ? viewedPenis.getRawSizeValue() + "-inch" : "sub-1-inch"));
}
switch(viewedPenis.getType()) {
case HUMAN:
descriptionSB.append(" human cock");
break;
case DEMON_COMMON:
descriptionSB.append(" demonic cock");
break;
case IMP:
descriptionSB.append(" impish cock");
break;
case BOVINE:
descriptionSB.append(" bovine cock");
break;
case CANINE:
descriptionSB.append(" canine cock");
break;
case LUPINE:
descriptionSB.append(" lupine cock");
break;
case FELINE:
descriptionSB.append(" feline cock");
break;
case ALLIGATOR_MORPH:
descriptionSB.append(" reptilian cock");
break;
case SQUIRREL:
descriptionSB.append(" squirrel-like cock");
break;
case EQUINE:
descriptionSB.append(" equine cock");
break;
case REINDEER_MORPH:
descriptionSB.append(" rangiferine cock");
break;
case AVIAN:
descriptionSB.append(" avian cock");
break;
case ANGEL:
descriptionSB.append(" angelic cock");
break;
case NONE:
break;
}
if (isPlayer) {
descriptionSB.append(", which is " + getCoveredInDescriptor(owner) + " [pc.cockFullDescription(true)].");
} else {
descriptionSB.append(", which is " + getCoveredInDescriptor(owner) + " [npc.cockFullDescription(true)].");
}
for (PenisModifier pm : PenisModifier.values()) {
if (owner.hasPenisModifier(pm)) {
switch(pm) {
case RIBBED:
descriptionSB.append(" It's lined with hard, fleshy ribs, which are sure to grant extra pleasure to any orifice that they penetrate.");
break;
case TENTACLED:
descriptionSB.append(" A series of little tentacles coat its surface, which wriggle and squirm with a mind of their own.");
break;
case BARBED:
descriptionSB.append(" Fleshy, backwards-facing barbs line its length.");
break;
case BLUNT:
descriptionSB.append(" The head curves around to a smooth surface.");
break;
case FLARED:
descriptionSB.append(" The head is wide and flared.");
break;
case KNOTTED:
descriptionSB.append(" A fat knot sits at the base.");
break;
case PREHENSILE:
descriptionSB.append(" It is prehensile, and can be manipulated and moved much like a primate's tail.");
break;
case SHEATHED:
descriptionSB.append(" When not in use, it retreats back into the sheath at its base.");
break;
case TAPERED:
descriptionSB.append(" The shaft is tapered, and gets thinner nearer to the head.");
break;
case VEINY:
descriptionSB.append(" Large veins press out from its surface.");
break;
}
}
}
if (owner.isPlayer()) {
if (!viewedPenis.isVirgin()) {
for (OrificeType ot : OrificeType.values()) {
if (owner.getVirginityLoss(new SexType(SexParticipantType.PITCHER, PenetrationType.PENIS, ot)) != null && !owner.getVirginityLoss(new SexType(SexParticipantType.PITCHER, PenetrationType.PENIS, ot)).isEmpty()) {
descriptionSB.append(" [style.colourArcane(You lost your penile virginity to " + owner.getVirginityLoss(new SexType(SexParticipantType.PITCHER, PenetrationType.PENIS, ot)) + ".)]");
break;
}
}
} else {
descriptionSB.append(" [style.colourGood(You have retained your penile virginity.)]");
}
} else {
if (!viewedPenis.isVirgin()) {
for (OrificeType ot : OrificeType.values()) {
if (owner.getVirginityLoss(new SexType(SexParticipantType.PITCHER, PenetrationType.PENIS, ot)) != null && !owner.getVirginityLoss(new SexType(SexParticipantType.PITCHER, PenetrationType.PENIS, ot)).isEmpty()) {
descriptionSB.append(" [style.colourArcane([npc.Name] has lost [npc.her] penile virginity.)]");
break;
}
}
} else {
descriptionSB.append(" [style.colourGood([npc.Name] has retained [npc.her] penile virginity.)]");
}
}
// Capacity:
if (Capacity.getCapacityFromValue(viewedPenis.getOrificeUrethra().getStretchedCapacity()) != Capacity.ZERO_IMPENETRABLE) {
if (isPlayer) {
descriptionSB.append(" Your cock's urethra has been loosened enough that it presents a ready orifice for penetration," + " [style.colourSex(and can be comfortably penetrated by " + Capacity.getCapacityFromValue(viewedPenis.getOrificeUrethra().getStretchedCapacity()).getMaximumSizeComfortableWithLube().getDescriptor() + " cocks with sufficient lubrication.)]");
} else {
descriptionSB.append(" [npc.Her] cock's urethra has been loosened enough that it presents a ready orifice for penetration," + " [style.colourSex(and can be comfortably penetrated by " + Capacity.getCapacityFromValue(viewedPenis.getOrificeUrethra().getStretchedCapacity()).getMaximumSizeComfortableWithLube().getDescriptor() + " cocks with sufficient lubrication.)]");
}
switch(viewedPenis.getOrificeUrethra().getElasticity()) {
case ZERO_UNYIELDING:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It is extremely unyielding,");
break;
case ONE_RIGID:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It takes a huge amount of effort to stretch it out,");
break;
case TWO_FIRM:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It does not stretch very easily,");
break;
case THREE_FLEXIBLE:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It reluctantly stretches out when used as a sexual orifice,");
break;
case FOUR_LIMBER:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It is somewhat resistant to being stretched out,");
break;
case FIVE_STRETCHY:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It stretches out fairly easily,");
break;
case SIX_SUPPLE:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It stretches out very easily,");
break;
case SEVEN_ELASTIC:
descriptionSB.append(" <span style='color:" + Colour.GENERIC_SEX.toWebHexString() + ";'>It is extremely elastic,");
break;
default:
break;
}
switch(viewedPenis.getOrificeUrethra().getPlasticity()) {
case ZERO_RUBBERY:
descriptionSB.append(" and will instantly return to its original size.</span>");
break;
case ONE_SPRINGY:
descriptionSB.append(" and returns to its original size within a matter of hours.</span>");
break;
case TWO_TENSILE:
descriptionSB.append(" and returns to its original size within a day or so.</span>");
break;
case THREE_RESILIENT:
descriptionSB.append(" and will return to its original size after a couple of days.</span>");
break;
case FOUR_ACCOMMODATING:
descriptionSB.append(" and takes a while to return to its original size.</span>");
break;
case FIVE_YIELDING:
descriptionSB.append(" and struggles to return to its original size.</span>");
break;
case SIX_MALLEABLE:
descriptionSB.append(" and loses a good portion of its original tightness.</span>");
break;
case SEVEN_MOULDABLE:
descriptionSB.append(" and once stretched out, it stays that way.</span>");
break;
default:
break;
}
for (OrificeModifier om : OrificeModifier.values()) {
if (owner.hasFaceOrificeModifier(om)) {
if (owner.isPlayer()) {
switch(om) {
case PUFFY:
descriptionSB.append(" Your urethra has transformed into having a swollen, puffy rim.");
break;
case MUSCLE_CONTROL:
descriptionSB.append(" A series of muscles lining the inside of your urethra, allowing you to expertly squeeze and grip down on any intruding object.");
break;
case RIBBED:
descriptionSB.append(" The inside of your urethra is lined with sensitive, fleshy ribs, which grant you extra pleasure when stimulated.");
break;
case TENTACLED:
descriptionSB.append(" Your urethra is filled with tiny little tentacles, which wriggle and squirm with a mind of their own.");
break;
}
} else {
switch(om) {
case PUFFY:
descriptionSB.append(" [npc.Her] urethra has transformed into having a swollen, puffy rim.");
break;
case MUSCLE_CONTROL:
descriptionSB.append(" [npc.She] has a series of muscles lining the inside of [npc.her] urethra, allowing [npc.herHim] to expertly squeeze and grip down on any intruding object.");
break;
case RIBBED:
descriptionSB.append(" The inside of [npc.her] urethra is lined with sensitive, fleshy ribs, which grant [npc.herHim] extra pleasure when stimulated.");
break;
case TENTACLED:
descriptionSB.append(" [npc.Her] urethra is filled with tiny little tentacles, which wriggle and squirm with a mind of their own.");
break;
}
}
}
}
}
if (isPlayer && !owner.isUrethraVirgin()) {
for (PenetrationType pt : PenetrationType.values()) {
if (Main.game.getPlayer().getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.URETHRA)) != null && !Main.game.getPlayer().getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.URETHRA)).isEmpty()) {
descriptionSB.append(" <span style='color:" + Colour.GENERIC_ARCANE.toWebHexString() + ";'>You lost your urethral virginity to " + Main.game.getPlayer().getVirginityLoss(new SexType(SexParticipantType.CATCHER, pt, OrificeType.URETHRA)) + ".</span>");
break;
}
}
}
descriptionSB.append("</br>");
// Pubic Hair:
if (Main.game.isPubicHairEnabled()) {
if (owner.getPubicHairType().getType() == BodyCoveringType.BODY_HAIR_SCALES_ALLIGATOR) {
switch(owner.getPubicHair()) {
case ZERO_NONE:
if (isPlayer) {
descriptionSB.append(" There's no trace of any rough " + owner.getPubicHairType().getName(owner) + " around the base of your cock.");
} else {
descriptionSB.append(" There's no trace of any rough " + owner.getPubicHairType().getName(owner) + " around the base of [npc.her] cock.");
}
break;
case ONE_STUBBLE:
if (isPlayer) {
descriptionSB.append(" You have a small amount of rough " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a small amount of rough " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case TWO_MANICURED:
if (isPlayer) {
descriptionSB.append(" You have a rough patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a rough patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case THREE_TRIMMED:
if (isPlayer) {
descriptionSB.append(" You have a rough patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a rough patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case FOUR_NATURAL:
if (isPlayer) {
descriptionSB.append(" You have a natural amount of rough " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a natural amount of rough " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case FIVE_UNKEMPT:
if (isPlayer) {
descriptionSB.append(" You have an unkempt mass of rough " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has an unkempt mass of rough " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case SIX_BUSHY:
if (isPlayer) {
descriptionSB.append(" You have a thick, rough mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a thick, rough mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case SEVEN_WILD:
if (isPlayer) {
descriptionSB.append(" You have a wild, rough mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a wild, rough mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
}
} else {
switch(owner.getPubicHair()) {
case ZERO_NONE:
if (isPlayer) {
descriptionSB.append(" There is no trace of any " + owner.getPubicHairType().getName(owner) + " around the base of your cock.");
} else {
descriptionSB.append(" There is no trace of any " + owner.getPubicHairType().getName(owner) + " around the base of [npc.her] cock.");
}
break;
case ONE_STUBBLE:
if (isPlayer) {
descriptionSB.append(" You have a stubbly patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a stubbly patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case TWO_MANICURED:
if (isPlayer) {
descriptionSB.append(" You have a neat, manicured patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a neat, manicured patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case THREE_TRIMMED:
if (isPlayer) {
descriptionSB.append(" You have a trimmed patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a trimmed patch of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case FOUR_NATURAL:
if (isPlayer) {
descriptionSB.append(" You have a natural bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a natural bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case FIVE_UNKEMPT:
if (isPlayer) {
descriptionSB.append(" You have an unkempt bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has an unkempt bush of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case SIX_BUSHY:
if (isPlayer) {
descriptionSB.append(" You have a thick, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a thick, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
case SEVEN_WILD:
if (isPlayer) {
descriptionSB.append(" You have a wild, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of your cock.");
} else {
descriptionSB.append(" [npc.She] has a wild, bushy mass of " + owner.getPubicHairType().getFullDescription(owner, true) + " around the base of [npc.her] cock.");
}
break;
}
}
}
descriptionSB.append("</br>");
if (owner.isInternalTesticles()) {
if (isPlayer) {
descriptionSB.append(" Your [pc.ballsCount] [pc.balls+] have shifted to sit inside your body, leaving your [pc.cock] as the only visible part of your male reproductive organs.");
} else {
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls+] have shifted to sit inside [npc.her] body, leaving [npc.her] [npc.cock] as the only visible part of [npc.her] male reproductive organs.");
}
} else {
switch(viewedPenis.getTesticle().getTesticleSize()) {
case ZERO_VESTIGIAL:
if (isPlayer) {
descriptionSB.append(" Your [pc.ballsCount] [pc.balls] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and are so small that they're only just visible as tiny little mounds nestling beneath your [pc.cock].");
} else {
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and are so small that they're only just visible as tiny little mounds nestling beneath [npc.her] [npc.cock].");
}
break;
case ONE_TINY:
if (isPlayer)
descriptionSB.append(" Your [pc.ballsCount] [pc.balls] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and are small enough to comfortably nestle underneath your [pc.cock].");
else
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and are small enough to comfortably nestle underneath [npc.her] [npc.cock].");
break;
case TWO_AVERAGE:
if (isPlayer)
descriptionSB.append(" Your [pc.ballsCount] [pc.balls+] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and dangle down beneath your [pc.cock].");
else
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls+] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and dangle down beneath [npc.her] [npc.cock].");
break;
case THREE_LARGE:
if (isPlayer)
descriptionSB.append(" Your [pc.ballsCount] [pc.balls+] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and hang down beneath your [pc.cock].");
else
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls+] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and hang down beneath [npc.her] [npc.cock].");
break;
case FOUR_HUGE:
if (isPlayer)
descriptionSB.append(" Your [pc.ballsCount] [pc.balls+] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and hang down beneath your [pc.cock].");
else
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls+] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and hang down beneath [npc.her] [npc.cock].");
break;
case FIVE_MASSIVE:
if (isPlayer)
descriptionSB.append(" Your [pc.ballsCount] [pc.balls+] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and hang down beneath your [pc.cock].");
else
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls+] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and hang down beneath [npc.her] [npc.cock].");
break;
case SIX_GIGANTIC:
if (isPlayer)
descriptionSB.append(" Your [pc.ballsCount] [pc.balls+] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and hang down beneath your [pc.cock].");
else
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls+] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and hang down beneath [npc.her] [npc.cock].");
break;
case SEVEN_ABSURD:
if (isPlayer)
descriptionSB.append(" Your [pc.ballsCount] [pc.balls+] are " + getCoveredInDescriptor(owner) + " [pc.ballFullDescription(true)], and hang down beneath your [pc.cock].");
else
descriptionSB.append(" [npc.Her] [npc.ballsCount] [npc.balls+] are " + getCoveredInDescriptor(owner) + " [npc.ballFullDescription(true)], and hang down beneath [npc.her] [npc.cock].");
break;
}
}
String cumName = "[npc.cum+]";
if (owner.isPlayer()) {
cumName = "[pc.cum+]";
}
switch(viewedPenis.getTesticle().getCumProduction()) {
case ZERO_NONE:
if (viewedPenis.getTesticle().getTesticleSize().getValue() > TesticleSize.TWO_AVERAGE.getValue()) {
descriptionSB.append(" Despite their large size, they");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" don't produce any " + cumName + " at all.");
break;
case ONE_TRICKLE:
if (viewedPenis.getTesticle().getTesticleSize().getValue() > TesticleSize.TWO_AVERAGE.getValue()) {
descriptionSB.append(" Despite their large size, they");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" only produce a tiny trickle of " + cumName + " at each orgasm.");
break;
case TWO_SMALL_AMOUNT:
if (viewedPenis.getTesticle().getTesticleSize().getValue() > TesticleSize.THREE_LARGE.getValue()) {
descriptionSB.append(" Despite their large size, they");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" only produce a small amount of " + cumName + " at each orgasm.");
break;
case THREE_AVERAGE:
if (viewedPenis.getTesticle().getTesticleSize().getValue() > TesticleSize.FOUR_HUGE.getValue()) {
descriptionSB.append(" Despite their huge size, they only");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" produce an average amount of " + cumName + " at each orgasm.");
break;
case FOUR_LARGE:
if (viewedPenis.getTesticle().getTesticleSize().getValue() < TesticleSize.TWO_AVERAGE.getValue()) {
descriptionSB.append(" Despite their small size, they");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" produce a large amount of " + cumName + " at each orgasm.");
break;
case FIVE_HUGE:
if (viewedPenis.getTesticle().getTesticleSize().getValue() < TesticleSize.TWO_AVERAGE.getValue()) {
descriptionSB.append(" Despite their small size, they");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" produce a huge amount of " + cumName + " at each orgasm.");
break;
case SIX_EXTREME:
if (viewedPenis.getTesticle().getTesticleSize().getValue() < TesticleSize.TWO_AVERAGE.getValue()) {
descriptionSB.append(" Despite their small size, they");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" produce an extreme amount of " + cumName + " at each orgasm.");
break;
case SEVEN_MONSTROUS:
if (viewedPenis.getTesticle().getTesticleSize().getValue() < TesticleSize.TWO_AVERAGE.getValue()) {
descriptionSB.append(" Despite their small size, they");
} else {
descriptionSB.append(" They");
}
descriptionSB.append(" produce a monstrous amount of " + cumName + " at each orgasm.");
break;
}
if (owner.isPlayer()) {
descriptionSB.append(" Your [pc.cum]");
} else {
descriptionSB.append(" [npc.Her] [npc.cum]");
}
switch(viewedPenis.getTesticle().getCum().getFlavour()) {
case CHOCOLATE:
descriptionSB.append(" tastes of chocolate.");
break;
case CUM:
descriptionSB.append(", much to nobody's surprise, tastes like cum.");
break;
case GIRL_CUM:
descriptionSB.append(" tastes of girl-cum.");
break;
case HONEY:
descriptionSB.append(" tastes of honey.");
break;
case MILK:
descriptionSB.append(" tastes like milk.");
break;
case MINT:
descriptionSB.append(" tastes of mint.");
break;
case PINEAPPLE:
descriptionSB.append(" tastes of pineapple.");
break;
case SLIME:
descriptionSB.append(" is mostly tasteless, but very sweet.");
break;
case STRAWBERRY:
descriptionSB.append(" tastes of strawberries.");
break;
case BEER:
descriptionSB.append(", which tastes like beer.");
break;
case VANILLA:
descriptionSB.append(", which tastes of vanilla.");
break;
}
for (FluidModifier fm : FluidModifier.values()) {
if (owner.hasCumModifier(fm)) {
switch(fm) {
case ADDICTIVE:
descriptionSB.append(" It is highly addictive, and anyone who drinks too much will quickly become dependent on it.");
break;
case BUBBLING:
descriptionSB.append(" It fizzes and bubbles like a carbonated drink.");
break;
case HALLUCINOGENIC:
descriptionSB.append(" Anyone who ingests it suffers psychoactive effects, which can manifest in cum-related hallucinations or sensitivity to hypnotic suggestion.");
break;
case MUSKY:
descriptionSB.append(" It has a strong, musky smell.");
break;
case SLIMY:
descriptionSB.append(" It has a slimy, oily texture.");
break;
case STICKY:
descriptionSB.append(" It's quite sticky, and is difficult to fully wash off without soap.");
break;
case VISCOUS:
descriptionSB.append(" It's quite viscous, and slowly drips in large globules, much like thick treacle.");
break;
case ALCOHOLIC:
descriptionSB.append(" It has a high alcohol content, and will get those who consume it very drunk.");
break;
}
}
}
return UtilText.parse(owner, descriptionSB.toString());
}
use of com.lilithsthrone.game.sex.PenetrationType in project liliths-throne-public by Innoxia.
the class GameCharacter method getDirtyTalk.
/**
* @return A <b>formatted</b> piece of speech, reacting to any current penetration.
*/
public String getDirtyTalk() {
if (!Main.game.isInSex()) {
return "";
} else {
boolean isPlayerDom = Sex.isDom(Main.game.getPlayer());
List<String> speech = new ArrayList<>();
String s = "";
for (OrificeType orifice : OrificeType.values()) {
switch(orifice) {
case ANUS:
s = getDirtyTalkAssPenetrated(Sex.getTargetedPartner(this), isPlayerDom);
break;
case ASS:
s = null;
break;
case BREAST:
s = getDirtyTalkBreastsPenetrated(Sex.getTargetedPartner(this), isPlayerDom);
break;
case MOUTH:
s = getDirtyTalkMouthPenetrated(Sex.getTargetedPartner(this), isPlayerDom);
break;
case NIPPLE:
s = getDirtyTalkNipplePenetrated(Sex.getTargetedPartner(this), isPlayerDom);
break;
case THIGHS:
s = null;
break;
case URETHRA:
s = null;
break;
case VAGINA:
s = getDirtyTalkVaginaPenetrated(Sex.getTargetedPartner(this), isPlayerDom);
break;
}
if (s != null) {
if (!Sex.getPenetratingCharacterUsingOrifice(this, orifice).equals(this)) {
speech.add(s);
}
}
}
for (PenetrationType penetration : PenetrationType.values()) {
switch(penetration) {
case FINGER:
s = getDirtyTalkFingerPenetrating(Sex.getTargetedPartner(this), isPlayerDom);
break;
case PENIS:
s = getDirtyTalkPenisPenetrating(Sex.getTargetedPartner(this), isPlayerDom);
break;
case TAIL:
s = getDirtyTalkTailPenetrating(Sex.getTargetedPartner(this), isPlayerDom);
break;
case TENTACLE:
s = null;
break;
case TONGUE:
s = getDirtyTalkTonguePenetrating(Sex.getTargetedPartner(this), isPlayerDom);
break;
}
if (s != null) {
if (!Sex.getCharactersBeingPenetratedBy(this, penetration).contains(this) || Sex.getCharactersBeingPenetratedBy(this, penetration).size() > 1) {
speech.add(s);
}
}
}
// Choose a random line to say:
if (!speech.isEmpty()) {
// Prefer non-self penetrative speech.
s = speech.get(Util.random.nextInt(speech.size()));
} else if (Sex.isCharacterPenetrated(this)) {
s = UtilText.returnStringAtRandom("Fuck!", "Yeah!", "Oh yeah!");
} else {
s = getDirtyTalkNoPenetration(Sex.getTargetedPartner(this), isPlayerDom);
}
return UtilText.parseSpeech(s, this);
}
}
use of com.lilithsthrone.game.sex.PenetrationType in project liliths-throne-public by Innoxia.
the class GenericOrgasms method getGenericVaginaOrgasmDescription.
private static String getGenericVaginaOrgasmDescription(GameCharacter characterOrgasming) {
genericOrgasmSB.setLength(0);
if (characterOrgasming.isPlayer()) {
genericOrgasmSB.append("A desperate, shuddering heat suddenly crashes up from your [npc1.pussy+], and you let out a manic squeal as a blinding wave of pure ecstasy washes over you.");
} else {
genericOrgasmSB.append("A desperate, shuddering heat suddenly crashes up from [npc1.name]'s [npc1.pussy+], and [npc1.she] lets out a manic squeal as a blinding wave of pure ecstasy washes over [npc1.herHim].");
}
GameCharacter characterPenetrating = Sex.getPenetratingCharacterUsingOrifice(characterOrgasming, OrificeType.VAGINA);
PenetrationType penetration = Sex.getPenetrationTypeInOrifice(characterOrgasming, OrificeType.VAGINA);
if (characterPenetrating != null) {
switch(penetration) {
case FINGER:
if (characterOrgasming.isPlayer()) {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" You curl your fingers up deep inside your [npc1.pussy+], and, while desperately stroking in a 'come-hither' motion," + " you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around your intruding digits.");
} else {
genericOrgasmSB.append(" [npc2.Name]'s fingers carry on pumping away at your [npc1.pussy+], and you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around the intruding digits.");
}
} else {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" [npc1.Name]'s vaginal muscles grip and squeeze around your intruding digits," + " and you continue to stroke and tease [npc1.her] clit, drawing out a series of [npc1.moans+] from between [npc1.her] [npc1.lips+].");
} else {
genericOrgasmSB.append(" [npc1.Name]'s vaginal muscles grip and squeeze around [npc2.name]'s intruding digits," + " and [npc2.she] continues to stroke and tease [npc1.her] clit, drawing out a series of [npc1.moans+] from between [npc1.her] [npc1.lips+].");
}
}
break;
case PENIS:
if (characterOrgasming.isPlayer()) {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" You carry on fucking yourself through your orgasm, letting out a series of high-pitched moans as your vaginal muscles grip and squeeze around your [npc1.cock+].");
} else {
genericOrgasmSB.append(" [npc2.Name] carries on fucking your [npc1.pussy+] through your orgasm, and you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around [npc2.her] [npc2.penis+].");
}
} else {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" You carry on fucking [npc1.name] through [npc1.her] orgasm, causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around your [npc2.cock+].");
} else {
genericOrgasmSB.append(" [npc2.Name] carries on fucking [npc1.name]'s [npc1.pussy+] through [npc1.her] orgasm," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around [npc2.her] [npc2.penis+].");
}
}
break;
case TAIL:
if (characterOrgasming.isPlayer()) {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" You carry on tail-fucking yourself through your orgasm, letting out a series of high-pitched moans as your vaginal muscles grip and squeeze around the intruding object.");
} else {
genericOrgasmSB.append(" [npc2.Name] carries on tail-fucking your [npc1.pussy+] through your orgasm, and you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around the intruding object.");
}
} else {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" You carry on tail-fucking [npc1.name] through [npc1.her] orgasm," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around the intruding object.");
} else {
genericOrgasmSB.append(" [npc2.Name] carries on tail-fucking [npc1.name]'s [npc1.pussy+] through [npc1.her] orgasm," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around the intruding object.");
}
}
break;
case TONGUE:
if (characterOrgasming.isPlayer()) {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" You carry on licking and kissing your clit as you orgasm, letting out a series of high-pitched moans as you feel your vaginal muscles quiver and contract at the overwhelming sensation.");
} else {
genericOrgasmSB.append(" [npc2.Name] carries on licking and kissing at your clit while you orgasm," + " causing you to let out a series of high-pitched moans as you feel your vaginal muscles quiver and contract at the overwhelming sensation.");
}
} else {
if (characterPenetrating.isPlayer()) {
genericOrgasmSB.append(" You carry on licking and kissing [npc1.name]'s clit as [npc1.she] orgasms," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles quiver and contract at the overwhelming sensation.");
} else {
genericOrgasmSB.append(" [npc2.Name] carries on licking and kissing at [npc1.name]'s clit while [npc1.she] orgasms," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles quiver and contract at the overwhelming sensation.");
}
}
break;
case TENTACLE:
break;
}
} else {
// No penetration:
if (characterOrgasming.isPlayer()) {
genericOrgasmSB.append(" Your [npc1.pussy+] clenches down hard, and the wave of disappointment upon finding itself empty almost overwhelms the pleasure that radiates up through your groin.");
} else {
genericOrgasmSB.append(" [npc1.Name]'s [npc1.pussy+] clenches down hard, and the wave of disappointment upon finding itself empty almost overwhelms the pleasure that radiates up through [npc.her] groin.");
}
}
if (characterOrgasming.isVaginaSquirter()) {
if (characterOrgasming.isPlayer()) {
genericOrgasmSB.append(" As your inner muscles spasm and quiver with delight, a huge spurt of female ejaculate squirts out from your [npc1.pussy+].");
} else {
genericOrgasmSB.append(" As [npc1.name]'s inner muscles spasm and quiver with delight, a huge spurt of female ejaculate squirts out from [npc1.her] [npc1.pussy+].");
}
}
if (characterOrgasming.isPlayer()) {
genericOrgasmSB.append(" With a deeply-satisfied sigh, your feminine climax starts to fade, and you take a few deep gasps of air as you seek to catch your breath.");
} else {
genericOrgasmSB.append(" With a deeply-satisfied sigh, [npc1.name]'s feminine climax starts to fade, and [npc1.she] takes a few deep gasps of air as [npc1.she] seeks to catch [npc1.her] breath.");
}
if (characterPenetrating != null) {
return UtilText.parse(characterOrgasming, characterPenetrating, genericOrgasmSB.toString());
} else {
return UtilText.parse(characterOrgasming, genericOrgasmSB.toString());
}
}
Aggregations