Compare commits
67 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b70b975b67 |
||
|
|
4946df511e | ||
|
|
ef953fa1b7 | ||
|
|
be27255832 | ||
|
|
83e9f9ef5b |
||
|
|
45a451a127 | ||
|
|
7692ce3425 | ||
|
|
b13f761ede | ||
|
|
ed761327d2 | ||
|
|
e0a333f539 | ||
|
|
5025700727 | ||
|
|
a407f3f400 | ||
|
|
6e26d596cf | ||
|
|
670361a748 | ||
|
|
c7ea7144dc | ||
|
|
97eabd540d | ||
|
|
61fdb2c3b7 | ||
|
|
27511a29f3 | ||
|
|
ef05a5bbc3 | ||
|
|
7f6dc2a668 | ||
|
|
ba53413687 | ||
|
|
aa3d3985bc | ||
|
|
11226249b3 | ||
|
|
dde1c98b18 | ||
|
|
7540b96ecb |
||
|
|
b0da74ebd3 |
||
|
|
e9fa05d218 |
||
|
|
8577c3ee55 | ||
|
|
19148cc768 | ||
|
|
72acfbb8bf | ||
|
|
f5975212b1 | ||
|
|
f1ea695516 | ||
|
|
2d055a134f | ||
|
|
e402a6b2a8 |
||
|
|
f5898523a9 | ||
|
|
f3bf271381 | ||
|
|
626ae5bbd4 | ||
|
|
8e272db117 | ||
|
|
93e9c5471c | ||
|
|
b336c3059e | ||
|
|
89028f361b |
||
|
|
f470213a3c | ||
|
|
67cd837166 |
||
|
|
5aadcffcb1 |
||
|
|
44c0fff37e |
||
|
|
74b16b9ff3 |
||
|
|
4712e5fdf2 |
||
|
|
ea8f2a35a5 | ||
|
|
cb0c8c408b | ||
|
|
2413ab8f79 | ||
|
|
8b70ac8965 | ||
|
|
2941dd9a47 | ||
|
|
ab726f8279 |
||
|
|
abd0e2e8d9 | ||
|
|
07b0d2bb37 | ||
|
|
152b6157ba | ||
|
|
e8e3bc43be | ||
|
|
3d8e1f79cd | ||
|
|
564cee8da8 | ||
|
|
c4919e20e8 | ||
|
|
c7d1a9c734 | ||
|
|
6135cfe449 | ||
|
|
5744d5df0f | ||
|
|
ec40a6cfb6 | ||
|
|
fe52686b9a | ||
|
|
55a005463e |
||
|
|
183a5b75fe |
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal 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
|
|
@ -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
|
|
@ -255,3 +255,5 @@ paket-files/
|
|||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
*.dds
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -257,4 +257,4 @@
|
|||
<biostatCpx>1</biostatCpx>
|
||||
<biostatMet>-1</biostatMet>
|
||||
</GeneDef>
|
||||
</Defs>
|
||||
</Defs>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
8
1.5/Languages/English/Keyed/Letters.xml
Normal 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>
|
||||
68
1.5/Mods/Cumpilation/Defs/GeneDefs/Cumpilation_Genes.xml
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -89,4 +85,4 @@
|
|||
</operations>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
||||
</Patch>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -87,4 +87,4 @@
|
|||
</operations>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
||||
</Patch>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
105
1.5/Patches/Xenotypes/PatchObsidia.xml
Normal 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>
|
||||
47
1.5/Patches/Xenotypes/PatchRimsenal.xml
Normal 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>
|
||||
17
1.5/Patches/Xenotypes/PatchRoosFaun.xml
Normal 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>
|
||||
18
1.5/Patches/Xenotypes/PatchRoosMino.xml
Normal 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>
|
||||
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,14 @@
|
|||
|
||||
|
||||
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
|
||||
{
|
||||
{
|
||||
/// <summary>
|
||||
/// This Class patches the RJW-Mechbirth to not deal damage when the pawn has the MechBreeder Gene.
|
||||
/// This harmony patch was kindly provided by 'shabalox' https://github.com/Shabalox/RJW_Genes_Addons/
|
||||
|
|
@ -22,43 +19,36 @@ namespace RJW_Genes
|
|||
[HarmonyTranspiler]
|
||||
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator il)
|
||||
{
|
||||
bool found_call = false;
|
||||
bool found_skip = false;
|
||||
Label skip_label = il.DefineLabel();
|
||||
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 (codeInstruction.operand.ToString() == "Boolean TryMakeFilth(Verse.IntVec3, Verse.Map, Verse.ThingDef, System.String, Int32, RimWorld.FilthSourceFlags)")
|
||||
{
|
||||
found_call = true;
|
||||
}
|
||||
}
|
||||
//Triggers after the pop opcode (after generating filth in c#).
|
||||
else if (found_call)
|
||||
{
|
||||
//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.Call, ismechbreeder);
|
||||
yield return new CodeInstruction(OpCodes.Brtrue_S, skip_label);
|
||||
found_call = false;
|
||||
}
|
||||
}
|
||||
yield break;
|
||||
bool found_call = 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)
|
||||
{
|
||||
yield return codeInstruction;
|
||||
|
||||
if (finished)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
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);
|
||||
yield return new CodeInstruction(OpCodes.Call, ismechbreeder);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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,15 +86,19 @@ 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)
|
||||
{
|
||||
ModLog.Warning($"{pawn} has the JobDriver_ProcessCumbucket but does not have the Hediff for filled cumbucket.");
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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})");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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); }
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
@ -27,20 +25,21 @@ 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)
|
||||
List<Hediff> AllPenisses = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_penis(x));
|
||||
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));
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ namespace RJW_Genes
|
|||
|
||||
// Increase Fluid
|
||||
if (CompHediff != null)
|
||||
CompHediff.partFluidFactor *= cum_multiplier;
|
||||
CompHediff.partFluidMultiplier *= cum_multiplier;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 46 KiB |