Compare commits

..

67 commits

Author SHA1 Message Date
Telanda
b70b975b67
Merge 2.6.2 Update (#228)
* - Seperation of Animal Gene code from base RJW_Genes

* - Clean-up of leftover XML Files
- Minor update to README.md

* Fixed missing translation text
Fixed Missing B&S Undead Patch
Fixed Anal Fertility Errors, might be broken again.

DLL Included for Merge.
2026-02-28 23:15:14 +11:00
Telanda-DDS
4946df511e - Recompiled Cumpliation plugin against newest version of Cumpilation.
- Fixed Indentation
2025-10-18 10:45:32 +11:00
Telanda-DDS
ef953fa1b7 - Fixes to address changed RJW Settings Variables. 2025-10-16 16:18:28 +11:00
Telanda-DDS
be27255832 - Updated All Version Information. 2025-09-05 16:42:35 +10:00
Telanda
83e9f9ef5b
Dev (#222)
- Seperation of Animal Gene code from base RJW_Genes
- Minor update to README.md
2025-09-05 16:37:32 +10:00
Telanda-DDS
45a451a127 - Added additional Debug Message Check. 2025-08-21 09:46:51 +10:00
Telanda-DDS
7692ce3425 - Fixed bug with beastiality gene inheritance null reference. 2025-08-18 14:40:02 +10:00
Telanda-DDS
b13f761ede - Versioning Updates 2025-08-18 12:26:00 +10:00
Telanda-DDS
ed761327d2 - Fixed bug with fertile Anus not correctly detecting if penetrating partner was fertile. 2025-08-18 12:20:00 +10:00
Telanda-DDS
e0a333f539 - Fixed incorrect reference to Sexperience mod. 2025-08-04 10:27:19 +10:00
Telanda-DDS
5025700727 - Fixed potential null varaible exception in ElToro Stretching patch.
- Fixed Orgasm Rush not triggering when partner was an Animal.
2025-08-03 12:06:16 +10:00
Telanda-DDS
a407f3f400 - 2.5.5 Version Update & CHANGELOG.md 2025-07-25 14:11:06 +10:00
Telanda-DDS
6e26d596cf - Updated Elastic gene to also increase speed at which stretched parts return to normal under ElToro's streching Mod.
- Removed Unnecessary packages.config
2025-07-25 14:06:02 +10:00
Telanda-DDS
670361a748 - Support for RJW RC-5
- Fixed Typo in Disease ThoughtDef
2025-07-25 11:25:52 +10:00
Telanda-DDS
c7ea7144dc - Fixed ElToro Stretching support causing an error if not present. 2025-07-25 09:51:45 +10:00
Telanda-DDS
97eabd540d - Fixed incorrect consciousness value. 2025-07-24 18:03:03 +10:00
Telanda-DDS
61fdb2c3b7 - Fixed Load bug with VRE-Genie Sexperience interaction. 2025-07-24 16:30:29 +10:00
Telanda-DDS
27511a29f3 - Fixed regressed CHANGELOG.md 2025-07-24 14:04:28 +10:00
Telanda-DDS
ef05a5bbc3 - Incremented version in mod settings. 2025-07-24 14:01:21 +10:00
Telanda-DDS
7f6dc2a668 - Added in Elasticity support for Cumpilation and Eltoro Stretching.
- Updated Breeding Pulse c# with more debugging information.
- Updated Vanilla Genes Expanded Genie with updated function call.
- Removed Licentia XML & method calls from Gene_Elasticity.cs
- Fixed MatingCall Ability & checked to make sure Pheromone Spit was still functional.
- Fixed incorrect mod requirement for sex curiosity Gene.
2025-07-24 13:41:47 +10:00
Telanda-DDS
ba53413687 - Migrated all textures to the Common Directory 2025-07-20 10:50:45 +10:00
Telanda-DDS
aa3d3985bc - Removed incorrectly located DLL. 2025-07-19 22:10:05 +10:00
Telanda-DDS
11226249b3 ###Fixes###
- Fixed "Big and Small - Heaven and Hell" XML patch being applied incorrectly, again.
- Fixed issue that was causing Extra genitals,Anus,breasts being added to pawns when a gene was applied.
- Removed some code duplication in the Gender specific Genes, I cannot see any situations where this code was required, but but there are some notes in other genes relating to character editor, I'm leaving other genes As they are for now, and will wait to see if it breaks some strange edge case I didn't test for.
2025-07-19 16:49:52 +10:00
Telanda-DDS
dde1c98b18 - Incremented version to 2.5.1
- Removed DDS Files
- Added Initial Support for Rimworld 1.6
- Added Additional mod requirement to PatchBSShared.xml to prevent premature loading.
- Refactored Cumpilation integration to make it optional rather then a Required Mod.
- Disabled succubus tail interactions pending rewrite for RJW's new interactions system.
- Disabled Quirks pending rewrite RJW separating them into their own mod.
2025-07-17 21:07:51 +10:00
DukeElToro
7540b96ecb
Added Cumpilation dependancy to the about.xml 2024-11-26 11:10:52 +03:00
vegapnk
b0da74ebd3
Merge pull request #202 from vegapnk/dev
2.4.2
2024-11-25 20:54:02 +08:00
vegapnk
e9fa05d218
Update CHANGELOG.md 2024-11-25 20:53:33 +08:00
DukeElToro
8577c3ee55 Updated manifest 2024-11-20 08:37:48 +03:00
DukeElToro
19148cc768 Removed HugsLib from about.xml 2024-11-20 07:59:17 +03:00
ElToro
72acfbb8bf Return of Pig and Orc genitalia 2024-11-18 01:55:35 +03:00
ElToro
f5975212b1 Not to forget permament fix for EvergrowingGenitalia gene 2024-11-17 01:50:35 +03:00
ElToro
f1ea695516 More fixes 2024-11-17 01:47:48 +03:00
ElToro
2d055a134f RJW 5.6 fix 2024-11-16 23:24:54 +03:00
vegapnk
e402a6b2a8
Merge pull request #191 from vegapnk/dev
2.4.1
2024-10-22 08:39:37 +02:00
Vegapnk
f5898523a9 2.4.1 Release Artifacts 2024-10-22 08:38:26 +02:00
Vegapnk
f3bf271381 Mentions Nazeems addon Gene in Changelog (#101) 2024-10-22 08:14:45 +02:00
Vegapnk
626ae5bbd4 Fixed Typo in LilGlutton Xenotype Patch (closes #122) 2024-10-22 08:00:31 +02:00
Vegapnk
8e272db117 Added Issue Templates 2024-10-22 07:57:25 +02:00
Vegapnk
93e9c5471c Attribution & Summary for #188 2024-10-22 07:56:03 +02:00
Vegapnk
b336c3059e Merge branch 'dev' of https://github.com/vegapnk/RJW-Genes into dev 2024-10-22 07:49:57 +02:00
vegapnk
89028f361b
Merge pull request #188 from casualArtifice/main
Add patches for more xenotypes
2024-10-22 07:49:45 +02:00
Vegapnk
f470213a3c Added more code-checks for living cumbucket (fixes #190) 2024-10-22 07:47:51 +02:00
casualArtifice
67cd837166
Update PatchBSRaces.xml
fixed typo from previous commit
2024-10-17 10:28:57 -04:00
casualArtifice
5aadcffcb1
Update PatchBSRaces.xml
Swapped instances of Licentia genes to Cumpilation equivalents where applicable
2024-10-17 10:28:34 -04:00
casualArtifice
44c0fff37e
Update PatchBSHeavHell.xml
Removed Licentia Labs requirement for Generous Donor gene
Swapped instances of Licentia genes to Cumpilation equivalents where applicable
2024-10-17 10:27:40 -04:00
casualArtifice
74b16b9ff3
Add files via upload 2024-10-17 10:15:45 -04:00
vegapnk
4712e5fdf2
Merge pull request #187 from vegapnk/dev
Dev
2024-10-17 14:55:03 +02:00
Vegapnk
ea8f2a35a5 2.4.0 Release Artifacts 2024-10-17 12:08:55 +02:00
Vegapnk
cb0c8c408b Eating cum gives twice as much fertilin 2024-10-17 12:01:13 +02:00
Vegapnk
2413ab8f79 Made implants removable with surgery (closes #186) 2024-10-17 11:55:54 +02:00
Vegapnk
8b70ac8965 Adjustments to Evergrowth (#161) 2024-10-17 11:42:13 +02:00
Vegapnk
2941dd9a47 Added #175 to patchnotes 2024-10-16 15:35:28 +02:00
vegapnk
ab726f8279
Merge pull request #175 from elatedCentipede/main
Fix empath gene description
2024-10-16 15:34:39 +02:00
Vegapnk
abd0e2e8d9 Extra checks for Aphrodisiac Pheromones #183 2024-10-16 15:33:07 +02:00
Vegapnk
07b0d2bb37 Hardened Orgasmic Mytosis against lovethrall, fixes #130 2024-10-16 15:24:48 +02:00
Vegapnk
152b6157ba Fertilin Check for Cumpilation #171, #185 2024-10-16 15:14:19 +02:00
Vegapnk
e8e3bc43be Another reference to litteredbirths #181 2024-10-16 14:54:24 +02:00
Vegapnk
3d8e1f79cd Pregnancies are not copied for orgasmic mytosis #184 2024-10-16 14:46:06 +02:00
Vegapnk
564cee8da8 Hardening Orgasmic Mytosis #184 2024-10-15 18:28:08 +02:00
Vegapnk
c4919e20e8 Fixed Generous Donor to not need Licentia #185 2024-10-15 18:07:49 +02:00
Vegapnk
c7d1a9c734 Migrated Living Cumbucket to Cumpilation, currently no tuning for item amount #185 2024-10-15 15:41:45 +02:00
Vegapnk
6135cfe449 Got Likes Cumflation working again for Cumpilation 2024-10-15 14:46:53 +02:00
Vegapnk
5744d5df0f Made littered Births translatable #178 2024-10-11 16:39:06 +02:00
Vegapnk
ec40a6cfb6 Fixed Naming in two Xenotype Patches> #181 2024-10-11 16:32:26 +02:00
Vegapnk
fe52686b9a Bumped About to 2.3.3 2024-10-11 16:32:05 +02:00
elatedCentipede
55a005463e
Fix empath gene description
Fixed empath gene still referencing the old "Lifeforce" instead of Fertilin
2024-09-21 08:27:52 +02:00
vegapnk
183a5b75fe
Merge pull request #173 from vegapnk/dev
Dev
2024-09-19 19:32:41 +02:00
733 changed files with 20824 additions and 438 deletions

31
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,31 @@
---
name: Bug Report
about: Create a report to help us improve
---
**Description**
Whats happening? What should happen?
Put any error message here too.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Screenshots**
If applicable, add screenshots.
Add the Error Message, if there is some
**Hugslog / ModList**
Please put your Link to Hugslog here.
**Additional context**
Add anything else here.
Please mention if you have a changed config or if you suspect a certain mod / interaction.

19
.github/ISSUE_TEMPLATE/feature.md vendored Normal file
View file

@ -0,0 +1,19 @@
---
name: Feature Request
about: Suggest an Idea for this project
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. I'm always frustrated when [...]
**OR**
I would love to see something like [...]
**Describe the solution you'd like**
Feel free to be oppinionated, or a bit crazy.
I might not do it, but I usually don't judge.
**Additional context**
Add any other context or screenshots about the feature request here.
Feel free to share your paint-sketch

2
.gitignore vendored
View file

@ -255,3 +255,5 @@ paket-files/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
*.dds

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

View file

@ -119,4 +119,23 @@
</modExtensions>
</GeneDef>
<GeneDef>
<defName>rjw_genes_generous_donor</defName>
<label>generous donor</label>
<displayCategory>rjw_genes_fluids</displayCategory>
<description>When this Xenotype transfers fluids during sex, the giver will not get hungry.</description>
<iconPath>Genes/Icons/Generous_Donor</iconPath>
<displayOrderInCategory>538</displayOrderInCategory>
<biostatCpx>2</biostatCpx>
<biostatMet>-1</biostatMet>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core"
Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -221,9 +221,9 @@
<GeneDef ParentName="LifeForceBase">
<defName>rjw_genes_lifeforce_empath</defName>
<label>empathic lifeforce</label>
<label>empathic fertilin</label>
<geneClass>RJW_Genes.Gene_LifeForce_Empath</geneClass>
<description>Carriers of this gene generate lifeforce if nearby pawns are sexually satisfied. Be careful: Sexually frustrated pawns will make your empath loose lifeforce!</description>
<description>Carriers of this gene generate fertilin if nearby pawns are sexually satisfied. Be careful: Sexually frustrated pawns will make your empath loose fertilin!</description>
<iconPath>Genes/Icons/Hypersexual</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>3</displayOrderInCategory>

View file

@ -68,4 +68,17 @@
<li>ExoticMisc</li>
</tradeTags>
</ThingDef>
<RecipeDef ParentName="SurgeryRemoveImplantBase">
<defName>RemoveBioscaffold</defName>
<label>remove Bioscaffold</label>
<description>Remove the bioscaffold.</description>
<descriptionHyperlinks>
<ThingDef>Bioscaffold</ThingDef>
<HediffDef>Bioscaffold</HediffDef>
</descriptionHyperlinks>
<jobString>Removing bioscaffold.</jobString>
<removesHediff>Bioscaffold</removesHediff>
</RecipeDef>
</Defs>

View file

@ -35,4 +35,17 @@
<researchPrerequisite>FertilityProcedures</researchPrerequisite>
</recipeMaker>
</ThingDef>
<RecipeDef ParentName="SurgeryRemoveImplantBase">
<defName>RemoveLimbicStimulator</defName>
<label>remove limbic stimulator</label>
<description>Remove the limbic stimulator.</description>
<descriptionHyperlinks>
<ThingDef>LimbicStimulator</ThingDef>
<HediffDef>LimbicStimulator</HediffDef>
</descriptionHyperlinks>
<jobString>Removing limbic stimulator.</jobString>
<removesHediff>LimbicStimulator</removesHediff>
</RecipeDef>
</Defs>

View file

@ -133,4 +133,17 @@
<researchPrerequisite>FertilityProcedures</researchPrerequisite>
</recipeMaker>
</ThingDef>
<RecipeDef ParentName="SurgeryRemoveImplantBase">
<defName>RemoveOvaryAgitator</defName>
<label>remove ovary agitator</label>
<description>Remove the ovary agitator.</description>
<descriptionHyperlinks>
<ThingDef>OvaryAgitator</ThingDef>
<HediffDef>OvaryAgitator</HediffDef>
</descriptionHyperlinks>
<jobString>Removing ovary agitator.</jobString>
<removesHediff>OvaryAgitator</removesHediff>
</RecipeDef>
</Defs>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<rjw_genes_twin_letter>Twins!</rjw_genes_twin_letter>
<rjw_genes_twin_letter_content>is still in labor and is having twins! Be sure to gather your doctor and additional friends and family to ensure the other baby is also born healthy!</rjw_genes_twin_letter_content>
<rjw_genes_another_baby_letter>Another baby!</rjw_genes_another_baby_letter>
<rjw_genes_another_baby_letter_content>is still in labor and is having twins! Be sure to gather your doctor and additional friends and family to ensure the other baby is also born healthy!</rjw_genes_another_baby_letter_content>
</LanguageData>

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef>
<defName>rjw_genes_inflatable</defName>
<label>inflatable</label>
<displayCategory>rjw_genes_fluids</displayCategory>
<description>This Xenotype loves being stuffed with fluids and does not suffer physical impediments from being inflated.</description>
<iconPath>Genes/Icons/Cumflation</iconPath>
<displayOrderInCategory>536</displayOrderInCategory>
<biostatMet>-1</biostatMet>
<biostatCpx>2</biostatCpx>
<forcedTraits>
<li>
<def>Cumpilation_LikesCumflation</def>
</li>
</forcedTraits>
<exclusionTags>
<li>Cumpilation_NotCumflatable</li>
</exclusionTags>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
<defName>rjw_genes_un_inflatable</defName>
<label>inflation resistance</label>
<displayCategory>rjw_genes_fluids</displayCategory>
<description>This Xenotype cannot get inflated by fluids, neither vaginal, oral or anal.</description>
<iconPath>Genes/Icons/Cumflation_Immunity</iconPath>
<displayOrderInCategory>537</displayOrderInCategory>
<exclusionTags>
<li>Cumpilation_NotCumflatable</li>
</exclusionTags>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
<defName>rjw_genes_living_cumbucket</defName>
<label>living cumbucket</label>
<displayCategory>rjw_genes_fluids</displayCategory>
<description>When this Xenotype partakes in sexual activity, they store cum and produce it as an item.</description>
<iconPath>Genes/Icons/living_cumbucket</iconPath>
<displayOrderInCategory>559</displayOrderInCategory>
<biostatCpx>3</biostatCpx>
<biostatMet>-2</biostatMet>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<HediffDef>
<defName>RJW_Genes_Cumpilation_Cumflation_Counter</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>cumflation counter</label>
<labelNoun>cumflation counter</labelNoun>
<description>Apparently you can deal with it quite well.</description>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>3.0</maxSeverity>
<isBad>false</isBad>
<tendable>false</tendable>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-0.85</severityPerDay>
</li>
<li Class="RJW_Genes.HediffCompProperties_MatchSeverityOfHediff">
<hediffToMatch>Cumpilation_Cumflation</hediffToMatch>
</li>
</comps>
<stages>
<li>
<label>counter a little</label>
<becomeVisible>false</becomeVisible>
</li>
<li>
<label>counter slight</label>
<minSeverity>0.2</minSeverity>
<becomeVisible>false</becomeVisible>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.1</offset>
</li>
</capMods>
</li>
<li>
<label>counter moderate</label>
<minSeverity>0.4</minSeverity>
<becomeVisible>false</becomeVisible>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.25</offset>
</li>
</capMods>
<painOffset>-0.1</painOffset>
</li>
<li>
<label>counter intense</label>
<minSeverity>0.65</minSeverity>
<becomeVisible>false</becomeVisible>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.55</offset>
</li>
</capMods>
<painOffset>-0.15</painOffset>
</li>
<li>
<label>counter extreme</label>
<minSeverity>0.9</minSeverity>
<becomeVisible>false</becomeVisible>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.85</offset>
</li>
</capMods>
<painOffset>-0.25</painOffset>
</li>
</stages>
</HediffDef>
</Defs>

View file

@ -15,6 +15,7 @@
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-0.5</severityPerDay>
</li>
<li Class="Cumpilation.Cumflation.HediffCompProperties_SourceStorage"/>
<li Class="RJW_Genes.HediffsCompProperties_ProcessCumbucketMTB">
<mtbDaysPerStage>
<li>0</li>

View file

@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<HediffDef Abstract="True" Name="RJW_Genes_Cumpilation_Counter_Stuffing">
<hediffClass>HediffWithComps</hediffClass>
<defaultLabelColor>(240,200,110)</defaultLabelColor>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<isBad>false</isBad>
<tendable>false</tendable>
</HediffDef>
<HediffDef ParentName="RJW_Genes_Cumpilation_Counter_Stuffing">
<defName>RJW_Genes_Cumpilation_Cumstuffed_Counter</defName>
<label>cumstuffed counter</label>
<labelNoun>cumstuffed countered</labelNoun>
<description>Apparently you can deal with it quite well.</description>
<comps>
<li Class="RJW_Genes.HediffCompProperties_MatchSeverityOfHediff">
<hediffToMatch>Cumpilation_Cumstuffed</hediffToMatch>
</li>
</comps>
<stages>
<li>
<label>counter slightly bloated</label>
<becomeVisible>false</becomeVisible>
</li>
<li>
<label>counter bloated</label>
<becomeVisible>false</becomeVisible>
<minSeverity>0.2</minSeverity>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.03</offset>
</li>
</capMods>
</li>
<li>
<label>counter full</label>
<becomeVisible>false</becomeVisible>
<minSeverity>0.4</minSeverity>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.1</offset>
</li>
</capMods>
</li>
<li>
<label>counter stuffed</label>
<becomeVisible>false</becomeVisible>
<minSeverity>0.6</minSeverity>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.2</offset>
</li>
</capMods>
<painOffset>-0.1</painOffset>
</li>
<li>
<label>counter overstuffed</label>
<minSeverity>0.8</minSeverity>
<becomeVisible>false</becomeVisible>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.3</offset>
</li>
</capMods>
<painOffset>-0.2</painOffset>
</li>
</stages>
</HediffDef>
<HediffDef ParentName="RJW_Genes_Cumpilation_Counter_Stuffing">
<defName>RJW_Genes_Cumpilation_InsectSpunkStuffed_Counter</defName>
<label>insect-spunk stuffed counter</label>
<labelNoun>insect-spunk stuffed counter</labelNoun>
<comps>
<li Class="RJW_Genes.HediffCompProperties_MatchSeverityOfHediff">
<hediffToMatch>Cumpilation_InsectSpunkStuffed</hediffToMatch>
</li>
</comps>
<description>Apparently you can deal with it quite well.</description>
<stages>
<li>
<label>counter slightly bloated</label>
<becomeVisible>false</becomeVisible>
</li>
<li>
<label>counter bloated</label>
<becomeVisible>false</becomeVisible>
<minSeverity>0.2</minSeverity>
<statOffsets>
<MoveSpeed>0.05</MoveSpeed>
<RestFallRateFactor>-0.1</RestFallRateFactor>
</statOffsets>
</li>
<li>
<label>counter full</label>
<becomeVisible>false</becomeVisible>
<minSeverity>0.4</minSeverity>
<statOffsets>
<RestFallRateFactor>0.25</RestFallRateFactor>
<ComfyTemperatureMax>5</ComfyTemperatureMax>
<ComfyTemperatureMin>5</ComfyTemperatureMin>
<GlobalLearningFactor>-0.1</GlobalLearningFactor>
<MentalBreakThreshold>-0.1</MentalBreakThreshold>
<WorkSpeedGlobal>+0.15</WorkSpeedGlobal>
</statOffsets>
<capMods>
<li>
<capacity>Talking</capacity>
<offset>-0.05</offset>
</li>
</capMods>
</li>
<li>
<label>counter over-stuffed</label>
<becomeVisible>false</becomeVisible>
<minSeverity>0.7</minSeverity>
<statOffsets>
<ComfyTemperatureMax>10</ComfyTemperatureMax>
<ComfyTemperatureMin>10</ComfyTemperatureMin>
<GlobalLearningFactor>-0.2</GlobalLearningFactor>
<MentalBreakThreshold>-0.2</MentalBreakThreshold>
<WorkSpeedGlobal>+0.25</WorkSpeedGlobal>
</statOffsets>
<capMods>
<li>
<capacity>Manipulation</capacity>
<offset>+0.05</offset>
</li>
<li>
<capacity>Talking</capacity>
<offset>+0.15</offset>
</li>
</capMods>
</li>
</stages>
</HediffDef>
</Defs>

View file

@ -4,7 +4,7 @@
<!--========= General ============-->
<JobDef>
<defName>ProcessCumbucket</defName>
<defName>RJW_Genes_ProcessCumbucket</defName>
<driverClass>RJW_Genes.JobDriver_ProcessingCumbucket</driverClass>
<playerInterruptible>false</playerInterruptible>
<casualInterruptible>false</casualInterruptible>

View file

@ -8,7 +8,7 @@
<value>
<outcomeDoers>
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
<FertilinPerUnit>1</FertilinPerUnit>
<FertilinPerUnit>2</FertilinPerUnit>
</li>
</outcomeDoers>
</value>
@ -17,7 +17,7 @@
<xpath>Defs/ThingDef[defName="Cumpilation_Cum"]/ingestible/outcomeDoers</xpath>
<value>
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
<FertilinPerUnit>1</FertilinPerUnit>
<FertilinPerUnit>2</FertilinPerUnit>
</li>
</value>
</match>

View file

@ -65,22 +65,4 @@
</modExtensions>
</GeneDef>
<GeneDef>
<defName>rjw_genes_generous_donor</defName>
<label>generous donor</label>
<displayCategory>rjw_genes_fluids</displayCategory>
<description>When this Xenotype transfers nutrition via cumshot, the giver will not get hungry. (Licentia Configuration for Transfer Nutrition must be enabled).</description>
<iconPath>Genes/Icons/Generous_Donor</iconPath>
<displayOrderInCategory>538</displayOrderInCategory>
<biostatCpx>2</biostatCpx>
<biostatMet>-1</biostatMet>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<GeneDef ParentName="GeneGenitalTypeBase">
<defName>rjw_genes_Pig_genitalia</defName>
<label>Pig genitalia</label>
<description>Carriers of this gene develop pig genitalia.</description>
<iconPath>Genes/Icons/Genitalia_screw_icon</iconPath>
<modExtensions>
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>PigPenis</penis>
<vagina>PigVagina</vagina>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
<GeneDef ParentName="GeneGenitalTypeBase">
<defName>rjw_genes_Orc_genitalia</defName>
<label>Orc genitalia</label>
<description>Carriers of this gene develop orc genitalia.</description>
<iconPath>Genes/Icons/Genitalia_orc_icon</iconPath>
<modExtensions>
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>OrcPenis</penis>
<vagina>OrcVagina</vagina>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
</Defs>

View file

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef>
<defName>rjw_genes_living_cumbucket</defName>
<label>living cumbucket</label>
<displayCategory>rjw_genes_fluids</displayCategory>
<description>When this Xenotype partakes in sexual activity, they store cum and produce it as an item.</description>
<iconPath>Genes/Icons/living_cumbucket</iconPath>
<displayOrderInCategory>559</displayOrderInCategory>
<biostatCpx>3</biostatCpx>
<biostatMet>-2</biostatMet>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<!--
DevNote:
There used to be an issue with a Gene-Mod Called "Cum-Addiction Gene".
That mod just overwrote the complete UsedCondom.xml and Sexperience Cum.xml
This would lead to two types of failures:
A) If this mod was before the other mod, changes were just overwritten
B) If this mod was after, there was an issue in targetting the XML throwing a patch error
Please if you write mods, do not just purge out XMLs. Thanks.
DevNote 2:
With RJW-Sexperience 1.5.1.5 the GatheredCum became conditional,
and was only loaded when Cumpilation was NOT loaded. Issue #172.
This patch was kindly mirrored after Infis Patch of UsedCondoms.
-->
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName="GatheredCum"]</xpath>
<nomatch Class="PatchOperationFindMod">
<mods>
<li>Cumpilation</li>
</mods>
<match Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName="Cumpilation_Cum"]/ingestible/outcomeDoers</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>/Defs/ThingDef[defName="Cumpilation_Cum"]/ingestible</xpath>
<value>
<outcomeDoers>
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
<FertilinPerUnit>1</FertilinPerUnit>
</li>
</outcomeDoers>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName="Cumpilation_Cum"]/ingestible/outcomeDoers</xpath>
<value>
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
<FertilinPerUnit>1</FertilinPerUnit>
</li>
</value>
</match>
</match>
</nomatch>
<match Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>/Defs/ThingDef[defName="GatheredCum"]/ingestible</xpath>
<value>
<outcomeDoers>
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
<FertilinPerUnit>1</FertilinPerUnit>
</li>
</outcomeDoers>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers</xpath>
<value>
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
<FertilinPerUnit>1</FertilinPerUnit>
</li>
</value>
</match>
</match>
</Operation>
</Patch>

View file

@ -12,7 +12,7 @@
<li>rjw_genes_big_male_genitalia</li>
<li>rjw_genes_big_breasts</li>
<li>rjw_genes_no_sex_need</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_generous_donor</li>
<li>rjw_genes_generous_donor</li>
<li MayRequire="rjw.sexperience">AptitudePoor_Sex</li>
</value>
</li>
@ -20,7 +20,7 @@
<xpath>Defs/XenotypeDef[defName="BS_Malakim"]/genes</xpath>
<value>
<li>rjw_genes_small_breasts</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_generous_donor</li>
<li>rjw_genes_generous_donor</li>
<li MayRequire="rjw.sexperience">AptitudeTerrible_Sex</li>
</value>
</li>
@ -29,17 +29,13 @@
<value>
<li>rjw_genes_big_male_genitalia</li>
<li>rjw_genes_big_breasts</li>
<li>rjw_genes_human_genitalia</li>
<li>rjw_genes_equine_genitalia</li>
<li>rjw_genes_reptilian_genitalia</li>
<li>rjw_genes_crocodilian_genitalia</li>
<li MayRequire="rjw.sexperience">AptitudeStrong_Sex</li>
</value>
</li>
<li Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="BS_Grigori"]/genes</xpath>
<value>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_generous_donor</li>
<li>rjw_genes_generous_donor</li>
<li MayRequire="rjw.sexperience">AptitudeStrong_Sex</li>
</value>
</li>
@ -66,7 +62,7 @@
<li>rjw_genes_loose_anus</li>
<li>rjw_genes_extra_vagina</li>
<li>rjw_genes_extra_anus</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_cumflation_immunity</li>
<li MayRequire="vegapnk.cumpilation">rjw_genes_un_inflatable</li>
<li MayRequire="rjw.sexperience">AptitudeStrong_Sex</li>
</value>
</li>
@ -79,8 +75,8 @@
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_extra_vagina</li>
<li>rjw_genes_extra_anus</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_likes_cumflation</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elastic</li>
<li MayRequire="vegapnk.cumpilation">rjw_genes_inflatable</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
<li MayRequire="rjw.sexperience">AptitudeStrong_Sex</li>
</value>
</li>

View file

@ -59,7 +59,7 @@
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_very_much_fluid</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_likes_cumflation</li>
<li MayRequire="vegapnk.cumpilation">rjw_genes_inflatable</li>
</value>
</li>
<li Class="PatchOperationAdd">
@ -71,7 +71,7 @@
<li Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="BS_Redcap"]/genes</xpath>
<value>
<li>LitteredBirths</li>
<li>rjw_genes_littered_births</li>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_much_fluid</li>

View file

@ -35,7 +35,6 @@
<li>rjw_genes_small_male_genitalia</li>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_Needle_genitalia</li>
<li>rjw_genes_zoophile</li>
</value>
</match>
@ -51,7 +50,6 @@
<li>rjw_genes_small_male_genitalia</li>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_Needle_genitalia</li>
<li>rjw_genes_zoophile</li>
</value>
</match>
@ -81,7 +79,6 @@
<value>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_Needle_genitalia</li>
<li>rjw_genes_littered_births</li>
<li>rjw_genes_zoophile</li>
</value>

View file

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Obsidia Expansion - Arachnas Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="OE_WidowArachna" or defName="OE_WolfArachna" or defName="OE_GoliathArachna"]/genes</xpath>
<value>
<li>rjw_genes_ovipositor_genitalia</li>
<li>rjw_genes_insectbreeder</li>
<li>rjw_genes_fluid_insect_spunk</li>
<li>rjw_genes_cocoonweaver</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Obsidia Expansion - Axotl Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="OE_Axotl"]/genes</xpath>
<value>
<li>rjw_genes_small_male_genitalia</li>
<li MayRequire="vegapnk.cumpilation">rjw_genes_living_cumbucket</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Obsidia Expansion - Ceratons Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="OE_Protoceraton" or defName="OE_Styracodon" or defName="OE_Triceraton"]/genes</xpath>
<value>
<li>rjw_genes_crocodilian_genitalia</li>
<li>rjw_genes_big_male_genitalia</li>
<li>rjw_genes_loose_female_genitalia</li>
<li>rjw_genes_big_breasts</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Obsidia Expansion - Liches Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="OE_Lich" or defName="OE_Archlich"]/genes</xpath>
<value>
<li>rjw_genes_no_fluid</li>
<li>rjw_genes_featureless_chest</li>
<li>rjw_genes_no_sex_need</li>
<li>rjw_genes_no_penis</li>
<li>rjw_genes_no_vagina</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Obsidia Expansion - Mothoids Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="OE_Mothoid" or defName="OE_MothoidPrime" or defName="OE_MothoidAtlant"]/genes</xpath>
<value>
<li>rjw_genes_insectincubator</li>
<li>rjw_genes_fluid_insect_spunk</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Obsidia Expansion - Slimes Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="OE_Slime" or defName="OE_SlimeWaste" or defName="OE_SlimeBloody" or defName="OE_SlimePrime"]/genes</xpath>
<value>
<li>rjw_genes_slime_genitalia</li>
<li>rjw_genes_very_much_fluid</li>
<li>rjw_genes_loose_anus</li>
<li>rjw_genes_loose_female_genitalia</li>
<li MayRequire="vegapnk.cumpilation">rjw_genes_inflatable</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Obsidia Expansion - Tortle Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="OE_Tortle"]/genes</xpath>
<value>
<li>rjw_genes_reptilian_genitalia</li>
</value>
</match>
</Operation>
</Patch>

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Rimsenal Xenotype Pack - Askbarn</li>
</mods>
<match Class="PatchOperationSequence">
<operations>
<li Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="Askbarn"]/genes</xpath>
<value>
<li>rjw_genes_electric_satisfaction</li>
<li>rjw_genes_pheromone_spit</li>
<li>rjw_genes_loose_anus</li>
<li>rjw_genes_bisexual</li>
</value>
</li>
<li Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="Uredd"]/genes</xpath>
<value>
<li>rjw_genes_electric_satisfaction</li>
<li>rjw_genes_dragon_genitalia</li>
<li>rjw_genes_big_male_genitalia</li>
<li>rjw_genes_big_breasts</li>
</value>
</li>
</operations>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Rimsenal Xenotype Pack - Harana</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="Harana"]/genes</xpath>
<value>
<li>rjw_genes_small_male_genitalia</li>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_unbreakable</li>
</value>
</match>
</Operation>
</Patch>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Roo's Faun Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="RBSF_Faun"]/genes</xpath>
<value>
<li>rjw_genes_equine_genitalia</li>
<li>rjw_genes_zoophile</li>
<li>rjw_genes_mating_call</li>
<li>rjw_genes_tight_female_genitalia</li>
</value>
</match>
</Operation>
</Patch>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Roo's Minotaur Xenotype</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="RBM_Minotaur"]/genes</xpath>
<value>
<li>rjw_genes_equine_genitalia</li>
<li>rjw_genes_much_fluid</li>
<li>rjw_genes_big_male_genitalia</li>
<li>rjw_genes_loose_female_genitalia</li>
<li>rjw_genes_big_breasts</li>
</value>
</match>
</Operation>
</Patch>

View file

@ -73,9 +73,9 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_no_fluid;
public static readonly GeneDef rjw_genes_much_fluid;
public static readonly GeneDef rjw_genes_very_much_fluid;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_likes_cumflation;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_cumflation_immunity;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_generous_donor;
[MayRequire("vegapnk.cumpilation")] public static readonly GeneDef rjw_genes_un_inflatable;
[MayRequire("vegapnk.cumpilation")] public static readonly GeneDef rjw_genes_inflatable;
public static readonly GeneDef rjw_genes_generous_donor;
[MayRequire("rjw.sexperience")] public static readonly GeneDef rjw_genes_living_cumbucket;

View file

@ -27,10 +27,6 @@ namespace RJW_Genes
public static readonly HediffDef rjw_genes_disease_carrier_storage;
// Note: Counter does meant it counters it, not it's counting
[MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumstuffed_counter;
[MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter;
public static readonly HediffDef OvaryAgitator;
public static readonly HediffDef Bioscaffold;

View file

@ -1,14 +1,11 @@

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using rjw;
using Verse;
namespace RJW_Genes
{
@ -23,42 +20,35 @@ namespace RJW_Genes
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator il)
{
bool found_call = false;
bool found_skip = false;
bool finished = false;
Label skip_label = il.DefineLabel();
MethodInfo removeHediff = AccessTools.Method(typeof(Pawn_HealthTracker), nameof(Pawn_HealthTracker.RemoveHediff));
MethodInfo ismechbreeder = AccessTools.Method(typeof(GeneUtility), "IsMechbreeder");
foreach (CodeInstruction codeInstruction in instructions)
{
//Check if the first opcode after endfinally ldloc_0 is and in that case add the label to skip the code
if (found_skip && codeInstruction.opcode == OpCodes.Ldloc_0)
{
codeInstruction.labels.Add(skip_label);
}
found_skip = false;
if (codeInstruction.opcode == OpCodes.Endfinally)
{
found_skip = true;
}
yield return codeInstruction;
if (codeInstruction.opcode == OpCodes.Call)
if (finished)
{
if (codeInstruction.operand.ToString() == "Boolean TryMakeFilth(Verse.IntVec3, Verse.Map, Verse.ThingDef, System.String, Int32, RimWorld.FilthSourceFlags)")
{
found_call = true;
}
continue;
}
//Triggers after the pop opcode (after generating filth in c#).
else if (found_call)
if (!found_call && codeInstruction.Calls(removeHediff))
{
//Load pawn, call function to check if a mechbreeder, and skip past the part which does damage
yield return new CodeInstruction(OpCodes.Ldloc_0, null);
yield return new CodeInstruction(OpCodes.Ldloc_0);
yield return new CodeInstruction(OpCodes.Call, ismechbreeder);
yield return new CodeInstruction(OpCodes.Brtrue_S, skip_label);
found_call = false;
yield return new CodeInstruction(OpCodes.Brfalse_S, skip_label);
yield return new CodeInstruction(OpCodes.Ret);
found_call = true;
}
else if (found_call)
{
// next instruction after the insert
codeInstruction.labels.Add(skip_label);
finished = true;
}
}
yield break;
}
}
}

View file

@ -16,7 +16,7 @@ namespace RJW_Genes
{
// Right now: Ignore Breasts, only do
if (part is ISexPartHediff sexPart && (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part)))
sexPart.GetPartComp().partFluidFactor *= multiplier;
sexPart.GetPartComp().partFluidMultiplier *= multiplier;
}
}

View file

@ -0,0 +1,17 @@
using Cumpilation.Oscillation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
public class HediffCompProperties_MatchSeverityOfHediff : HediffCompProperties
{
public HediffDef hediffToMatch;
public HediffCompProperties_MatchSeverityOfHediff() => this.compClass = typeof(HediffComp_MatchSeverityOfHediff);
}
}

View file

@ -0,0 +1,26 @@
using Verse;
namespace RJW_Genes
{
public class HediffComp_MatchSeverityOfHediff : HediffComp
{
public HediffCompProperties_MatchSeverityOfHediff Props => (HediffCompProperties_MatchSeverityOfHediff)this.props;
public override void CompPostTick(ref float severityAdjustment)
{
base.CompPostTick(ref severityAdjustment);
bool hasMatchingHediff = parent.pawn.health.hediffSet.HasHediff(Props.hediffToMatch);
if (!hasMatchingHediff) {
parent.Severity = 0.0f;
}
else
{
Hediff match = parent.pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffToMatch);
if (match == null) parent.Severity = 0.0f;
parent.Severity = match.Severity;
}
}
}
}

View file

@ -21,7 +21,7 @@ namespace RJW_Genes
if (this.Props.mtbDaysPerStage[this.parent.CurStageIndex] > 0f && base.Pawn.IsHashIntervalTick(60) && Rand.MTBEventOccurs(this.Props.mtbDaysPerStage[this.parent.CurStageIndex], 60000f, 60f))
{
ModLog.Debug($"Triggered HediffComp_ProcessCumbucket CompPostTick - Starting a JobDriver ProcessCumbucket for {this.parent.pawn}");
this.Pawn.jobs.StartJob(JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("ProcessCumbucket")), lastJobEndCondition: Verse.AI.JobCondition.InterruptForced, resumeCurJobAfterwards: true);
this.Pawn.jobs.StartJob(JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("RJW_Genes_ProcessCumbucket")), lastJobEndCondition: Verse.AI.JobCondition.InterruptForced, resumeCurJobAfterwards: true);
}
}
}

View file

@ -1,5 +1,4 @@
using LicentiaLabs;
using System.Collections.Generic;
using System.Collections.Generic;
using Verse;
using Verse.AI;
using UnityEngine;
@ -23,7 +22,7 @@ namespace RJW_Genes
protected override IEnumerable<Toil> MakeNewToils()
{
// DevNote: Right now, this needs RJW.sexperience to produce the Cum-Item.
if (!ModsConfig.IsActive("rjw.sexperience"))
if (!ModsConfig.IsActive("vegapnk.cumpilation"))
yield break;
Toil toil = new Toil();
@ -76,10 +75,6 @@ namespace RJW_Genes
if (this.ticksLeft <= 0)
{
base.ReadyForNextToil();
TaleRecorder.RecordTale(Licentia.TaleDefs.VomitedCum, new object[]
{
this.pawn
});
}
};
toil.defaultCompleteMode = ToilCompleteMode.Never;
@ -91,8 +86,6 @@ namespace RJW_Genes
private void SpawnCum(Pawn pawn, IntVec3 cell, Map map)
{
ThingDef cumDef = DefDatabase<ThingDef>.GetNamed("GatheredCum", true);
Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket);
if (hediff == null)
{
@ -100,6 +93,12 @@ namespace RJW_Genes
return;
}
var storage = hediff.TryGetComp<Cumpilation.Cumflation.HediffComp_SourceStorage>();
var random_entry = storage.sources.RandomElementByWeight(p => p.amount);
ThingDef ToSpawn = random_entry.fluid.consumable == null ? Cumpilation.DefOfs.Cumpilation_Cum : random_entry.fluid.consumable;
ThingDef cumDef = Cumpilation.DefOfs.Cumpilation_Cum;
// Case 1: "Normal Severity", just puke out a bit of cum here and there.
if (hediff.Severity <= 10)
{

View file

@ -1,38 +0,0 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using rjw;
using RimWorld;
using Verse;
namespace RJW_Genes
{
/// <summary>
/// Changes LicentiaLabs (if Present) to not cumflate pawns that are cumflation immune.
/// This code is exercised / loaded in the HarmonyInit.
/// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs
/// </summary>
///
class Patch_CumflationImmunity
{
// This patch does not need the normal Harmony Targetting,
// as it needs to be added only on demand (See HarmonyInit.cs)
public static bool Prefix(SexProps props)
{
// Harmony Logic skips the original Method after Prefix when "false" is returned
// See https://harmony.pardeike.net/articles/execution.html
// We skip the whole Cumflation Logic when the Partner is Cumflation Immune
if (props != null && props.partner != null && GeneUtility.IsCumflationImmune(props.partner))
{
return false;
}
return true;
}
}
}

View file

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
public class Patch_Cumpilation_BlockCumflation
{
public static bool Prepare() => ModsConfig.IsActive("vegapnk.cumpilation");
public static void PostFix(Pawn pawn,ref bool __result) {
if (pawn != null && pawn.genes != null && pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_un_inflatable))
__result = false;
}
}
}

View file

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
public class Patch_Cumpilation_BlockStuffing
{
public static bool Prepare() => ModsConfig.IsActive("vegapnk.cumpilation");
public static void PostFix(Pawn pawn,ref bool __result) {
if (pawn != null && pawn.genes != null && pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_un_inflatable))
__result = false;
}
}
}

View file

@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using rjw;
using RimWorld;
using Verse;
namespace RJW_Genes
{
class Patch_Cumpilation_Inflatable
{
public static bool Prepare() => ModsConfig.IsActive("vegapnk.cumpilation");
// This patch does not need the normal Harmony Targetting,
// as it needs to be added only on demand (See HarmonyInit.cs)
public static void PostFix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null) return;
if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_inflatable) )
{
AddOrIncreaseCumflationCounterHediffs(props.pawn);
}
if (props.partner.genes != null && props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_inflatable))
{
AddOrIncreaseCumflationCounterHediffs(props.partner);
}
}
public static void AddOrIncreaseCumflationCounterHediffs(Pawn inflated)
{
List<(Hediff,HediffDef)> expectedCounterHediffs = inflated.health.hediffSet.hediffs
.Where(hediff => FindMatchingCounterHediff(hediff.def) != null)
.Select(hediff => (hediff,FindMatchingCounterHediff(hediff.def)))
.ToList();
ModLog.Debug($"Adding or Increasing {expectedCounterHediffs.Count()} expected CounterHediffs for Pawn {inflated}");
foreach ((Hediff,HediffDef) matchedHediffs in expectedCounterHediffs) {
if (inflated.health.hediffSet.HasHediff(matchedHediffs.Item2)) {
Hediff counter = inflated.health.GetOrAddHediff(matchedHediffs.Item2);
counter.Severity = matchedHediffs.Item1.Severity;
} else
{
Hediff counter = HediffMaker.MakeHediff(matchedHediffs.Item2, inflated, matchedHediffs.Item1.Part);
counter.Severity = matchedHediffs.Item1.Severity;
inflated.health.AddHediff(counter);
}
}
}
public static HediffDef FindMatchingCounterHediff(HediffDef hediffDef)
{
if (hediffDef == null) return null;
var result = DefDatabase<HediffDef>.AllDefsListForReading
.Where(def => {
if (def.comps == null || def.comps.Count == 0) return false;
var Matcher = def.comps.FirstOrFallback(comp => comp is HediffCompProperties_MatchSeverityOfHediff,null);
if (Matcher == null) return false;
HediffCompProperties_MatchSeverityOfHediff MatcherCasted = (HediffCompProperties_MatchSeverityOfHediff)Matcher;
return MatcherCasted.hediffToMatch == hediffDef;
})
.FirstOrFallback(null);
if (result != null) ModLog.Debug($"Found CounterHediff {result} as counter for {hediffDef}");
return result;
}
public static Hediff CreateOrGetCumflationCounterHediff(Pawn inflated, HediffDef counterCumflationDef, BodyPartRecord bodyPartRecord)
{
Hediff cumflationHediff = inflated.health.hediffSet.GetFirstHediffOfDef(counterCumflationDef);
if (cumflationHediff == null)
{
cumflationHediff = HediffMaker.MakeHediff(counterCumflationDef, inflated, bodyPartRecord);
cumflationHediff.Severity = 0;
inflated.health.AddHediff(cumflationHediff, bodyPartRecord);
}
return cumflationHediff;
}
}
}

View file

@ -1,79 +0,0 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using rjw;
using RimWorld;
using Verse;
namespace RJW_Genes
{
/// <summary>
/// Changes LicentiaLabs (if Present) to add a cumflation-counter hediff, when the pawn is cumflated.
/// The counter hediff takes away the negative stats of the original hediff.
/// This code is exercised / loaded in the HarmonyInit.
/// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs
/// </summary>
///
class Patch_LikesCumflation
{
// This patch does not need the normal Harmony Targetting,
// as it needs to be added only on demand (See HarmonyInit.cs)
public static void PostFix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null) return;
// Minor Hardening to help with #105
if (!ModsConfig.IsActive("LustLicentia.RJWLabs")) return;
if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation) )
{
AddOrIncreaseCumflationCounterHediff(props.pawn);
}
if (props.partner.genes != null && props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation))
{
AddOrIncreaseCumflationCounterHediff(props.partner);
}
}
public static void AddOrIncreaseCumflationCounterHediff(Pawn inflated)
{
Hediff cumstuffed_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumstuffed);
//Hediff cumstuffed_hediff = LicentiaLabs.CumflationHelper.GetCumflationHediff(inflated, LicentiaLabs.Licentia.HediffDefs.Cumstuffed, "stomach");
if (cumstuffed_hediff != null && cumstuffed_hediff.Severity >= 0.01) {
ModLog.Debug($"{inflated} got cumstuffed and gets the counter-part");
var bodyPartRecord = inflated.RaceProps.body.AllParts.Find(bpr => bpr.def.defName.Contains("stomach") || bpr.def.defName.Contains("stomach".ToLower()));
var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumstuffed_counter, bodyPartRecord);
counter_hediff.Severity = cumstuffed_hediff.Severity;
}
Hediff cumflation_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumflation);
if (cumflation_hediff != null && cumflation_hediff.Severity >= 0.01)
{
ModLog.Debug($"{inflated} got cumflated and gets the counter-part");
var bodyPartRecord = Genital_Helper.get_genitalsBPR(inflated);
var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumflation_counter, bodyPartRecord);
counter_hediff.Severity = cumflation_hediff.Severity;
}
}
public static Hediff CreateOrGetCumflationCounterHediff(Pawn inflated, HediffDef counterCumflationDef, BodyPartRecord bodyPartRecord)
{
Hediff cumflationHediff = inflated.health.hediffSet.GetFirstHediffOfDef(counterCumflationDef);
if (cumflationHediff == null)
{
cumflationHediff = HediffMaker.MakeHediff(counterCumflationDef, inflated, bodyPartRecord);
cumflationHediff.Severity = 0;
inflated.health.AddHediff(cumflationHediff, bodyPartRecord);
}
return cumflationHediff;
}
}
}

View file

@ -11,7 +11,6 @@ using static System.Net.Mime.MediaTypeNames;
namespace RJW_Genes
{
[HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
public class Patch_LivingCumbucket_StackHediff
{
@ -20,36 +19,47 @@ namespace RJW_Genes
/// The hediff can still be increased over 1.0.
/// </summary>
const float fluid_amount_required_for_hediff_severity_ = 100.0f;
public static bool Prepare() => ModsConfig.IsActive("vegapnk.cumpilation");
public static void Postfix(SexProps props)
public static void PostFix(SexProps props)
{
if (!ModsConfig.IsActive("rjw.sexperience"))
return;
// ShortCuts: Exit Early if Pawn or Partner are null (can happen with Masturbation or other nieche-cases)
if (props == null || props.pawn == null || !props.hasPartner())
return;
// Is not internal Sex
if (!Cumpilation.Cumflation.StuffingUtility.IsSexTypeThatCanCumstuff(props) && !Cumpilation.Cumflation.CumflationUtility.IsSexTypeThatCanCumflate(props))
return;
Pawn pawnA = props.pawn;
Pawn pawnB = props.partner;
if (pawnA.genes != null && pawnA.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && FluidUtility.GetTotalFluidAmount(pawnB) > 0)
{
ProcessLivingCumbucket(pawnA, FluidUtility.GetTotalFluidAmount(pawnB));
ISexPartHediff genital = Cumpilation.Common.FluidUtility.GetGenitalsWithFluids(pawnB,filterForShootsOnOrgasm:true).RandomElement();
if (genital != null)
{
var comp = genital.GetPartComp();
StackUpLivingCumbucket(pawnA, comp.FluidAmount, comp.Fluid, pawnB);
}
}
if (pawnB.genes != null && pawnB.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && FluidUtility.GetTotalFluidAmount(pawnA) > 0)
{
ProcessLivingCumbucket(pawnB, FluidUtility.GetTotalFluidAmount(pawnA));
ISexPartHediff genital = Cumpilation.Common.FluidUtility.GetGenitalsWithFluids(pawnA, filterForShootsOnOrgasm: true).RandomElement();
if (genital != null)
{
var comp = genital.GetPartComp();
StackUpLivingCumbucket(pawnB, comp.FluidAmount, comp.Fluid, pawnA);
}
}
}
public static void ProcessLivingCumbucket(Pawn pawn, float cumamount)
public static void StackUpLivingCumbucket(Pawn pawn, float cumamount, SexFluidDef fluid, Pawn source)
{
float bodysize = pawn.BodySize;
float result_severity_increase = cumamount / (fluid_amount_required_for_hediff_severity_ * bodysize);
Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket);
if (hediff == null)
{
@ -57,6 +67,13 @@ namespace RJW_Genes
hediff.Severity = 0.01f;
}
var storage = hediff.TryGetComp<Cumpilation.Cumflation.HediffComp_SourceStorage>();
if (storage != null)
{
Cumpilation.Cumflation.FluidSource entry = new Cumpilation.Cumflation.FluidSource() { amount = cumamount, fluid=fluid, pawn = source };
storage.AddOrMerge(entry);
}
hediff.Severity += result_severity_increase;
ModLog.Debug($"Pumping the living cumbucket {pawn} (Bodysize {bodysize}) with {cumamount} cum, resulting in severity {hediff.Severity} (+{result_severity_increase})");
}

View file

@ -1,44 +0,0 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using rjw;
using RimWorld;
using Verse;
using LicentiaLabs;
namespace RJW_Genes
{
/// <summary>
/// Changes LicentiaLabs (if Present) to alter the TransferNutrition for rjw_genes_generous_donor.
/// This code is exercised / loaded in the HarmonyInit.
/// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs
/// </summary>
///
class Patch_TransferNutrition
{
// This patch does not need the normal Harmony Targetting,
// as it needs to be added only on demand (See HarmonyInit.cs)
public static void Postfix(Pawn giver, Pawn receiver, float cumAmount)
{
// Design decision:
// I could have done some transpiler stuff, but that is scary and might need to be adjusted quite a lot
// Hence, I simply re-book the nutrition back to the giver in the Postfix. That should be robust and easy.
if (GeneUtility.IsGenerousDonor(giver))
{
float donatedNutrition = CumflationHelper.CalculateNutritionAmount(giver, cumAmount);
// TODO: In theory, there could be something weird happening if the donor has food less than X and the "IgnoreThermodynamics" is set on.
// Then it can happen that the donor ends up with more food than he had before cumshot, but I think that is somewhat funny given that you have ignore Thermodynamics on.
Need_Food inflatorFood = giver.needs.TryGetNeed<Need_Food>();
if (inflatorFood != null)
inflatorFood.CurLevel += donatedNutrition;
}
}
}
}

View file

@ -0,0 +1,70 @@
using HarmonyLib;
using rjw;
using Verse;
namespace RJW_Genes
{
/// <summary>
/// Upon Transfer Fluids, the pawns store their current Food need (if applicable).
/// When running the postfix, all generous donours get their old food need restored if the current one is lower.
/// If there is any issue, the need is just set to -10 as an error value.
///
/// Patched Method: https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Common/Helpers/SexUtility.cs?ref_type=heads#L992
/// </summary>
[HarmonyPatch(typeof(rjw.SexUtility), nameof(rjw.SexUtility.TransferFluids))]
class Patch_TransferNutrition_Generous_Donor_PawnToPartner
{
static void Prefix(SexProps props, out float __state)
{
__state = -10.0f;
if (props.pawn != null && props.pawn.needs != null && props.pawn.needs.food != null)
__state = props.pawn.needs.food.CurLevel;
}
static void Postfix(SexProps props,float __state )
{
if (props.pawn != null && props.pawn.needs != null && props.pawn.needs.food != null && props.pawn.genes != null)
{
if (props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_generous_donor) && props.pawn.needs.food.CurLevel < __state)
{
ModLog.Debug($"Found Generous Donor {props.pawn} Transferring Fluids - Resetting Food Need from {props.pawn.needs.food.CurLevel} to {__state}");
props.pawn.needs.food.CurLevel = __state;
}
}
}
}
/// <summary>
/// Harmony Patches only allow for one out-variable as state.
/// Thus I have simply a clone with the same behaviour. Why not have it easy sometimes.
/// </summary>
[HarmonyPatch(typeof(rjw.SexUtility), nameof(rjw.SexUtility.TransferFluids))]
class Patch_TransferNutrition_Generous_Donor_PartnerToPawn
{
static void Prefix(SexProps props,out float __state)
{
__state = -10.0f;
if (props.partner != null && props.partner.needs != null && props.partner.needs.food != null)
__state = props.partner.needs.food.CurLevel;
}
static void Postfix(SexProps props, float __state)
{
if (props.partner != null && props.partner.needs != null && props.partner.needs.food != null && props.partner.genes != null)
{
if (props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_generous_donor) && props.partner.needs.food.CurLevel < __state)
{
ModLog.Debug($"Found Generous Donor {props.partner} Transferring Fluids - Resetting Food Need from {props.partner.needs.food.CurLevel} to {__state}");
props.partner.needs.food.CurLevel = __state;
}
}
}
}
}

View file

@ -116,7 +116,6 @@ namespace RJW_Genes
public static bool IsYouthFountain(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_youth_fountain); }
public static bool IsAgeDrainer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sex_age_drain); }
public static bool IsElastic(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_elasticity); }
public static bool IsCumflationImmune(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_cumflation_immunity); }
public static bool IsGenerousDonor(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_generous_donor); }
public static bool IsPussyHealer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pussyhealing); }
public static bool IsUnbreakable(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_unbreakable); }

View file

@ -2,13 +2,11 @@
using RimWorld;
using rjw;
using System.Collections.Generic;
using System;
namespace RJW_Genes
{
public class Gene_EvergrowingGenitalia : RJW_Gene
{
const int BASE_TICKS = 60000;
public override void Tick()
@ -28,19 +26,20 @@ namespace RJW_Genes
private void GrowPenisses()
{
List<Hediff> AllPenisses = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_penis(x));
foreach(Hediff penis in AllPenisses)
float bodySizeOverride = -1f; //this is just hackjob to temporary fix an issue. It need to be remade
foreach (Hediff penis in AllPenisses)
{
HediffComp_SexPart CompHediff = penis.TryGetComp<rjw.HediffComp_SexPart>();
if (CompHediff.baseSize <= 1.00f)
CompHediff.baseSize += 0.10f;
else
{
//CompHediff.ForceSize(CompHediff.Size + 0.05f);
CompHediff.originalOwnerSize += 0.05f;
if (bodySizeOverride <= 1.0) bodySizeOverride = 1.0f;
bodySizeOverride += 0.05f;
}
CompHediff.UpdateSeverity();
if (CompHediff.originalOwnerSize > 3.0f)
if (bodySizeOverride > 3.0f)
{
// Add Mental Hediff
HandleGenitaliaSizeThoughts(pawn);
@ -48,13 +47,14 @@ namespace RJW_Genes
// Increase Fluid
if (CompHediff != null)
CompHediff.partFluidFactor *= 1.05f;
CompHediff.partFluidMultiplier *= 1.05f;
}
}
private void GrowVaginas()
{
List<Hediff> AllVaginas = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_vagina(x));
float bodySizeOverride = -1f; //this is just hackjob to temporary fix an issue. It need to be remade
foreach (Hediff vagina in AllVaginas)
{
HediffComp_SexPart CompHediff = vagina.TryGetComp<rjw.HediffComp_SexPart>();
@ -62,21 +62,21 @@ namespace RJW_Genes
CompHediff.baseSize += 0.10f;
else
{
CompHediff.originalOwnerSize += 0.05f;
if (bodySizeOverride <= 1.0) bodySizeOverride = 1.0f;
bodySizeOverride += 0.05f;
}
//CompHediff.ForceSize(CompHediff.Size + 0.05f);
//CompHediff.originalOwnerSize += 0.05f;
CompHediff.UpdateSeverity();
if (CompHediff.baseSize > 3.0f)
if (bodySizeOverride > 3.0f)
{
// Add Mental Hediff
HandleGenitaliaSizeThoughts(pawn);
}
// Increase Fluid
if (CompHediff != null)
CompHediff.partFluidFactor *= 1.025f;
CompHediff.partFluidMultiplier *= 1.025f;
}
}

View file

@ -29,13 +29,13 @@ namespace RJW_Genes.Interactions
{
weight *= 2.5f;
}
if (pawn.genes.HasGene(GeneDefOf.rjw_genes_cum_eater))
if (pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_cum_eater))
{
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Mouth);
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Beak);
}
if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber))
if (pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_fertilin_absorber))
{
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Vagina);
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Anus);
@ -62,7 +62,7 @@ namespace RJW_Genes.Interactions
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Mouth);
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Beak);
if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber))
if (pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_fertilin_absorber))
{
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Vagina);
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Anus);

View file

@ -68,20 +68,26 @@ namespace RJW_Genes
private Thing GetStoredCum(Pawn pawn)
{
if (!ModsConfig.IsActive("vegapnk.cumpilation"))
return null;
Thing carriedThing = pawn.carryTracker.CarriedThing;
ThingDef gatheredCum = ThingDef.Named("GatheredCum");
if (carriedThing != null && carriedThing.def == gatheredCum)
ThingDef cumThingDef = Cumpilation.DefOfs.Cumpilation_Cum;
if (cumThingDef == null) { return null; }
if (carriedThing != null && carriedThing.def == cumThingDef)
{
return carriedThing;
}
for (int i = 0; i < pawn.inventory.innerContainer.Count; i++)
{
if (pawn.inventory.innerContainer[i].def == gatheredCum)
if (pawn.inventory.innerContainer[i].def == cumThingDef)
{
return pawn.inventory.innerContainer[i];
}
}
return GenClosest.ClosestThing_Global_Reachable(pawn.Position, pawn.Map, pawn.Map.listerThings.ThingsOfDef(gatheredCum), PathEndMode.OnCell, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false, false, false), 9999f, (Thing t) => pawn.CanReserve(t, 1, -1, null, false) && !t.IsForbidden(pawn), null);
return GenClosest.ClosestThing_Global_Reachable(pawn.Position, pawn.Map, pawn.Map.listerThings.ThingsOfDef(cumThingDef), PathEndMode.OnCell, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false, false, false), 9999f, (Thing t) => pawn.CanReserve(t, 1, -1, null, false) && !t.IsForbidden(pawn), null);
}
}
}

View file

@ -49,10 +49,13 @@ namespace RJW_Genes
public static void DrinkCumflation(Pawn source, Pawn consumer)
{
if (GeneUtility.HasLifeForce(consumer) && GeneUtility.IsCumEater(consumer)
&& source.health.hediffSet.HasHediff(HediffDef.Named("Cumflation")))
if (!ModsConfig.IsActive("vegapnk.cumpilation")) return;
if (source == null || consumer == null || source.IsAnimal() || consumer.IsAnimal() ) return;
if (GeneUtility.HasLifeForce(consumer) && GeneUtility.IsCumEater(consumer)
&& source.health.hediffSet.HasHediff(Cumpilation.DefOfs.Cumpilation_Cumflation))
{
Hediff cumflation = source.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("Cumflation"));
Hediff cumflation = source.health.hediffSet.GetFirstHediffOfDef(Cumpilation.DefOfs.Cumpilation_Cumflation);
Gene_LifeForce gene_LifeForce = consumer.genes.GetFirstGeneOfType<Gene_LifeForce>();
cumflation.Severity = Math.Max(0f,cumflation.Severity - CUMFLATION_SEVERITY_LOSS_PER_TICK);
gene_LifeForce.Resource.Value += LIFEFORCE_GAIN_PER_TICK;

View file

@ -139,14 +139,12 @@ namespace RJW_Genes
{
ModLog.Message("Pawn " + __instance.pawn.NameShortColored + " (" + __instance.pawn.ThingID + ") is having random twins");
}
Find.LetterStack.ReceiveLetter("Twins!", __instance.pawn.NameShortColored + " is still in labor and is having twins!\n\n" +
"Be sure to gather your doctor and additional friends and family to ensure the other baby is also born healthy!",
Find.LetterStack.ReceiveLetter("rjw_genes_twin_letter".Translate(), __instance.pawn.NameShortColored + " " + "rjw_genes_twin_letter_content".Translate(),
LetterDefOf.AnotherBaby, __instance.pawn);
return;
}
Find.LetterStack.ReceiveLetter("Another baby!", __instance.pawn.NameShortColored + " is still in labor and is having another baby!\n\n" +
"Be sure to gather your doctor and additional friends and family to ensure the next baby is also born healthy!",
Find.LetterStack.ReceiveLetter("rjw_genes_another_baby_letter".Translate(), __instance.pawn.NameShortColored + " " + "rjw_genes_another_baby_letter_content".Translate(),
LetterDefOf.AnotherBaby, __instance.pawn);
}
}

View file

@ -54,6 +54,13 @@ namespace RJW_Genes
// Do nothing if Pawn is Baby or Child (#25)
if (!pawn.ageTracker.Adult)
continue;
// Sometimes things can happen if pawns de-spawn, are in Bed, or otherwise disappear (#183)
if (!pawn.Spawned)
continue;
if (pawn.Crawling)
continue;
if (pawn.InBed())
continue;
// Do nothing for pawns that also have pheromones
if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
continue;
@ -87,8 +94,6 @@ namespace RJW_Genes
aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn);
aphrodisiac.Severity = 0.5f;
pawn.health.AddHediff(aphrodisiac);
}
}

View file

@ -61,7 +61,7 @@ namespace RJW_Genes
// Increase Fluid
if (CompHediff != null)
CompHediff.partFluidFactor *= cum_multiplier;
CompHediff.partFluidMultiplier *= cum_multiplier;
}
}

View file

@ -241,6 +241,17 @@ namespace RJW_Genes
// Some Hediffs really need to know their bodypart, e.g. an implanted arm can either be left or right.
// Ignoring this will lead to many errors, mostly around nullpointers.
// Issue #130: LoveThrall is a strange Hediff that has a lot of background logic, we skip it
if (hed.def.defName == "Hediff_LoveThrall")
continue;
// Issue #184: Copying Pregnancies is super bad, so we do not touch pregnancies
if (hed.def.defName == RimWorld.HediffDefOf.Pregnant.defName)
continue;
if (PregnancyUtility.GetPregnancyHediff(copiedFrom) != null)
if (PregnancyUtility.GetPregnancyHediff(copiedFrom) == hed)
continue;
BodyPartRecord originalBPR = hed.Part;
if (originalBPR != null) {
BodyPartRecord copyBPR = toCopyTo.RaceProps?.body.AllParts.Find(bpr => bpr.def == originalBPR.def);

View file

@ -5,6 +5,7 @@ using rjw;
using RJWLoveFeeding;
using RimWorld;
using System.Linq;
using LicentiaLabs;
namespace RJW_Genes
{
@ -46,35 +47,36 @@ namespace RJW_Genes
harmony.Patch(AccessTools.Method(typeof(Quirk), nameof(Quirk.CountSatisfiedQuirks)),
postfix: new HarmonyMethod(typeof(QuirkPatcher), nameof(QuirkPatcher.CountSatisfiedPostfix)));
// Patch Licentia, if Licentia exists
// Logic & Explanation taken from https://rimworldwiki.com/wiki/Modding_Tutorials/Compatibility_with_DLLs
// Adjusted to use ModsConfig (which makes it work, the example above does not run out of the box)
// Patch Cumpilation, if Cumpilation exists
#pragma warning disable CS0168 // Variable is declared but never used
try
{
((Action)(() =>
{
if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
if (ModsConfig.IsActive("vegapnk.cumpilation"))
{
// Gene: Cumflation Immunity [Prefix Patch]
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)),
prefix: new HarmonyMethod(typeof(Patch_CumflationImmunity), nameof(Patch_CumflationImmunity.Prefix)));
// Gene: Generous Donor [Postfix Patch]
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.TransferNutrition)),
postfix: new HarmonyMethod(typeof(Patch_TransferNutrition), nameof(Patch_TransferNutrition.Postfix)));
// Gene: CumEater [Postfix Patch] -- This is not exactly licentia, but the Generous-Donor Gene is only active with Licentia
harmony.Patch(AccessTools.Method(typeof(rjw.JobDriver_Sex), nameof(rjw.JobDriver_Sex.ChangePsyfocus)),
postfix: new HarmonyMethod(typeof(Patch_SexTicks_ChangePsyfocus), nameof(Patch_SexTicks_ChangePsyfocus.Postfix)));
// Gene: Likes Cumflation [Postfix Patch]
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)),
postfix: new HarmonyMethod(typeof(Patch_LikesCumflation), nameof(Patch_LikesCumflation.PostFix)));
// Gene: Inflatable [Postfix Patch]
harmony.Patch(AccessTools.Method(typeof(SexUtility), nameof(SexUtility.TransferFluids)),
postfix: new HarmonyMethod(typeof(Patch_Cumpilation_Inflatable), nameof(Patch_Cumpilation_Inflatable.PostFix)));
// Gene: Inflation-Resistance [Postfix Patch]
harmony.Patch(AccessTools.Method(typeof(Cumpilation.Cumflation.CumflationUtility), nameof(Cumpilation.Cumflation.CumflationUtility.CanBeCumflated)),
postfix: new HarmonyMethod(typeof(Patch_Cumpilation_BlockCumflation), nameof(Patch_Cumpilation_BlockCumflation.PostFix)));
// Gene: Inflation-Resistance [Postfix Patch]
harmony.Patch(AccessTools.Method(typeof(Cumpilation.Cumflation.StuffingUtility), nameof(Cumpilation.Cumflation.StuffingUtility.CanBeStuffed)),
postfix: new HarmonyMethod(typeof(Patch_Cumpilation_BlockStuffing), nameof(Patch_Cumpilation_BlockStuffing.PostFix)));
// Gene: Living Cumbucket [Postfix Patch]
harmony.Patch(AccessTools.Method(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal)),
postfix: new HarmonyMethod(typeof(Patch_LivingCumbucket_StackHediff), nameof(Patch_LivingCumbucket_StackHediff.PostFix)));
}
}))();
}
catch (TypeLoadException ex)
{
// To be expected for people without Licentia Labs
// To be expected for people without Cumpilation
// It's ok to do nothing then.
}
#pragma warning restore CS0168 // Variable is declared but never used
}
}
}

View file

@ -72,10 +72,14 @@
<Compile Include="Genes\Diseases\Comps\HediffComp_DiseaseStorage.cs" />
<Compile Include="Genes\Fluid\Defs\GenitaliaFluidChangeExtension.cs" />
<Compile Include="Genes\Fluid\Genes\Gene_ChangeFluidType.cs" />
<Compile Include="Genes\Fluid\HediffComp_ProcessCumbucket.cs" />
<Compile Include="Genes\Fluid\HediffsCompProperties_ProcessCumbucketMTB.cs" />
<Compile Include="Genes\Fluid\HediffComps\HediffCompProperties_MatchSeverityOfHediff.cs" />
<Compile Include="Genes\Fluid\HediffComps\HediffComp_MatchSeverityOfHediff.cs" />
<Compile Include="Genes\Fluid\HediffComps\HediffComp_ProcessCumbucket.cs" />
<Compile Include="Genes\Fluid\HediffComps\HediffsCompProperties_ProcessCumbucketMTB.cs" />
<Compile Include="Genes\Fluid\JobDriver_ProcessingCumbucket.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_LikesCumflation.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_Cumpilation_BlockCumflation.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_Cumpilation_BlockStuffing.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_Cumpilation_Inflatable.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_LivingCumbucket_StackHediff.cs" />
<Compile Include="Genes\Damage\Gene_Elasticity.cs" />
<Compile Include="Genes\Diseases\Defs\GeneticDiseaseExtension.cs" />
@ -105,9 +109,8 @@
<Compile Include="Genes\GenitaliaSize\Genes\Gene_EvergrowingGenitalia.cs" />
<Compile Include="Genes\Fluid\FluidUtility.cs" />
<Compile Include="Genes\Fluid\Genes\Gene_ChangeFluidAmount.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_TransferNutrition.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_TransferNutrition_Generous_Donor_PawnToPartner.cs" />
<Compile Include="Genes\Damage\Gene_Unbreakable.cs" />
<Compile Include="Genes\Fluid\Patches\Patch_CumflationImmunity.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraBreasts.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_Futa.cs" />
@ -229,6 +232,10 @@
<HintPath>..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Cumpilation">
<HintPath>..\..\..\Cumpilation\1.5\Assemblies\Cumpilation.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="LicentiaLabs">
<HintPath>..\..\..\licentia-labs-master\Assemblies\LicentiaLabs.dll</HintPath>
<Private>False</Private>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Some files were not shown because too many files have changed in this diff Show more