diff --git a/.gitignore b/.gitignore index 3a2b88f..ca6bb31 100644 --- a/.gitignore +++ b/.gitignore @@ -301,3 +301,9 @@ __pycache__/ *.btm.cs *.odx.cs *.xsd.cs +/Assemblies/RJW.dll +/Assemblies/RJW_PlasticSurgeries.pdb +/Assemblies/0Harmony.dll +/Assemblies/0Harmony.xml +/Assemblies/0MultiplayerAPI.dll +/Assemblies/Dyspareunia.dll diff --git a/1.3/Assemblies/RJW_PlasticSurgeries.dll b/1.3/Assemblies/RJW_PlasticSurgeries.dll new file mode 100644 index 0000000..42556d0 Binary files /dev/null and b/1.3/Assemblies/RJW_PlasticSurgeries.dll differ diff --git a/About/About.xml b/About/About.xml new file mode 100644 index 0000000..7632f9a --- /dev/null +++ b/About/About.xml @@ -0,0 +1,34 @@ + + + + RJW PlasticSurgeries + Stardust3D + +
  • 1.3
  • +
    + Stardust3D.RJW.PlasticSurgeries + Surgically alter pawn's genitals. + +
  • + rim.job.world + RimJobWorld + https://gitgud.io/Ed86/rjw +
  • +
  • + brrainz.harmony + Harmony + steam://url/CommunityFilePage/2009463077 + https://github.com/pardeike/HarmonyRimWorld/releases/latest +
  • +
  • + NuttySquabble.Dyspareunia + Dyspareunia + https://gitgud.io/NuttySquabble/Dyspareunia +
  • +
    + +
  • Ludeon.RimWorld
  • +
  • rim.job.world
  • +
  • NuttySquabble.Dyspareunia
  • +
    +
    \ No newline at end of file diff --git a/About/Manifest.xml b/About/Manifest.xml new file mode 100644 index 0000000..2deb0e6 --- /dev/null +++ b/About/Manifest.xml @@ -0,0 +1,6 @@ + + + + RJW PlasticSurgeries + 4942.0.1.2 + \ No newline at end of file diff --git a/Assemblies/RJW_PlasticSurgeries.dll b/Assemblies/RJW_PlasticSurgeries.dll new file mode 100644 index 0000000..42556d0 Binary files /dev/null and b/Assemblies/RJW_PlasticSurgeries.dll differ diff --git a/Assemblies/RJW_PlasticSurgeries.xml b/Assemblies/RJW_PlasticSurgeries.xml new file mode 100644 index 0000000..7ccfe20 --- /dev/null +++ b/Assemblies/RJW_PlasticSurgeries.xml @@ -0,0 +1,14 @@ + + + + RJW_PlasticSurgeries + + + + + + + + + + diff --git a/Defs/Recipe_Surgery/Recipes_Surgery_Mammoplasty.xml b/Defs/Recipe_Surgery/Recipes_Surgery_Mammoplasty.xml new file mode 100644 index 0000000..5c34aeb --- /dev/null +++ b/Defs/Recipe_Surgery/Recipes_Surgery_Mammoplasty.xml @@ -0,0 +1,163 @@ + + + + + Surgery_Mammoplasty + + Surgically increases the pawn's breast size by 25%. + + increasing breast size + Surgery + Recipe_Surgery + MedicalOperationSpeed + Medicine + 0.2 + 400 + true + +
  • Human
  • +
    + 95 + +
  • + + +
  • Medicine
  • + + + 1 + +
    + + +
  • Medicine
  • +
    +
    +
    + + Surgery_Mammoplasty_A + + Surgically gives the pawn an A cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_A + alter cup size to A + + + Surgery_Mammoplasty_B + + Surgically gives the pawn an B cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_B + alter cup size to B + + + Surgery_Mammoplasty_C + + Surgically gives the pawn an C cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_C + alter cup size to C + + + Surgery_Mammoplasty_D + + Surgically gives the pawn an D cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_D + alter cup size to D + + + Surgery_Mammoplasty_E + + Surgically gives the pawn an E cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_E + alter cup size to E + + + Surgery_Mammoplasty_F + + Surgically gives the pawn an F cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_F + alter cup size to F + + + Surgery_Mammoplasty_G + + Surgically gives the pawn an G cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_G + alter cup size to G + + + Surgery_Mammoplasty_H + + Surgically gives the pawn an H cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_H + alter cup size to H + + + Surgery_Mammoplasty_J + + Surgically gives the pawn an J cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_J + alter cup size to J + + + Surgery_Mammoplasty_K + + Surgically gives the pawn an K cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_K + alter cup size to K + + + Surgery_Mammoplasty_L + + Surgically gives the pawn an L cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_L + alter cup size to L + + + Surgery_Mammoplasty_M + + Surgically gives the pawn an M cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_M + alter cup size to M + + + Surgery_Mammoplasty_N + + Surgically gives the pawn an N cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_N + alter cup size to N + + + Surgery_Mammoplasty_O + + Surgically gives the pawn an O cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_O + alter cup size to O + + + Surgery_Mammoplasty_P + + Surgically gives the pawn an P cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_P + alter cup size to P + + + Surgery_Mammoplasty_Q + + Surgically gives the pawn an Q cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_Q + alter cup size to Q + + + Surgery_Mammoplasty_R + + Surgically gives the pawn an R cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_R + alter cup size to R + + + Surgery_Mammoplasty_Unknown + + Surgically gives the pawn an ??? cup. + RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_Unknown + alter cup size to ??? + +
    \ No newline at end of file diff --git a/Defs/Recipe_Surgery/Recipes_Surgery_Sphinctoplasty.xml b/Defs/Recipe_Surgery/Recipes_Surgery_Sphinctoplasty.xml new file mode 100644 index 0000000..800996b --- /dev/null +++ b/Defs/Recipe_Surgery/Recipes_Surgery_Sphinctoplasty.xml @@ -0,0 +1,72 @@ + + + + + Surgery_Sphinctoplasty + + Surgically tightens the pawn's Sphincter by 25%. + + tightening Sphincter + Surgery + Recipe_Surgery + MedicalOperationSpeed + Medicine + 0.2 + 400 + true + +
  • Human
  • +
    + 95 + +
  • + + +
  • Medicine
  • + + + 1 + +
    + + +
  • Medicine
  • +
    +
    +
    + + Surgery_Sphinctoplasty_Micro + + Surgically gives the pawn an micro Sphincter. + RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Micro + alter Sphincter size to micro + + + Surgery_Sphinctoplasty_Tight + + Surgically gives the pawn an tight Sphincter. + RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Tight + alter Sphincter size to tight + + + Surgery_Sphinctoplasty_Average + + Surgically gives the pawn an average Sphincter. + RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Average + alter Sphincter size to average + + + Surgery_Sphinctoplasty_Accomodating + + Surgically gives the pawn an accomodating Sphincter. + RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Accomodating + alter Sphincter size to accomodating + + + Surgery_Sphinctoplasty_Cavernous + + Surgically gives the pawn an cavernous Sphincter. + RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Cavernous + alter Sphincter size to cavernous + +
    \ No newline at end of file diff --git a/Defs/Recipe_Surgery/Recipes_Surgery_Vaginoplasty.xml b/Defs/Recipe_Surgery/Recipes_Surgery_Vaginoplasty.xml new file mode 100644 index 0000000..ee3097b --- /dev/null +++ b/Defs/Recipe_Surgery/Recipes_Surgery_Vaginoplasty.xml @@ -0,0 +1,72 @@ + + + + + Surgery_Vaginoplasty + + Surgically tightens the pawn's Vagina by 25%. + + tightening Vagina + Surgery + Recipe_Surgery + MedicalOperationSpeed + Medicine + 0.2 + 400 + true + +
  • Human
  • +
    + 95 + +
  • + + +
  • Medicine
  • + + + 1 + +
    + + +
  • Medicine
  • +
    +
    +
    + + Surgery_Vaginoplasty_Micro + + Surgically gives the pawn an micro Vagina. + RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Micro + alter Vagina size to micro + + + Surgery_Vaginoplasty_Tight + + Surgically gives the pawn an tight Vagina. + RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Tight + alter Vagina size to tight + + + Surgery_Vaginoplasty_Average + + Surgically gives the pawn an average Vagina. + RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Average + alter Vagina size to average + + + Surgery_Vaginoplasty_Accomodating + + Surgically gives the pawn an accomodating Vagina. + RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Accomodating + alter Vagina size to accomodating + + + Surgery_Vaginoplasty_Cavernous + + Surgically gives the pawn an cavernous Vagina. + RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Cavernous + alter Vagina size to cavernous + +
    \ No newline at end of file diff --git a/Source/Preview.psd b/Source/Preview.psd new file mode 100644 index 0000000..40d39a2 Binary files /dev/null and b/Source/Preview.psd differ diff --git a/Source/RJW_PlasticSurgeries.sln b/Source/RJW_PlasticSurgeries.sln new file mode 100644 index 0000000..fbf9f79 --- /dev/null +++ b/Source/RJW_PlasticSurgeries.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31911.196 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJW PlasticSurgeries", "RJW_PlasticSurgeries\RJW PlasticSurgeries.csproj", "{F17C6B3F-BA9D-4133-A201-1265A64BCB71}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F17C6B3F-BA9D-4133-A201-1265A64BCB71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F17C6B3F-BA9D-4133-A201-1265A64BCB71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F17C6B3F-BA9D-4133-A201-1265A64BCB71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F17C6B3F-BA9D-4133-A201-1265A64BCB71}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DBAFE1CE-D76E-4E7B-9E31-5DBC343D7281} + EndGlobalSection +EndGlobal diff --git a/Source/RJW_PlasticSurgeries/Mod.cs b/Source/RJW_PlasticSurgeries/Mod.cs new file mode 100644 index 0000000..4eb81fc --- /dev/null +++ b/Source/RJW_PlasticSurgeries/Mod.cs @@ -0,0 +1,9 @@ +using HugsLib; + +namespace RJW_PlasticSurgeries +{ + public class Mod : ModBase + { + public override string ModIdentifier => "Stardust3D.RJW.PlasticSurgeries"; + } +} \ No newline at end of file diff --git a/Source/RJW_PlasticSurgeries/Properties/AssemblyInfo.cs b/Source/RJW_PlasticSurgeries/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..648cfd5 --- /dev/null +++ b/Source/RJW_PlasticSurgeries/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RJW Vaginoplasty")] +[assembly: AssemblyDescription("Surgically alter pawn's genitals.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RJW_PlasticSurgeries")] +[assembly: AssemblyCopyright("©2021 Stardust3D")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("eefbb469-e5e0-48be-bf4d-c5e838d1362b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("4942.0.1.2")] +[assembly: AssemblyFileVersion("4942.0.1.2")] \ No newline at end of file diff --git a/Source/RJW_PlasticSurgeries/RJW PlasticSurgeries.csproj b/Source/RJW_PlasticSurgeries/RJW PlasticSurgeries.csproj new file mode 100644 index 0000000..a715a16 --- /dev/null +++ b/Source/RJW_PlasticSurgeries/RJW PlasticSurgeries.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {F17C6B3F-BA9D-4133-A201-1265A64BCB71} + Library + Properties + RJW_PlasticSurgeries + RJW_PlasticSurgeries + v4.8 + 512 + + + + + true + portable + false + ..\..\Assemblies\ + DEBUG;TRACE + prompt + 4 + false + + + + + portable + true + ..\..\Assemblies\ + + + prompt + 4 + false + ..\..\Assemblies\RJW_PlasticSurgeries.xml + true + + + true + + + true + + + false + + + + ..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + False + + + ..\..\..\dyspareunia\Assemblies\Dyspareunia.dll + + + ..\..\..\..\..\..\workshop\content\294100\818773962\Assemblies\HugsLib.dll + False + + + ..\..\..\rjw-base\1.3\Assemblies\RJW.dll + + + + + + + + + + + + + About\About.xml + + + About\Manifest.xml + + + Defs\Recipe_Surgery\Recipes_Surgery_Mammoplasty.xml + + + Defs\Recipe_Surgery\Recipes_Surgery_Sphinctoplasty.xml + + + Defs\Recipe_Surgery\Recipes_Surgery_Vaginoplasty.xml + + + + + \ No newline at end of file diff --git a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Mammoplasty.cs b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Mammoplasty.cs new file mode 100644 index 0000000..e01620b --- /dev/null +++ b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Mammoplasty.cs @@ -0,0 +1,221 @@ +using RimWorld; +using rjw; +using System.Collections.Generic; +using System.Linq; +using Verse; + +namespace RJW_PlasticSurgeries +{ + public abstract class Recipe_Surgery_Mammoplasty : Recipe_Surgery + { + public override IEnumerable GetPartsToApplyOn(Pawn pawn, RecipeDef recipe) + { + var part = Genital_Helper.get_genitalsBPR(pawn); + if (part != null) + { + var hediffs = Genital_Helper.get_PartsHediffList(pawn, part); + if (Genital_Helper.has_breasts(pawn, hediffs) && pawn.GetBreastList().Any(hed => hed.Severity >= 0.02f)) + yield return part; + } + } + + public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, + Bill bill) + { + if (billDoer != null) + { + TaleRecorder.RecordTale(TaleDefOf.DidSurgery, billDoer, pawn); + SurgeryResult(pawn); + } + } + + public abstract void SurgeryResult(Pawn pawn); + /*{ + pawn.GetBreastList().ForEach(hed => hed.Severity = Math.Min(1.0f, hed.Severity * 1.25f)); + //Log.Message($"Cup sizes: {pawn.GetBreastList().SelectMany(hed => hed.def.GetModExtension().cupSizes.Join()).Join(delimiter: ";")}"); + float val = 0; + PartSizeExtension.TryGetCupSize(pawn.GetBreastList().First(), out val); + pawn.GetBreastList().First().def.stages.First(); + Log.Message($"Cup size: {val}"); + }*/ + + protected void SurgeryCupX(Pawn pawn, int stage) + { + pawn.GetBreastList().ForEach(hed => + { + float severity; + if (TryGetSeverityFromSize(hed, stage, out severity)) + { + hed.Severity = severity; + } + }); + } + + static bool TryGetSeverityFromSize(Hediff hediff, float cupSize, out float severity) + { + if (!hediff.def.HasModExtension()) + { + severity = 0f; + return false; + } + + var extension = hediff.def.GetModExtension(); + var list = extension.cupSizes; + + if (list == null) + { + severity = 0f; + return false; + } + + var curve = new SimpleCurve(hediff.def.stages.Zip(list, + (stage, s) => new CurvePoint(s, stage.minSeverity))); + severity = curve.Evaluate(cupSize); + return true; + } + } + + public class Recipe_Surgery_Mammoplasty_A : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 1); + } + } + + public class Recipe_Surgery_Mammoplasty_B : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 2); + } + } + + public class Recipe_Surgery_Mammoplasty_C : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 3); + } + } + + public class Recipe_Surgery_Mammoplasty_D : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 4); + } + } + + public class Recipe_Surgery_Mammoplasty_E : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 6); + } + } + + public class Recipe_Surgery_Mammoplasty_F : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 7); + } + } + + public class Recipe_Surgery_Mammoplasty_G : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 9); + } + } + + public class Recipe_Surgery_Mammoplasty_H : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 11); + } + } + + public class Recipe_Surgery_Mammoplasty_J : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 13); + } + } + + public class Recipe_Surgery_Mammoplasty_K : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 15); + } + } + + public class Recipe_Surgery_Mammoplasty_L : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 17); + } + } + + public class Recipe_Surgery_Mammoplasty_M : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 19); + } + } + + public class Recipe_Surgery_Mammoplasty_N : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 21); + } + } + + public class Recipe_Surgery_Mammoplasty_O : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 23); + } + } + + public class Recipe_Surgery_Mammoplasty_P : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 25); + } + } + + public class Recipe_Surgery_Mammoplasty_Q : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 27); + } + } + + public class Recipe_Surgery_Mammoplasty_R : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 29); + } + } + + public class Recipe_Surgery_Mammoplasty_Unknown : Recipe_Surgery_Mammoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryCupX(pawn, 31); + } + } +} \ No newline at end of file diff --git a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Sphinctoplasty.cs b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Sphinctoplasty.cs new file mode 100644 index 0000000..c482bd6 --- /dev/null +++ b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Sphinctoplasty.cs @@ -0,0 +1,91 @@ +using System; +using RimWorld; +using rjw; +using System.Collections.Generic; +using Dyspareunia; +using Verse; + +namespace RJW_PlasticSurgeries +{ + public abstract class Recipe_Surgery_Sphinctoplasty : Recipe_Surgery + { + public override IEnumerable GetPartsToApplyOn(Pawn pawn, RecipeDef recipe) + { + var part = Genital_Helper.get_anusBPR(pawn); + if (part != null) + { + var hediffs = Genital_Helper.get_PartsHediffList(pawn, part); + if (Genital_Helper.has_anus(pawn, hediffs)) yield return part; + } + } + + /// + public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, + Bill bill) + { + if (billDoer != null) + { + TaleRecorder.RecordTale(TaleDefOf.DidSurgery, billDoer, pawn); + SurgeryResult(pawn); + } + } + + public abstract void SurgeryResult(Pawn pawn); + + protected void SurgeryX(Pawn pawn, float severity) + { + pawn.GetAnusList().ForEach(hed => + { + hed.Severity = severity; + try + { + PenetrationUtility.AddDamageHediff(Dyspareunia.DamageDefOf.SexStretch, 0.5f, hed, null); + } + catch (Exception e) + { + Log.Error("Try enabling Dyspareunia for sore genitals"); + } + }); + } + } + + public class Recipe_Surgery_Sphinctoplasty_Micro : Recipe_Surgery_Sphinctoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.1f); + } + } + + public class Recipe_Surgery_Sphinctoplasty_Tight : Recipe_Surgery_Sphinctoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.3f); + } + } + + public class Recipe_Surgery_Sphinctoplasty_Average : Recipe_Surgery_Sphinctoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.5f); + } + } + + public class Recipe_Surgery_Sphinctoplasty_Accomodating : Recipe_Surgery_Sphinctoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.7f); + } + } + + public class Recipe_Surgery_Sphinctoplasty_Cavernous : Recipe_Surgery_Sphinctoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.9f); + } + } +} \ No newline at end of file diff --git a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Vaginoplasty.cs b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Vaginoplasty.cs new file mode 100644 index 0000000..1881bd2 --- /dev/null +++ b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Vaginoplasty.cs @@ -0,0 +1,92 @@ +using System; +using RimWorld; +using rjw; +using System.Collections.Generic; +using System.Linq; +using Dyspareunia; +using Verse; + +namespace RJW_PlasticSurgeries +{ + public abstract class Recipe_Surgery_Vaginoplasty : Recipe_Surgery + { + public override IEnumerable GetPartsToApplyOn(Pawn pawn, RecipeDef recipe) + { + var part = Genital_Helper.get_genitalsBPR(pawn); + if (part != null) + { + var hediffs = Genital_Helper.get_PartsHediffList(pawn, part); + if (Genital_Helper.has_vagina(pawn, hediffs)) yield return part; + } + } + + /// + public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, + Bill bill) + { + if (billDoer != null) + { + TaleRecorder.RecordTale(TaleDefOf.DidSurgery, billDoer, pawn); + SurgeryResult(pawn); + } + } + + public abstract void SurgeryResult(Pawn pawn); + + protected void SurgeryX(Pawn pawn, float severity) + { + pawn.GetGenitalsList().FindAll(Genital_Helper.is_vagina).ForEach(hed => + { + hed.Severity = severity; + try + { + PenetrationUtility.AddDamageHediff(Dyspareunia.DamageDefOf.SexStretch, 0.5f, hed, null); + } + catch (Exception e) + { + Log.Error("Try enabling Dyspareunia for sore genitals"); + } + }); + } + } + + public class Recipe_Surgery_Vaginoplasty_Micro : Recipe_Surgery_Vaginoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.1f); + } + } + + public class Recipe_Surgery_Vaginoplasty_Tight : Recipe_Surgery_Vaginoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.3f); + } + } + + public class Recipe_Surgery_Vaginoplasty_Average : Recipe_Surgery_Vaginoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.5f); + } + } + + public class Recipe_Surgery_Vaginoplasty_Accomodating : Recipe_Surgery_Vaginoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.7f); + } + } + + public class Recipe_Surgery_Vaginoplasty_Cavernous : Recipe_Surgery_Vaginoplasty + { + public override void SurgeryResult(Pawn pawn) + { + this.SurgeryX(pawn, 0.9f); + } + } +} \ No newline at end of file