Exemple #1
0
 public static void AddGenitalia(ref Pawn pawn, ref PawnGenerationRequest request)
 {
     if (CompRJW.Comp(pawn) == null)
     {
         return;
     }
     if (CompRJW.Comp(pawn).orientation == Orientation.None)
     {
         CompRJW.Comp(pawn).Sexualize(pawn);
     }
 }
        static void After_GenerateNewPawnInternal(ref PawnGenerationRequest request, ref Pawn __result)
        {
            if (Nymph_Generator.IsNymph(request))
            {
                Nymph_Generator.set_story(__result);
                Nymph_Generator.set_skills(__result);
            }

            //Log.Message("[RJW]After_GenerateNewPawnInternal:: " + xxx.get_pawnname(__result));
            if (CompRJW.Comp(__result) != null && CompRJW.Comp(__result).orientation == Orientation.None)
            {
                //Log.Message("[RJW]After_GenerateNewPawnInternal::Sexualize " + xxx.get_pawnname(__result));
                CompRJW.Comp(__result).Sexualize(__result);
            }
        }
        public static void SexualityCardToggle(Rect rect, Pawn pawn, Rect creationRect)
        {
            if (pawn == null)
            {
                return;
            }
            if (CompRJW.Comp(pawn) == null)
            {
                return;
            }

            Rect rectNew = new Rect(CharacterCardUtility.BasePawnCardSize.x - 50f, 2f, 24f, 24f);

            if (Current.ProgramState != ProgramState.Playing)
            {
                if (xxx.IndividualityIsActive)                 // Move icon lower to avoid overlap.
                {
                    rectNew = new Rect(creationRect.width - 24f, 56f, 24f, 24f);
                }
                else
                {
                    rectNew = new Rect(creationRect.width - 24f, 30f, 24f, 24f);
                }
            }
            Color old = GUI.color;

            GUI.color = rectNew.Contains(Event.current.mousePosition) ? new Color(0.25f, 0.59f, 0.75f) : new Color(1f, 1f, 1f);
            // TODO: Replace the placeholder icons with... something
            if (CompRJW.Comp(pawn).quirks.ToString() != "None")
            {
                GUI.DrawTexture(rectNew, ContentFinder <Texture2D> .Get("UI/Commands/Service_on"));
            }
            else
            {
                GUI.DrawTexture(rectNew, ContentFinder <Texture2D> .Get("UI/Commands/Service_off"));
            }

            TooltipHandler.TipRegion(rectNew, "SexcardTooltip".Translate());
            if (Widgets.ButtonInvisible(rectNew))
            {
                SoundDefOf.InfoCard_Open.PlayOneShotOnCamera();
                Find.WindowStack.Add(new Dialog_Sexcard(pawn));
            }
            GUI.color = old;
        }
        private static float GetOrientationFactor(Pawn f****r, Pawn f****d, bool ignore_gender)
        {
            float orientation_factor;             //0 or 1

            {
                orientation_factor = 1.0f;

                if (!ignore_gender && !xxx.is_animal(f****r))
                {
                    if (!CompRJW.CheckPreference(f****r, f****d))
                    {
                        //Log.Message("would_fuck( " + xxx.get_pawnname(f****r) + ", " + xxx.get_pawnname(f****d) + " )");
                        //Log.Message("would_fuck() - preference fail");
                        orientation_factor = 0.0f;
                    }
                }
            }
            //Log.Message("would_fuck() - orientation_factor = " + orientation_factor.ToString());
            return(orientation_factor);
        }
        public static void Add(Pawn pawn, Quirk quirk)
        {
            if (!pawn.Has(quirk))
            {
                var hasFertility = pawn.RaceHasFertility();
                if (quirk == Quirk.Fertile && (!hasFertility || CompRJW.Comp(pawn).quirks.ToString().Contains(Quirk.Infertile.Key)))
                {
                    return;
                }
                if (quirk == Quirk.Infertile && (!hasFertility || CompRJW.Comp(pawn).quirks.ToString().Contains(Quirk.Fertile.Key)))
                {
                    return;
                }
                // No fair having a fetish for your own race.
                // But tags don't conflict so having a fetish for robot plant dragons is fine.
                if (quirk.RaceTag != null && pawn.Has(quirk.RaceTag))
                {
                    return;
                }
                if (quirk == Quirk.Fertile)
                {
                    var fertility = HediffDef.Named("IncreasedFertility");
                    if (fertility != null)
                    {
                        pawn.health.AddHediff(fertility);
                    }
                }
                if (quirk == Quirk.Infertile)
                {
                    var infertility = HediffDef.Named("DecreasedFertility");
                    if (infertility != null)
                    {
                        pawn.health.AddHediff(infertility);
                    }
                }

                CompRJW.Comp(pawn).quirks.AppendWithComma(quirk.Key);
                CompRJW.Comp(pawn).quirksave = CompRJW.Comp(pawn).quirks.ToString();
                quirk.DoAfterAdd(pawn);
            }
        }
            internal bool TraitCheckFail(Pawn client)
            {
                if (!xxx.is_human(client))
                {
                    return(true);
                }
                if (!xxx.has_traits(client))
                {
                    return(true);
                }
                if (!(xxx.can_fuck(client) || xxx.can_be_fucked(client)) || !xxx.IsTargetPawnOkay(client))
                {
                    return(true);
                }

                //Log.Message("client:" + client + " w***e:" + w***e);
                if (CompRJW.CheckPreference(client, w***e) == false)
                {
                    return(true);
                }
                return(false);                // Everything ok.
            }
        public static void Clear(Pawn pawn)
        {
            Hediff fertility = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("IncreasedFertility"));

            if (fertility != null)
            {
                pawn.health.RemoveHediff(fertility);
            }
            Hediff infertility = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("DecreasedFertility"));

            if (infertility != null)
            {
                pawn.health.RemoveHediff(infertility);
            }

            CompRJW.Comp(pawn).quirks = new StringBuilder();

            if (CompRJW.Comp(pawn).quirks.Length == 0)
            {
                CompRJW.Comp(pawn).quirks.Append("None");
            }

            CompRJW.Comp(pawn).quirksave = CompRJW.Comp(pawn).quirks.ToString();
        }
Exemple #8
0
        public static void ChangeSex(Pawn pawn, Sex oldsex, Sex newsex)
        {
            // Wakeup pawn sexuality if it has none before

            if (!(CompRJW.Comp(pawn).orientation == Orientation.Asexual || CompRJW.Comp(pawn).orientation == Orientation.None))
            {
                if (oldsex == newsex)
                {
                    return;
                }
            }

            //update ingame genders
            if (newsex == Sex.none)
            {
                return;
            }
            else if (newsex == Sex.male || newsex == Sex.trap)
            {
                pawn.gender = Gender.Male;
            }
            else
            {
                pawn.gender = Gender.Female;
            }

            // Sexualize pawn after installation of parts if it was "not interested in".
            if (oldsex == Sex.none || CompRJW.Comp(pawn).orientation == Orientation.Asexual || CompRJW.Comp(pawn).orientation == Orientation.None)
            {
                if (pawn.kindDef.race.defName.ToLower().Contains("droid") && !AndroidsCompatibility.IsAndroid(pawn))
                {
                    //basic droids,they dont care
                    return;
                }
                else
                {
                    CompRJW.Comp(pawn).Sexualize(pawn, true);
                }
            }

            var old_thought = IsInDenial(pawn);
            var react       = GetReactionHediff(oldsex, newsex);

            if (old_thought == null || old_thought.is_happy())          //pawn either liked it or got used already
            {
                //Log.Message("ChangeSex 1 old_thought" + old_thought);
                //Log.Message("ChangeSex 1 react" + react);
                if (react != null)
                {
                    GiveThought(pawn, react, pawn.IsDesignatedHero());                    //give unhappy, if not hero
                }
                if (old_thought != null)
                {
                    pawn.health.RemoveHediff(old_thought);
                }

                //add tracking hediff
                pawn.health.AddHediff(sex_to_old_sex[oldsex]);
            }
            else                                 //pawn was unhappy
            {
                if (WasThisBefore(pawn, newsex)) //pawn is happy to be previous self
                {
                    GiveThought(pawn, react, happy: true);
                    pawn.health.RemoveHediff(old_thought);
                }
                else                                                         //pawn is still unhappy mix the unhappiness from two
                {
                    react = GetReactionHediff(GetOriginalSex(pawn), newsex); //check reaction from original sex
                    if (react != null)
                    {
                        GiveThought(pawn, react, old_thought: old_thought);
                        pawn.health.RemoveHediff(old_thought);
                    }
                    //else pawn keeps old unhappy thought
                }
            }
        }
Exemple #9
0
            //Create a new menu option that will contain some of the relevant data for debugging RJW
            //Window space is limited, so keep to one line per pawn. Additional data may need a separate menu
            static FloatMenuOption newMenuOption(Pawn pawn)
            {
                return(new FloatMenuOption("RJW WouldFuck", () =>
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine("canFuck: " + xxx.can_fuck(pawn) + ", canBeFucked: " + xxx.can_be_fucked(pawn) + ", loving: " + xxx.can_do_loving(pawn));
                    stringBuilder.AppendLine("canRape: " + xxx.can_rape(pawn) + ", canBeRaped: " + xxx.can_get_raped(pawn));

                    if (!pawn.IsColonist)
                    {
                        if (pawn.Faction != null)
                        {
                            int pawnAmountOfSilvers = pawn.inventory.innerContainer.TotalStackCountOfDef(ThingDefOf.Silver);
                            int caravanAmountOfSilvers = 0;
                            Lord lord = pawn.GetLord();
                            List <Pawn> caravanMembers = pawn.Map.mapPawns.PawnsInFaction(pawn.Faction).Where(x => x.GetLord() == lord && x.inventory?.innerContainer?.TotalStackCountOfDef(ThingDefOf.Silver) > 0).ToList();

                            caravanAmountOfSilvers += caravanMembers.Sum(member => member.inventory.innerContainer.TotalStackCountOfDef(ThingDefOf.Silver));

                            stringBuilder.AppendLine("pawnSilvers: " + pawnAmountOfSilvers + ", caravanSilvers: " + caravanAmountOfSilvers);
                        }
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Humans - Colonists:");
                    List <Pawn> pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Humanlike && x.IsColonist).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (would f**k) " + SexAppraiser.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (be f****d) " + SexAppraiser.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + SexAppraiser.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Humans - Prisoners:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Humanlike && !x.IsColonist && x.IsPrisonerOfColony).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (would f**k) " + SexAppraiser.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (be f****d) " + SexAppraiser.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + SexAppraiser.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Humans - non Colonists:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Humanlike && !x.IsColonist && !x.IsPrisonerOfColony).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (would f**k) " + SexAppraiser.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (be f****d) " + SexAppraiser.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + SexAppraiser.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Animals - Colony:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Animal && x.Faction == Faction.OfPlayer).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 //", " + CompRJW.Comp(partner).orientation +
                                                 "): (would f**k) " + SexAppraiser.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (be f****d) " + SexAppraiser.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + SexAppraiser.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Animals - non Colony:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Animal && x.Faction != Faction.OfPlayer).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 //", " + CompRJW.Comp(partner).orientation +
                                                 "): (would f**k) " + SexAppraiser.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (be f****d) " + SexAppraiser.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + SexAppraiser.would_rape(pawn, partner));
                    }
                    Find.WindowStack.Add(new Dialog_MessageBox(stringBuilder.ToString(), null, null, null, null, null, false, null, null));
                }, MenuOptionPriority.Default, null, null, 0.0f, null, null));
            }
Exemple #10
0
            //Create a new menu option that will contain some of the relevant data for debugging RJW
            //Window space is limited, so keep to one line per pawn. Additional data may need a separate menu
            static FloatMenuOption newMenuOption(Pawn pawn)
            {
                return(new FloatMenuOption("RJW WouldFuck", () =>
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine("canFuck: " + xxx.can_fuck(pawn) + ", canBeFucked: " + xxx.can_be_fucked(pawn) + ", loving: " + xxx.can_do_loving(pawn));
                    stringBuilder.AppendLine("canRape: " + xxx.can_rape(pawn) + ", canBeRaped: " + xxx.can_get_raped(pawn));
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Humans - Colonists:");
                    List <Pawn> pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Humanlike && x.IsColonist).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (f**k) " + xxx.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (f****d) " + xxx.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + xxx.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Humans - Prisoners:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Humanlike && !x.IsColonist && x.IsPrisonerOfColony).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (f**k) " + xxx.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (f****d) " + xxx.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + xxx.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Humans - non Colonists:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Humanlike && !x.IsColonist && !x.IsPrisonerOfColony).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (f**k) " + xxx.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (f****d) " + xxx.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + xxx.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Animals - Colony:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Animal && x.Faction == Faction.OfPlayer).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (f**k) " + xxx.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (f****d) " + xxx.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + xxx.would_rape(pawn, partner));
                    }
                    stringBuilder.AppendLine();

                    stringBuilder.AppendLine("Animals - non Colony:");
                    pawns = pawn.Map.mapPawns.AllPawnsSpawned.Where(x => x != pawn && x.RaceProps.Animal && x.Faction != Faction.OfPlayer).OrderBy(x => xxx.get_pawnname(x)).ToList();
                    foreach (Pawn partner in pawns)
                    {
                        stringBuilder.AppendLine(partner.LabelShort + " (" + partner.gender.GetLabel() +
                                                 ", age: " + partner.ageTracker.AgeBiologicalYears +
                                                 ", " + CompRJW.Comp(partner).orientation +
                                                 "): (f**k) " + xxx.would_fuck(pawn, partner).ToString("F3") +
                                                 "): (f****d) " + xxx.would_fuck(partner, pawn).ToString("F3") +
                                                 ": (rape) " + xxx.would_rape(pawn, partner));
                    }
                    Find.WindowStack.Add(new Dialog_MessageBox(stringBuilder.ToString(), null, null, null, null, null, false, null, null));
                }, MenuOptionPriority.Default, null, null, 0.0f, null, null));
            }
        public void SexualityCard(Rect rect, Pawn pawn)
        {
            CompRJW comp = pawn.TryGetComp <CompRJW>();

            if (pawn == null || comp == null)
            {
                return;
            }

            Text.Font = GameFont.Medium;
            Rect rect1 = new Rect(8f, 4f, rect.width - 8f, rect.height - 20f);

            Widgets.Label(rect1, "RJW");            //rjw

            Text.Font = GameFont.Tiny;
            float num  = rect1.y + 40f;
            Rect  row1 = new Rect(10f, num, rect.width - 8f, 24f);           //sexuality
            Rect  row2 = new Rect(10f, num + 24, rect.width - 8f, 24f);      //quirks
            Rect  row3 = new Rect(10f, num + 48, rect.width - 8f, 24f);      //w***e price

            //Rect sexuality_button = new Rect(10f, rect1.height - 0f, rect.width - 8f, 24f);//change sex pref
            Rect button1 = new Rect(10f, rect1.height - 10f, rect.width - 8f, 24f);            //re sexualize
            Rect button2 = new Rect(10f, rect1.height - 34f, rect.width - 8f, 24f);            //archtech toggle
            Rect button3 = new Rect(10f, rect1.height - 58f, rect.width - 8f, 24f);            //breast
            Rect button4 = new Rect(10f, rect1.height - 82f, rect.width - 8f, 24f);            //anus
            Rect button5 = new Rect(10f, rect1.height - 106f, rect.width - 8f, 24f);           //v****a
            Rect button6 = new Rect(10f, rect1.height - 130f, rect.width - 8f, 24f);           //penis 1
            Rect button7 = new Rect(10f, rect1.height - 154f, rect.width - 8f, 24f);           //penis 2

            string price;
            string sexuality;

            // Check for Rational Romance consistency, in case the player adds it mid-game or adds traits (such as with Prepare Carefully)
            if (xxx.RomanceDiversifiedIsActive || pawn.story.traits.HasTrait(TraitDefOf.Gay))
            {
                if (RJWPreferenceSettings.sexuality_distribution == RJWPreferenceSettings.Rjw_sexuality.RationalRomance)
                {
                    CompRJW.RRTraitCheck(pawn);
                }
            }

            switch (CompRJW.Comp(pawn).orientation)
            {
            case Orientation.Asexual:
                sexuality = "Asexual";
                break;

            case Orientation.Bisexual:
                sexuality = "Bisexual";
                break;

            case Orientation.Heterosexual:
                sexuality = "Hetero";
                break;

            case Orientation.Homosexual:
                sexuality = "Gay";
                break;

            case Orientation.LeaningHeterosexual:
                sexuality = "Bisexual, leaning hetero";
                break;

            case Orientation.LeaningHomosexual:
                sexuality = "Bisexual, leaning gay";
                break;

            case Orientation.MostlyHeterosexual:
                sexuality = "Mostly hetero";
                break;

            case Orientation.MostlyHomosexual:
                sexuality = "Mostly gay";
                break;

            case Orientation.Pansexual:
                sexuality = "Pansexual";
                break;

            default:
                sexuality = "None";
                break;
            }

            //allow to change own hero sexuality
            if (RJWPreferenceSettings.sexuality_distribution == RJWPreferenceSettings.Rjw_sexuality.RimJobWorld &&
                Current.ProgramState == ProgramState.Playing &&
                pawn.IsDesignatedHero() && pawn.IsHeroOwner())

            {
                if (Widgets.ButtonText(row1, "Sexuality: " + sexuality))
                {
                    Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>()
                    {
                        new FloatMenuOption("Asexual", (() => Change_orientation(pawn, Orientation.Asexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Pansexual", (() => Change_orientation(pawn, Orientation.Pansexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Heterosexual", (() => Change_orientation(pawn, Orientation.Heterosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("MostlyHeterosexual", (() => Change_orientation(pawn, Orientation.MostlyHeterosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("LeaningHeterosexual", (() => Change_orientation(pawn, Orientation.LeaningHeterosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Bisexual", (() => Change_orientation(pawn, Orientation.Bisexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("LeaningHomosexual", (() => Change_orientation(pawn, Orientation.LeaningHomosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("MostlyHomosexual", (() => Change_orientation(pawn, Orientation.MostlyHomosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Homosexual", (() => Change_orientation(pawn, Orientation.Homosexual)), MenuOptionPriority.Default),
                    }));
                }
            }
            else
            {
                Widgets.Label(row1, "Sexuality: " + sexuality);
                if (Mouse.IsOver(row1))
                {
                    Widgets.DrawHighlight(row1);
                }
            }

            string quirklist = CompRJW.Comp(pawn).quirks.ToString();

            Widgets.Label(row2, "Quirks".Translate() + quirklist);
            if (Mouse.IsOver(row2))
            {
                Widgets.DrawHighlight(row2);
                if (quirklist == "None")
                {
                    TooltipHandler.TipRegion(row2, "NoQuirks".Translate());
                }
                else
                {
                    StringBuilder tooltip = new StringBuilder();

                    if (quirklist.Contains("Breeder"))
                    {
                        tooltip.AppendLine("BreederQuirk".Translate());
                    }

                    if (quirklist.Contains("Endytophile"))
                    {
                        tooltip.AppendLine("EndytophileQuirk".Translate());
                    }

                    if (quirklist.Contains("Exhibitionist"))
                    {
                        tooltip.AppendLine("ExhibitionistQuirk".Translate());
                    }

                    if (quirklist.Contains("Fertile"))
                    {
                        tooltip.AppendLine("FertileQuirk".Translate());
                    }

                    if (quirklist.Contains("Gerontophile"))
                    {
                        tooltip.AppendLine("GerontophileQuirk".Translate());
                    }

                    if (quirklist.Contains("Impregnation fetish"))
                    {
                        tooltip.AppendLine("ImpregnationFetishQuirk".Translate());
                    }

                    if (quirklist.Contains("Incubator"))
                    {
                        tooltip.AppendLine("IncubatorQuirk".Translate());
                    }

                    if (quirklist.Contains("Infertile"))
                    {
                        tooltip.AppendLine("InfertileQuirk".Translate());
                    }

                    if (quirklist.Contains("Messy"))
                    {
                        tooltip.AppendLine("MessyQuirk".Translate());
                    }

                    if (quirklist.Contains("Podophile"))
                    {
                        tooltip.AppendLine("PodophileQuirk".Translate());
                    }

                    if (quirklist.Contains("Pregnancy fetish"))
                    {
                        tooltip.AppendLine("PregnancyFetishQuirk".Translate());
                    }

                    if (quirklist.Contains("Sapiosexual"))
                    {
                        tooltip.AppendLine("SapiosexualQuirk".Translate());
                    }

                    if (quirklist.Contains("Somnophile"))
                    {
                        tooltip.AppendLine("SomnophileQuirk".Translate());
                    }

                    if (quirklist.Contains("Teratophile"))
                    {
                        tooltip.AppendLine("TeratophileQuirk".Translate());
                    }

                    if (quirklist.Contains("Vigorous"))
                    {
                        tooltip.AppendLine("VigorousQuirk".Translate());
                    }

                    TooltipHandler.TipRegion(row2, tooltip.ToString());
                }
            }

            if (RJWSettings.sex_minimum_age > pawn.ageTracker.AgeBiologicalYears)
            {
                price = "Inapplicable (too young)";
            }
            else if (pawn.ownership.OwnedRoom == null)
            {
                if (Current.ProgramState == ProgramState.Playing)
                {
                    price = WhoringHelper.WhoreMinPrice(pawn) + " - " + WhoringHelper.WhoreMaxPrice(pawn) + " (base, needs suitable bedroom)";
                }
                else
                {
                    price = WhoringHelper.WhoreMinPrice(pawn) + " - " + WhoringHelper.WhoreMaxPrice(pawn) + " (base, modified by bedroom quality)";
                }
            }
            else if (xxx.is_animal(pawn))
            {
                price = "Incapable of whoring";
            }
            else
            {
                price = WhoringHelper.WhoreMinPrice(pawn) + " - " + WhoringHelper.WhoreMaxPrice(pawn);
            }

            Widgets.Label(row3, "WhorePrice".Translate() + price);
            if (Mouse.IsOver(row3))
            {
                Widgets.DrawHighlight(row3);
            }

            // TODO: Add translations. or not
            if (Prefs.DevMode || Current.ProgramState != ProgramState.Playing)
            {
                if (Widgets.ButtonText(button1, Current.ProgramState != ProgramState.Playing ? "Reroll sexuality" : "[DEV] Reroll sexuality"))
                {
                    Re_sexualize(pawn);
                }
            }
            if (pawn.health.hediffSet.HasHediff(Genital_Helper.archotech_penis) || pawn.health.hediffSet.HasHediff(Genital_Helper.archotech_vagina))
            {
                if (pawn.health.hediffSet.HasHediff(HediffDef.Named("ImpregnationBlocker")))
                {
                    if (Widgets.ButtonText(button2, "[Archotech genitalia] Enable reproduction"))
                    {
                        Change_Archotechmode(pawn);
                    }
                }
                else if (!pawn.health.hediffSet.HasHediff(HediffDef.Named("FertilityEnhancer")))
                {
                    if (Widgets.ButtonText(button2, "[Archotech genitalia] Enchance fertility"))
                    {
                        Change_Archotechmode(pawn);
                    }
                }
                else if (Widgets.ButtonText(button2, "[Archotech genitalia] Disable reproduction"))
                {
                    Change_Archotechmode(pawn);
                }
            }
            // TODO: add mp synchronizers
            // TODO: clean that mess
            // TODO: add demon toggles
            if (MP.IsInMultiplayer)
            {
                return;
            }
            if (xxx.is_slime(pawn) && (pawn.IsColonistPlayerControlled || pawn.IsPrisonerOfColony))
            {
                BodyPartRecord bpr_genitalia = Genital_Helper.get_genitals(pawn);
                BodyPartRecord bpr_breasts   = Genital_Helper.get_breasts(pawn);
                BodyPartRecord bpr_anus      = Genital_Helper.get_anus(pawn);
                BodyPartRecord bpr           = null;
                HediffDef      hed           = null;

                if (Widgets.ButtonText(button3, "Morph breasts"))
                {
                    Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>()
                    {
                        new FloatMenuOption("none", (() => Breasts = breasts.none), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.featureless_chest.label.CapitalizeFirst(), (() => Breasts = breasts.featureless_chest), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.flat_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.flat_breasts), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.small_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.small_breasts), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.average_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.average_breasts), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.large_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.large_breasts), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.huge_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.huge_breasts), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.slime_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.slime_breasts), MenuOptionPriority.Default),
                    }));
                }
                switch (Breasts)
                {
                case breasts.none:
                    bpr = bpr_breasts;
                    break;

                case breasts.featureless_chest:
                    bpr = bpr_breasts;
                    hed = Genital_Helper.featureless_chest;
                    break;

                case breasts.flat_breasts:
                    bpr = bpr_breasts;
                    hed = Genital_Helper.flat_breasts;
                    break;

                case breasts.small_breasts:
                    bpr = bpr_breasts;
                    hed = Genital_Helper.small_breasts;
                    break;

                case breasts.average_breasts:
                    bpr = bpr_breasts;
                    hed = Genital_Helper.average_breasts;
                    break;

                case breasts.large_breasts:
                    bpr = bpr_breasts;
                    hed = Genital_Helper.large_breasts;
                    break;

                case breasts.huge_breasts:
                    bpr = bpr_breasts;
                    hed = Genital_Helper.huge_breasts;
                    break;

                case breasts.slime_breasts:
                    bpr = bpr_breasts;
                    hed = Genital_Helper.slime_breasts;
                    break;

                default:
                    break;
                }

                if (Widgets.ButtonText(button4, "Morph anus"))
                {
                    Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>()
                    {
                        new FloatMenuOption("none", (() => Anuses = anuses.none), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.micro_anus.label.CapitalizeFirst(), (() => Anuses = anuses.micro_anus), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.tight_anus.label.CapitalizeFirst(), (() => Anuses = anuses.tight_anus), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.average_anus.label.CapitalizeFirst(), (() => Anuses = anuses.average_anus), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.loose_anus.label.CapitalizeFirst(), (() => Anuses = anuses.loose_anus), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.gaping_anus.label.CapitalizeFirst(), (() => Anuses = anuses.gaping_anus), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.slime_anus.label.CapitalizeFirst(), (() => Anuses = anuses.slime_anus), MenuOptionPriority.Default),
                    }));
                }
                switch (Anuses)
                {
                case anuses.none:
                    bpr = bpr_anus;
                    break;

                case anuses.micro_anus:
                    bpr = bpr_anus;
                    hed = Genital_Helper.micro_anus;
                    break;

                case anuses.tight_anus:
                    bpr = bpr_anus;
                    hed = Genital_Helper.tight_anus;
                    break;

                case anuses.average_anus:
                    bpr = bpr_anus;
                    hed = Genital_Helper.average_anus;
                    break;

                case anuses.loose_anus:
                    bpr = bpr_anus;
                    hed = Genital_Helper.loose_anus;
                    break;

                case anuses.gaping_anus:
                    bpr = bpr_anus;
                    hed = Genital_Helper.gaping_anus;
                    break;

                case anuses.slime_anus:
                    bpr = bpr_anus;
                    hed = Genital_Helper.slime_anus;
                    break;

                default:
                    break;
                }

                if (Widgets.ButtonText(button5, "Morph v****a"))
                {
                    Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>()
                    {
                        new FloatMenuOption("none", (() => Vaginas = vaginas.none), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.micro_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.micro_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.tight_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.tight_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.average_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.average_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.loose_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.loose_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.gaping_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.gaping_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.slime_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.slime_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.feline_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.feline_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.canine_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.canine_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.equine_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.equine_vagina), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.dragon_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.dragon_vagina), MenuOptionPriority.Default),
                    }));
                }
                switch (Vaginas)
                {
                case vaginas.none:
                    bpr = bpr_genitalia;
                    break;

                case vaginas.micro_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.micro_vagina;
                    break;

                case vaginas.tight_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.tight_vagina;
                    break;

                case vaginas.average_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.average_vagina;
                    break;

                case vaginas.loose_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.loose_vagina;
                    break;

                case vaginas.gaping_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.gaping_vagina;
                    break;

                case vaginas.slime_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.slime_vagina;
                    break;

                case vaginas.feline_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.feline_vagina;
                    break;

                case vaginas.canine_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.canine_vagina;
                    break;

                case vaginas.equine_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.equine_vagina;
                    break;

                case vaginas.dragon_vagina:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.dragon_vagina;
                    break;

                default:
                    break;
                }

                if (Widgets.ButtonText(button6, "Morph penis"))
                {
                    Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>()
                    {
                        new FloatMenuOption("none", (() => Penises = penises.none), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.micro_penis.label.CapitalizeFirst(), (() => Penises = penises.micro_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.small_penis.label.CapitalizeFirst(), (() => Penises = penises.small_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.average_penis.label.CapitalizeFirst(), (() => Penises = penises.average_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.big_penis.label.CapitalizeFirst(), (() => Penises = penises.big_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.huge_penis.label.CapitalizeFirst(), (() => Penises = penises.huge_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.slime_penis.label.CapitalizeFirst(), (() => Penises = penises.slime_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.feline_penis.label.CapitalizeFirst(), (() => Penises = penises.feline_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.canine_penis.label.CapitalizeFirst(), (() => Penises = penises.canine_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.equine_penis.label.CapitalizeFirst(), (() => Penises = penises.equine_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.dragon_penis.label.CapitalizeFirst(), (() => Penises = penises.dragon_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.raccoon_penis.label.CapitalizeFirst(), (() => Penises = penises.raccoon_penis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.hemipenis.label.CapitalizeFirst(), (() => Penises = penises.hemipenis), MenuOptionPriority.Default),
                        new FloatMenuOption(Genital_Helper.crocodilian_penis.label.CapitalizeFirst(), (() => Penises = penises.crocodilian_penis), MenuOptionPriority.Default),
                    }));
                }
                switch (Penises)
                {
                case penises.none:
                    bpr = bpr_genitalia;
                    break;

                case penises.micro_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.micro_penis;
                    break;

                case penises.small_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.small_penis;
                    break;

                case penises.average_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.average_penis;
                    break;

                case penises.big_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.big_penis;
                    break;

                case penises.huge_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.huge_penis;
                    break;

                case penises.slime_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.slime_penis;
                    break;

                case penises.feline_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.feline_penis;
                    break;

                case penises.canine_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.canine_penis;
                    break;

                case penises.equine_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.equine_penis;
                    break;

                case penises.dragon_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.dragon_penis;
                    break;

                case penises.raccoon_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.raccoon_penis;
                    break;

                case penises.hemipenis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.hemipenis;
                    break;

                case penises.crocodilian_penis:
                    bpr = bpr_genitalia;
                    hed = Genital_Helper.crocodilian_penis;
                    break;

                default:
                    break;
                }

                if (bpr != null)
                {
                    //Log.Message("start ");
                    if (bpr != bpr_genitalia)
                    {
                        if (pawn.needs.TryGetNeed <Need_Food>().CurLevel > 0.5f)
                        {
                            pawn.needs.food.CurLevel -= 0.5f;
                            pawn.health.RestorePart(bpr);
                            if (hed != null)
                            {
                                pawn.health.AddHediff(hed, bpr);
                            }
                        }
                        Anuses  = anuses.selectone;
                        Breasts = breasts.selectone;
                    }
                    else if (bpr == bpr_genitalia && Vaginas != vaginas.selectone)
                    {
                        if (pawn.needs.TryGetNeed <Need_Food>().CurLevel > 0.5f)
                        {
                            pawn.needs.food.CurLevel -= 0.5f;
                            List <Hediff> list = new List <Hediff>();
                            foreach (Hediff heddif in pawn.health.hediffSet.hediffs.Where(x =>
                                                                                          x.Part == bpr &&
                                                                                          x.def.defName.ToLower().Contains("v****a")))
                            {
                                list.Add(heddif);
                            }

                            foreach (Hediff heddif in list)
                            {
                                pawn.health.hediffSet.hediffs.Remove(heddif);
                            }

                            if (hed != null)
                            {
                                pawn.health.AddHediff(hed, bpr);
                            }
                        }
                        Vaginas = vaginas.selectone;
                    }
                    else if (bpr == bpr_genitalia && Penises != penises.selectone)
                    {
                        if (pawn.needs.TryGetNeed <Need_Food>().CurLevel > 0.5f)
                        {
                            pawn.needs.food.CurLevel -= 0.5f;
                            List <Hediff> list = new List <Hediff>();
                            foreach (Hediff heddif in pawn.health.hediffSet.hediffs.Where(x =>
                                                                                          x.Part == bpr &&
                                                                                          x.def.defName.ToLower().Contains("penis") ||
                                                                                          x.def.defName.ToLower().Contains("tentacle")))
                            {
                                list.Add(heddif);
                            }

                            foreach (Hediff heddif in list)
                            {
                                pawn.health.hediffSet.hediffs.Remove(heddif);
                            }

                            if (hed != null)
                            {
                                pawn.health.AddHediff(hed, bpr);
                            }
                        }
                        Penises = penises.selectone;
                    }
                    //Log.Message("end ");
                }
            }
        }
 static void Re_sexualize(Pawn pawn)
 {
     CompRJW.Comp(pawn).Sexualize(pawn, true);
 }
 static void Change_orientation(Pawn pawn, Orientation orientation)
 {
     CompRJW.Comp(pawn).orientation = orientation;
 }
Exemple #14
0
        public void SexualityCard(Rect rect, Pawn pawn)
        {
            CompRJW comp = pawn.TryGetComp <CompRJW>();

            if (pawn == null || comp == null)
            {
                return;
            }

            Text.Font = GameFont.Medium;
            Rect rect1 = new Rect(8f, 4f, rect.width - 8f, rect.height - 20f);

            Widgets.Label(rect1, "RJW");            //rjw

            Text.Font = GameFont.Tiny;
            float num  = rect1.y + 40f;
            Rect  row1 = new Rect(10f, num, rect.width - 8f, 24f);           //sexuality
            Rect  row2 = new Rect(10f, num + 24, rect.width - 8f, 24f);      //quirks
            Rect  row3 = new Rect(10f, num + 48, rect.width - 8f, 24f);      //w***e price

            //Rect sexuality_button = new Rect(10f, rect1.height - 0f, rect.width - 8f, 24f);//change sex pref
            Rect button1 = new Rect(10f, rect1.height - 10f, rect.width - 8f, 24f);            //re sexualize
            Rect button2 = new Rect(10f, rect1.height - 34f, rect.width - 8f, 24f);            //archtech toggle
            Rect button3 = new Rect(10f, rect1.height - 58f, rect.width - 8f, 24f);            //breast
            Rect button4 = new Rect(10f, rect1.height - 82f, rect.width - 8f, 24f);            //anus
            Rect button5 = new Rect(10f, rect1.height - 106f, rect.width - 8f, 24f);           //v****a
            Rect button6 = new Rect(10f, rect1.height - 130f, rect.width - 8f, 24f);           //penis 1
            Rect button7 = new Rect(10f, rect1.height - 154f, rect.width - 8f, 24f);           //penis 2

            DrawSexuality(pawn, row1);
            DrawQuirks(pawn, row2);
            DrawWhoring(pawn, row3);

            // TODO: Add translations. or not
            if (Prefs.DevMode || Current.ProgramState != ProgramState.Playing)
            {
                if (Widgets.ButtonText(button1, Current.ProgramState != ProgramState.Playing ? "Reroll sexuality" : "[DEV] Reroll sexuality"))
                {
                    Re_sexualize(pawn);
                }
            }
            if (pawn.health.hediffSet.HasHediff(Genital_Helper.archotech_penis) || pawn.health.hediffSet.HasHediff(Genital_Helper.archotech_vagina))
            {
                if (pawn.health.hediffSet.HasHediff(HediffDef.Named("ImpregnationBlocker")))
                {
                    if (Widgets.ButtonText(button2, "[Archotech genitalia] Enable reproduction"))
                    {
                        Change_Archotechmode(pawn);
                    }
                }
                else if (!pawn.health.hediffSet.HasHediff(HediffDef.Named("FertilityEnhancer")))
                {
                    if (Widgets.ButtonText(button2, "[Archotech genitalia] Enchance fertility"))
                    {
                        Change_Archotechmode(pawn);
                    }
                }
                else if (Widgets.ButtonText(button2, "[Archotech genitalia] Disable reproduction"))
                {
                    Change_Archotechmode(pawn);
                }
            }
            // TODO: add mp synchronizers
            // TODO: clean that mess
            // TODO: add demon toggles
            if (MP.IsInMultiplayer)
            {
                return;
            }

            //List<String> Parts = null;
            //if (xxx.is_slime(pawn))
            //	Parts = new List<string>(DefDatabase<StringListDef>.GetNamed("SlimeMorphFilters").strings);
            //if (xxx.is_demon(pawn))
            //	Parts = new List<string>(DefDatabase<StringListDef>.GetNamed("DemonMorphFilters").strings);
            // TODO: replace that mess with floating menu
            //if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 2 && Mouse.IsOver(rect))
            //{
            //Event.current.Use();//?
            //DrawMedOperationsTab(0, pawn, Parts,0);
            //}

            //if (Parts.Any() && (pawn.IsColonistPlayerControlled || pawn.IsPrisonerOfColony))
            //if (xxx.is_slime(pawn) && (pawn.IsColonistPlayerControlled || pawn.IsPrisonerOfColony))
            //{
            //	BodyPartRecord bpr_genitalia = Genital_Helper.get_genitals(pawn);
            //	BodyPartRecord bpr_breasts = Genital_Helper.get_breasts(pawn);
            //	BodyPartRecord bpr_anus = Genital_Helper.get_anus(pawn);
            //	BodyPartRecord bpr = null;
            //	HediffDef hed = null;

            //	if (Widgets.ButtonText(button3, "Morph breasts"))
            //	{
            //		Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
            //	{
            //		new FloatMenuOption("none", (() => Breasts = breasts.none), MenuOptionPriority.Default),
            //		new FloatMenuOption(Genital_Helper.featureless_chest.label.CapitalizeFirst(), (() => Breasts = breasts.featureless_chest), MenuOptionPriority.Default),
            //		new FloatMenuOption(Genital_Helper.flat_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.flat_breasts), MenuOptionPriority.Default),
            //		new FloatMenuOption(Genital_Helper.small_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.small_breasts), MenuOptionPriority.Default),
            //		new FloatMenuOption(Genital_Helper.average_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.average_breasts), MenuOptionPriority.Default),
            //		new FloatMenuOption(Genital_Helper.large_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.large_breasts), MenuOptionPriority.Default),
            //		new FloatMenuOption(Genital_Helper.huge_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.huge_breasts), MenuOptionPriority.Default),
            //		new FloatMenuOption(Genital_Helper.slime_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.slime_breasts), MenuOptionPriority.Default),
            //	}));
            //	}
            //	switch (Breasts)
            //	{
            //		case breasts.none:
            //			bpr = bpr_breasts;
            //			break;
            //		case breasts.featureless_chest:
            //			bpr = bpr_breasts;
            //			hed = Genital_Helper.featureless_chest;
            //			break;
            //		case breasts.flat_breasts:
            //			bpr = bpr_breasts;
            //			hed = Genital_Helper.flat_breasts;
            //			break;
            //		case breasts.small_breasts:
            //			bpr = bpr_breasts;
            //			hed = Genital_Helper.small_breasts;
            //			break;
            //		case breasts.average_breasts:
            //			bpr = bpr_breasts;
            //			hed = Genital_Helper.average_breasts;
            //			break;
            //		case breasts.large_breasts:
            //			bpr = bpr_breasts;
            //			hed = Genital_Helper.large_breasts;
            //			break;
            //		case breasts.huge_breasts:
            //			bpr = bpr_breasts;
            //			hed = Genital_Helper.huge_breasts;
            //			break;
            //		case breasts.slime_breasts:
            //			bpr = bpr_breasts;
            //			hed = Genital_Helper.slime_breasts;
            //			break;
            //		default:
            //			break;
            //	}

            //	if (Widgets.ButtonText(button4, "Morph anus"))
            //	{
            //		Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
            //		{
            //			new FloatMenuOption("none", (() => Anuses = anuses.none), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.micro_anus.label.CapitalizeFirst(), (() => Anuses = anuses.micro_anus), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.tight_anus.label.CapitalizeFirst(), (() => Anuses = anuses.tight_anus), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.average_anus.label.CapitalizeFirst(), (() => Anuses = anuses.average_anus), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.loose_anus.label.CapitalizeFirst(), (() => Anuses = anuses.loose_anus), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.gaping_anus.label.CapitalizeFirst(), (() => Anuses = anuses.gaping_anus), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.slime_anus.label.CapitalizeFirst(), (() => Anuses = anuses.slime_anus), MenuOptionPriority.Default),
            //		}));
            //	}
            //	switch (Anuses)
            //	{
            //		case anuses.none:
            //			bpr = bpr_anus;
            //			break;
            //		case anuses.micro_anus:
            //			bpr = bpr_anus;
            //			hed = Genital_Helper.micro_anus;
            //			break;
            //		case anuses.tight_anus:
            //			bpr = bpr_anus;
            //			hed = Genital_Helper.tight_anus;
            //			break;
            //		case anuses.average_anus:
            //			bpr = bpr_anus;
            //			hed = Genital_Helper.average_anus;
            //			break;
            //		case anuses.loose_anus:
            //			bpr = bpr_anus;
            //			hed = Genital_Helper.loose_anus;
            //			break;
            //		case anuses.gaping_anus:
            //			bpr = bpr_anus;
            //			hed = Genital_Helper.gaping_anus;
            //			break;
            //		case anuses.slime_anus:
            //			bpr = bpr_anus;
            //			hed = Genital_Helper.slime_anus;
            //			break;
            //		default:
            //			break;
            //	}

            //	if (Widgets.ButtonText(button5, "Morph v****a"))
            //	{
            //		Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
            //		{
            //			new FloatMenuOption("none", (() => Vaginas = vaginas.none), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.micro_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.micro_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.tight_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.tight_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.average_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.average_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.loose_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.loose_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.gaping_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.gaping_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.slime_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.slime_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.feline_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.feline_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.canine_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.canine_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.equine_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.equine_vagina), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.dragon_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.dragon_vagina), MenuOptionPriority.Default),
            //		}));
            //	}
            //	switch (Vaginas)
            //	{
            //		case vaginas.none:
            //			bpr = bpr_genitalia;
            //			break;
            //		case vaginas.micro_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.micro_vagina;
            //			break;
            //		case vaginas.tight_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.tight_vagina;
            //			break;
            //		case vaginas.average_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.average_vagina;
            //			break;
            //		case vaginas.loose_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.loose_vagina;
            //			break;
            //		case vaginas.gaping_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.gaping_vagina;
            //			break;
            //		case vaginas.slime_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.slime_vagina;
            //			break;
            //		case vaginas.feline_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.feline_vagina;
            //			break;
            //		case vaginas.canine_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.canine_vagina;
            //			break;
            //		case vaginas.equine_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.equine_vagina;
            //			break;
            //		case vaginas.dragon_vagina:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.dragon_vagina;
            //			break;
            //		default:
            //			break;
            //	}

            //	if (Widgets.ButtonText(button6, "Morph penis"))
            //	{
            //		Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
            //		{
            //			new FloatMenuOption("none", (() => Penises = penises.none), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.micro_penis.label.CapitalizeFirst(), (() => Penises = penises.micro_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.small_penis.label.CapitalizeFirst(), (() => Penises = penises.small_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.average_penis.label.CapitalizeFirst(), (() => Penises = penises.average_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.big_penis.label.CapitalizeFirst(), (() => Penises = penises.big_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.huge_penis.label.CapitalizeFirst(), (() => Penises = penises.huge_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.slime_penis.label.CapitalizeFirst(), (() => Penises = penises.slime_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.feline_penis.label.CapitalizeFirst(), (() => Penises = penises.feline_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.canine_penis.label.CapitalizeFirst(), (() => Penises = penises.canine_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.equine_penis.label.CapitalizeFirst(), (() => Penises = penises.equine_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.dragon_penis.label.CapitalizeFirst(), (() => Penises = penises.dragon_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.raccoon_penis.label.CapitalizeFirst(), (() => Penises = penises.raccoon_penis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.hemipenis.label.CapitalizeFirst(), (() => Penises = penises.hemipenis), MenuOptionPriority.Default),
            //			new FloatMenuOption(Genital_Helper.crocodilian_penis.label.CapitalizeFirst(), (() => Penises = penises.crocodilian_penis), MenuOptionPriority.Default),
            //		}));
            //	}
            //	switch (Penises)
            //	{
            //		case penises.none:
            //			bpr = bpr_genitalia;
            //			break;
            //		case penises.micro_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.micro_penis;
            //			break;
            //		case penises.small_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.small_penis;
            //			break;
            //		case penises.average_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.average_penis;
            //			break;
            //		case penises.big_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.big_penis;
            //			break;
            //		case penises.huge_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.huge_penis;
            //			break;
            //		case penises.slime_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.slime_penis;
            //			break;
            //		case penises.feline_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.feline_penis;
            //			break;
            //		case penises.canine_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.canine_penis;
            //			break;
            //		case penises.equine_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.equine_penis;
            //			break;
            //		case penises.dragon_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.dragon_penis;
            //			break;
            //		case penises.raccoon_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.raccoon_penis;
            //			break;
            //		case penises.hemipenis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.hemipenis;
            //			break;
            //		case penises.crocodilian_penis:
            //			bpr = bpr_genitalia;
            //			hed = Genital_Helper.crocodilian_penis;
            //			break;
            //		default:
            //			break;
            //	}

            //	if (bpr != null)
            //	{
            //		//Log.Message("start ");
            //		if (bpr != bpr_genitalia)
            //		{
            //			if (pawn.needs.TryGetNeed<Need_Food>().CurLevel > 0.5f)
            //			{
            //				pawn.needs.food.CurLevel -= 0.5f;
            //				pawn.health.RestorePart(bpr);
            //				if (hed != null)
            //					pawn.health.AddHediff(hed, bpr);
            //			}
            //			Anuses = anuses.selectone;
            //			Breasts = breasts.selectone;
            //		}
            //		else if (bpr == bpr_genitalia && Vaginas != vaginas.selectone)
            //		{
            //			if (pawn.needs.TryGetNeed<Need_Food>().CurLevel > 0.5f)
            //			{
            //				pawn.needs.food.CurLevel -= 0.5f;
            //				List<Hediff> list = new List<Hediff>();
            //				foreach (Hediff heddif in pawn.health.hediffSet.hediffs.Where(x =>
            //						x.Part == bpr &&
            //						x.def.defName.ToLower().Contains("v****a")))
            //					list.Add(heddif);

            //				foreach (Hediff heddif in list)
            //					pawn.health.hediffSet.hediffs.Remove(heddif);

            //				if (hed != null)
            //					pawn.health.AddHediff(hed, bpr);
            //			}
            //			Vaginas = vaginas.selectone;
            //		}
            //		else if (bpr == bpr_genitalia && Penises != penises.selectone)
            //		{
            //			if (pawn.needs.TryGetNeed<Need_Food>().CurLevel > 0.5f)
            //			{
            //				pawn.needs.food.CurLevel -= 0.5f;
            //				List<Hediff> list = new List<Hediff>();
            //				foreach (Hediff heddif in pawn.health.hediffSet.hediffs.Where(x =>
            //						x.Part == bpr &&
            //						x.def.defName.ToLower().Contains("penis") ||
            //						x.def.defName.ToLower().Contains("tentacle")))
            //					list.Add(heddif);

            //				foreach (Hediff heddif in list)
            //					pawn.health.hediffSet.hediffs.Remove(heddif);

            //				if (hed != null)
            //					pawn.health.AddHediff(hed, bpr);
            //			}
            //			Penises = penises.selectone;
            //		}
            //		//Log.Message("end ");
            //	}
            //}
        }
Exemple #15
0
        static void DrawSexuality(Pawn pawn, Rect row)
        {
            string sexuality;

            if (RJWPreferenceSettings.sexuality_distribution == RJWPreferenceSettings.Rjw_sexuality.Vanilla)
            {
                CompRJW.VanillaTraitCheck(pawn);
            }
            if (RJWPreferenceSettings.sexuality_distribution == RJWPreferenceSettings.Rjw_sexuality.SYRIndividuality)
            {
                CompRJW.CopyIndividualitySexuality(pawn);
            }
            if (RJWPreferenceSettings.sexuality_distribution == RJWPreferenceSettings.Rjw_sexuality.Psychology)
            {
                CompRJW.CopyPsychologySexuality(pawn);
            }

            switch (CompRJW.Comp(pawn).orientation)
            {
            case Orientation.Asexual:
                sexuality = "Asexual";
                break;

            case Orientation.Bisexual:
                sexuality = "Bisexual";
                break;

            case Orientation.Heterosexual:
                sexuality = "Hetero";
                break;

            case Orientation.Homosexual:
                sexuality = "Gay";
                break;

            case Orientation.LeaningHeterosexual:
                sexuality = "Bisexual, leaning hetero";
                break;

            case Orientation.LeaningHomosexual:
                sexuality = "Bisexual, leaning gay";
                break;

            case Orientation.MostlyHeterosexual:
                sexuality = "Mostly hetero";
                break;

            case Orientation.MostlyHomosexual:
                sexuality = "Mostly gay";
                break;

            case Orientation.Pansexual:
                sexuality = "Pansexual";
                break;

            default:
                sexuality = "None";
                break;
            }

            //allow to change pawn sexuality for:
            //own hero, game start
            if (RJWPreferenceSettings.sexuality_distribution == RJWPreferenceSettings.Rjw_sexuality.RimJobWorld &&
                (((Current.ProgramState == ProgramState.Playing &&
                   pawn.IsDesignatedHero() && pawn.IsHeroOwner()) ||
                  Prefs.DevMode) ||
                 Current.ProgramState == ProgramState.Entry))

            {
                if (Widgets.ButtonText(row, "Sexuality: " + sexuality, false))
                {
                    Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>()                                     //this needs fixing in 1.1 with vanilla orientation traits
                    {
                        new FloatMenuOption("Asexual", (() => Change_orientation(pawn, Orientation.Asexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Pansexual", (() => Change_orientation(pawn, Orientation.Pansexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Heterosexual", (() => Change_orientation(pawn, Orientation.Heterosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("MostlyHeterosexual", (() => Change_orientation(pawn, Orientation.MostlyHeterosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("LeaningHeterosexual", (() => Change_orientation(pawn, Orientation.LeaningHeterosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Bisexual", (() => Change_orientation(pawn, Orientation.Bisexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("LeaningHomosexual", (() => Change_orientation(pawn, Orientation.LeaningHomosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("MostlyHomosexual", (() => Change_orientation(pawn, Orientation.MostlyHomosexual)), MenuOptionPriority.Default),
                        new FloatMenuOption("Homosexual", (() => Change_orientation(pawn, Orientation.Homosexual)), MenuOptionPriority.Default),
                    }));
                }
            }
            else
            {
                Widgets.Label(row, "Sexuality: " + sexuality);
                if (Mouse.IsOver(row))
                {
                    Widgets.DrawHighlight(row);
                }
            }
        }
        // Returns how fuckable 'f****r' thinks 'p' is on a scale from 0.0 to 1.0
        public static float would_fuck(Pawn f****r, Pawn f****d, bool invert_opinion = false, bool ignore_bleeding = false, bool ignore_gender = false)
        {
            //--Log.Message("[RJW]would_fuck("+xxx.get_pawnname(f****r)+","+xxx.get_pawnname(f****d)+","+invert_opinion.ToString()+") is called");
            if (!xxx.is_healthy_enough(f****r) && !xxx.is_psychopath(f****r))             // Not healthy enough to have sex, shouldn't have got this far.
            {
                return(0f);
            }
            if ((xxx.is_animal(f****r) || xxx.is_animal(f****d)) && (!xxx.is_animal(f****r) || !xxx.is_animal(f****d)) && !RJWSettings.bestiality_enabled)
            {
                return(0f);                // Animals disabled.
            }
            if (f****d.Dead && !RJWSettings.necrophilia_enabled)
            {
                return(0f);                // Necrophilia disabled.
            }
            if (f****r.Dead || f****r.Suspended || f****d.Suspended)
            {
                return(0f);                // Target unreachable. Shouldn't have got this far, but doesn't hurt to double-check.
            }
            if (xxx.is_starved(f****d) && f****d.Faction == f****r.Faction && !xxx.is_psychopath(f****r) && !xxx.is_rapist(f****r))
            {
                return(0f);
            }
            if (!ignore_bleeding && !xxx.is_not_dying(f****d) && !xxx.is_psychopath(f****r) && !xxx.is_rapist(f****r) && !xxx.is_bloodlust(f****r))
            {
                return(0f);                // Most people wouldn't f**k someone who's dying.
            }
            if (!IsGenderOk(f****r, f****d))
            {
                return(0.0f);
            }

            int    fucker_age    = f****r.ageTracker.AgeBiologicalYears;
            string fucker_quirks = CompRJW.Comp(f****r).quirks.ToString();
            int    p_age         = f****d.ageTracker.AgeBiologicalYears;

            // --- Age checks ---
            if (!IsAgeOk(f****r, f****d, fucker_age, p_age))
            {
                return(0.0f);
            }
            float age_factor = GetAgeFactor(f****r, f****d, p_age);

            // --- Orientation checks ---
            float orientation_factor = GetOrientationFactor(f****r, f****d, ignore_gender);

            if (orientation_factor == 0.0f)
            {
                orientation_factor = f****r.relations.SecondaryLovinChanceFactor(f****d);
                //Log.Message("would_fuck() SecondaryLovinChanceFactor:" + orientation_factor);
                if (orientation_factor <= 0)
                {
                    return(0.0f);
                }
            }

            // --- Body and appearance checks ---
            float body_factor = GetBodyFactor(f****r, f****d);

            // --- Opinion checks ---
            float opinion_factor   = GetOpinionFactor(f****r, f****d, invert_opinion);
            float horniness_factor = GetHorninessFactor(f****r);

            float reservedPercentage = (f****d.Dead ? 1f : f****d.ReservedCount()) / xxx.max_rapists_per_prisoner;
            //Log.Message("would_fuck() reservedPercentage:" + reservedPercentage + "fuckability_per_reserved"+ fuckability_per_reserved.Evaluate(reservedPercentage));
            //Log.Message("would_fuck() - horniness_factor = " + horniness_factor.ToString());

            float prenymph_att = Mathf.InverseLerp(0f, 2.8f, base_attraction * orientation_factor * horniness_factor * age_factor * body_factor * opinion_factor);
            float final_att    = !(xxx.is_nympho(f****r) || f****r.health.hediffSet.HasHediff(HediffDef.Named("HumpShroomEffect"))) ? prenymph_att : 0.2f + 0.8f * prenymph_att;

            //Log.Message("would_fuck( " + xxx.get_pawnname(f****r) + ", " + xxx.get_pawnname(f****d) + " ) - prenymph_att = " + prenymph_att.ToString() + ", final_att = " + final_att.ToString());

            return(Mathf.Min(final_att, fuckability_per_reserved.Evaluate(reservedPercentage)));
        }