Ejemplo n.º 1
0
        //standard: measurement as adjective + cupsize + breastNoun;
        internal static string Desc(IBreast breast, bool alternateFormat, bool plural, bool preciseMeasurements, bool includeNipples)
        {
            string intro = "";

            if (plural && alternateFormat)
            {
                intro = "a pair of ";
            }

            bool getArticle = alternateFormat && !plural;

            if (!includeNipples)
            {
                string milkText;

                if (preciseMeasurements)
                {
                    if (breast.isOverFull)
                    {
                        milkText = (getArticle ? "a " : "") + "milk-swollen ";
                    }
                    else
                    {
                        milkText = " ";
                    }
                    return(intro + milkText + breast.cupSize.AsText() + " " + ShortDesc(breast, plural));
                }
                else
                {
                    milkText = breast.isOverFull ? ", milk-swollen " : " ";
                    return(intro + breast.cupSize.DescribeSize(breast.gender, getArticle) + milkText + ShortDesc(breast, plural));
                }
            }
            else
            {
                string milkText = breast.isOverFull ? ", milk-swollen " : " ";

                string withText = plural ? ", each with " : " with ";
                if (preciseMeasurements)
                {
                    return(intro + breast.cupSize.DescribeSize(breast.gender, getArticle) + milkText + breast.cupSize.AsText() + " " + ShortDesc(breast, plural) + withText + breast.FullNippleDescription(true, true, true));
                }
                else
                {
                    return(intro + breast.cupSize.DescribeSize(breast.gender, getArticle) + milkText + ShortDesc(breast, plural) + withText + breast.FullNippleDescription(true, true, false));
                }
            }
        }
        //Note: nipple cannot be null, but breast can. make sure to check for null on breast whenever using it.
        //note: if plural is set to true, with article is ignored. the alternate format for plural is identical to the regular format.
        private static string LongFullDesc(INipple nipple, IBreast breast, bool withArticle, bool allAvailableNipples, bool preciseMeasurements, bool full)
        {
            StringBuilder sb = new StringBuilder();

            if (full && breast?.piercings.wearingJewelry == true)
            {
                sb.Append("pierced");
            }

            if (nipple.blackNipples)
            {
                if (sb.Length > 0)
                {
                    sb.Append(", ");
                }

                sb.Append("black");
            }

            if (nipple.lactationStatus > LactationStatus.NOT_LACTATING)
            {
                if (sb.Length > 0)
                {
                    sb.Append(", ");
                }
                //creature is not null or islactating would be false.
                var lactationState = nipple.lactationStatus;
                //Light lactation
                if (lactationState < LactationStatus.MODERATE)
                {
                    sb.Append(Utils.RandomChoice("milk moistened", "slightly lactating", "milk-dampened"));
                }
                //Moderate lactation
                else if (lactationState < LactationStatus.STRONG)
                {
                    sb.Append(Utils.RandomChoice("lactating", "milky", "milk-seeping"));
                }
                //Heavy lactation
                else
                {
                    sb.Append(Utils.RandomChoice("dripping", "dribbling", "milk-leaking", "drooling"));
                }
            }
            if (nipple.status.IsInverted())
            {
                if (sb.Length > 0)
                {
                    sb.Append(", ");
                }
                //else... shit. different articles.
                if (nipple.status == NippleStatus.SLIGHTLY_INVERTED)
                {
                    sb.Append("slightly-");
                }
                sb.Append("inverted");
            }

            //check if we've added any adjectives. if we have, the length is > 0. if not, try using lust. if that doesn't work, we don't have any adjectives :(.
            if (sb.Length == 0 && nipple.relativeLust > 50)
            {
                if (nipple.relativeLust >= 75)
                {
                    sb.Append(Utils.RandomChoice("throbbing", "trembling", "needy ", "throbbing "));
                }
                else
                {
                    sb.Append(Utils.RandomChoice("erect ", "perky ", "erect ", "firm ", "tender "));
                }
            }


            if (nipple.status == NippleStatus.DICK_NIPPLE)
            {
                if (nipple.quadNipples)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(", ");
                    }
                    sb.Append("quad-tipped");
                }

                if (sb.Length > 0)
                {
                    sb.Append(" ");
                }
                sb.Append(Utils.PluralizeIf("dick-nipple", allAvailableNipples));
            }
            else if (nipple.status == NippleStatus.FUCKABLE)
            {
                if (nipple.quadNipples)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(", ");
                    }
                    sb.Append(Utils.PluralizeIf("quad-fuckable nipple", allAvailableNipples));
                }
                else
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(" ");
                    }
                    sb.Append(Utils.PluralizeIf("nipple-c**t", allAvailableNipples));
                }
            }
            else
            {
                if (sb.Length > 0)
                {
                    sb.Append(" ");
                }
                if (nipple.quadNipples)
                {
                    sb.Append("quad-");
                }
                sb.Append(Utils.PluralizeIf("nipple", allAvailableNipples));
            }

            bool needsArticle = !allAvailableNipples && withArticle;

            if (preciseMeasurements)
            {
                //...shit. eight uses an. well, i guess add article if handles that now. not a huge fan but i guess it works.
                return(Utils.AddArticleIf(Measurement.ToNearestQuarterInchOrMillimeter(nipple.length, false, false), needsArticle) + sb.ToString());
            }
            else
            {
                return(NippleSizeAdjective(nipple.length, needsArticle) + sb.ToString());
            }
        }
        //Note: nipple cannot be null, but breast can. make sure to check for null on breast whenever using it.
        private static string ShortDesc(INipple nipple, IBreast breast, bool plural, bool singleMemberFormatIfNotPlural, bool allowQuadNippleText)
        {
            bool needsArticle = !plural && singleMemberFormatIfNotPlural;

            //regardless of the above boolean, the noun will not need an article in nearly every instance. therefore, by default, we can simply calculate the
            //noun ahead of time and just use it when needed. technically, i could write the function call everywhere, but imo it's cleaner to write it this way.
            //when we do fall through to a case where we need an article on the noun directly, this variable will be incorrect and thus we'll need to overwrite it,
            //but it's worth trading the slight performance/memory cost (and i mean slight) for much cleaner code.
            string noun = NounText(nipple, plural, allowQuadNippleText);


            int randVal = Utils.Rand(3);

            //adjectives:
            //33.3% we desribe special things (pierced, gooey, black) if possible
            //33.3% we desribe arousal related things (lactating, fuckable, just plain aroused) if possible.

            //80% of the remaining amount uses the size desriptors. this remaining amount ranges from 33.3% of the total, if a special condition is possible
            //and an arousal condition is possible, to 100% of the total if none of the special or arousal thing are possible.
            //the last 20% of the remaining amount simply does not have an adjective.

            //the original odds were conviluted to say the least, with mixes of  anywhere from 0-75% available in some cases.

            bool isLactating    = nipple.lactationStatus > LactationStatus.NOT_LACTATING;
            bool wearingJewelry = breast?.piercings.wearingJewelry == true;

            if (randVal == 0 && (wearingJewelry || nipple.bodyType == BodyType.GOO || nipple.blackNipples))
            {
                if (wearingJewelry)
                {
                    var leftHorJewelry = breast.piercings[NipplePiercingLocation.LEFT_HORIZONTAL];
                    //if (piercing is nipple chain) return "chained " + nount;

                    return((needsArticle ? "a " : "") + "pierced " + noun);
                }
                else if (nipple.bodyType == BodyType.GOO)
                {
                    return((needsArticle ? "a " : "") + Utils.RandomChoice("slime-slick ", "goopy ", "slippery ") + noun);
                }
                else
                {
                    if (needsArticle)
                    {
                        return(Utils.RandomChoice("a black ", "an ebony ", "a sable ") + noun);
                    }
                    else
                    {
                        return(Utils.RandomChoice("black ", "ebony ", "sable ") + noun);
                    }
                }
            }
            else if (randVal == 1 && (isLactating || nipple.status == NippleStatus.DICK_NIPPLE || nipple.status == NippleStatus.FUCKABLE || nipple.relativeLust >= 50))
            {
                //Fuckable chance first!
                if (nipple.status == NippleStatus.FUCKABLE)
                {
                    //Fuckable and lactating?
                    if (isLactating)
                    {
                        return((needsArticle ? "a " : "") + Utils.RandomChoice("milk-lubricated ", "lactating ", "lactating ", "milk-slicked ", "milky ") + noun);
                    }
                    //Just fuckable
                    else
                    {
                        return((needsArticle ? "a " : "") + Utils.RandomChoice("wet ", "mutated ", "slimy ", "damp ", "moist ", "slippery ", "oozing ", "sloppy ", "dewy ") + noun);
                    }
                }
                else if (nipple.status == NippleStatus.DICK_NIPPLE)
                {
                    if (isLactating)
                    {
                        return((needsArticle ? "a " : "") + Utils.RandomChoice("milk-lubricated ", "lactating ", "lactating ", "milk-slicked ", "milky ") + "dick-" + noun);
                    }
                    //Just dick-nipple
                    else
                    {
                        if (needsArticle)
                        {
                            return(Utils.RandomChoice("a mutant ", "a ", "a large ", "", "an upward-curving ") + "dick-" + noun);
                        }
                        else
                        {
                            return(Utils.RandomChoice("mutant ", "", "large ", "", "upward-curving ") + "dick-" + noun);
                        }
                    }
                }
                //Just lactating!
                else if (isLactating)
                {
                    var lactationState = nipple.lactationStatus;
                    //Light lactation
                    if (lactationState < LactationStatus.MODERATE)
                    {
                        return((needsArticle ? "a " : "") + Utils.RandomChoice("milk moistened ", "slightly lactating ", "milk-dampened ") + noun);
                    }
                    //Moderate lactation
                    else if (lactationState < LactationStatus.STRONG)
                    {
                        return((needsArticle ? "a " : "") + Utils.RandomChoice("lactating ", "milky ", "milk-seeping ") + noun);
                    }
                    //Heavy lactation
                    else
                    {
                        return((needsArticle ? "a " : "") + Utils.RandomChoice("dripping ", "dribbling ", "milk-leaking ", "drooling ") + noun);
                    }
                }
                //horny, none of the above
                else
                {
                    if (nipple.relativeLust >= 75)
                    {
                        return((needsArticle ? "a " : "") + Utils.RandomChoice("throbbing ", "trembling ", "needy ", "throbbing ") + noun);
                    }
                    else                     //(nipple.relativeLust >= 50)
                    {
                        if (needsArticle)
                        {
                            return(Utils.RandomChoice("an erect ", "a perky ", "an erect ", "a firm ", "a tender ") + noun);
                        }
                        else
                        {
                            return(Utils.RandomChoice("erect ", "perky ", "erect ", "firm ", "tender ") + noun);
                        }
                    }
                }
            }
            else if (Utils.Rand(5) != 0)             //randVal is a 1 or some above condition failed. Procs
            {
                string size = NippleStrings.NippleSizeAdjective(nipple.length, true);
                if (!string.IsNullOrEmpty(size) || !needsArticle)
                {
                    return(size + noun);
                }
            }

            //fall through case.
            if (!needsArticle)
            {
                return(noun);
            }
            else
            {
                return(SingleFormatNippleText(nipple, allowQuadNippleText));
            }
        }
 public static string RowFullDescription(INipple nipple, IBreast breast, bool alternateFormat, bool plural, bool usePreciseMeasurements)
 {
     return(LongFullDesc(nipple, breast, alternateFormat, plural, usePreciseMeasurements, true));
 }
 public static string RowSingleItemDescription(INipple nipple, IBreast breast, bool allowQuadNippleText) => ShortDesc(nipple, breast, false, true, allowQuadNippleText);
 public static string RowShortDescription(INipple nipple, IBreast breast, bool plural, bool allowQuadNippleText) => ShortDesc(nipple, breast, plural, false, allowQuadNippleText);
Ejemplo n.º 7
0
 internal static string SingleItemDesc(IBreast breast)
 {
     return(Noun(breast, false, true));
 }
Ejemplo n.º 8
0
 internal static string ShortDesc(IBreast breast, bool plural)
 {
     return(Noun(breast, plural, false));
 }
Ejemplo n.º 9
0
        //prints out single, plural, or single with article. plural takes priority over with article flag. Article only in here in case something requires "an"
        private static string Noun(IBreast breast, bool plural, bool withArticle)
        {
            //5 of 10: t**s.*
            //2 of 10: breasts.
            //1 of 10: jugs.
            //1 of 10: boobs/love pillows
            //1 of 10: milk-udders*

            //2 of 10 on the t**s require a size - 1st >4, 2nd >6, or fall through to breasts.
            //udders requires lactation; falls through to breasts.

            if (breast.cupSize == CupSize.FLAT)
            {
                return("flat breasts");
            }


            int rand = Utils.Rand(10);


            if (rand < 3 || (rand == 3 && breast.cupSize > CupSize.DD_BIG))
            {
                if (plural)
                {
                    return("t**s");
                }
                else if (withArticle)
                {
                    return("a tit");
                }
                else
                {
                    return("tit");
                }
            }
            else if (rand == 4 && breast.lactationRate > 1.5)
            {
                if (plural || !withArticle)
                {
                    return("milky " + Utils.PluralizeIf(breast.cupSize > CupSize.D ? "tit" : "breast", plural));
                }
                else
                {
                    return("a milky " + (breast.cupSize > CupSize.D ? "tit" : "breast"));
                }
            }
            else if ((rand == 5 && breast.lactationRate > 2) || (rand == 6 && breast.lactationRate > 2.5))
            {
                if (plural || !withArticle)
                {
                    return(Utils.PluralizeIf("milk-udder", plural));
                }
                else
                {
                    return("a milk-udder");
                }
            }
            else if (rand == 6)
            {
                if (withArticle && !plural)
                {
                    return("a " + (breast.lactationRate > 1.5 ? "milk " : "") + "jug");
                }
                else
                {
                    return((breast.lactationRate > 1.5 ? "milk " : "") + Utils.PluralizeIf("jug", plural));
                }
            }
            else if (rand == 7 && breast.cupSize > CupSize.DD_BIG)
            {
                if (withArticle && !plural)
                {
                    return("a love-pillow");
                }
                else
                {
                    return(Utils.Pluralize("love-pillow"));
                }
            }
            else if (rand == 7)
            {
                if (withArticle && !plural)
                {
                    return("a boob");
                }
                else
                {
                    return(Utils.Pluralize("boob"));
                }
            }
            //8 or 9 or fell through.

            if (withArticle && !plural)
            {
                return("a breast");
            }
            return(Utils.PluralizeIf("breast", plural));
        }