protected override DynamicTimeReaction HandleBirthing() { DynamicTimeReaction retVal = ((SpawnTypeIncludeAnal)spawnType).HandleAnalBirth(creatureID); CreatureStore.GetCreatureClean(creatureID)?.genitals.ass.HandleBirth(spawnType.sizeOfCreatureAtBirth); return(retVal); }
public string FullDescription(HairData hair, bool alternateFormat = false) { if (this == NO_HAIR || hair.length == 0) { return(NO_HAIR.LongDescription(hair, alternateFormat)); } else { byte creatureHeight = CreatureStore.GetCreatureClean(hair.creatureID)?.build.heightInInches ?? Build.DEFAULT_HEIGHT; StringBuilder sb = new StringBuilder(LengthText(hair.length, creatureHeight) + hair.hairColor.AsString()); if (hair.style != HairStyle.NO_STYLE) { sb.Append(", "); } else { sb.Append(" "); } sb.Append(StyleStr(hair.style)); sb.Append(ShortDescription()); sb.Append(HighlightStr(hair.highlightColor)); return(sb.ToString()); } }
protected override DynamicTimeReaction HandleBirthing() { DynamicTimeReaction retVal = spawnType.HandleVaginalBirth(vaginaIndex); CreatureStore.GetCreatureClean(creatureID)?.genitals.vaginas[vaginaIndex].HandleBirth(spawnType.sizeOfCreatureAtBirth); return(retVal); }
public string GenericRemovedBlackNipples() { Creature creature = CreatureStore.GetCreatureClean(creatureID); string armorText = creature?.wearingArmor == true || creature?.wearingUpperGarment == true ? "Undoing your clothes" : "Looking down"; return(GlobalStrings.NewParagraph() + "Something invisible brushes against your " + CommonShortNippleDescription() + ", making you twitch. " + armorText + ", you take a look at your" + " chest and find that your nipples have turned back to their natural flesh color."); }
public string RestoredText(DataClass oldData) { if (CreatureStore.TryGetCreature(creatureID, out Creature creature) && creature is PlayerBase player) { return(oldData.type.RestoredString(oldData, player)); } else { return(""); } }
public string TransformFromText(DataClass previousTypeData) { if (CreatureStore.TryGetCreature(creatureID, out Creature creature) && creature is PlayerBase player) { return(type.TransformFrom(previousTypeData, player)); } else { return(""); } }
public string PlayerDescription() { if (CreatureStore.TryGetCreature(creatureID, out Creature creature) && creature is PlayerBase player) { return(type.PlayerDescription((ThisClass)this, player)); } else { return(""); } }
//long has length, color, and highlights. protected static string GenericLongDesc(HairData hair, bool alternateFormat, string desc) { if (hair.type == NO_HAIR || hair.length == 0) { return(NO_HAIR.LongDescription(hair, alternateFormat)); } else { byte creatureHeight = CreatureStore.GetCreatureClean(hair.creatureID)?.build.heightInInches ?? Build.DEFAULT_HEIGHT; return(LengthText(hair.length, creatureHeight) + " " + hair.hairColor.AsString() + desc + HighlightStr(hair.highlightColor)); } }
public string DescriptionWithColorLengthAndStyle(HairData hair, bool alternateFormat = false) { if (this == NO_HAIR || hair.length == 0) { return(BaldHeadText(alternateFormat)); } else { byte creatureHeight = CreatureStore.GetCreatureClean(hair.creatureID)?.build.heightInInches ?? Build.DEFAULT_HEIGHT; return(LengthText(hair.length, creatureHeight) + hair.hairColor.AsString() + " " + hair.ShortDescription()); } }
public string RemovedExtraBreastRowGenericText(BreastData removedBreastRow) { Creature target = CreatureStore.GetCreatureClean(creatureID); string skinText; bool plural; if (target is null) { skinText = new BodyData(Guid.Empty).ShortEpidermisDescription(out plural); } else { skinText = target.body.ShortEpidermisDescription(out plural); } return($"You stumble back when your center of balance shifts, and though you adjust before you can fall over, you're left to watch in awe as your bottom-most " + $"{removedBreastRow.ShortDescription()} shrink down, disappearing completely into your {(breastRows.Count > 2 ? "abdomen" : "chest")}. The " + $"{removedBreastRow.ShortNippleDescription()} even fade until nothing but {skinText} {(plural ? "remain" : "remains")}. " + SafelyFormattedString.FormattedText("You've lost a row of breasts!", StringFormats.BOLD)); }
internal static string VaginaAdjectiveText(VaginaData v****a, bool fullDesc) { StringBuilder sb = new StringBuilder(); //less confusing way to display values. bool showLooseness; bool showWetness; //guarenteed if virgin, tight, or forced. if (fullDesc || v****a.isVirgin || v****a.looseness == VaginalLooseness.TIGHT) { showLooseness = true; showWetness = true; } //50% each if gaping or looser else if (v****a.looseness == VaginalLooseness.GAPING || v****a.looseness == VaginalLooseness.CLOWN_CAR_WIDE) { showLooseness = Utils.RandBool(); showWetness = Utils.RandBool(); } //else variable. else { //tightness descript - 40% display rate showLooseness = Utils.Rand(5) < 2; //wetness descript - 30% display rate showWetness = Utils.Rand(10) < 3; } if (showLooseness) { sb.Append(v****a.looseness.AsDescriptor()); } if (showWetness && v****a.wetness != VaginalWetness.NORMAL) { if (showLooseness) { sb.Append(", "); } sb.Append(v****a.wetness.AsDescriptor()); } if (v****a.labiaPiercings.isPierced && (fullDesc || Utils.Rand(3) == 0)) { if (showWetness || showLooseness) { sb.Append(", "); } sb.Append("pierced"); } var creature = CreatureStore.GetCreatureClean(v****a.creatureID); if (sb.Length == 0 && creature?.body.type == BodyType.GOO) { if (sb.Length != 0) { sb.Append(", "); } sb.Append(Utils.RandomChoice("gooey", "slimy")); } if (!v****a.everPracticedVaginal) { if (sb.Length != 0) { sb.Append(", "); } sb.Append("true virgin"); } else if (v****a.isVirgin) { if (sb.Length != 0) { sb.Append(", "); } sb.Append("virgin"); } return(sb.ToString()); }
//some of these get an oxford comma on full description, some don't. Sue me. internal static string Desc(IClit c**t, bool alternateFormat, bool full) { double relativeLibido, relativeLust; if (CreatureStore.TryGetCreature(c**t.creatureID, out Creature source)) { relativeLibido = source.relativeLibido; relativeLust = source.relativeLust; } else { relativeLibido = 15; relativeLust = 15; } string size = ""; //this is not a pretty solution, but i'm just going to cheat it anyway. basically, i'm going to check and see if article is null, and if it is, replace it. //by setting it to empty when we don't need it, it'll never be null and thus always skipped. string article = alternateFormat ? null : ""; //Length Adjective - 50% chance if (Utils.RandBool() || full) { size = SizeAdjective(c**t.length, out string temp); if (article is null) { article = temp; } } string adjective = ""; //Descriptive descriptions - 50% chance of being called if (Utils.Rand(2) == 0 || full) { string separator = full ? ", " : " "; //Doggie descriptors - 50% //TODO Conditionals don't make sense, need to introduce a class variable to keep of "something" or move race or Creature/Character //if (creature.hasAnyFur > 2 && Utils.Rand(2) == 0) //{ // description += "bitch-"; // haveDescription = true; //} /*Horse descriptors - 50% * if (creature.hasAnyFur > 2 && !descripted && Utils.Rand(2) == 0) { * descripted = true; * descript += "mare-"; * }*/ //Horny descriptors - 75% chance if (relativeLust > 70 && Utils.Rand(4) < 3) { if (article is null) { article = "a "; } adjective = separator + Utils.RandomChoice("throbbing", "pulsating", "hard"); } //High libido - always use if no other descript else if (relativeLibido > 50 && Utils.Rand(2) == 0) { if (Utils.Rand(4) == 0) { adjective = "insatiable"; if (article is null) { article = "an "; } } else { adjective = separator + Utils.RandomChoice("greedy", "demanding", "rapacious"); if (article is null) { article = "a "; } } } //else if (c**t.clitCockActive && Utils.RandBool()) //{ // adjective = separator + Utils.RandomChoice("mutated", "corrupted"); // if (article is null) article = "a "; //} if (!full) { return(article + size + adjective + " " + ClitNoun()); } //else if (c**t.clitCockActive) //{ // adjective += separator + Utils.RandomChoice("mutated ", "corrupted "); //} else { adjective += " "; } } //100% display rate if pierced and we've fallen through to this point, so we dont need to check for full. if (c**t.piercings.isPierced) { if (article is null) { article = "a "; } return(article + size + adjective + "pierced " + ClitNoun()); } //fall through. will rarely hit this, if ever. return(ClitNoun(article is null)); }
public string PlayerDescription() { if (CreatureStore.TryGetCreature(creatureID, out Creature creature) && creature is PlayerBase player) { string fNale = " You estimate each of them to be about " + Measurement.ToNearestSmallUnit(size, false, true) + " across" + Environment.NewLine; BodyType bodyType = player.body.type; if (count > 0) { if (count == 1) { if (bodyType == BodyType.GOO) { return("Your " + SackDescription() + " clings tightly to your groin, dripping and holding your" + LongDescription(false, false) + " snugly against you." + fNale); } else { return("Your " + SackDescription() + " clings tightly to your groin, holding your" + LongDescription(false, false) + " snugly against you." + fNale); } } else if (!player.hasCock) { if (bodyType.primaryIsFurBased) { return("A fuzzy " + SackDescription() + " filled with " + LongDescription(false, true) + " swings low under where a penis would normally grow." + fNale); } else if (bodyType.epidermisType == EpidermisType.SCALES) { return("A scaley " + SackDescription() + " hugs your " + LongDescription(false, false) + " tightly against your body." + fNale); } else if (bodyType == BodyType.GOO) { return("An oozing, semi-solid sack with " + LongDescription(false, true) + " swings heavily under where a penis would normally grow." + fNale); } else //humanoid or skin. more cases for carapace or rubber could be added, idk. { return(("A " + SackDescription() + " with " + LongDescription(false, true) + " swings heavily under where a penis would normally grow.") + fNale); } } else { if (bodyType.primaryIsFurBased) { return("A fuzzy " + SackDescription() + " filled with " + LongDescription(false, false) + " swings low under your " + player.genitals.AllCocksLongDescription() + "." + fNale); } else if (bodyType.epidermisType == EpidermisType.SCALES) { return("A scaley " + SackDescription() + " hugs your " + LongDescription(false, false) + " tightly against your body." + fNale); } else if (bodyType == BodyType.GOO) { return("An oozing, semi-solid sack with " + LongDescription(false, false) + " swings heavily beneath your " + player.genitals.AllCocksLongDescription() + "." + fNale); } else // if (bodyType == BodyType.HUMANOID) { return("A " + SackDescription() + " with " + LongDescription(false, false) + " swings heavily beneath your " + player.genitals.AllCocksLongDescription() + "." + fNale); } } } else { return(""); } } else { return(""); } }