protected bool ChangeCock(Creature target, StringBuilder sb) { if (HyperHappySettings.isEnabled) { return(false); } //find the largest c**k. shrink it. if it gets small enough to remove it, do so. if it's the only c**k the creature has, grow a v****a in its place. if (target.hasCock) { GenitalsData oldGenitals = target.genitals.AsReadOnlyData(); C**k largest = target.genitals.LongestCock(); if (largest.DecreaseLengthAndCheckIfNeedsRemoval(Utils.Rand(3) + 1)) { target.genitals.RemoveCock(largest); if (!target.hasCock && !target.hasVagina) { target.AddVagina(.25); target.IncreaseCorruption(); BallsData oldBalls = target.balls.AsReadOnlyData(); target.balls.RemoveAllBalls(); } } sb.Append(CockChangedText(target, oldGenitals, largest.cockIndex)); return(true); } return(false); }
protected internal override string DoTransformation(Creature target, out bool isBadEnd) { isBadEnd = false; //by default, this is 2 rolls at 50%, so a 25% chance of 0 additional tfs, 50% chance of 1 additional tf, 25% chance of 2 additional tfs. //also takes into consideration any perks that increase or decrease tf effectiveness. if you need to roll out your own, feel free to do so. int changeCount = GenerateChangeCount(target, new int[] { 2, 2, 3 }, isEnhanced ? 3 : 1); int totalChanges = 0; StringBuilder sb = new StringBuilder(); //For all of these, any text regarding the transformation should be instead abstracted out as an abstract string function. append the result of this abstract function //to the string builder declared above (aka sb.Append(FunctionCall(variables));) string builder is just a fancy way of telling the compiler that you'll be creating a //long string, piece by piece, so don't do any crazy optimizations first. //the initial text for starting the transformation. feel free to add additional variables to this if needed. sb.Append(InitialTransformationText(target)); //Add any free changes here - these can occur even if the change count is 0. these include things such as change in stats (intelligence, etc) //change in height, hips, and/or butt, or other similar stats. //this will handle the edge case where the change count starts out as 0. //paste this line after any tf is applied, and it will: automatically decrement the remaining changes count. if it becomes 0 or less, apply the total number of changes //underwent to the target's change count (if applicable) and then return the StringBuilder content. //if (--remainingChanges <= 0) return ApplyChangesAndReturn(target, sb, changeCount - remainingChanges); //STATS //Increase player str: if (target.strength < 60 && Utils.Rand(3) == 0) { double delta = target.IncreaseStrength((60 - target.strength) / 10.0); sb.Append(StrengthUpText(delta)); } //Increase player tou: if (target.toughness < 60 && Utils.Rand(3) == 0) { double delta = target.IncreaseToughness((60 - target.toughness) / 10.0); sb.Append(ToughnessUpText(delta)); } //Decrease player spd if it is over 30: if (target.relativeSpeed > 30 && target.speed > 30 && Utils.Rand(3) == 0) { double decrease = target.DecreaseSpeed((target.speed - 30) / 10.0); sb.Append(SpeedDownText(decrease)); } //Increase Corr, up to a max of 50. //this is silent, apparently. if (!isPurified && target.corruption < 50) { target.IncreaseCorruptionBy((50 - target.corruption) / 10.0); } if (totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } //Sex bits - Duderiffic if (target.cocks.Count > 0 && Utils.Rand(2) == 0 && !hyperHappy) { //If the player has at least one dick, decrease the size of each slightly, C**k biggest = target.genitals.LongestCock(); CockData preChange = biggest.AsReadOnlyData(); if (biggest.DecreaseLengthAndCheckIfNeedsRemoval(Utils.Rand(3) + 1)) { target.genitals.RemoveCock(biggest); if (target.cocks.Count == 0 && !target.hasVagina) { BallsData oldBalls = target.balls.AsReadOnlyData(); target.AddVagina(0.25); target.genitals.RemoveAllBalls(); sb.Append(MadeFemale(target, preChange, oldBalls)); } else { sb.Append(ShrunkOneCock(target, preChange, true)); } } else { sb.Append(ShrunkOneCock(target, preChange, false)); } if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Sex bits - girly bool boobsGrew = false; //Increase player's breast size, if they are FF or bigger //do not increase size, but do the other actions: CupSize biggestCup = target.genitals.BiggestCupSize(); if ((biggestCup < CupSize.DD || (!isPurified && biggestCup < CupSize.FF)) && (isEnhanced || Utils.Rand(3) == 0)) { BreastData oldBreasts = target.breasts[0].AsReadOnlyData(); if (target.breasts[0].GrowBreasts((byte)(1 + Utils.Rand(3))) > 0) { boobsGrew = true; sb.Append(GrewFirstBreastRow(target, oldBreasts)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } target.DeltaCreatureStats(sens: .5); } //Remove feathery hair HairData oldHair = target.hair.AsReadOnlyData(); if (base.RemoveFeatheryHair(target)) { sb.Append(RemovedFeatheryHairText(target, oldHair)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //refresh the biggest cup size because we may have grown some breasts earlier. biggestCup = target.genitals.BiggestCupSize(); //If breasts are D or bigger and are not lactating, they also start lactating: if (biggestCup >= CupSize.D && !target.genitals.isLactating && (isEnhanced || boobsGrew || Utils.Rand(3) == 0)) { BreastData preLactation = target.breasts[0].AsReadOnlyData(); target.genitals.StartLactating(); sb.Append(StartedLactatingText(target, preLactation)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } target.DeltaCreatureStats(sens: .5); } //Quad nipples and other 'special isEnhanced things. if (isEnhanced) { //QUAD DAMAGE! if (!target.genitals.hasQuadNipples) { BreastCollectionData oldBreasts = target.genitals.allBreasts.AsReadOnlyData(); target.genitals.SetQuadNipples(true); sb.Append(GrantQuadNippleText(target, oldBreasts)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } else if (target.genitals.isLactating) { BreastCollectionData oldBreasts = target.genitals.allBreasts.AsReadOnlyData(); target.genitals.BoostLactation(2.5); double delta = 0; if (target.genitals.nippleLength < 1 || (target.genitals.nippleLength < 1.5 && !isPurified)) { delta = target.genitals.GrowNipples(0.25); target.DeltaCreatureStats(sens: .5); } sb.Append(BoostedLactationText(target, oldBreasts, delta)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } } //If breasts are already lactating and the player is not lactating beyond a reasonable level, they start lactating more: else { if (target.genitals.isLactating && (target.genitals.lactationStatus < LactationStatus.MODERATE || (!isPurified && target.genitals.lactationStatus < LactationStatus.STRONG)) && (isEnhanced || Utils.Rand(3) == 0)) { BreastCollectionData oldBreasts = target.genitals.allBreasts.AsReadOnlyData(); double delta = 0; target.genitals.BoostLactation(0.75); if (target.genitals.nippleLength < 1 || (target.genitals.nippleLength < 1.5 && !isPurified)) { delta = target.genitals.GrowNipples(0.25); target.DeltaCreatureStats(sens: .5); } sb.Append(BoostedLactationText(target, oldBreasts, delta)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } else if (isPurified && target.genitals.lactationStatus >= LactationStatus.STRONG) { BreastCollectionData oldData = target.genitals.allBreasts.AsReadOnlyData(); target.DeltaCreatureStats(sens: .5); target.genitals.BoostLactation(-1); sb.Append(BoostedLactationText(target, oldData, 0)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } } //If breasts are lactating at a fair level //and the player has not received this status, //apply an effect where the player really wants //to give their milk to other creatures //(capable of getting them addicted): biggestCup = target.genitals.BiggestCupSize(); if (!target.HasPerk <Feeder>() && target.genitals.lactationStatus >= LactationStatus.MODERATE && Utils.Rand(2) == 0 && biggestCup >= CupSize.DD && target.IsCorruptEnough(35)) { target.perks.AddPerk <Feeder>(); sb.Append(GainedFeederPerk(target)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //UNFINISHED //If player has addictive quality and drinks pure version, removes addictive quality. //if the player has a v****a and it is tight, it loosens. if (target.hasVagina) { VaginalLooseness targetLooseness = EnumHelper.Min(VaginalLooseness.LOOSE, target.genitals.maxVaginalLooseness); V****a tightest = target.genitals.TightestVagina(); if (tightest.looseness < targetLooseness && Utils.Rand(2) == 0) { VaginaData preLoosened = tightest.AsReadOnlyData(); tightest.IncreaseLooseness(2); sb.Append(LoosenedTwatText(target, preLoosened)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } target.DeltaCreatureStats(lus: 10); } } //Neck restore if (target.neck.type != NeckType.HUMANOID && Utils.Rand(4) == 0) { NeckData oldData = target.neck.AsReadOnlyData(); target.RestoreNeck(); sb.Append(RestoredNeckText(target, oldData)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Rear body restore if (target.back.type != BackType.SHARK_FIN && Utils.Rand(5) == 0) { BackData oldData = target.back.AsReadOnlyData(); target.RestoreBack(); sb.Append(RestoredBackText(target, oldData)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Ovi perk loss if (!isPurified && target.womb.canRemoveOviposition && Utils.Rand(5) == 0) { target.womb.ClearOviposition(); sb.Append(ClearOvipositionText(target)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //General Appearance (Tail -> Ears -> Paws(fur stripper) -> Face -> Horns //Give the player a bovine tail, same as the minotaur if (!isPurified && target.tail.type != TailType.COW && Utils.Rand(3) == 0) { TailData oldData = target.tail.AsReadOnlyData(); target.UpdateTail(TailType.COW); sb.Append(ChangedTailText(target, oldData)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Give the player bovine ears, same as the minotaur if (!isPurified && target.ears.type != EarType.COW && Utils.Rand(4) == 0 && target.tail.type == TailType.COW) { EarData oldEars = target.ears.AsReadOnlyData(); target.UpdateEars(EarType.COW); sb.Append(ChangedEarsText(target, oldEars)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //If the player is under 7 feet in height, increase their height, similar to the minotaur if (((isEnhanced && target.build.heightInInches < 96) || target.build.heightInInches < 84) && Utils.Rand(2) == 0) { int temp = Utils.Rand(5) + 3; //Slow rate of growth near ceiling if (target.build.heightInInches > 74) { temp = (int)Math.Floor(temp / 2.0); } //Never 0 if (temp == 0) { temp = 1; } byte delta = target.build.IncreaseHeight((byte)temp); sb.Append(GrowTaller(target, delta)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Give the player hoofs, if the player already has hoofs STRIP FUR if (!isPurified && target.lowerBody.type != LowerBodyType.HOOVED && target.ears.type == EarType.COW) { if (Utils.Rand(3) == 0) { var oldData = target.lowerBody.AsReadOnlyData(); target.UpdateLowerBody(LowerBodyType.HOOVED); sb.Append(ChangedLowerBodyText(target, oldData)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } } //If the player's face is non-human, they gain a human face if (!isEnhanced && target.lowerBody.type == LowerBodyType.HOOVED && target.face.type != FaceType.HUMAN && Utils.Rand(4) == 0) { //Remove face before fur! var oldData = target.face.AsReadOnlyData(); target.RestoreFace(); sb.Append(RestoredFaceText(target, oldData)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //isEnhanced get shitty fur var targetFur = new FurColor(HairFurColors.BLACK, HairFurColors.WHITE, FurMulticolorPattern.SPOTTED); if (isEnhanced && (!target.body.IsFurBodyType() || !target.body.mainEpidermis.fur.Equals(targetFur))) { var oldData = target.body.AsReadOnlyData(); if (target.body.type == BodyType.SIMPLE_FUR) { target.body.ChangeMainFur(targetFur); } else { target.UpdateBody(BodyType.SIMPLE_FUR, targetFur); } if (!oldData.IsFurBodyType()) { sb.Append(ChangedBodyText(target, oldData)); } else { sb.Append(ChandedFurToSpots(target, oldData)); } if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //if isEnhanced to probova give a shitty cow face else if (isEnhanced && target.face.type != FaceType.COW_MINOTAUR) { var oldData = target.face.AsReadOnlyData(); target.UpdateFace(FaceType.COW_MINOTAUR); sb.Append(ChangedFaceText(target, oldData)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Give the player bovine horns, or increase their size, same as the minotaur //New horns or expanding mino horns if (!isPurified && Utils.Rand(3) == 0) { var oldHorns = target.horns.AsReadOnlyData(); if (target.horns.type != HornType.BOVINE) { target.UpdateHorns(HornType.BOVINE); sb.Append(ChangedHornsText(target, oldHorns)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } else if (target.horns.type == HornType.BOVINE && target.horns.CanStrengthen && target.horns.significantHornSize < 5) { target.horns.StrengthenTransform(); sb.Append(MadeHornsBigger(target, oldHorns)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } } //Increase the size of the player's hips, if they are not already childbearing or larger if (Utils.Rand(2) == 0 && target.hips.size < 15) { if (isPurified && target.hips.size < 8 || !isPurified) { var oldHips = target.hips.AsReadOnlyData(); if (target.build.GrowHips((byte)(1 + Utils.Rand(4))) > 0) { sb.Append(WidenedHipsText(target, oldHips)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } } } // Remove gills if (Utils.Rand(4) == 0 && target.gills.type != GillType.NONE) { var oldData = target.gills.AsReadOnlyData(); target.RestoreGills(); sb.Append(RestoredGillsText(target, oldData)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Increase the size of the player's ass (less likely then hips), if it is not already somewhat big if (Utils.Rand(2) == 0 && target.butt.size < 8 || (!isPurified && target.butt.size < 13)) { var oldButt = target.butt.AsReadOnlyData(); if (target.butt.GrowButt((byte)(1 + Utils.Rand(2))) > 0) { sb.Append(GrewButtText(target, oldButt)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } } //Nipples Turn Back: if (target.genitals.hasBlackNipples && Utils.Rand(3) == 0) { target.genitals.SetBlackNipples(false); sb.Append(RemovedBlackNippleText(target)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //Debugcunt if (target.hasVagina && target.vaginas.Any(x => x.type != VaginaType.defaultValue) && Utils.Rand(3) == 0) { var oldCollection = target.genitals.allVaginas.AsReadOnlyData(); target.vaginas.ForEach(x => target.genitals.RestoreVagina(x)); sb.Append(RestoreAllVaginasText(target, oldCollection)); if (++totalChanges >= changeCount) { return(FinalizeTransformation(target, sb, totalChanges)); } } //this is the fallthrough that occurs when a tf item goes through all the changes, but does not proc enough of them to exit early. it will apply however many changes //occurred, then return the contents of the stringbuilder. return(FinalizeTransformation(target, sb, changeCount - totalChanges)); }
protected override string OnConsumeAttempt(Creature consumer, out bool consumeItem, out bool isBadEnd) { isBadEnd = false; BimBro bimbroPerk = consumer.GetPerkData <BimBro>(); StringBuilder sb = new StringBuilder(); if (bimbroPerk != null && bimbroPerk.broBody) { sb.Append("You wince as the stuff hits your stomach, already feeling the insidious effects beginning to take hold. A lengthy belch escapes your lips " + "as your stomach gurgles, and you giggle abashedly to yourself."); if (consumer.build.heightInInches < 77) { sb.Append(" ...Did the ground just get farther away? You glance down and realize, you're growing! Like a sped-up flower sprout, you keep on getting " + "taller until finally stopping around... six and a half feet, you assume. Huh. You didn't expect that to happen!"); consumer.build.SetHeight(77); } CupSize biggestSize = consumer.genitals.BiggestCupSize(); if (biggestSize < CupSize.E) { if (biggestSize == CupSize.FLAT) { sb.Append(" Tingling, your chest begins to itch, then swell into a pair of rounded orbs. "); } else { sb.Append(" You feel a tingling inside your breasts. "); } sb.Append("They quiver ominously, and you can't help but squeeze your t**s together to further appreciate the boobquake as another tremor runs through them. " + "Unexpectedly, the shaking pushes your hands further apart as your t**s balloon against each other, growing rapidly against your now-sunken fingers. " + "The quakes continue until calming at around an E-cup."); consumer.breasts[0].SetCupSize(CupSize.E); } //(If v****a = 2tight: if (!consumer.hasVagina) { string armorText = consumer.LowerBodyArmorShort(false) ?? "volumous breasts"; sb.Append(" Before you can even take a breath, an extremely peculiar sensation emanates from your crotch. You can't see through your " + armorText + ", but you can certainly feel the v****a splitting " + (consumer.balls.hasBalls ? "from behind your testicles" : "your groin") + ". Luckily, the c**t-forming doesn't yield any discomfort - on the contrary, you feel yourself falling farther into your chemically-dulled, " + "libido-fueled rut."); if (consumer.hips.size < 12 || consumer.butt.size < 12) { sb.Append(" As if realizing the necessity of womanly proportions to attract the hard cocks your body now craves, your waist pinches slightly inward " + "and your hips and butt swell. You can't help but run a hand across your newly-feminized pelvis, admiring it."); } consumer.AddVagina(); if (consumer.hips.size < 12) { consumer.hips.SetHipSize(12); } if (consumer.butt.size < 12) { consumer.butt.SetButtSize(12); } } sb.Append(GlobalStrings.NewParagraph()); sb.Append("A wave of numbness rolls through your features, alerting you that another change is happening. You reach up to your feel your jaw narrowing, " + "becoming more... feminine? Heavy, filling lips purse in disappointment as your face takes on a very feminine cast. You're probably pretty hot now!" + GlobalStrings.NewParagraph()); if (consumer.femininity < 80) { consumer.femininity.SetFemininity(80); } sb.Append("Your surging, absurdly potent libido surges through your body, reminding you that you need to f**k. Not just bitches, but guys too. " + "Hard cocks, wet pussies, hell, you don't care. They can have both or a dozen of either. You just want to get laid and bone something, " + "hopefully at the same time!"); sb.Append(GlobalStrings.NewParagraph() + "<b>(Perks Updated: Bro Body => Futa Form"); if (bimbroPerk.bimbroBrains) { sb.Append(", Bro Brains => Futa Faculties"); } sb.Append(")" + Environment.NewLine); if (!bimbroPerk.bimbroBrains) { sb.Append("(Perks Gained: Futa Faculties)"); } sb.Append("</b>" + Environment.NewLine); if (consumer.intelligence > 35) { consumer.SetIntelligence(35); } if (consumer.libido < 50) { consumer.SetLibido(50); } } else { sb.Append("You pop the cork from the flask and are immediately assaulted by a cloying, spiced scent that paints visions of a slutty slave-girl's " + "slightly-spread folds. Wow, this is some potent stuff! Well, you knew what you were getting into when you found this bottle! You open wide " + "and guzzle it down, feeling the fire of alcohol burning a path to your belly. The burning quickly fades to a pleasant warmth that makes you " + "light-headed and giggly." + GlobalStrings.NewParagraph()); if (consumer.hair.hairColor != HairFurColors.PLATINUM_BLONDE || consumer.hair.isBald || !consumer.hair.type.growsOverTime || consumer.hair.type.isFixedLength) { sb.Append("The first change that you notice is to your " + consumer.hair.LongDescription() + ". It starts with a tingling in your scalp and intensifies "); if (consumer.hair.isBald) { sb.Append("as hair grows along your previously bald dome, rapidly thickening and lengthening."); } else if (!consumer.hair.type.growsOverTime || consumer.hair.type.isFixedLength) { sb.Append("as it begins changing, reverting to something more natural. As it does, it rapidly gets longer and heavier until it's " + (Measurement.UsesMetric ? "nearly a meter" : "several feet") + " in length."); } else if (consumer.hair.length < 36) { sb.Append("as you feel the weight of your hair growing heavier and longer."); } else { sb.Append("as your hair grows thicker and heavier."); } sb.Append(" You grab a lock of the silken strands and watch open-mouthed while streaks so blonde they're almost white flow down the " + consumer.hair.hairColor.AsString() + " hair. It goes faster and faster until your hair has changed into perfectly bimbo-blonde, flowing locks." + GlobalStrings.NewParagraph()); } sb.Append("Moaning lewdly, you begin to sway your hips from side to side, putting on a show for anyone who might manage to see you. You just feel so... sexy. " + "Too sexy to hide it. Your body aches to show itself and feel the gaze of someone, anyone upon it. Mmmm, it makes you so wet! "); if (!consumer.hasVagina) { consumer.AddVagina(0.25, VaginalLooseness.NORMAL, VaginalWetness.SLICK); if (consumer.isQuadruped) { sb.Append("Wait!? Wet? You wish you could touch yourself between the " + consumer.lowerBody.LongDescription() + ", " + "but you can tell from the fluid running down your hind-legs just how soaked your new v****a is."); } else { sb.Append("Wait!? Wet? You touch yourself between the " + consumer.lowerBody.LongDescription() + " and groan when your fingers sink into a sloppy, wet c**t."); } } else { if (consumer.isQuadruped) { sb.Append("You wish you could sink your fingers into " + (consumer.vaginas.Count > 1 ? "either of your sloppy, wet cunts" : "your sloppy, wet c**t") + " , but as a centaur, you can't quite reach."); if (consumer.vaginas[0].wetness < VaginalWetness.SLICK) { consumer.vaginas[0].SetVaginalWetness(VaginalWetness.SLICK); } } else if (consumer.vaginas.Count > 1) { sb.Append("You alternate slipping your fingers into both of your cunts, moaning with satisfaction at how sloppy and wet they are"); if (consumer.genitals.SmallestVaginalWetness() < VaginalWetness.SLICK) { sb.Append(" now"); } sb.Append("."); } else { sb.Append("You sink your fingers into your "); if (consumer.vaginas[0].wetness < VaginalWetness.SLICK) { sb.Append("now "); } sb.Append("sloppy, wet c**t with a groan of satisfaction."); } } //prevent this from messing up futa form. if (bimbroPerk is null || bimbroPerk.bimboBody) { if (consumer.balls.hasBalls) { sb.Append(GlobalStrings.NewParagraph() + "There's a light pinch against your [sack] that makes you gasp in surprise, followed by an exquisite tightness that makes your " + consumer.genitals.AllVaginasNoun() + " drool. Looking down, <b>you see your balls slowly receding into your body, leaving nothing behind but your puffy mons.</b>"); consumer.balls.RemoveAllBalls(); } if (consumer.hasCock) { sb.Append(GlobalStrings.NewParagraph() + consumer.genitals.EachCockOrCocksShort(Conjugate.YOU, out bool isPlural) + (isPlural ? " seem" : " seems") + " to be responding to the liqueur in " + (isPlural ? "their" : "its") + " own way. Clenching and relaxing obscenely, " + "your genitals begin to drizzle cum onto the ground in front of you, throwing you into paroxysms of bliss. The flow of cum is steady but weak, " + "and each droplet that leaves you lets " + consumer.genitals.EachCockOrCocksShort() + " go more flaccid. Even once you're soft and little, " + "it doesn't stop. You cum your way down to nothing, a tiny droplet heralding your new, girlish groin. <b>You no longer have " + (isPlural ? "any penises" : "a penis") + "!</b>"); } } sb.Append(" Somehow, you feel like you could seduce anyone right now!" + GlobalStrings.NewParagraph()); sb.Append("Another bubbly giggle bursts from your lips, which you then lick hungrily. You, like, totally want some dick to suck! " + "Wow, that came out of left field. You shake your head and try to clear the unexpected, like, words from your head but it's getting kind of hard. " + "Omigosh, you feel kind of like a dumb bimbo after, like, drinking that weird booze. Oh, well, it doesn't matter anyhow – you can, like, " + "still stop the demons and stuff. You'll just have to show off your sexy bod until they're offering to serve you." + GlobalStrings.NewParagraph()); sb.Append("You sigh and run one hand over your " + consumer.breasts[0].LongNippleDescription()); consumer.breasts[0].GrowBreasts((byte)(5 + Utils.Rand(5))); if (consumer.breasts[0].cupSize < CupSize.EE_BIG) { sb.Append(", surprised at how large and rounded your expanding breasts have become while fresh tit-flesh continues to spill out around your needy fingers. " + "They feel so supple and soft, but when you let them go, they still sit fairly high and firm on your chest. The newer, more generous, " + consumer.breasts[0].cupSize.AsText() + " cleavage has you moaning with how sensitive it is, pinching a nipple with one hand "); } else { sb.Append(", admiring how sensitive they're getting. The big breasts start getting bigger and bigger, soft chest-flesh practically oozing out " + "between your fingers as the squishy mammaries sprout like weeds, expanding well beyond any hand's ability to contain them. The supple, " + consumer.breasts[0].cupSize.AsText() + " boobs still manage to sit high on your chest, almost gravity defying in their ability to generate cleavage. " + "You pinch a nipple with one hand "); } consumer.IncreaseSensitivity(20); sb.Append("while the other toys with the juicy entrance of your folds. Mmmm, it, like, feels too good not to touch yourself, and after being worried " + "about getting all dumb and stuff, you need to relax. Thinking is hard, but sex is so easy and, like, natural! You lean back and start grunting " + "as you plunge four fingers inside yourself, plowing " + consumer.genitals.OneVaginaOrVaginasShort() + " like no tomorrow. " + "By now, " + (consumer.vaginas.Count > 1 ? "its " : "your ") + consumer.vaginas[0].c**t.LongDescription() + " is throbbing, " + "and you give it an experimental "); if (consumer.clits[0].length >= 3) { sb.Append("jerk "); } else { sb.Append("caress "); } sb.Append("that makes your " + consumer.lowerBody.LongDescription() + " give out as you cum, splattering female fluids as you convulse " + "nervelessly on the ground." + GlobalStrings.NewParagraph()); sb.Append("Though the o****m is intense, you recover a few moments later feeling refreshed, but still hot and horny. Maybe you could find a partner to f**k? " + "After all, sex is, like, better with a partner or two. Or that number after two. You brush a lengthy, platinum blonde strand of hair out of your eyes " + "and lick your lips - you're ready to have some fun!" + GlobalStrings.NewParagraph()); if (consumer.hips.size < 12 || consumer.butt.size < 12) { sb.Append("As you start to walk off in search of a sexual partner, you feel your center of balance shifting."); if (consumer.hips.size < 12 && consumer.butt.size < 12) { sb.Append(" Your ass and hips inflate suddenly, forcing you to adopt a slow, swaying gait. You find that rolling your hips back and forth " + "comes naturally to you. You make sure to squeeze your butt-muscles and make your curvy tush jiggle as you go."); consumer.butt.SetButtSize(12); consumer.hips.SetHipSize(12); } else if (consumer.hips.size < 12) { sb.Append(" Your hips widen suddenly, forcing you to adopt a slow, swaying gait. You find that rolling yours hips back and forth " + "comes naturally to you, and your big, obscene ass seems to jiggle all on its own with every step you take."); consumer.hips.SetHipSize(12); } else { sb.Append(" Your " + consumer.build.ButtLongDescription() + " swells dramatically, the puffy cheeks swelling with newfound weight " + "that jiggles along with each step. Clenching your glutes to make the posh cheeks jiggle a little more enticingly becomes second nature " + "to you in a few seconds."); consumer.butt.SetButtSize(12); } sb.Append(GlobalStrings.NewParagraph()); } if (consumer.build.muscleTone > 0) { sb.Append("Like, weirdest of all, your muscles seem to be vanishing! Before your eyes, all muscle tone vanishes, leaving your body soft and gently curvy. " + "You poke yourself and giggle! Everyone's totally going to want to, like, rub up against you at every opportunity. " + "Your thighs are so soft you bet you could squeeze a pair of dicks to o****m without even touching your moist cunny."); sb.Append(" It does get a bit harder to carry yourself around with your diminished strength, but that's, like, what big strong hunks are for anyways! " + "You can just flirt until one of them volunteers to help out or something! Besides, you don't need to be strong to jerk off cocks " + "or finger slutty pussies!"); sb.Append(GlobalStrings.NewParagraph()); } if (bimbroPerk == null) { sb.Append("<b>Perks gained : Bimbo Body, Bimbo Brains</b>" + Environment.NewLine); } else if (bimbroPerk.bimboBody && !bimbroPerk.bimbroBrains) { sb.Append("<b>(Bimbo Body - Perk Gained!)</b>" + Environment.NewLine); } else if (!bimbroPerk.bimboBody && bimbroPerk.bimbroBrains) { sb.Append("<b>(Bimbo Brains - Perk Gained!)</b>" + Environment.NewLine); //int to 20. max int 50) } if (consumer.intelligence > 21) { consumer.SetIntelligence((byte)Math.Floor(Math.Max(consumer.intelligenceTrue / 5.0, 21))); } consumer.HaveGenericVaginalOrgasm(0, false, true); consumer.DeltaCreatureStats(inte: -1, lib: 4, sens: 25); //FULL ON BITCHFACE sb.Append(consumer.ModifyFemininity(100, 100)); //Body //Tease/Seduce Boost //*boosts min lust and lust resistance) //*Tit size //Brain //Max int - 50 } consumeItem = true; return(sb.ToString()); }