Compare commits

...

21 commits

Author SHA1 Message Date
Stardust3D
c3a23413c7 Merge branch 'feature/1.6-support' into develop 2025-10-03 17:43:02 +02:00
Stardust3D
8179fba8c4 Update assemblies for 1.6 compatibility 2025-10-03 17:41:15 +02:00
Stardust3D
47505f9f2a Dropped Licentia support for 1.6 2025-09-30 16:58:20 +02:00
Stardust3D
bd7332c443 1.6 preparations 2025-09-05 20:48:30 +02:00
Stardust3D
661b349971 Merge tag '5603.0.1.8' into develop
5603.0.1.8 5603.0.1.8
2024-12-07 17:36:21 +01:00
Stardust3D
9f94a1db07 Merge branch 'release/5603.0.1.8' 2024-12-07 17:36:20 +01:00
Stardust3D
4db97c9dcb updated binaries 2024-12-07 17:35:46 +01:00
Stardust3D
cfa2be5757 bump mod version to 5603.0.1.8 2024-12-07 17:35:34 +01:00
Stardust3D
962e348956 bump Rimworld version to 1.5.4297 2024-12-07 17:34:14 +01:00
Stardust3D
8ea18ab084 upgrade gradle wrapper to 8.11.1 2024-12-07 17:31:17 +01:00
Stardust3D
c7eb15ec2f Merge tag '5600.0.1.8' into develop
5600.0.1.8 5600.0.1.8
2024-11-16 13:49:15 +01:00
Stardust3D
6c0e488cee Merge branch 'release/5600.0.1.8' 2024-11-16 13:49:14 +01:00
Stardust3D
e508dcf4cf added binaries 2024-11-16 13:48:47 +01:00
Stardust3D
b6ebf8508b bump version to 5600.0.1.8 2024-11-16 13:47:26 +01:00
Stardust3D
908352a453 Update .NET SDK version to 9.0.0 2024-11-16 03:37:14 +01:00
Stardust3D
a2a1c8c99f Update Gradle wrapper to version 8.11 2024-11-16 03:25:55 +01:00
Stardust3D
94d7c4274e Merge tag '5502.0.1.8' into develop
5502.0.1.8 5502.0.1.8
2024-10-02 11:32:41 +02:00
Stardust3D
ad7d276d90 Merge branch 'release/5502.0.1.8' 2024-10-02 11:32:40 +02:00
Stardust3D
a7b0d129b6 Update assembly and file versions to 5502.0.1.8
Updated assembly and file versions from 5400.0.1.8 to 5502.0.1.8 in all relevant project files. This ensures consistency across all versioned components of the project.
2024-10-02 11:31:41 +02:00
Stardust3D
c1d6d74573 Added a 1.5 specific implementation for cup sizes used by mammoplasties 2024-10-02 11:31:22 +02:00
Stardust3D
bc28863fe1 updated gradle 2024-10-02 11:28:37 +02:00
37 changed files with 1341 additions and 49 deletions

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "Source/dependencies/rjw"]
path = Source/dependencies/rjw
url = https://gitgud.io/Ed86/rjw.git
[submodule "Source/dependencies/licentia-labs"]
path = Source/dependencies/licentia-labs
url = https://gitgud.io/Jaaldabaoth/licentia-labs

Binary file not shown.

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RecipeDef Name="Surgery_Beautify_X" Abstract="True">
<defName>Surgery_Beautify</defName>
<label>beautify</label>
<description>Surgically beautifies the pawn.</description>
<jobString>beautifying</jobString>
<effectWorking>Surgery</effectWorking>
<soundWorking>Recipe_Surgery</soundWorking>
<workSpeedStat>MedicalOperationSpeed</workSpeedStat>
<workSkill>Medicine</workSkill>
<workSkillLearnFactor>0.2</workSkillLearnFactor>
<workAmount>400</workAmount>
<anesthetize>true</anesthetize>
<recipeUsers>
<li>Human</li>
</recipeUsers>
<surgerySuccessChanceFactor>95</surgerySuccessChanceFactor>
<ingredients>
<li>
<filter>
<categories>
<li>Medicine</li>
</categories>
</filter>
<count>1</count>
</li>
</ingredients>
<fixedIngredientFilter>
<categories>
<li>Medicine</li>
</categories>
</fixedIngredientFilter>
</RecipeDef>
<RecipeDef ParentName="Surgery_Beautify_X">
<defName>Surgery_Beautify_Beautiful</defName>
<label>beautify (beautiful)</label>
<description>Surgically beautifies the pawn.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Beautify_Beautiful</workerClass>
<jobString>beautify the pawn.</jobString>
</RecipeDef>
</Defs>

View file

@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RecipeDef Name="Surgery_Mammoplasty_X" Abstract="True">
<defName>Surgery_Mammoplasty</defName>
<label>mammoplasty</label>
<description>Surgically increases the pawn's breast size by 25%.</description>
<!--<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty</workerClass>-->
<jobString>increasing breast size</jobString>
<effectWorking>Surgery</effectWorking>
<soundWorking>Recipe_Surgery</soundWorking>
<workSpeedStat>MedicalOperationSpeed</workSpeedStat>
<workSkill>Medicine</workSkill>
<workSkillLearnFactor>0.2</workSkillLearnFactor>
<workAmount>400</workAmount>
<anesthetize>true</anesthetize>
<recipeUsers>
<li>Human</li>
</recipeUsers>
<surgerySuccessChanceFactor>95</surgerySuccessChanceFactor>
<ingredients>
<li>
<filter>
<categories>
<li>Medicine</li>
</categories>
</filter>
<count>1</count>
</li>
</ingredients>
<fixedIngredientFilter>
<categories>
<li>Medicine</li>
</categories>
</fixedIngredientFilter>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_A</defName>
<label>mammoplasty (A Cup)</label>
<description>Surgically gives the pawn an A cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_A</workerClass>
<jobString>alter cup size to A</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_B</defName>
<label>mammoplasty (B Cup)</label>
<description>Surgically gives the pawn an B cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_B</workerClass>
<jobString>alter cup size to B</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_C</defName>
<label>mammoplasty (C Cup)</label>
<description>Surgically gives the pawn an C cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_C</workerClass>
<jobString>alter cup size to C</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_D</defName>
<label>mammoplasty (D Cup)</label>
<description>Surgically gives the pawn an D cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_D</workerClass>
<jobString>alter cup size to D</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_E</defName>
<label>mammoplasty (E Cup)</label>
<description>Surgically gives the pawn an E cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_E</workerClass>
<jobString>alter cup size to E</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_F</defName>
<label>mammoplasty (F Cup)</label>
<description>Surgically gives the pawn an F cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_F</workerClass>
<jobString>alter cup size to F</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_G</defName>
<label>mammoplasty (G Cup)</label>
<description>Surgically gives the pawn an G cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_G</workerClass>
<jobString>alter cup size to G</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_H</defName>
<label>mammoplasty (H Cup)</label>
<description>Surgically gives the pawn an H cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_H</workerClass>
<jobString>alter cup size to H</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_J</defName>
<label>mammoplasty (J Cup)</label>
<description>Surgically gives the pawn an J cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_J</workerClass>
<jobString>alter cup size to J</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_K</defName>
<label>mammoplasty (K Cup)</label>
<description>Surgically gives the pawn an K cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_K</workerClass>
<jobString>alter cup size to K</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_L</defName>
<label>mammoplasty (L Cup)</label>
<description>Surgically gives the pawn an L cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_L</workerClass>
<jobString>alter cup size to L</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_M</defName>
<label>mammoplasty (M Cup)</label>
<description>Surgically gives the pawn an M cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_M</workerClass>
<jobString>alter cup size to M</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_N</defName>
<label>mammoplasty (N Cup)</label>
<description>Surgically gives the pawn an N cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_N</workerClass>
<jobString>alter cup size to N</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_O</defName>
<label>mammoplasty (O Cup)</label>
<description>Surgically gives the pawn an O cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_O</workerClass>
<jobString>alter cup size to O</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_P</defName>
<label>mammoplasty (P Cup)</label>
<description>Surgically gives the pawn an P cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_P</workerClass>
<jobString>alter cup size to P</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_Q</defName>
<label>mammoplasty (Q Cup)</label>
<description>Surgically gives the pawn an Q cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_Q</workerClass>
<jobString>alter cup size to Q</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_R</defName>
<label>mammoplasty (R Cup)</label>
<description>Surgically gives the pawn an R cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_R</workerClass>
<jobString>alter cup size to R</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Mammoplasty_X">
<defName>Surgery_Mammoplasty_Unknown</defName>
<label>mammoplasty (??? Cup)</label>
<description>Surgically gives the pawn an ??? cup.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Mammoplasty_Unknown</workerClass>
<jobString>alter cup size to ???</jobString>
</RecipeDef>
</Defs>

View file

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RecipeDef Name="Surgery_Penoplasty_X" Abstract="True">
<defName>Surgery_Penoplasty</defName>
<label>Penoplasty</label>
<description>Surgically enlarges the pawn's Penis by 25%.</description>
<!--<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty</workerClass>-->
<jobString>enlarging Penis</jobString>
<effectWorking>Surgery</effectWorking>
<soundWorking>Recipe_Surgery</soundWorking>
<workSpeedStat>MedicalOperationSpeed</workSpeedStat>
<workSkill>Medicine</workSkill>
<workSkillLearnFactor>0.2</workSkillLearnFactor>
<workAmount>400</workAmount>
<anesthetize>true</anesthetize>
<recipeUsers>
<li>Human</li>
</recipeUsers>
<surgerySuccessChanceFactor>95</surgerySuccessChanceFactor>
<ingredients>
<li>
<filter>
<categories>
<li>Medicine</li>
</categories>
</filter>
<count>1</count>
</li>
</ingredients>
<fixedIngredientFilter>
<categories>
<li>Medicine</li>
</categories>
</fixedIngredientFilter>
</RecipeDef>
<RecipeDef ParentName="Surgery_Penoplasty_X">
<defName>Surgery_Penoplasty_Micro</defName>
<label>Penoplasty (micro)</label>
<description>Surgically gives the pawn an micro Penis.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Micro</workerClass>
<jobString>alter Penis size to micro</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Penoplasty_X">
<defName>Surgery_Penoplasty_Small</defName>
<label>Penoplasty (small)</label>
<description>Surgically gives the pawn an small Penis.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Small</workerClass>
<jobString>alter Penis size to small</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Penoplasty_X">
<defName>Surgery_Penoplasty_Average</defName>
<label>Penoplasty (average)</label>
<description>Surgically gives the pawn an average Penis.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Average</workerClass>
<jobString>alter Penis size to average</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Penoplasty_X">
<defName>Surgery_Penoplasty_Large</defName>
<label>Penoplasty (large)</label>
<description>Surgically gives the pawn an accomodating Penis.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Large</workerClass>
<jobString>alter Penis size to large</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Penoplasty_X">
<defName>Surgery_Penoplasty_Huge</defName>
<label>Penoplasty (huge)</label>
<description>Surgically gives the pawn an huge Penis.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Penoplasty_Huge</workerClass>
<jobString>alter Penis size to huge</jobString>
</RecipeDef>
</Defs>

View file

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RecipeDef Name="Surgery_Sphinctoplasty_X" Abstract="True">
<defName>Surgery_Sphinctoplasty</defName>
<label>sphinctoplasty</label>
<description>Surgically tightens the pawn's Sphincter by 25%.</description>
<!--<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty</workerClass>-->
<jobString>tightening Sphincter</jobString>
<effectWorking>Surgery</effectWorking>
<soundWorking>Recipe_Surgery</soundWorking>
<workSpeedStat>MedicalOperationSpeed</workSpeedStat>
<workSkill>Medicine</workSkill>
<workSkillLearnFactor>0.2</workSkillLearnFactor>
<workAmount>400</workAmount>
<anesthetize>true</anesthetize>
<recipeUsers>
<li>Human</li>
</recipeUsers>
<surgerySuccessChanceFactor>95</surgerySuccessChanceFactor>
<ingredients>
<li>
<filter>
<categories>
<li>Medicine</li>
</categories>
</filter>
<count>1</count>
</li>
</ingredients>
<fixedIngredientFilter>
<categories>
<li>Medicine</li>
</categories>
</fixedIngredientFilter>
</RecipeDef>
<RecipeDef ParentName="Surgery_Sphinctoplasty_X">
<defName>Surgery_Sphinctoplasty_Micro</defName>
<label>sphinctoplasty (micro)</label>
<description>Surgically gives the pawn an micro Sphincter.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Micro</workerClass>
<jobString>alter Sphincter size to micro</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Sphinctoplasty_X">
<defName>Surgery_Sphinctoplasty_Tight</defName>
<label>sphinctoplasty (tight)</label>
<description>Surgically gives the pawn an tight Sphincter.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Tight</workerClass>
<jobString>alter Sphincter size to tight</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Sphinctoplasty_X">
<defName>Surgery_Sphinctoplasty_Average</defName>
<label>sphinctoplasty (average)</label>
<description>Surgically gives the pawn an average Sphincter.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Average</workerClass>
<jobString>alter Sphincter size to average</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Sphinctoplasty_X">
<defName>Surgery_Sphinctoplasty_Accomodating</defName>
<label>sphinctoplasty (accomodating)</label>
<description>Surgically gives the pawn an accomodating Sphincter.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Accomodating</workerClass>
<jobString>alter Sphincter size to accomodating</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Sphinctoplasty_X">
<defName>Surgery_Sphinctoplasty_Cavernous</defName>
<label>sphinctoplasty (cavernous)</label>
<description>Surgically gives the pawn an cavernous Sphincter.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Sphinctoplasty_Cavernous</workerClass>
<jobString>alter Sphincter size to cavernous</jobString>
</RecipeDef>
</Defs>

View file

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RecipeDef Name="Surgery_Vaginoplasty_X" Abstract="True">
<defName>Surgery_Vaginoplasty</defName>
<label>vaginoplasty</label>
<description>Surgically tightens the pawn's Vagina by 25%.</description>
<!--<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty</workerClass>-->
<jobString>tightening Vagina</jobString>
<effectWorking>Surgery</effectWorking>
<soundWorking>Recipe_Surgery</soundWorking>
<workSpeedStat>MedicalOperationSpeed</workSpeedStat>
<workSkill>Medicine</workSkill>
<workSkillLearnFactor>0.2</workSkillLearnFactor>
<workAmount>400</workAmount>
<anesthetize>true</anesthetize>
<recipeUsers>
<li>Human</li>
</recipeUsers>
<surgerySuccessChanceFactor>95</surgerySuccessChanceFactor>
<ingredients>
<li>
<filter>
<categories>
<li>Medicine</li>
</categories>
</filter>
<count>1</count>
</li>
</ingredients>
<fixedIngredientFilter>
<categories>
<li>Medicine</li>
</categories>
</fixedIngredientFilter>
</RecipeDef>
<RecipeDef ParentName="Surgery_Vaginoplasty_X">
<defName>Surgery_Vaginoplasty_Micro</defName>
<label>vaginoplasty (micro)</label>
<description>Surgically gives the pawn an micro Vagina.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Micro</workerClass>
<jobString>alter Vagina size to micro</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Vaginoplasty_X">
<defName>Surgery_Vaginoplasty_Tight</defName>
<label>vaginoplasty (tight)</label>
<description>Surgically gives the pawn an tight Vagina.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Tight</workerClass>
<jobString>alter Vagina size to tight</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Vaginoplasty_X">
<defName>Surgery_Vaginoplasty_Average</defName>
<label>vaginoplasty (average)</label>
<description>Surgically gives the pawn an average Vagina.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Average</workerClass>
<jobString>alter Vagina size to average</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Vaginoplasty_X">
<defName>Surgery_Vaginoplasty_Accomodating</defName>
<label>vaginoplasty (accomodating)</label>
<description>Surgically gives the pawn an accomodating Vagina.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Accomodating</workerClass>
<jobString>alter Vagina size to accomodating</jobString>
</RecipeDef>
<RecipeDef ParentName="Surgery_Vaginoplasty_X">
<defName>Surgery_Vaginoplasty_Cavernous</defName>
<label>vaginoplasty (cavernous)</label>
<description>Surgically gives the pawn an cavernous Vagina.</description>
<workerClass>RJW_PlasticSurgeries.Recipe_Surgery_Vaginoplasty_Cavernous</workerClass>
<jobString>alter Vagina size to cavernous</jobString>
</RecipeDef>
</Defs>

View file

@ -7,6 +7,7 @@
<li>1.3</li>
<li>1.4</li>
<li>1.5</li>
<li>1.6</li>
</supportedVersions>
<packageId>Stardust3D.RJW.PlasticSurgeries</packageId>
<description>Surgically alter pawn's genitals.</description>

View file

@ -2,5 +2,5 @@
<Manifest>
<identifier>RJW PlasticSurgeries</identifier>
<version>5400.0.1.8</version>
<version>6010.0.1.8</version>
</Manifest>

View file

@ -3,11 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33110.190
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RJW_PlasticSurgeries_1.3", "RJW_PlasticSurgeries\RJW_PlasticSurgeries_1.3.csproj", "{EB363145-6DB4-42CB-B2CB-82DA7AE02A97}"
Project("{EB363145-6DB4-42CB-B2CB-82DA7AE02A97}") = "RJW_PlasticSurgeries_1.3", "RJW_PlasticSurgeries\RJW_PlasticSurgeries_1.3.csproj", "{EB363145-6DB4-42CB-B2CB-82DA7AE02A97}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RJW_PlasticSurgeries_1.4", "RJW_PlasticSurgeries\RJW_PlasticSurgeries_1.4.csproj", "{F17C6B3F-BA9D-4133-A201-1265A64BCB72}"
Project("{F17C6B3F-BA9D-4133-A201-1265A64BCB72}") = "RJW_PlasticSurgeries_1.4", "RJW_PlasticSurgeries\RJW_PlasticSurgeries_1.4.csproj", "{F17C6B3F-BA9D-4133-A201-1265A64BCB72}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RJW_PlasticSurgeries_1.5", "RJW_PlasticSurgeries\RJW_PlasticSurgeries_1.5.csproj", "{02AA6D85-913F-44B8-9C32-6E8024261824}"
Project("{02AA6D85-913F-44B8-9C32-6E8024261824}") = "RJW_PlasticSurgeries_1.5", "RJW_PlasticSurgeries\RJW_PlasticSurgeries_1.5.csproj", "{02AA6D85-913F-44B8-9C32-6E8024261824}"
EndProject
Project("{a543e968-6ecf-46de-8e76-1050188a4050}") = "RJW_PlasticSurgeries_1.6", "RJW_PlasticSurgeries\RJW_PlasticSurgeries_1.6.csproj", "{a543e968-6ecf-46de-8e76-1050188a4050}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -27,6 +29,10 @@ Global
{02AA6D85-913F-44B8-9C32-6E8024261824}.Debug|Any CPU.Build.0 = Debug|Any CPU
{02AA6D85-913F-44B8-9C32-6E8024261824}.Release|Any CPU.ActiveCfg = Release|Any CPU
{02AA6D85-913F-44B8-9C32-6E8024261824}.Release|Any CPU.Build.0 = Release|Any CPU
{a543e968-6ecf-46de-8e76-1050188a4050}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{a543e968-6ecf-46de-8e76-1050188a4050}.Debug|Any CPU.Build.0 = Debug|Any CPU
{a543e968-6ecf-46de-8e76-1050188a4050}.Release|Any CPU.ActiveCfg = Release|Any CPU
{a543e968-6ecf-46de-8e76-1050188a4050}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -0,0 +1,198 @@
using System;
using System.Collections.Generic;
using System.Linq;
using rjw;
using Verse;
namespace RJW_PlasticSurgeries
{
public abstract class Recipe_Surgery_Mammoplasty : Recipe_Plastic_Surgery
{
protected override BodyPartRecord GetPartCandidate(Pawn pawn)
{
return Genital_Helper.get_genitalsBPR(pawn);
}
protected override bool HasPart(Pawn pawn, List<Hediff> hediffs)
{
return Genital_Helper.has_breasts(pawn, hediffs) &&
pawn.GetBreastList().Any(hed => hed.Severity >= 0.02f);
}
protected override List<Hediff> GetHediffs(Pawn pawn)
{
throw new NotSupportedException();
}
protected void SurgeryCupX(Pawn pawn, int stage)
{
pawn.GetBreastList().ForEach(hed =>
{
float severity;
if (TryGetSeverityFromSize(hed, stage, out severity)) hed.Severity = severity;
});
}
private static bool TryGetSeverityFromSize(Hediff hediff, float cupSize, out float severity)
{
var list = (hediff.def as HediffDef_SexPart)?.sizeProfile.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;
}
protected override (HediffDef, float) GetLicentiaDamage() => throw new NotSupportedException();
}
public class Recipe_Surgery_Mammoplasty_A : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 1);
}
}
public class Recipe_Surgery_Mammoplasty_B : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 2);
}
}
public class Recipe_Surgery_Mammoplasty_C : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 3);
}
}
public class Recipe_Surgery_Mammoplasty_D : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 4);
}
}
public class Recipe_Surgery_Mammoplasty_E : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 6);
}
}
public class Recipe_Surgery_Mammoplasty_F : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 7);
}
}
public class Recipe_Surgery_Mammoplasty_G : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 9);
}
}
public class Recipe_Surgery_Mammoplasty_H : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 11);
}
}
public class Recipe_Surgery_Mammoplasty_J : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 13);
}
}
public class Recipe_Surgery_Mammoplasty_K : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 15);
}
}
public class Recipe_Surgery_Mammoplasty_L : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 17);
}
}
public class Recipe_Surgery_Mammoplasty_M : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 19);
}
}
public class Recipe_Surgery_Mammoplasty_N : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 21);
}
}
public class Recipe_Surgery_Mammoplasty_O : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 23);
}
}
public class Recipe_Surgery_Mammoplasty_P : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 25);
}
}
public class Recipe_Surgery_Mammoplasty_Q : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 27);
}
}
public class Recipe_Surgery_Mammoplasty_R : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 29);
}
}
public class Recipe_Surgery_Mammoplasty_Unknown : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 31);
}
}
}

View file

@ -0,0 +1,52 @@
using System.Collections.Generic;
using RimWorld;
using rjw;
using Verse;
namespace RJW_PlasticSurgeries
{
public abstract class Recipe_Plastic_Surgery : Recipe_Surgery
{
public override IEnumerable<BodyPartRecord> 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<Hediff> hediffs);
public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List<Thing> ingredients,
Bill bill)
{
if (billDoer != null)
{
TaleRecorder.RecordTale(TaleDefOf.DidSurgery, billDoer, pawn);
SurgeryResult(pawn);
}
}
protected abstract void SurgeryResult(Pawn pawn);
protected void SurgeryX(Pawn pawn, float severity, bool damagePart = false)
{
GetHediffs(pawn).ForEach(hed =>
{
hed.Severity = severity;
/* if (damagePart)
{
var dmg = HediffDef.Named();
hed.pawn.health.AddHediff(dmg);
var (type, damage) = GetLicentiaDamage();
LicentiaLabs.DamageHelper.ApplyDamage(pawn, hed.Part, type, damage);
} */
});
}
protected abstract List<Hediff> GetHediffs(Pawn pawn);
}
}

View file

@ -0,0 +1,61 @@
using System.Collections.Generic;
using RimWorld;
using Verse;
using static rjw.VanillaTraitDefOf;
namespace RJW_PlasticSurgeries
{
/// <inheritdoc />
public abstract class Recipe_Surgery_Beautify : Recipe_Surgery
{
/// <inheritdoc />
public override IEnumerable<BodyPartRecord> 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;
}
/// <inheritdoc />
public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List<Thing> ingredients,
Bill bill)
{
if (billDoer != null)
{
TaleRecorder.RecordTale(TaleDefOf.DidSurgery, billDoer, pawn);
SurgeryResult(pawn);
}
}
/// <summary>
///
/// </summary>
/// <param name="pawn"></param>
public abstract void SurgeryResult(Pawn pawn);
/// <summary>
/// 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.
/// </summary>
/// <param name="pawn">the pawn to modify</param>
/// <param name="severity">the new severity of the pawn's Beautiful trait</param>
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));
}
}
/// <inheritdoc />
public class Recipe_Surgery_Beautify_Beautiful : Recipe_Surgery_Beautify
{
/// <inheritdoc />
public override void SurgeryResult(Pawn pawn) => SurgeryX(pawn, 2);
}
}

View file

@ -0,0 +1,196 @@
using System;
using System.Collections.Generic;
using System.Linq;
using rjw;
using Verse;
namespace RJW_PlasticSurgeries
{
public abstract class Recipe_Surgery_Mammoplasty : Recipe_Plastic_Surgery
{
protected override BodyPartRecord GetPartCandidate(Pawn pawn)
{
return Genital_Helper.get_genitalsBPR(pawn);
}
protected override bool HasPart(Pawn pawn, List<Hediff> hediffs)
{
return Genital_Helper.has_breasts(pawn, hediffs) &&
pawn.GetBreastList().Any(hed => hed.Severity >= 0.02f);
}
protected override List<Hediff> GetHediffs(Pawn pawn)
{
throw new NotSupportedException();
}
protected void SurgeryCupX(Pawn pawn, int stage)
{
pawn.GetBreastList().ForEach(hed =>
{
float severity;
if (TryGetSeverityFromSize(hed, stage, out severity)) hed.Severity = severity;
});
}
private static bool TryGetSeverityFromSize(Hediff hediff, float cupSize, out float severity)
{
var list = (hediff.def as HediffDef_SexPart)?.sizeProfile.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
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 1);
}
}
public class Recipe_Surgery_Mammoplasty_B : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 2);
}
}
public class Recipe_Surgery_Mammoplasty_C : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 3);
}
}
public class Recipe_Surgery_Mammoplasty_D : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 4);
}
}
public class Recipe_Surgery_Mammoplasty_E : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 6);
}
}
public class Recipe_Surgery_Mammoplasty_F : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 7);
}
}
public class Recipe_Surgery_Mammoplasty_G : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 9);
}
}
public class Recipe_Surgery_Mammoplasty_H : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 11);
}
}
public class Recipe_Surgery_Mammoplasty_J : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 13);
}
}
public class Recipe_Surgery_Mammoplasty_K : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 15);
}
}
public class Recipe_Surgery_Mammoplasty_L : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 17);
}
}
public class Recipe_Surgery_Mammoplasty_M : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 19);
}
}
public class Recipe_Surgery_Mammoplasty_N : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 21);
}
}
public class Recipe_Surgery_Mammoplasty_O : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 23);
}
}
public class Recipe_Surgery_Mammoplasty_P : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 25);
}
}
public class Recipe_Surgery_Mammoplasty_Q : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 27);
}
}
public class Recipe_Surgery_Mammoplasty_R : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 29);
}
}
public class Recipe_Surgery_Mammoplasty_Unknown : Recipe_Surgery_Mammoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryCupX(pawn, 31);
}
}
}

View file

@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using rjw;
using Verse;
namespace RJW_PlasticSurgeries
{
public abstract class Recipe_Surgery_Penoplasty : Recipe_Plastic_Surgery
{
protected override BodyPartRecord GetPartCandidate(Pawn pawn)
{
return Genital_Helper.get_genitalsBPR(pawn);
}
protected override bool HasPart(Pawn pawn, List<Hediff> hediffs)
{
return Genital_Helper.has_penis_fertile(pawn, hediffs) ||
Genital_Helper.has_penis_infertile(pawn, hediffs);
}
protected override List<Hediff> GetHediffs(Pawn pawn)
{
return pawn.GetGenitalsList().FindAll(Genital_Helper.is_penis);
}
}
public class Recipe_Surgery_Penoplasty_Micro : Recipe_Surgery_Penoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.1f, true);
}
}
public class Recipe_Surgery_Penoplasty_Small : Recipe_Surgery_Penoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.3f, true);
}
}
public class Recipe_Surgery_Penoplasty_Average : Recipe_Surgery_Penoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.5f, true);
}
}
public class Recipe_Surgery_Penoplasty_Large : Recipe_Surgery_Penoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.7f, true);
}
}
public class Recipe_Surgery_Penoplasty_Huge : Recipe_Surgery_Penoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.9f, true);
}
}
}

View file

@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using rjw;
using Verse;
namespace RJW_PlasticSurgeries
{
public abstract class Recipe_Surgery_Sphinctoplasty : Recipe_Plastic_Surgery
{
protected override BodyPartRecord GetPartCandidate(Pawn pawn)
{
return Genital_Helper.get_anusBPR(pawn);
}
protected override bool HasPart(Pawn pawn, List<Hediff> hediffs)
{
return Genital_Helper.has_anus(pawn, hediffs);
}
protected override List<Hediff> GetHediffs(Pawn pawn)
{
return pawn.GetAnusList();
}
}
public class Recipe_Surgery_Sphinctoplasty_Micro : Recipe_Surgery_Sphinctoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.1f, true);
}
}
public class Recipe_Surgery_Sphinctoplasty_Tight : Recipe_Surgery_Sphinctoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.3f, true);
}
}
public class Recipe_Surgery_Sphinctoplasty_Average : Recipe_Surgery_Sphinctoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.5f, true);
}
}
public class Recipe_Surgery_Sphinctoplasty_Accomodating : Recipe_Surgery_Sphinctoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.7f, true);
}
}
public class Recipe_Surgery_Sphinctoplasty_Cavernous : Recipe_Surgery_Sphinctoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.9f, true);
}
}
}

View file

@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using rjw;
using Verse;
namespace RJW_PlasticSurgeries
{
public abstract class Recipe_Surgery_Vaginoplasty : Recipe_Plastic_Surgery
{
protected override BodyPartRecord GetPartCandidate(Pawn pawn)
{
return Genital_Helper.get_genitalsBPR(pawn);
}
protected override bool HasPart(Pawn pawn, List<Hediff> hediffs)
{
return Genital_Helper.has_vagina(pawn, hediffs);
}
protected override List<Hediff> GetHediffs(Pawn pawn)
{
return pawn.GetGenitalsList().FindAll(Genital_Helper.is_vagina);
}
}
public class Recipe_Surgery_Vaginoplasty_Micro : Recipe_Surgery_Vaginoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.1f, true);
}
}
public class Recipe_Surgery_Vaginoplasty_Tight : Recipe_Surgery_Vaginoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.3f, true);
}
}
public class Recipe_Surgery_Vaginoplasty_Average : Recipe_Surgery_Vaginoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.5f, true);
}
}
public class Recipe_Surgery_Vaginoplasty_Accomodating : Recipe_Surgery_Vaginoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.7f, true);
}
}
public class Recipe_Surgery_Vaginoplasty_Cavernous : Recipe_Surgery_Vaginoplasty
{
protected override void SurgeryResult(Pawn pawn)
{
SurgeryX(pawn, 0.9f, true);
}
}
}

View file

@ -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));
}
}
}

View file

@ -7,6 +7,7 @@
<li>1.3</li>
<li>1.4</li>
<li>1.5</li>
<li>1.6</li>
</supportedVersions>
<packageId>Stardust3D.RJW.PlasticSurgeries</packageId>
<description>Surgically alter pawn's genitals.</description>

View file

@ -2,5 +2,5 @@
<Manifest>
<identifier>RJW PlasticSurgeries</identifier>
<version>5400.0.1.8</version>
<version>6010.0.1.8</version>
</Manifest>

View file

@ -13,10 +13,10 @@
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<LangVersion>11</LangVersion>
<Copyright>©2024 Stardust3D</Copyright>
<Copyright>©2025 Stardust3D</Copyright>
<Company>Stardust3D</Company>
<AssemblyVersion>5400.0.1.8</AssemblyVersion>
<FileVersion>5400.0.1.8</FileVersion>
<AssemblyVersion>6010.0.1.8</AssemblyVersion>
<FileVersion>6010.0.1.8</FileVersion>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>RJW_PlasticSurgeries.snk</AssemblyOriginatorKeyFile>
<Description>Surgically alter pawn's genitals.</Description>
@ -28,6 +28,7 @@
<None Include="RJW_PlasticSurgeries.snk" />
<None Remove="1.4\**" />
<None Remove="1.5\**" />
<None Remove="1.6\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Lib.Harmony" Version="2.3.3" />
@ -37,18 +38,20 @@
</ItemGroup>
<ItemGroup>
<Reference Include="LicentiaLabs">
<HintPath>..\..\..\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
<HintPath>..\dependencies\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
</Reference>
<Reference Include="RJW">
<HintPath>..\..\..\rjw-base\1.3\Assemblies\RJW.dll</HintPath>
<HintPath>..\dependencies\rjw\1.3\Assemblies\RJW.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Remove="1.4\**" />
<Compile Remove="1.5\**" />
<Compile Remove="1.6\**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="1.4\**" />
<EmbeddedResource Remove="1.5\**" />
<EmbeddedResource Remove="1.6\**" />
</ItemGroup>
</Project>

View file

@ -13,10 +13,10 @@
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<LangVersion>11</LangVersion>
<Copyright>©2024 Stardust3D</Copyright>
<Copyright>©2025 Stardust3D</Copyright>
<Company>Stardust3D</Company>
<AssemblyVersion>5400.0.1.8</AssemblyVersion>
<FileVersion>5400.0.1.8</FileVersion>
<AssemblyVersion>6010.0.1.8</AssemblyVersion>
<FileVersion>6010.0.1.8</FileVersion>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>RJW_PlasticSurgeries.snk</AssemblyOriginatorKeyFile>
<Description>Surgically alter pawn's genitals.</Description>
@ -28,6 +28,7 @@
<None Include="RJW_PlasticSurgeries.snk" />
<None Remove="1.3\**" />
<None Remove="1.5\**" />
<None Remove="1.6\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Lib.Harmony" Version="2.3.3" />
@ -37,19 +38,21 @@
</ItemGroup>
<ItemGroup>
<Reference Include="LicentiaLabs">
<HintPath>..\..\..\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
<HintPath>..\dependencies\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
</Reference>
<Reference Include="RJW">
<HintPath>..\..\..\rjw-base\1.4\Assemblies\RJW.dll</HintPath>
<HintPath>..\dependencies\rjw\1.4\Assemblies\RJW.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Remove="1.3\**" />
<Compile Remove="1.5\**" />
<Compile Remove="1.6\**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="1.3\**" />
<EmbeddedResource Remove="1.5\**" />
<EmbeddedResource Remove="1.6\**" />
</ItemGroup>
</Project>

View file

@ -13,10 +13,10 @@
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<LangVersion>11</LangVersion>
<Copyright>©2024 Stardust3D</Copyright>
<Copyright>©2025 Stardust3D</Copyright>
<Company>Stardust3D</Company>
<AssemblyVersion>5400.0.1.8</AssemblyVersion>
<FileVersion>5400.0.1.8</FileVersion>
<AssemblyVersion>6010.0.1.8</AssemblyVersion>
<FileVersion>6010.0.1.8</FileVersion>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>RJW_PlasticSurgeries.snk</AssemblyOriginatorKeyFile>
<Description>Surgically alter pawn's genitals.</Description>
@ -28,29 +28,33 @@
<None Include="RJW_PlasticSurgeries.snk" />
<None Remove="1.3\**" />
<None Remove="1.4\**" />
<None Remove="1.6\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Lib.Harmony" Version="2.3.3" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Krafs.Rimworld.Ref" Version="1.5.4104" />
<PackageReference Include="Krafs.Rimworld.Ref" Version="1.5.4297" />
<PackageReference Include="UnlimitedHugs.Rimworld.HugsLib" Version="11.0.3" />
</ItemGroup>
<ItemGroup>
<Reference Include="LicentiaLabs">
<HintPath>..\..\..\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
<HintPath>..\dependencies\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
</Reference>
<Reference Include="RJW">
<HintPath>..\..\..\rjw-base\1.5\Assemblies\RJW.dll</HintPath>
<HintPath>..\dependencies\rjw\1.5\Assemblies\RJW.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Remove="1.3\**" />
<Compile Remove="1.4\**" />
<Compile Remove="1.6\**" />
<Compile Remove="Recipe_Plastic_Surgery.cs" />
<Compile Remove="Recipe_Surgery_Beautify.cs" />
<Compile Remove="Recipe_Surgery_Mammoplasty.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="1.3\**" />
<EmbeddedResource Remove="1.4\**" />
<EmbeddedResource Remove="1.6\**" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,59 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{a543e968-6ecf-46de-8e76-1050188a4050}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>RJW_PlasticSurgeries</RootNamespace>
<AssemblyName>RJW_PlasticSurgeries</AssemblyName>
<TargetFramework>net48</TargetFramework>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<LangVersion>11</LangVersion>
<Copyright>©2025 Stardust3D</Copyright>
<Company>Stardust3D</Company>
<AssemblyVersion>6010.0.1.8</AssemblyVersion>
<FileVersion>6010.0.1.8</FileVersion>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>RJW_PlasticSurgeries.snk</AssemblyOriginatorKeyFile>
<Description>Surgically alter pawn's genitals.</Description>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\Release\1.6\</OutputPath>
</PropertyGroup>
<ItemGroup>
<None Include="RJW_PlasticSurgeries.snk" />
<None Remove="1.3\**" />
<None Remove="1.4\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Lib.Harmony" Version="2.4.1" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Krafs.Rimworld.Ref" Version="1.6.4566" />
<PackageReference Include="UnlimitedHugs.Rimworld.HugsLib" Version="12.0.0" />
</ItemGroup>
<ItemGroup>
<Reference Include="RJW">
<HintPath>..\dependencies\rjw\1.6\Assemblies\RJW.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Remove="1.3\**" />
<Compile Remove="1.4\**" />
<Compile Remove="1.5\**" />
<Compile Remove="Recipe_Plastic_Surgery.cs" />
<Compile Remove="Recipe_Surgery_Beautify.cs" />
<Compile Remove="Recipe_Surgery_Mammoplasty.cs" />
<Compile Remove="Recipe_Surgery_Penoplasty.cs" />
<Compile Remove="Recipe_Surgery_Sphinctoplasty.cs" />
<Compile Remove="Recipe_Surgery_Vaginoplasty.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="1.3\**" />
<EmbeddedResource Remove="1.4\**" />
<EmbeddedResource Remove="1.5\**" />
</ItemGroup>
</Project>

View file

@ -3,7 +3,7 @@ plugins {
alias(libs.plugins.versions)
}
version = "5400.0.1.8"
version = "6010.0.1.8"
val friendlyName = "rjw-plasticsurgeries"
tasks.register<com.ullink.Msbuild>("buildC#_1.3") {
@ -42,10 +42,22 @@ tasks.register<com.ullink.Msbuild>("buildC#_1.5") {
// destinationDir = "build/msbuild/bin"
}
tasks.register<com.ullink.Msbuild>("buildC#_1.6") {
// either a solution file
// solutionFile = "${rootProject.name}.sln"
// or a project file (.csproj or .vbproj)
projectFile = file("${rootProject.name}/${rootProject.name}_1.6.csproj")
targets = listOf("Restore", "Clean", "Rebuild")
configuration = "Release"
// destinationDir = "build/msbuild/bin"
}
tasks.register<Exec>("sign_1.3") {
dependsOn("buildC#_1.3")
workingDir = project.projectDir.resolve("${rootProject.name}/bin/Release/1.3/net472")
executable = "H:\\Windows Kits\\10\\bin\\10.0.22621.0\\x64\\signtool.exe"
executable = "C:\\Windows Kits\\10\\bin\\10.0.26100.0\\x64\\signtool.exe"
args = listOf(
"sign",
"/seal",
@ -63,7 +75,7 @@ tasks.register<Exec>("sign_1.3") {
tasks.register<Exec>("sign_1.4") {
dependsOn("buildC#_1.4")
workingDir = project.projectDir.resolve("${rootProject.name}/bin/Release/1.4/net472")
executable = "H:\\Windows Kits\\10\\bin\\10.0.22621.0\\x64\\signtool.exe"
executable = "C:\\Windows Kits\\10\\bin\\10.0.26100.0\\x64\\signtool.exe"
args = listOf(
"sign",
"/seal",
@ -81,7 +93,25 @@ tasks.register<Exec>("sign_1.4") {
tasks.register<Exec>("sign_1.5") {
dependsOn("buildC#_1.5")
workingDir = project.projectDir.resolve("${rootProject.name}/bin/Release/1.5/net48")
executable = "H:\\Windows Kits\\10\\bin\\10.0.22621.0\\x64\\signtool.exe"
executable = "C:\\Windows Kits\\10\\bin\\10.0.26100.0\\x64\\signtool.exe"
args = listOf(
"sign",
"/seal",
"/t",
"http://timestamp.digicert.com",
"/a",
"/n",
"Stardust3D",
"/fd",
"certHash",
"${rootProject.name}.dll"
)
}
tasks.register<Exec>("sign_1.6") {
dependsOn("buildC#_1.6")
workingDir = project.projectDir.resolve("${rootProject.name}/bin/Release/1.6/net48")
executable = "C:\\Windows Kits\\10\\bin\\10.0.26100.0\\x64\\signtool.exe"
args = listOf(
"sign",
"/seal",
@ -97,7 +127,7 @@ tasks.register<Exec>("sign_1.5") {
}
tasks.register("copy") {
dependsOn("copy_1.3", "copy_1.4", "copy_1.5", "copy_about")
dependsOn("copy_1.3", "copy_1.4", "copy_1.5", "copy_1.6", "copy_about")
}
tasks.register<Copy>("copy_about") {
@ -109,7 +139,7 @@ tasks.register<Copy>("copy_1.3") {
dependsOn("copyDll_1.3")
dependsOn("copyDefs_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"))
@ -119,7 +149,7 @@ tasks.register<Copy>("copy_1.4") {
dependsOn("copyDll_1.4")
dependsOn("copyDefs_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"))
@ -129,12 +159,22 @@ tasks.register<Copy>("copy_1.5") {
dependsOn("copyDll_1.5")
dependsOn("copyDefs_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"))
}
tasks.register<Copy>("copy_1.6") {
dependsOn("copyDll_1.6")
dependsOn("copyDefs_1.6")
from(project.projectDir.resolve("${rootProject.name}/1.6")) {
exclude("**/*.cs")
}
into(project.projectDir.parentFile.resolve("1.6"))
}
tasks.register<Copy>("copyDll_1.3") {
dependsOn("sign_1.3")
from(project.projectDir.resolve("${rootProject.name}/bin/Release/1.3/net472/${rootProject.name}.dll"))
@ -153,6 +193,12 @@ tasks.register<Copy>("copyDll_1.5") {
into(project.projectDir.parentFile.resolve("1.5/Assemblies"))
}
tasks.register<Copy>("copyDll_1.6") {
dependsOn("sign_1.6")
from(project.projectDir.resolve("${rootProject.name}/bin/Release/1.6/net48/${rootProject.name}.dll"))
into(project.projectDir.parentFile.resolve("1.6/Assemblies"))
}
tasks.register<Copy>("copyDefs_1.3") {
from(project.projectDir.resolve("${rootProject.name}/Defs"))
into(project.projectDir.parentFile.resolve("1.3/Defs"))
@ -168,6 +214,11 @@ tasks.register<Copy>("copyDefs_1.5") {
into(project.projectDir.parentFile.resolve("1.5/Defs"))
}
tasks.register<Copy>("copyDefs_1.6") {
from(project.projectDir.resolve("${rootProject.name}/Defs"))
into(project.projectDir.parentFile.resolve("1.6/Defs"))
}
tasks.register<Zip>("buildZip") {
dependsOn("clean", ":copy")
into("$friendlyName/1.3") {
@ -179,6 +230,9 @@ tasks.register<Zip>("buildZip") {
into("$friendlyName/1.5") {
from(project.projectDir.parentFile.resolve("1.5"))
}
into("$friendlyName/1.6") {
from(project.projectDir.parentFile.resolve("1.6"))
}
into("$friendlyName/About") {
from(project.projectDir.parentFile.resolve("About"))
}
@ -196,6 +250,7 @@ tasks.clean {
delete.add(project.projectDir.parentFile.resolve("1.3"))
delete.add(project.projectDir.parentFile.resolve("1.4"))
delete.add(project.projectDir.parentFile.resolve("1.5"))
delete.add(project.projectDir.parentFile.resolve("1.6"))
delete.add(project.projectDir.parentFile.resolve("About"))
}

@ -0,0 +1 @@
Subproject commit 938d073bb2617c5f11b2807ba5444f6b127ae495

@ -0,0 +1 @@
Subproject commit 05ce5962c765cbb4368cec4913fac1a5b20c2773

View file

@ -1,6 +1,6 @@
{
"sdk": {
"version": "8.0.0",
"version": "9.0.0",
"rollForward": "latestMinor",
"allowPrerelease": false
}

1
Source/gradle.properties Normal file
View file

@ -0,0 +1 @@
org.gradle.configuration-cache=false

View file

@ -1,6 +1,6 @@
[versions]
versions = "0.51.0"
msbuild = "4.6"
versions = "0.53.0"
msbuild = "4.7"
[libraries]

Binary file not shown.

View file

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

13
Source/gradlew vendored
View file

@ -1,7 +1,7 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@ -84,7 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -112,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@ -170,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
@ -203,15 +203,14 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.

5
Source/gradlew.bat vendored
View file

@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@ -68,11 +70,10 @@ goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell