From 2e0aa4d1269ca4bf57716710d7af1c31ff95ab51 Mon Sep 17 00:00:00 2001 From: Ed86 <email@email.com> Date: Sun, 30 Jun 2019 20:12:51 +0300 Subject: [PATCH] added ability to change slime parts at will(50% food need) for slime colonists/prisoners --- Source/Harmony/SexualityCardInternal.cs | 385 +++++++++++++++++++++++- 1 file changed, 383 insertions(+), 2 deletions(-) diff --git a/Source/Harmony/SexualityCardInternal.cs b/Source/Harmony/SexualityCardInternal.cs index c41245c4..edd969fe 100644 --- a/Source/Harmony/SexualityCardInternal.cs +++ b/Source/Harmony/SexualityCardInternal.cs @@ -2,6 +2,9 @@ using System.Text; using RimWorld; using UnityEngine; using Verse; +using System; +using System.Collections.Generic; +using System.Linq; namespace rjw { @@ -14,6 +17,70 @@ namespace rjw pawn = editFor; } + public static breasts Breasts; + public enum breasts + { + selectone, + none, + featureless_chest, + flat_breasts, + small_breasts, + average_breasts, + large_breasts, + huge_breasts, + slime_breasts, + }; + + public static anuses Anuses; + public enum anuses + { + selectone, + none, + micro_anus, + tight_anus, + average_anus, + loose_anus, + gaping_anus, + slime_anus, + }; + + public static vaginas Vaginas; + public enum vaginas + { + selectone, + none, + micro_vagina, + tight_vagina, + average_vagina, + loose_vagina, + gaping_vagina, + slime_vagina, + feline_vagina, + canine_vagina, + equine_vagina, + dragon_vagina, + }; + + public static penises Penises; + public enum penises + { + selectone, + none, + micro_penis, + small_penis, + average_penis, + big_penis, + huge_penis, + slime_penis, + feline_penis, + canine_penis, + equine_penis, + dragon_penis, + raccoon_penis, + hemipenis, + crocodilian_penis, + }; + public void SexualityCard(Rect rect, Pawn pawn) { CompRJW comp = pawn.TryGetComp<CompRJW>(); @@ -27,8 +94,13 @@ namespace rjw Rect row1 = new Rect(10f, num, rect.width - 8f, 24f); Rect row2 = new Rect(10f, num + 24, rect.width - 8f, 24f); Rect row3 = new Rect(10f, num + 48, rect.width - 8f, 24f); - Rect button1 = new Rect(10f, rect1.height - 10f, rect.width - 8f, 24f); - Rect button2 = new Rect(10f, rect1.height - 34f, rect.width - 8f, 24f); + 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);//vagina + 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; @@ -184,6 +256,315 @@ namespace rjw pawn.health.AddHediff(HediffDef.Named("ImpregnationBlocker"), genitalia); } } + 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 vagina")) + { + 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("vagina"))) + 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 "); + } + } } public override void DoWindowContents(Rect inRect) -- GitLab