diff --git a/1.3/Assemblies/RJW_PlasticSurgeries.dll b/1.3/Assemblies/RJW_PlasticSurgeries.dll
index 0186651..a569982 100644
Binary files a/1.3/Assemblies/RJW_PlasticSurgeries.dll and b/1.3/Assemblies/RJW_PlasticSurgeries.dll differ
diff --git a/1.4/Assemblies/RJW_PlasticSurgeries.dll b/1.4/Assemblies/RJW_PlasticSurgeries.dll
index 2954131..3c230e0 100644
Binary files a/1.4/Assemblies/RJW_PlasticSurgeries.dll and b/1.4/Assemblies/RJW_PlasticSurgeries.dll differ
diff --git a/1.5/Assemblies/RJW_PlasticSurgeries.dll b/1.5/Assemblies/RJW_PlasticSurgeries.dll
new file mode 100644
index 0000000..e2ba071
Binary files /dev/null and b/1.5/Assemblies/RJW_PlasticSurgeries.dll differ
diff --git a/About/About.xml b/About/About.xml
index dfd4a34..9a60bb7 100644
--- a/About/About.xml
+++ b/About/About.xml
@@ -6,6 +6,7 @@
1.3
1.4
+ 1.5
Stardust3D.RJW.PlasticSurgeries
Surgically alter pawn's genitals.
diff --git a/About/Manifest.xml b/About/Manifest.xml
index c35b410..cb86e88 100644
--- a/About/Manifest.xml
+++ b/About/Manifest.xml
@@ -2,5 +2,5 @@
RJW PlasticSurgeries
- 5390.0.1.6
+ 5400.0.1.7
\ No newline at end of file
diff --git a/Source/RJW_PlasticSurgeries/1.5/Recipe_Plastic_Surgery.cs b/Source/RJW_PlasticSurgeries/1.5/Recipe_Plastic_Surgery.cs
new file mode 100644
index 0000000..2304c8c
--- /dev/null
+++ b/Source/RJW_PlasticSurgeries/1.5/Recipe_Plastic_Surgery.cs
@@ -0,0 +1,61 @@
+using System.Collections.Generic;
+using RimWorld;
+using rjw;
+using Verse;
+
+namespace RJW_PlasticSurgeries
+{
+ public abstract class Recipe_Plastic_Surgery : Recipe_Surgery
+ {
+ protected readonly bool HasDyspareunia = false; // ModLister.HasActiveModWithName("Dyspareunia");
+ protected readonly bool HasLicentia = ModLister.HasActiveModWithName("RimJobWorld - Licentia Labs");
+
+ public override IEnumerable GetPartsToApplyOn(Pawn pawn, RecipeDef recipe)
+ {
+ var part = GetPartCandidate(pawn);
+ if (part != null)
+ {
+ var hediffs = Genital_Helper.get_PartsHediffList(pawn, part);
+ if (HasPart(pawn, hediffs)) yield return part;
+ }
+ }
+
+ protected abstract BodyPartRecord GetPartCandidate(Pawn pawn);
+ protected abstract bool HasPart(Pawn pawn, List hediffs);
+
+ 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);
+ }
+ }
+
+ protected abstract void SurgeryResult(Pawn pawn);
+
+
+ ///
+ private static void DamageHediff(Hediff hed)
+ {
+ }
+
+ protected void SurgeryX(Pawn pawn, float severity, bool damagePart = false)
+ {
+ GetHediffs(pawn).ForEach(hed =>
+ {
+ hed.Severity = severity;
+ if (damagePart && HasDyspareunia) DamageHediff(hed);
+ if (damagePart && HasLicentia)
+ {
+ var (type, damage) = GetLicentiaDamage();
+ LicentiaLabs.DamageHelper.ApplyDamage(pawn, hed.Part, type, damage);
+ }
+ });
+ }
+
+ protected abstract List GetHediffs(Pawn pawn);
+ protected abstract (HediffDef, float) GetLicentiaDamage();
+ }
+}
\ No newline at end of file
diff --git a/Source/RJW_PlasticSurgeries/1.5/Recipe_Surgery_Beautify.cs b/Source/RJW_PlasticSurgeries/1.5/Recipe_Surgery_Beautify.cs
new file mode 100644
index 0000000..bdf4023
--- /dev/null
+++ b/Source/RJW_PlasticSurgeries/1.5/Recipe_Surgery_Beautify.cs
@@ -0,0 +1,61 @@
+using System.Collections.Generic;
+using RimWorld;
+using Verse;
+using static rjw.VanillaTraitDefOf;
+
+namespace RJW_PlasticSurgeries
+{
+ ///
+ public abstract class Recipe_Surgery_Beautify : Recipe_Surgery
+ {
+ ///
+ public override IEnumerable GetPartsToApplyOn(Pawn pawn, RecipeDef recipe)
+ {
+ if (!pawn.story.traits.HasTrait(Beauty) ||
+ pawn.story.traits.HasTrait(Beauty) && pawn.story.traits.GetTrait(Beauty).Degree < 2)
+ yield return pawn.RaceProps.body.corePart;
+ }
+
+ ///
+ 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);
+
+ ///
+ /// Setts the severity of the Beautiful trait for the selected pawn.
+ /// If the trait doesn't exist in the pawns traits, it will be added.
+ ///
+ /// the pawn to modify
+ /// the new severity of the pawn's Beautiful trait
+ protected void SurgeryX(Pawn pawn, int severity)
+ {
+ if (pawn.story.traits.HasTrait(Beauty))
+ {
+ pawn.story.traits.allTraits.FindAll(t => Beauty.ConflictsWith(t))
+ .ForEach(t => pawn.story.traits.RemoveTrait(t));
+ pawn.story.traits.RemoveTrait(pawn.story.traits.allTraits.Find(t => t.def == Beauty));
+ }
+
+ pawn.story.traits.GainTrait(new Trait(Beauty, severity));
+ }
+ }
+
+ ///
+ public class Recipe_Surgery_Beautify_Beautiful : Recipe_Surgery_Beautify
+ {
+ ///
+ public override void SurgeryResult(Pawn pawn) => SurgeryX(pawn, 2);
+ }
+}
\ No newline at end of file
diff --git a/Source/RJW_PlasticSurgeries/1.5/VanillaTraitDefOf.cs b/Source/RJW_PlasticSurgeries/1.5/VanillaTraitDefOf.cs
new file mode 100644
index 0000000..918c7ca
--- /dev/null
+++ b/Source/RJW_PlasticSurgeries/1.5/VanillaTraitDefOf.cs
@@ -0,0 +1,26 @@
+using Verse;
+using RimWorld;
+
+namespace rjw
+{
+ [DefOf]
+ public static class VanillaTraitDefOf
+ {
+ public static TraitDef Tough;
+
+ public static TraitDef Nerves;
+
+ public static TraitDef Beauty;
+
+ public static TraitDef TooSmart;
+
+ public static TraitDef NaturalMood;
+
+ public static TraitDef Cannibal;
+
+ static VanillaTraitDefOf()
+ {
+ DefOfHelper.EnsureInitializedInCtor(typeof(VanillaTraitDefOf));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/RJW_PlasticSurgeries/About/About.xml b/Source/RJW_PlasticSurgeries/About/About.xml
index dfd4a34..9a60bb7 100644
--- a/Source/RJW_PlasticSurgeries/About/About.xml
+++ b/Source/RJW_PlasticSurgeries/About/About.xml
@@ -6,6 +6,7 @@
1.3
1.4
+ 1.5
Stardust3D.RJW.PlasticSurgeries
Surgically alter pawn's genitals.
diff --git a/Source/RJW_PlasticSurgeries/About/Manifest.xml b/Source/RJW_PlasticSurgeries/About/Manifest.xml
index c35b410..cb86e88 100644
--- a/Source/RJW_PlasticSurgeries/About/Manifest.xml
+++ b/Source/RJW_PlasticSurgeries/About/Manifest.xml
@@ -2,5 +2,5 @@
RJW PlasticSurgeries
- 5390.0.1.6
+ 5400.0.1.7
\ No newline at end of file
diff --git a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.3.csproj b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.3.csproj
index e82420f..05a3460 100644
--- a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.3.csproj
+++ b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.3.csproj
@@ -15,8 +15,8 @@
11
©2024 Stardust3D
Stardust3D
- 5390.0.1.6
- 5390.0.1.6
+ 5400.0.1.7
+ 5400.0.1.7
true
RJW_PlasticSurgeries.snk
Surgically alter pawn's genitals.
@@ -31,7 +31,7 @@
-
+
diff --git a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.4.csproj b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.4.csproj
index 8da69ff..edf45b8 100644
--- a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.4.csproj
+++ b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.4.csproj
@@ -15,8 +15,8 @@
11
©2024 Stardust3D
Stardust3D
- 5390.0.1.6
- 5390.0.1.6
+ 5400.0.1.7
+ 5400.0.1.7
true
RJW_PlasticSurgeries.snk
Surgically alter pawn's genitals.
@@ -31,7 +31,7 @@
-
+
diff --git a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.5.csproj b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.5.csproj
index 0aa915d..0fa1757 100644
--- a/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.5.csproj
+++ b/Source/RJW_PlasticSurgeries/RJW_PlasticSurgeries_1.5.csproj
@@ -15,14 +15,14 @@
11
©2024 Stardust3D
Stardust3D
- 5390.0.1.6
- 5390.0.1.6
+ 5400.0.1.7
+ 5400.0.1.7
true
RJW_PlasticSurgeries.snk
Surgically alter pawn's genitals.
- bin\Release\1.4\
+ bin\Release\1.5\
@@ -31,14 +31,14 @@
-
-
+
+
-
+
..\..\..\licentia-labs\Assemblies\LicentiaLabs.dll
@@ -49,6 +49,8 @@
+
+
diff --git a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Penoplasty.cs b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Penoplasty.cs
index 3e11c72..3a2408b 100644
--- a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Penoplasty.cs
+++ b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Penoplasty.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using LicentiaLabs;
using rjw;
using Verse;
@@ -23,8 +24,15 @@ namespace RJW_PlasticSurgeries
return pawn.GetGenitalsList().FindAll(Genital_Helper.is_penis);
}
- protected override (HediffDef, float) GetLicentiaDamage() =>
- (Licentia.HediffDefs.StretchTear, 0.2f);
+ protected override (HediffDef, float) GetLicentiaDamage()
+ {
+ if (HasLicentia)
+ {
+ return (Licentia.HediffDefs.StretchTear, 0.2f);
+ }
+
+ throw new NotSupportedException();
+ }
}
public class Recipe_Surgery_Penoplasty_Micro : Recipe_Surgery_Penoplasty
diff --git a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Sphinctoplasty.cs b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Sphinctoplasty.cs
index 796268f..fbbd9ae 100644
--- a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Sphinctoplasty.cs
+++ b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Sphinctoplasty.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using LicentiaLabs;
using rjw;
using Verse;
@@ -21,9 +22,16 @@ namespace RJW_PlasticSurgeries
{
return pawn.GetAnusList();
}
-
- protected override (HediffDef, float) GetLicentiaDamage() =>
- (Licentia.HediffDefs.StretchTear, 0.2f);
+
+ protected override (HediffDef, float) GetLicentiaDamage()
+ {
+ if (HasLicentia)
+ {
+ return (Licentia.HediffDefs.StretchTear, 0.2f);
+ }
+
+ throw new NotSupportedException();
+ }
}
public class Recipe_Surgery_Sphinctoplasty_Micro : Recipe_Surgery_Sphinctoplasty
diff --git a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Vaginoplasty.cs b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Vaginoplasty.cs
index 68a7803..33f13fc 100644
--- a/Source/RJW_PlasticSurgeries/Recipe_Surgery_Vaginoplasty.cs
+++ b/Source/RJW_PlasticSurgeries/Recipe_Surgery_Vaginoplasty.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using LicentiaLabs;
using rjw;
using Verse;
@@ -21,9 +22,16 @@ namespace RJW_PlasticSurgeries
{
return pawn.GetGenitalsList().FindAll(Genital_Helper.is_vagina);
}
-
- protected override (HediffDef, float) GetLicentiaDamage() =>
- (Licentia.HediffDefs.StretchTear, 0.2f);
+
+ protected override (HediffDef, float) GetLicentiaDamage()
+ {
+ if (HasLicentia)
+ {
+ return (Licentia.HediffDefs.StretchTear, 0.2f);
+ }
+
+ throw new NotSupportedException();
+ }
}
public class Recipe_Surgery_Vaginoplasty_Micro : Recipe_Surgery_Vaginoplasty
diff --git a/Source/build.gradle.kts b/Source/build.gradle.kts
index 46daea1..842c741 100644
--- a/Source/build.gradle.kts
+++ b/Source/build.gradle.kts
@@ -11,7 +11,7 @@ plugins {
alias(libs.plugins.versions)
}
-version = "5390.0.1.6"
+version = "5400.0.1.7"
val friendlyName = "rjw-plasticsurgeries"
tasks.register("buildC#_1.3") {
@@ -105,7 +105,7 @@ tasks.register("sign_1.5") {
}
tasks.register("copy") {
- dependsOn("copy_1.3", "copy_1.4", "copy_about")
+ dependsOn("copy_1.3", "copy_1.4", "copy_1.5", "copy_about")
}
tasks.register("copy_about") {
@@ -115,19 +115,25 @@ tasks.register("copy_about") {
tasks.register("copy_1.3") {
dependsOn("copyDll_1.3")
- from(project.projectDir.resolve("${rootProject.name}/1.3"))
+ from(project.projectDir.resolve("${rootProject.name}/1.3")){
+ exclude("**/*.cs")
+ }
into(project.projectDir.parentFile.resolve("1.3"))
}
tasks.register("copy_1.4") {
dependsOn("copyDll_1.4")
- from(project.projectDir.resolve("${rootProject.name}/1.4"))
+ from(project.projectDir.resolve("${rootProject.name}/1.4")){
+ exclude("**/*.cs")
+ }
into(project.projectDir.parentFile.resolve("1.4"))
}
tasks.register("copy_1.5") {
dependsOn("copyDll_1.5")
- from(project.projectDir.resolve("${rootProject.name}/1.5"))
+ from(project.projectDir.resolve("${rootProject.name}/1.5")){
+ exclude("**/*.cs")
+ }
into(project.projectDir.parentFile.resolve("1.5"))
}
@@ -169,6 +175,7 @@ tasks.register("buildZip") {
into("$friendlyName/Source/${rootProject.name}") {
from(project.projectDir.parentFile.resolve("Source/${rootProject.name}"))
excludes.add("**/obj/**")
+ excludes.add("**/bin/**")
}
}
diff --git a/Source/global.json b/Source/global.json
index 1bcf6c0..2ddda36 100644
--- a/Source/global.json
+++ b/Source/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "6.0.0",
+ "version": "8.0.0",
"rollForward": "latestMinor",
"allowPrerelease": false
}