diff --git a/1.3/Assemblies/RJW_PlasticSurgeries.dll b/1.3/Assemblies/RJW_PlasticSurgeries.dll
index f035d61..cdbec2c 100644
Binary files a/1.3/Assemblies/RJW_PlasticSurgeries.dll and b/1.3/Assemblies/RJW_PlasticSurgeries.dll differ
diff --git a/About/Manifest.xml b/About/Manifest.xml
index 5e02532..5abb061 100644
--- a/About/Manifest.xml
+++ b/About/Manifest.xml
@@ -2,5 +2,5 @@
RJW PlasticSurgeries
- 4943.0.1.3
+ 4943.0.1.4
\ No newline at end of file
diff --git a/Assemblies/RJW_PlasticSurgeries.dll b/Assemblies/RJW_PlasticSurgeries.dll
index f035d61..cdbec2c 100644
Binary files a/Assemblies/RJW_PlasticSurgeries.dll and b/Assemblies/RJW_PlasticSurgeries.dll differ
diff --git a/Defs/Recipe_Surgery/Recipes_Surgery_Penoplasty.xml b/Defs/Recipe_Surgery/Recipes_Surgery_Penoplasty.xml
new file mode 100644
index 0000000..3edac14
--- /dev/null
+++ b/Defs/Recipe_Surgery/Recipes_Surgery_Penoplasty.xml
@@ -0,0 +1,72 @@
+
+
+
+
+ Surgery_Penoplasty
+
+ Surgically enlarges the pawn's Penis by 25%.
+
+ enlarging Penis
+ Surgery
+ Recipe_Surgery
+ MedicalOperationSpeed
+ Medicine
+ 0.2
+ 400
+ true
+
+ Human
+
+ 95
+
+
+
+
+ Medicine
+
+
+ 1
+
+
+
+
+ Medicine
+
+
+
+
+ Surgery_Penoplasty_Micro
+
+ Surgically gives the pawn an micro Penis.
+ RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Micro
+ alter Penis size to micro
+
+
+ Surgery_Penoplasty_Small
+
+ Surgically gives the pawn an small Penis.
+ RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Small
+ alter Penis size to small
+
+
+ Surgery_Penoplasty_Average
+
+ Surgically gives the pawn an average Penis.
+ RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Average
+ alter Penis size to average
+
+
+ Surgery_Penoplasty_Large
+
+ Surgically gives the pawn an accomodating Penis.
+ RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Large
+ alter Penis size to large
+
+
+ Surgery_Penoplasty_Huge
+
+ Surgically gives the pawn an huge Penis.
+ RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Huge
+ alter Penis size to huge
+
+
\ No newline at end of file
diff --git a/Source/RJW_PlasticSurgeries/Properties/AssemblyInfo.cs b/Source/RJW_PlasticSurgeries/Properties/AssemblyInfo.cs
index 516f4fd..560f693 100644
--- a/Source/RJW_PlasticSurgeries/Properties/AssemblyInfo.cs
+++ b/Source/RJW_PlasticSurgeries/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// 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("4943.0.1.3")]
-[assembly: AssemblyFileVersion("4943.0.1.3")]
\ No newline at end of file
+[assembly: AssemblyVersion("4943.0.1.4")]
+[assembly: AssemblyFileVersion("4943.0.1.4")]
\ No newline at end of file
diff --git a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries.csproj b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries.csproj
index a28f25d..ff25c83 100644
--- a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries.csproj
+++ b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries.csproj
@@ -72,6 +72,7 @@
+
@@ -89,6 +90,9 @@
Defs\Recipe_Surgery\Recipes_Surgery_Mammoplasty.xml
+
+ Defs\Recipe_Surgery\Recipes_Surgery_Penoplasty.xml
+
Defs\Recipe_Surgery\Recipes_Surgery_Sphinctoplasty.xml
diff --git a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Penoplasty.cs b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Penoplasty.cs
new file mode 100644
index 0000000..0234026
--- /dev/null
+++ b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Penoplasty.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using Dyspareunia;
+using RimWorld;
+using rjw;
+using Verse;
+using DamageDefOf = Dyspareunia.DamageDefOf;
+
+namespace RJW_PlasticSurgeries
+{
+ public abstract class Recipe_Surgery_Penoplasty : 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_penis_fertile(pawn, hediffs) ||
+ Genital_Helper.has_penis_infertile(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_penis).ForEach(hed =>
+ {
+ hed.Severity = severity;
+ try
+ {
+ PenetrationUtility.AddDamageHediff(DamageDefOf.SexStretch, 0.5f, hed, null);
+ }
+ catch (Exception e)
+ {
+ Log.Error("Try enabling Dyspareunia for sore genitals");
+ }
+ });
+ }
+ }
+
+ public class Recipe_Surgery_Penoplasty_Micro : Recipe_Surgery_Penoplasty
+ {
+ public override void SurgeryResult(Pawn pawn) => SurgeryX(pawn, 0.1f);
+ }
+
+ public class Recipe_Surgery_Penoplasty_Small : Recipe_Surgery_Penoplasty
+ {
+ public override void SurgeryResult(Pawn pawn) => SurgeryX(pawn, 0.3f);
+ }
+
+ public class Recipe_Surgery_Penoplasty_Average : Recipe_Surgery_Penoplasty
+ {
+ public override void SurgeryResult(Pawn pawn) => SurgeryX(pawn, 0.5f);
+ }
+
+ public class Recipe_Surgery_Penoplasty_Large : Recipe_Surgery_Penoplasty
+ {
+ public override void SurgeryResult(Pawn pawn) => SurgeryX(pawn, 0.7f);
+ }
+
+ public class Recipe_Surgery_Penoplasty_Huge : Recipe_Surgery_Penoplasty
+ {
+ public override void SurgeryResult(Pawn pawn) => SurgeryX(pawn, 0.9f);
+ }
+}
\ No newline at end of file
diff --git a/Source/build.gradle.kts b/Source/build.gradle.kts
index 4d7cc8a..a88902f 100644
--- a/Source/build.gradle.kts
+++ b/Source/build.gradle.kts
@@ -11,7 +11,7 @@ plugins {
//id("com.ullink.nunit") version "1.12"
}
-version = "4943.0.1.3"
+version = "4943.0.1.4"
val friendlyName = "rjw-plasticsurgeries"
tasks.register("buildC#") {