Compare commits

...

20 commits

Author SHA1 Message Date
vegapnk
a685209dc1
Merge pull request #126 from vegapnk/dev
2.2.0
2024-07-23 12:19:14 +02:00
vegapnk
8960994491
Merge pull request #125 from vegapnk/2.2
2.2.0
2024-07-23 12:18:38 +02:00
Vegapnk
ef7aece5d4 Binary for 2.2.0 2024-07-23 12:15:07 +02:00
Vegapnk
8150b0ddd8 Tweaked some metabolic values 2024-07-23 12:09:43 +02:00
Vegapnk
ecb1f1afb8 Added extra Textures, thanks @Alpenglow 2024-07-23 11:54:45 +02:00
Vegapnk
c2f355f954 Changed Living Cumbucket behaviour 2024-07-23 09:06:36 +02:00
Vegapnk
4ef1c95f1f Add Binary for 2.2 beta 2024-07-17 22:17:25 +02:00
Vegapnk
3a050b5d92 Added great new images by WasMachenDennSachen 2024-07-17 22:16:19 +02:00
Vegapnk
35d9662663 Simple implementation of a Rut gene 2024-07-17 22:01:31 +02:00
Vegapnk
8d1d43b691 Some notes on Living Cumbucket, including Patchnotes 2024-07-17 21:02:18 +02:00
Vegapnk
7f1fa01abd Improvements to Spawning 2024-07-16 19:02:30 +02:00
Vegapnk
13630e6e7c First working Cum Spawning 2024-07-16 18:51:36 +02:00
Vegapnk
d1129fece2 Jobdriver works until spawning 2024-07-16 18:34:04 +02:00
Vegapnk
1b547094fe Found the wrong cast 2024-07-16 18:28:29 +02:00
Vegapnk
1e667e2730 Start on Jobdriver, WIP 2024-07-16 18:22:17 +02:00
Vegapnk
05770a834e Start on Living CumBucket 2024-07-16 17:36:33 +02:00
Vegapnk
bd1ef6d5a2 Moved Licentia Counter Hediff to right ModFolder 2024-07-16 17:36:18 +02:00
Vegapnk
913f1aad3e Fixed Hediffs statoffsets to be more as intended 2024-07-16 16:29:01 +02:00
Vegapnk
ba75f6b636 Made Twinkifier and Feminizer Genes xml configurable 2024-07-16 16:26:27 +02:00
Vegapnk
eb5e3bce81 Removed some VomitCum JobGivers, fixes #119 2024-07-16 16:00:37 +02:00
71 changed files with 668 additions and 86 deletions

View file

@ -1,4 +1,4 @@
# 2.2.0 (dd-mm-2024) # 2.2.0 (23-07-2024)
## Explanations ## Explanations
@ -101,8 +101,7 @@ and might try to add a gene that already exists - then nothing happens.
- (Major) No Penis - (Major) No Penis
- (Major) Minor Vulnerability - (Major) Minor Vulnerability
These are currently hardcoded but I can change them on popular demand. You can configure all genes, as well as their application chance, in the Genes` XML.
In general minor changes are only cosmetic and wont change metabolism.
*Why are these changes Genetic?* *Why are these changes Genetic?*
Because this is the genes mod, and I find things here quite robust. Because this is the genes mod, and I find things here quite robust.
@ -124,10 +123,13 @@ Because this is the genes mod, and I find things here quite robust.
- Gene: Sexual Genetic Swap. Pawns have a chance to switch a random gene with their sexpartner. - Gene: Sexual Genetic Swap. Pawns have a chance to switch a random gene with their sexpartner.
- (Archite) Gene: Sexual Genetic Thief. Pawns have a chance to steal a gene from their sexpartner. Genetic Disease Immunity shields against this. - (Archite) Gene: Sexual Genetic Thief. Pawns have a chance to steal a gene from their sexpartner. Genetic Disease Immunity shields against this.
- Gene: Sperm Displacement. Pawns might overwrite an existing pregnancy, becoming the new father. The pregnancy will stay in its gestation progress. - Gene: Sperm Displacement. Pawns might overwrite an existing pregnancy, becoming the new father. The pregnancy will stay in its gestation progress.
- Gene: Twinkification: Pawns turn their (male) sexual partners into breedable twinks. - Gene: Twinkification. Pawns turn their (male) sexual partners into breedable twinks.
- Gene: Feminization: Pawns turn their (male) sexual partners into women. - Gene: Feminization. Pawns turn their (male) sexual partners into women.
- Gene: Blocked Masturbation: Pawns cannot masturbate. - Gene: Blocked Masturbation. Pawns cannot masturbate.
- {Sexperience} Gene: Living Cumbucket. Pawns with this Gene get "filled" upon sex, and slowly disperse usable gathered cum.
- Disease Gene: Infectious Blocked Masturbation - Disease Gene: Infectious Blocked Masturbation
- Gene: Rut. Pawns have a chance to go into heat and need more sex for a day. (Default: 5% chance per day, to go 1 day in heat).
- Disease Gene: Infectious Rut.
- Pawns will have negative thoughts about pawns with more genetic diseases than themselves. - Pawns will have negative thoughts about pawns with more genetic diseases than themselves.
- Faction Penalties for spreading diseases, stealing genes and aging pawns with age transfer - Faction Penalties for spreading diseases, stealing genes and aging pawns with age transfer
- Patch for [Imphilee Xeno](https://steamcommunity.com/sharedfiles/filedetails/?id=2990674516) by @Bunuffin - Patch for [Imphilee Xeno](https://steamcommunity.com/sharedfiles/filedetails/?id=2990674516) by @Bunuffin
@ -142,6 +144,7 @@ Because this is the genes mod, and I find things here quite robust.
- Fixed an Issue where pawns would always get the Pheromone social boost, unless they had the pheromone (#113) - Fixed an Issue where pawns would always get the Pheromone social boost, unless they had the pheromone (#113)
- Fixed two hidden dependencies on Ideology and Royalty (#115) - Fixed two hidden dependencies on Ideology and Royalty (#115)
- Fixed some more hidden dependencies on Ideology Icons (#118) - Fixed some more hidden dependencies on Ideology Icons (#118)
- Fixed a hidden dependency on Licentialabs (#119)
**Internal:** **Internal:**
@ -174,6 +177,19 @@ You can now support me with [buying me a coffee](https://buymeacoffee.com/vegapn
The mod will remain free, open source and I will not hide or lock any features. The mod will remain free, open source and I will not hide or lock any features.
Its just meant if you want to drop me a tip. Its just meant if you want to drop me a tip.
**Since Beta-1** (11-07-2024)
- Made the Feminizer and Twinkifier configurable with XML.
- Typos in the Hediff Defs, tweaking of some values.
- Living Cum-Bucket & Rut Genes
- Great icons by @Alpenglow
**Since Beta-2** (17-07-2024)
- Changed behaviour of living cumbucket. Now, once "really full" the output happens more rarely but is much more at once.
- More Icons by @Alpenglow <3 this time attributed correct.
- Adjusted some of the metabolic values - likes cumflation, generous donor and living cumbucket have small costs.
# 2.1.0 (27-06-2024) # 2.1.0 (27-06-2024)
**Additions**: **Additions**:

Binary file not shown.

View file

@ -41,7 +41,8 @@
<GeneDef ParentName="BreedingBase"> <GeneDef ParentName="BreedingBase">
<defName>rjw_genes_fertile_anus</defName> <defName>rjw_genes_fertile_anus</defName>
<label>fertile anus</label> <label>fertile anus</label>
<description>Xenotypes with this gene have a functional uterus if they do not possess one by means of their vagina. <description>Xenotypes with this gene have a functional uterus if they do not possess one by
means of their vagina.
For males, it is connected to the anal cavity and leads to a normal pregnancy.</description> For males, it is connected to the anal cavity and leads to a normal pregnancy.</description>
<iconPath>Genes/Icons/Fertile_anus</iconPath> <iconPath>Genes/Icons/Fertile_anus</iconPath>
<displayOrderInCategory>54</displayOrderInCategory> <displayOrderInCategory>54</displayOrderInCategory>
@ -115,8 +116,9 @@
<GeneDef ParentName="BreedingBase"> <GeneDef ParentName="BreedingBase">
<defName>rjw_genes_hardwired_progenity</defName> <defName>rjw_genes_hardwired_progenity</defName>
<label>Hardwired Progenity</label> <label>Hardwired Progenity</label>
<description>Carriers of this gene need to procreate. They suffer negative effects if they are childless, and have increased capabilities if they reach a high amount of offsprings.</description> <description>Carriers of this gene need to procreate. They suffer negative effects if they are
<iconPath>Genes/Icons/RJW_Genes_PheromoneSpit</iconPath> childless, and have increased capabilities if they reach a high amount of offsprings.</description>
<iconPath>Genes/Icons/hardwired_progenity</iconPath>
<displayOrderInCategory>70</displayOrderInCategory> <displayOrderInCategory>70</displayOrderInCategory>
<conditionalStatAffecters> <conditionalStatAffecters>
@ -125,7 +127,7 @@
<WorkSpeedGlobal>-0.1</WorkSpeedGlobal> <WorkSpeedGlobal>-0.1</WorkSpeedGlobal>
<Fertility>1.2</Fertility> <Fertility>1.2</Fertility>
<SexFrequency>1.2</SexFrequency> <SexFrequency>1.2</SexFrequency>
<MentalBreakThreshold>-0.15</MentalBreakThreshold> <MentalBreakThreshold>+0.15</MentalBreakThreshold>
<GlobalLearningFactor>-0.1</GlobalLearningFactor> <GlobalLearningFactor>-0.1</GlobalLearningFactor>
</statOffsets> </statOffsets>
</li> </li>
@ -141,7 +143,7 @@
<statOffsets> <statOffsets>
<MoveSpeed>0.15</MoveSpeed> <MoveSpeed>0.15</MoveSpeed>
<WorkSpeedGlobal>0.25</WorkSpeedGlobal> <WorkSpeedGlobal>0.25</WorkSpeedGlobal>
<MentalBreakThreshold>0.25</MentalBreakThreshold> <MentalBreakThreshold>-0.25</MentalBreakThreshold>
</statOffsets> </statOffsets>
</li> </li>
</conditionalStatAffecters> </conditionalStatAffecters>
@ -150,4 +152,23 @@
<biostatMet>0</biostatMet> <biostatMet>0</biostatMet>
</GeneDef> </GeneDef>
<GeneDef ParentName="BreedingBase">
<defName>rjw_genes_basic_rut</defName>
<label>Rut</label>
<description>Carriers of this gene can enter a state of heat, resulting in drastically higher
sexual activity.</description>
<iconPath>Genes/Icons/rut</iconPath>
<biostatCpx>1</biostatCpx>
<biostatMet>1</biostatMet>
<displayOrderInCategory>11</displayOrderInCategory>
<geneClass>RJW_Genes.Gene_Rut</geneClass>
<modExtensions>
<li Class="RJW_Genes.TickBasedChanceExtension">
<!-- 60k = 1 days -->
<tickInterval>60000</tickInterval>
<eventChance>0.05</eventChance>
</li>
</modExtensions>
</GeneDef>
</Defs> </Defs>

View file

@ -23,7 +23,7 @@
imply negative side-effects.</description> imply negative side-effects.</description>
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>-1</biostatMet> <biostatMet>-1</biostatMet>
<iconPath>Genes/Icons/TrialDefend</iconPath> <iconPath>Genes/Icons/disease_immunity</iconPath>
<modExtensions> <modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" <li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core"
Class="VanillaGenesExpanded.GeneExtension"> Class="VanillaGenesExpanded.GeneExtension">
@ -42,7 +42,7 @@
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>1</biostatMet> <biostatMet>1</biostatMet>
<marketValueFactor>0.85</marketValueFactor> <marketValueFactor>0.85</marketValueFactor>
<iconPath>UI/Icons/ColonistBar/Idle</iconPath> <iconPath>Genes/Icons/minor_vulnerability</iconPath>
<displayOrderInCategory>5</displayOrderInCategory> <displayOrderInCategory>5</displayOrderInCategory>
<statOffsets> <statOffsets>
@ -67,7 +67,7 @@
rape.</description> rape.</description>
<biostatCpx>2</biostatCpx> <biostatCpx>2</biostatCpx>
<biostatMet>1</biostatMet> <biostatMet>1</biostatMet>
<iconPath>UI/Icons/ColonistBar/Idle</iconPath> <iconPath>Genes/Icons/major_vulnerability</iconPath>
<displayOrderInCategory>6</displayOrderInCategory> <displayOrderInCategory>6</displayOrderInCategory>
<exclusionTags> <exclusionTags>
@ -85,12 +85,13 @@
</modExtensions> </modExtensions>
</GeneDef> </GeneDef>
<GeneDef ParentName="RJWGeneDisease"> <GeneDef ParentName="RJWGeneDisease">
<defName>rjw_genes_infectious_blocked_masturbation</defName> <defName>rjw_genes_infectious_blocked_masturbation</defName>
<label>infectious masturbation block</label> <label>infectious masturbation block</label>
<description>Carriers of this gene are unable to masturbate - they need a partner or equipment.</description> <description>Carriers of this gene are unable to masturbate - they need a partner or
<iconPath>Genes/Icons/Hypersexual</iconPath> equipment.</description>
<iconPath>Genes/Icons/blocked_masturbation</iconPath>
<displayOrderInCategory>55</displayOrderInCategory> <displayOrderInCategory>55</displayOrderInCategory>
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>2</biostatMet> <biostatMet>2</biostatMet>
@ -100,7 +101,7 @@
</li> </li>
</modExtensions> </modExtensions>
</GeneDef> </GeneDef>
<GeneDef ParentName="RJWGeneDisease"> <GeneDef ParentName="RJWGeneDisease">
<defName>rjw_genes_infectious_low_fertility</defName> <defName>rjw_genes_infectious_low_fertility</defName>
<label>infectious low fertility vulnerability</label> <label>infectious low fertility vulnerability</label>
@ -194,7 +195,7 @@
<defName>rjw_genes_infectious_bisexuality</defName> <defName>rjw_genes_infectious_bisexuality</defName>
<label>infectious bisexuality</label> <label>infectious bisexuality</label>
<description>This gene makes the pawn bisexual, and has a chance to spread on intercourse.</description> <description>This gene makes the pawn bisexual, and has a chance to spread on intercourse.</description>
<iconPath>Genes/Icons/RoundC</iconPath> <iconPath>Genes/Icons/bisexuality</iconPath>
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>0</biostatMet> <biostatMet>0</biostatMet>
<displayOrderInCategory>8</displayOrderInCategory> <displayOrderInCategory>8</displayOrderInCategory>
@ -221,7 +222,7 @@
<defName>rjw_genes_infectious_homosexuality</defName> <defName>rjw_genes_infectious_homosexuality</defName>
<label>infectious homosexuality</label> <label>infectious homosexuality</label>
<description>This gene makes the pawn homosexual, and has a chance to spread on intercourse.</description> <description>This gene makes the pawn homosexual, and has a chance to spread on intercourse.</description>
<iconPath>Genes/Icons/RoundC</iconPath> <iconPath>Genes/Icons/homosexuality</iconPath>
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>0</biostatMet> <biostatMet>0</biostatMet>
<displayOrderInCategory>9</displayOrderInCategory> <displayOrderInCategory>9</displayOrderInCategory>
@ -247,7 +248,8 @@
<GeneDef ParentName="RJWGeneDisease"> <GeneDef ParentName="RJWGeneDisease">
<defName>rjw_genes_fluctual_sexual_needs</defName> <defName>rjw_genes_fluctual_sexual_needs</defName>
<label>fluctual sexual needs</label> <label>fluctual sexual needs</label>
<description>Carriers of this genetic disease have a chance to suddenly require sex, gaining a bit of energy to find quick relief.</description> <description>Carriers of this genetic disease have a chance to suddenly require sex, gaining
a bit of energy to find quick relief.</description>
<iconPath>UI/Icons/ColonistBar/Idle</iconPath> <iconPath>UI/Icons/ColonistBar/Idle</iconPath>
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>2</biostatMet> <biostatMet>2</biostatMet>
@ -269,8 +271,9 @@
<GeneDef ParentName="RJWGeneDisease"> <GeneDef ParentName="RJWGeneDisease">
<defName>rjw_genes_size_blinded</defName> <defName>rjw_genes_size_blinded</defName>
<label>size blinded</label> <label>size blinded</label>
<description>This genetic disease makes the carrier dramatically more drawn to pawns with huge cocks.</description> <description>This genetic disease makes the carrier dramatically more drawn to pawns with
<iconPath>UI/Icons/ColonistBar/Idle</iconPath> huge cocks.</description>
<iconPath>Genes/Icons/size_blinded</iconPath>
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>1</biostatMet> <biostatMet>1</biostatMet>
<displayOrderInCategory>11</displayOrderInCategory> <displayOrderInCategory>11</displayOrderInCategory>
@ -284,8 +287,9 @@
<GeneDef ParentName="RJWGeneDisease"> <GeneDef ParentName="RJWGeneDisease">
<defName>rjw_genes_stretcher</defName> <defName>rjw_genes_stretcher</defName>
<label>genetic stretcher</label> <label>genetic stretcher</label>
<description>Pawns with this gene have a chance to alter the genes of their sexual partners to prefer large cocks.</description> <description>Pawns with this gene have a chance to alter the genes of their sexual partners
<iconPath>UI/Icons/ColonistBar/Idle</iconPath> to prefer large cocks.</description>
<iconPath>Genes/Icons/stretcher</iconPath>
<biostatCpx>1</biostatCpx> <biostatCpx>1</biostatCpx>
<biostatMet>0</biostatMet> <biostatMet>0</biostatMet>
<displayOrderInCategory>12</displayOrderInCategory> <displayOrderInCategory>12</displayOrderInCategory>
@ -304,4 +308,29 @@
</modExtensions> </modExtensions>
</GeneDef> </GeneDef>
<GeneDef ParentName="RJWGeneDisease">
<defName>rjw_genes_infectious_rut</defName>
<label>Rut</label>
<description>Carriers of this gene can enter a state of heat, resulting in drastically
higher
sexual activity.</description>
<iconPath>Genes/Icons/rut</iconPath>
<biostatCpx>1</biostatCpx>
<biostatMet>2</biostatMet>
<displayOrderInCategory>11</displayOrderInCategory>
<geneClass>RJW_Genes.Gene_Rut</geneClass>
<modExtensions>
<li Class="RJW_Genes.TickBasedChanceExtension">
<!-- 60k = 1 days -->
<tickInterval>60000</tickInterval>
<eventChance>0.05</eventChance>
</li>
<li Class="RJW_Genes.GeneticDiseaseExtension">
<infectionChance>0.1</infectionChance>
</li>
</modExtensions>
</GeneDef>
</Defs> </Defs>

View file

@ -187,7 +187,7 @@
<displayCategory>Reproduction</displayCategory> <displayCategory>Reproduction</displayCategory>
<description>Carriers of this gene can 'overwrite' an existing pregnancy, keeping the <description>Carriers of this gene can 'overwrite' an existing pregnancy, keeping the
progress but effectively replacing the father.</description> progress but effectively replacing the father.</description>
<iconPath>Genes/Icons/RJW_Genes_PheromoneSpit</iconPath> <iconPath>Genes/Icons/pregnancy_overwrite</iconPath>
<displayOrderInCategory>120</displayOrderInCategory> <displayOrderInCategory>120</displayOrderInCategory>
<biostatCpx>4</biostatCpx> <biostatCpx>4</biostatCpx>
@ -210,7 +210,7 @@
<label>no masturbation</label> <label>no masturbation</label>
<displayCategory>Reproduction</displayCategory> <displayCategory>Reproduction</displayCategory>
<description>Carriers of this gene are unable to masturbate - they need a partner or equipment.</description> <description>Carriers of this gene are unable to masturbate - they need a partner or equipment.</description>
<iconPath>Genes/Icons/Hypersexual</iconPath> <iconPath>Genes/Icons/blocked_masturbation</iconPath>
<displayOrderInCategory>60</displayOrderInCategory> <displayOrderInCategory>60</displayOrderInCategory>
<biostatCpx>0</biostatCpx> <biostatCpx>0</biostatCpx>
<biostatMet>1</biostatMet> <biostatMet>1</biostatMet>

View file

@ -153,7 +153,7 @@
<defName>rjw_genes_sexual_genetic_swap</defName> <defName>rjw_genes_sexual_genetic_swap</defName>
<label>sexual genetic swap</label> <label>sexual genetic swap</label>
<description>Carriers with this gene may switch a gene with their sex-partner. Switched Genes are always endogenes.</description> <description>Carriers with this gene may switch a gene with their sex-partner. Switched Genes are always endogenes.</description>
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath> <iconPath>Genes/Icons/sexual_genetic_swap</iconPath>
<displayOrderInCategory>20</displayOrderInCategory> <displayOrderInCategory>20</displayOrderInCategory>
<biostatCpx>3</biostatCpx> <biostatCpx>3</biostatCpx>
<biostatMet>0</biostatMet> <biostatMet>0</biostatMet>
@ -168,7 +168,7 @@
<defName>rjw_genes_sexual_genetic_thief</defName> <defName>rjw_genes_sexual_genetic_thief</defName>
<label>sexual gene thief</label> <label>sexual gene thief</label>
<description>Carriers with this gene may steal a gene from their sex-partner. Stolen genes are always xenogenes.</description> <description>Carriers with this gene may steal a gene from their sex-partner. Stolen genes are always xenogenes.</description>
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath> <iconPath>Genes/Icons/sexual_genetic_thief</iconPath>
<displayOrderInCategory>21</displayOrderInCategory> <displayOrderInCategory>21</displayOrderInCategory>
<biostatCpx>5</biostatCpx> <biostatCpx>5</biostatCpx>
<biostatMet>-2</biostatMet> <biostatMet>-2</biostatMet>
@ -184,7 +184,7 @@
<defName>rjw_genes_feminizer</defName> <defName>rjw_genes_feminizer</defName>
<label>feminizer</label> <label>feminizer</label>
<description>Carriers with this gene slowly turn male sexual partners into females.</description> <description>Carriers with this gene slowly turn male sexual partners into females.</description>
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath> <iconPath>Genes/Icons/feminizer</iconPath>
<displayOrderInCategory>31</displayOrderInCategory> <displayOrderInCategory>31</displayOrderInCategory>
<biostatCpx>4</biostatCpx> <biostatCpx>4</biostatCpx>
<biostatMet>-1</biostatMet> <biostatMet>-1</biostatMet>
@ -203,15 +203,29 @@
<applicableForMen>true</applicableForMen> <applicableForMen>true</applicableForMen>
<requiresPenetrativeSex>false</requiresPenetrativeSex> <requiresPenetrativeSex>false</requiresPenetrativeSex>
</li> </li>
<li Class="RJW_Genes.GeneAlteringExtension">
<majorGenes>
<li>rjw_genes_female_only</li>
<li>rjw_genes_no_penis</li>
<li>rjw_genes_minor_vulnerability</li>
</majorGenes>
<minorGenes>
<li>rjw_genes_small_male_genitalia</li>
<li>rjw_genes_big_breasts</li>
<li>Beard_NoBeardOnly</li>
<li>Hair_LongOnly</li>
</minorGenes>
<minorApplicationChance>0.25</minorApplicationChance>
<majorApplicationChance>0.1</majorApplicationChance>
</li>
</modExtensions> </modExtensions>
</GeneDef> </GeneDef>
<GeneDef ParentName="SpecialBase"> <GeneDef ParentName="SpecialBase">
<defName>rjw_genes_twinkifier</defName> <defName>rjw_genes_twinkifier</defName>
<label>twinkifier</label> <label>twinkifier</label>
<description>Carriers with this gene slowly turn male sexual partners into breedabel cute twinks.</description> <description>Carriers with this gene slowly turn male sexual partners into breedabel cute twinks.</description>
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath> <iconPath>Genes/Icons/twinkifier</iconPath>
<displayOrderInCategory>50</displayOrderInCategory> <displayOrderInCategory>50</displayOrderInCategory>
<biostatCpx>4</biostatCpx> <biostatCpx>4</biostatCpx>
<biostatMet>-1</biostatMet> <biostatMet>-1</biostatMet>
@ -230,9 +244,24 @@
<applicableForMen>true</applicableForMen> <applicableForMen>true</applicableForMen>
<requiresPenetrativeSex>false</requiresPenetrativeSex> <requiresPenetrativeSex>false</requiresPenetrativeSex>
</li> </li>
<li Class="RJW_Genes.GeneAlteringExtension">
<majorGenes>
<li>rjw_genes_fertile_anus</li>
<li>Beauty_Pretty</li>
<li>Delicate</li>
<li>rjw_genes_minor_vulnerability</li>
<li>rjw_genes_infectious_homosexuality</li>
</majorGenes>
<minorGenes>
<li>rjw_genes_small_male_genitalia</li>
<li>Beard_NoBeardOnly</li>
<li>Body_Thin</li>
<li>rjw_genes_homosexual</li>
</minorGenes>
<minorApplicationChance>0.25</minorApplicationChance>
<majorApplicationChance>0.1</majorApplicationChance>
</li>
</modExtensions> </modExtensions>
</GeneDef> </GeneDef>
</Defs> </Defs>

View file

@ -102,7 +102,7 @@
<capMods> <capMods>
<li> <li>
<capacity>Consciousness</capacity> <capacity>Consciousness</capacity>
<offset>-0.5</offset> <offset>-0.05</offset>
</li> </li>
</capMods> </capMods>
<statOffsets> <statOffsets>

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<HediffDef>
<defName>rjw_genes_genetic_rut</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>Rut</label>
<description>Based on genetics, this pawn is in heat.</description>
<defaultLabelColor>(240,200,110)</defaultLabelColor>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<isBad>false</isBad>
<tendable>false</tendable>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-1.00</severityPerDay>
</li>
</comps>
<stages>
<li>
<label>calming down</label>
<statOffsets>
<SexFrequency>0.50</SexFrequency>
</statOffsets>
<capMods>
<li>
<capacity>BloodPumping</capacity>
<offset>0.1</offset>
</li>
</capMods>
</li>
<li>
<label>in heat</label>
<minSeverity>0.4</minSeverity>
<statOffsets>
<SexFrequency>2.00</SexFrequency>
</statOffsets>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>0.1</offset>
</li>
<li>
<capacity>BloodPumping</capacity>
<offset>0.15</offset>
</li>
</capMods>
</li>
</stages>
</HediffDef>
</Defs>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 195 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -16,5 +16,6 @@
<li IfModActive="vanillaracesexpanded.android">Mods/Android</li> <li IfModActive="vanillaracesexpanded.android">Mods/Android</li>
<li IfModActive="VanillaExpanded.VGeneticsE">Mods/VE_Genetics</li> <li IfModActive="VanillaExpanded.VGeneticsE">Mods/VE_Genetics</li>
<li IfModActive="LustLicentia.RJWLabs">Mods/LicentiaLabs</li> <li IfModActive="LustLicentia.RJWLabs">Mods/LicentiaLabs</li>
<li IfModActive="rjw.sexperience">Mods/Sexperience</li>
</v1.5> </v1.5>
</loadFolders> </loadFolders>

View file

@ -27,6 +27,8 @@
<description>This Xenotype loves being cumflated.</description> <description>This Xenotype loves being cumflated.</description>
<iconPath>Genes/Icons/Cumflation</iconPath> <iconPath>Genes/Icons/Cumflation</iconPath>
<displayOrderInCategory>536</displayOrderInCategory> <displayOrderInCategory>536</displayOrderInCategory>
<biostatMet>-1</biostatMet>
<biostatCpx>2</biostatCpx>
<forcedTraits> <forcedTraits>
<li> <li>
<def>LikesCumflation</def> <def>LikesCumflation</def>
@ -71,6 +73,8 @@
<iconPath>Genes/Icons/Generous_Donor</iconPath> <iconPath>Genes/Icons/Generous_Donor</iconPath>
<displayOrderInCategory>538</displayOrderInCategory> <displayOrderInCategory>538</displayOrderInCategory>
<biostatCpx>2</biostatCpx>
<biostatMet>-1</biostatMet>
<modExtensions> <modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension"> <li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes> <backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>

View file

@ -98,15 +98,6 @@
<li Class="HediffCompProperties_SeverityPerDay"> <li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-0.75</severityPerDay> <severityPerDay>-0.75</severityPerDay>
</li> </li>
<li Class="LicentiaLabs.Hediffs.HediffCompProperties_VomitCumMtb">
<mtbDaysPerStage>
<li>0</li>
<li>0</li>
<li>0.75</li>
<li>0.5</li>
<li>0.2</li>
</mtbDaysPerStage>
</li>
</comps> </comps>
<stages> <stages>
<li> <li>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef>
<defName>rjw_genes_living_cumbucket</defName>
<label>living cumbucket</label>
<displayCategory>rjw_genes_cum</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,94 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<HediffDef>
<defName>rjw_genes_filled_living_cumbucket</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>filled living cumbucket</label>
<description>This pawn is a (filled) living cum bucket. Thanks to a generous donation, this pawn will slowly generate cum for pickup.</description>
<defaultLabelColor>(240,200,110)</defaultLabelColor>
<scenarioCanAdd>false</scenarioCanAdd>
<!-- <maxSeverity>1.0</maxSeverity> -->
<isBad>false</isBad>
<tendable>false</tendable>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-0.5</severityPerDay>
</li>
<li Class="RJW_Genes.HediffsCompProperties_ProcessCumbucketMTB">
<mtbDaysPerStage>
<li>0</li>
<li>0.5</li>
<li>0.25</li>
<li>0.1</li>
<li>0.5</li>
</mtbDaysPerStage>
</li>
</comps>
<stages>
<li>
<label>slight</label>
<statOffsets>
<Vulnerability>-0.1</Vulnerability>
</statOffsets>
</li>
<li>
<label>moderate</label>
<minSeverity>0.4</minSeverity>
<hungerRateFactor>0.8</hungerRateFactor>
<statOffsets>
<Vulnerability>-0.25</Vulnerability>
</statOffsets>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>-0.05</offset>
</li>
</capMods>
</li>
<li>
<label>full</label>
<minSeverity>0.65</minSeverity>
<hungerRateFactor>0.75</hungerRateFactor>
<statOffsets>
<Vulnerability>-0.25</Vulnerability>
</statOffsets>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>-0.1</offset>
</li>
</capMods>
</li>
<li>
<label>over-full</label>
<minSeverity>1.1</minSeverity>
<hungerRateFactor>0.6</hungerRateFactor>
<statOffsets>
<Vulnerability>-0.5</Vulnerability>
</statOffsets>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>-0.15</offset>
</li>
</capMods>
</li>
<li>
<label>living reservior</label>
<minSeverity>10.1</minSeverity>
<hungerRateFactor>0.1</hungerRateFactor>
<statOffsets>
<Vulnerability>-1.5</Vulnerability>
</statOffsets>
<capMods>
<li>
<capacity>Moving</capacity>
<offset>-0.55</offset>
</li>
</capMods>
</li>
</stages>
</HediffDef>
</Defs>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!--========= General ============-->
<JobDef>
<defName>ProcessCumbucket</defName>
<driverClass>RJW_Genes.JobDriver_ProcessingCumbucket</driverClass>
<playerInterruptible>false</playerInterruptible>
<casualInterruptible>false</casualInterruptible>
<reportString>processing internal cumbucket.</reportString>
<suspendable>false</suspendable>
</JobDef>
</Defs>

View file

@ -75,6 +75,7 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_insectincubator; public static readonly GeneDef rjw_genes_insectincubator;
public static readonly GeneDef rjw_genes_hardwired_progenity; public static readonly GeneDef rjw_genes_hardwired_progenity;
public static readonly GeneDef rjw_genes_blocked_masturbation; public static readonly GeneDef rjw_genes_blocked_masturbation;
public static readonly GeneDef rjw_genes_basic_rut;
// Cum // Cum
public static readonly GeneDef rjw_genes_no_cum; public static readonly GeneDef rjw_genes_no_cum;
@ -83,6 +84,7 @@ namespace RJW_Genes
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_likes_cumflation; [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_cumflation_immunity;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_generous_donor; [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_generous_donor;
[MayRequire("rjw.sexperience")] public static readonly GeneDef rjw_genes_living_cumbucket;
// Reproduction // Reproduction
@ -141,6 +143,7 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_infectious_hypersexuality; public static readonly GeneDef rjw_genes_infectious_hypersexuality;
public static readonly GeneDef rjw_genes_stretcher; public static readonly GeneDef rjw_genes_stretcher;
public static readonly GeneDef rjw_genes_infectious_blocked_masturbation; public static readonly GeneDef rjw_genes_infectious_blocked_masturbation;
public static readonly GeneDef rjw_genes_infectious_rut;
//Other Defs //Other Defs
public static readonly XenotypeDef rjw_genes_succubus; public static readonly XenotypeDef rjw_genes_succubus;

View file

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
public class Gene_Rut : Gene
{
public override void Tick()
{
base.Tick();
if (pawn == null || pawn.genes == null)
return;
var chanceExtension = this.def.GetModExtension<TickBasedChanceExtension>();
if (chanceExtension == null) return;
if (pawn.IsHashIntervalTick(chanceExtension.tickInterval)){
Random r = new Random();
if (r.NextDouble() < chanceExtension.eventChance)
{
Hediff rut = pawn.health.GetOrAddHediff(HediffDefOf.rjw_genes_genetic_rut);
rut.Severity = 1;
ModLog.Debug($"Pawn {pawn} gained rjw_genes_genetic_rut based on chance.");
}
}
}
}
}

View file

@ -0,0 +1,28 @@

using RimWorld;
using System;
using Verse;
namespace RJW_Genes
{
public class HediffComp_ProcessCumbucket : HediffComp
{
public HediffsCompProperties_ProcessCumbucketMTB Props
{
get
{
return (HediffsCompProperties_ProcessCumbucketMTB)this.props;
}
}
public override void CompPostTick(ref float severityAdjustment)
{
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);
}
}
}
}

View file

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
public class HediffsCompProperties_ProcessCumbucketMTB : HediffCompProperties
{
public HediffsCompProperties_ProcessCumbucketMTB()
{
this.compClass = typeof(HediffComp_ProcessCumbucket);
}
public override IEnumerable<string> ConfigErrors(HediffDef parentDef)
{
foreach (string text in base.ConfigErrors(parentDef))
{
yield return text;
}
if (this.mtbDaysPerStage == null)
{
yield return "mtbDaysPerStage is not defined";
}
else if (this.mtbDaysPerStage.Count != parentDef.stages.Count)
{
yield return "mtbDaysPerStage count doesn't match Hediffs number of stages";
}
yield break;
}
public List<float> mtbDaysPerStage;
}
}

View file

@ -0,0 +1,132 @@
using LicentiaLabs;
using System.Collections.Generic;
using Verse;
using Verse.AI;
using UnityEngine;
using System;
using rjw;
using RimWorld;
namespace RJW_Genes
{
/// <summary>
/// Shamelessly stolen from LicentaLabs
/// [Jaals Fork] https://gitgud.io/Jaaldabaoth/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/JobDriver_VomitCum.cs
/// </summary>
class JobDriver_ProcessingCumbucket : JobDriver_Vomit
{
public override bool CanBeginNowWhileLyingDown()
{
return true;
}
protected override IEnumerable<Toil> MakeNewToils()
{
if (!ModsConfig.IsActive("rjw.sexperience"))
yield break;
Toil toil = new Toil();
toil.initAction = delegate ()
{
this.ticksLeft = Rand.Range(150, 600);
int num = 0;
IntVec3 c;
for (; ; )
{
c = this.pawn.Position + GenAdj.AdjacentCellsAndInside[Rand.Range(0, 9)];
num++;
if (num > 12)
{
break;
}
if (c.InBounds(this.pawn.Map) && c.Standable(this.pawn.Map))
{
// DevNote: I am not 100% what this all means, but IL_77 is a jump to the case below (it says IL_77).
// basically, this calls the next part of the function, but I am not super sure why this has to be like this.
// JobDrivers are scary.
goto IL_77;
}
}
c = this.pawn.Position;
IL_77:
this.job.targetA = c;
this.pawn.pather.StopDead();
};
toil.tickAction = delegate ()
{
if (this.ticksLeft % 150 == 149)
{
if (!sourceName.NullOrEmpty())
{
if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum, sourceName);
SpawnCum(this.pawn, this.job.targetA.Cell, base.Map);
}
else
{
if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum);
SpawnCum(this.pawn, this.job.targetA.Cell, base.Map);
}
}
this.ticksLeft--;
if (this.ticksLeft <= 0)
{
base.ReadyForNextToil();
TaleRecorder.RecordTale(Licentia.TaleDefs.VomitedCum, new object[]
{
this.pawn
});
}
};
toil.defaultCompleteMode = ToilCompleteMode.Never;
toil.WithEffect(EffecterDefOf.Vomit, TargetIndex.A, new Color(100f, 100f, 100f, 0.5f));
toil.PlaySustainerOrSound(() => SoundDefOf.Vomit, 1f);
yield return toil;
yield break;
}
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;
}
// Case 1: "Normal Severity", just puke out a bit of cum here and there.
if (hediff.Severity <= 10)
{
Thing cum = ThingMaker.MakeThing(cumDef);
cum.Position = cell;
int stacks = Math.Max(1, (int)(hediff.Severity * 1.5));
stacks = Math.Min(stacks, 75); // 75 is the default max stacksize ...
cum.stackCount = stacks;
cum.SpawnSetup(map, false);
hediff.Severity -= (stacks / 50);
} else
// Case 2: Reserviour mode, put out a lot of cum at once but less often.
{
int stacks = Math.Max(1, (int)(hediff.Severity * 1.5));
while (stacks > 0)
{
Thing cum = ThingMaker.MakeThing(cumDef);
cum.Position = cell;
var curStacks = Math.Min(stacks, 75); // 75 is the default max stacksize ...
cum.stackCount = stacks;
cum.SpawnSetup(map, false);
hediff.Severity -= (curStacks / 50);
stacks -= curStacks;
}
}
}
private int ticksLeft;
public string sourceName;
}
}

View file

@ -0,0 +1,64 @@
using HarmonyLib;
using rjw;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using static System.Net.Mime.MediaTypeNames;
namespace RJW_Genes
{
[HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
public class Patch_LivingCumbucket_StackHediff
{
/// <summary>
/// This is the amount of fluid required if the pawn has a bodysize of 1, to reach a severity in the hediff of 1.
/// The hediff can still be increased over 1.0.
/// </summary>
const float fluid_amount_required_for_hediff_severity_ = 100.0f;
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;
Pawn pawnA = props.pawn;
Pawn pawnB = props.partner;
if (pawnA.genes != null && pawnA.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnB) > 0)
{
ProcessLivingCumbucket(pawnA, CumUtility.GetTotalFluidAmount(pawnB));
}
if (pawnB.genes != null && pawnB.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnA) > 0)
{
ProcessLivingCumbucket(pawnB, CumUtility.GetTotalFluidAmount(pawnA));
}
}
public static void ProcessLivingCumbucket(Pawn pawn, float cumamount)
{
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)
{
hediff = pawn.health.GetOrAddHediff(HediffDefOf.rjw_genes_filled_living_cumbucket);
hediff.Severity = 0.01f;
}
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

@ -17,8 +17,6 @@ namespace RJW_Genes
public abstract class Gene_GenitaliaResizingGene : RJW_Gene public abstract class Gene_GenitaliaResizingGene : RJW_Gene
{ {
/// <summary> /// <summary>
/// Whether or not the gene was already applied. /// Whether or not the gene was already applied.
/// If not, it is checked on every birthday and will be applied accordingly. /// If not, it is checked on every birthday and will be applied accordingly.

View file

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
public class GeneAlteringExtension : DefModExtension
{
public List<GeneDef> minorGenes;
public List<GeneDef> majorGenes;
public float minorApplicationChance;
public float majorApplicationChance;
}
}

View file

@ -16,8 +16,8 @@ namespace RJW_Genes
[HarmonyPatch(typeof(SexUtility), "Aftersex")] [HarmonyPatch(typeof(SexUtility), "Aftersex")]
public static class Patch_Feminizer public static class Patch_Feminizer
{ {
const float MINOR_APPLICATION_CHANCE = 0.25f; // = 25% to have a minor transformation
const float MAJOR_APPLICATION_CHANCE = 0.10f; // = 10% to have a major transformation static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_feminizer.GetModExtension<GeneAlteringExtension>();
public static void Postfix(SexProps props) public static void Postfix(SexProps props)
{ {
@ -26,6 +26,12 @@ namespace RJW_Genes
if (props.pawn.IsAnimal() || props.partner.IsAnimal()) if (props.pawn.IsAnimal() || props.partner.IsAnimal())
return; return;
if (geneAlteringExtension == null)
{
ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Feminizer");
return;
}
ApplyFeminization(props.pawn); ApplyFeminization(props.pawn);
ApplyFeminization(props.partner); ApplyFeminization(props.partner);
} }
@ -44,12 +50,12 @@ namespace RJW_Genes
{ {
case float f when f > 0.8f: case float f when f > 0.8f:
{ {
if (Random.NextDouble() < MAJOR_APPLICATION_CHANCE) if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance)
MajorChange(pawn); MajorChange(pawn);
} break; } break;
case float f when f > 0.6f: case float f when f > 0.6f:
{ {
if (Random.NextDouble() < MINOR_APPLICATION_CHANCE) if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance)
MinorChange(pawn); MinorChange(pawn);
} break; } break;
default: default:
@ -57,19 +63,11 @@ namespace RJW_Genes
ModLog.Debug($"Tried to feminize {pawn} - severity of feminization was too low ({hediff.def} @ {hediff.Severity} - {hediff.Label})") ; ModLog.Debug($"Tried to feminize {pawn} - severity of feminization was too low ({hediff.def} @ {hediff.Severity} - {hediff.Label})") ;
} break; } break;
} }
} }
private static void MinorChange(Pawn pawn) private static void MinorChange(Pawn pawn)
{ {
List<GeneDef> possibleGenes = new List<GeneDef>() { List<GeneDef> possibleGenes = geneAlteringExtension.minorGenes.ToList();
GeneDefOf.rjw_genes_small_male_genitalia,
GeneDefOf.rjw_genes_big_breasts,
GeneDefOf.rjw_genes_no_cum,
DefDatabase<GeneDef>.GetNamed("Beard_NoBeardOnly"),
DefDatabase<GeneDef>.GetNamed("Hair_LongOnly")
};
GeneDef chosen = possibleGenes.RandomElement(); GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null) if (chosen == null)
{ {
@ -90,12 +88,7 @@ namespace RJW_Genes
private static void MajorChange(Pawn pawn) private static void MajorChange(Pawn pawn)
{ {
List<GeneDef> possibleGenes = new List<GeneDef>() { List<GeneDef> possibleGenes = geneAlteringExtension.majorGenes.ToList();
GeneDefOf.rjw_genes_female_only,
GeneDefOf.rjw_genes_no_penis,
GeneDefOf.rjw_genes_minor_vulnerability,
};
GeneDef chosen = possibleGenes.RandomElement(); GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null) if (chosen == null)
{ {

View file

@ -16,8 +16,8 @@ namespace RJW_Genes
[HarmonyPatch(typeof(SexUtility), "Aftersex")] [HarmonyPatch(typeof(SexUtility), "Aftersex")]
public static class Patch_Twinkifier public static class Patch_Twinkifier
{ {
const float MINOR_APPLICATION_CHANCE = 0.25f; // = 25% to have a minor transformation
const float MAJOR_APPLICATION_CHANCE = 0.10f; // = 10% to have a major transformation static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_twinkifier.GetModExtension<GeneAlteringExtension>();
public static void Postfix(SexProps props) public static void Postfix(SexProps props)
{ {
@ -26,6 +26,12 @@ namespace RJW_Genes
if (props.pawn.IsAnimal() || props.partner.IsAnimal()) if (props.pawn.IsAnimal() || props.partner.IsAnimal())
return; return;
if (geneAlteringExtension == null)
{
ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Twinkifier");
return;
}
ApplyTwinkification(props.pawn); ApplyTwinkification(props.pawn);
ApplyTwinkification(props.partner); ApplyTwinkification(props.partner);
} }
@ -44,12 +50,12 @@ namespace RJW_Genes
{ {
case float f when f > 0.8f: case float f when f > 0.8f:
{ {
if (Random.NextDouble() < MAJOR_APPLICATION_CHANCE) if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance)
MajorChange(pawn); MajorChange(pawn);
} break; } break;
case float f when f > 0.6f: case float f when f > 0.6f:
{ {
if (Random.NextDouble() < MINOR_APPLICATION_CHANCE) if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance)
MinorChange(pawn); MinorChange(pawn);
} break; } break;
default: default:
@ -62,12 +68,7 @@ namespace RJW_Genes
private static void MinorChange(Pawn pawn) private static void MinorChange(Pawn pawn)
{ {
List<GeneDef> possibleGenes = new List<GeneDef>() { List<GeneDef> possibleGenes = geneAlteringExtension.minorGenes.ToList();
GeneDefOf.rjw_genes_small_male_genitalia,
DefDatabase<GeneDef>.GetNamed("Beard_NoBeardOnly"),
DefDatabase<GeneDef>.GetNamed("Body_Thin"),
GeneDefOf.rjw_genes_homosexual
};
GeneDef chosen = possibleGenes.RandomElement(); GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null) if (chosen == null)
@ -89,13 +90,7 @@ namespace RJW_Genes
private static void MajorChange(Pawn pawn) private static void MajorChange(Pawn pawn)
{ {
List<GeneDef> possibleGenes = new List<GeneDef>() { List<GeneDef> possibleGenes = geneAlteringExtension.majorGenes.ToList();
GeneDefOf.rjw_genes_fertile_anus,
DefDatabase<GeneDef>.GetNamed("Beauty_Pretty"),
DefDatabase<GeneDef>.GetNamed("Delicate"),
GeneDefOf.rjw_genes_minor_vulnerability,
GeneDefOf.rjw_genes_infectious_homosexuality
};
GeneDef chosen = possibleGenes.RandomElement(); GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null) if (chosen == null)

View file

@ -23,11 +23,15 @@ namespace RJW_Genes
public static readonly HediffDef rjw_genes_twinkification_progress; public static readonly HediffDef rjw_genes_twinkification_progress;
public static readonly HediffDef rjw_genes_feminization_progress; public static readonly HediffDef rjw_genes_feminization_progress;
public static readonly HediffDef rjw_genes_genetic_rut;
// Note: Counter does meant it counters it, not it's counting // 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_cumstuffed_counter;
[MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter; [MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter;
public static readonly HediffDef OvaryAgitator; public static readonly HediffDef OvaryAgitator;
public static readonly HediffDef Bioscaffold; public static readonly HediffDef Bioscaffold;
[MayRequire("rjw.sexperience")] public static readonly HediffDef rjw_genes_filled_living_cumbucket;
} }
} }

View file

@ -81,8 +81,13 @@
<Compile Include="Genes\Breeding\ConditionalStatAffecters\ConditionalStatAffecter_VeryManyChildren.cs" /> <Compile Include="Genes\Breeding\ConditionalStatAffecters\ConditionalStatAffecter_VeryManyChildren.cs" />
<Compile Include="Genes\Breeding\Genes\Gene_FerventOvipositor.cs" /> <Compile Include="Genes\Breeding\Genes\Gene_FerventOvipositor.cs" />
<Compile Include="Genes\Breeding\Genes\Gene_InsectIncubator.cs" /> <Compile Include="Genes\Breeding\Genes\Gene_InsectIncubator.cs" />
<Compile Include="Genes\Breeding\Genes\Gene_Rut.cs" />
<Compile Include="Genes\Breeding\Patches\Patch_BlockedMasturbation.cs" /> <Compile Include="Genes\Breeding\Patches\Patch_BlockedMasturbation.cs" />
<Compile Include="Genes\Cum\Patch_LikesCumflation.cs" /> <Compile Include="Genes\Cum\HediffComp_ProcessCumbucket.cs" />
<Compile Include="Genes\Cum\HediffsCompProperties_ProcessCumbucketMTB.cs" />
<Compile Include="Genes\Cum\JobDriver_ProcessingCumbucket.cs" />
<Compile Include="Genes\Cum\Patches\Patch_LikesCumflation.cs" />
<Compile Include="Genes\Cum\Patches\Patch_LivingCumbucket_StackHediff.cs" />
<Compile Include="Genes\Damage\Gene_Elasticity.cs" /> <Compile Include="Genes\Damage\Gene_Elasticity.cs" />
<Compile Include="Genes\Diseases\Defs\GeneticDiseaseExtension.cs" /> <Compile Include="Genes\Diseases\Defs\GeneticDiseaseExtension.cs" />
<Compile Include="Genes\Diseases\Defs\GeneticInfectorExtension.cs" /> <Compile Include="Genes\Diseases\Defs\GeneticInfectorExtension.cs" />
@ -109,10 +114,10 @@
<Compile Include="Genes\Gender\Genes\Gene_GenderFluid.cs" /> <Compile Include="Genes\Gender\Genes\Gene_GenderFluid.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_EvergrowingGenitalia.cs" /> <Compile Include="Genes\GenitaliaSize\Gene_EvergrowingGenitalia.cs" />
<Compile Include="Genes\Cum\CumUtility.cs" /> <Compile Include="Genes\Cum\CumUtility.cs" />
<Compile Include="Genes\Cum\Gene_ChangeCumAmount.cs" /> <Compile Include="Genes\Cum\Genes\Gene_ChangeCumAmount.cs" />
<Compile Include="Genes\Cum\Patch_TransferNutrition.cs" /> <Compile Include="Genes\Cum\Patches\Patch_TransferNutrition.cs" />
<Compile Include="Genes\Damage\Gene_Unbreakable.cs" /> <Compile Include="Genes\Damage\Gene_Unbreakable.cs" />
<Compile Include="Genes\Cum\Patch_CumflationImmunity.cs" /> <Compile Include="Genes\Cum\Patches\Patch_CumflationImmunity.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraBreasts.cs" /> <Compile Include="Genes\ExtraGenitalia\Gene_ExtraBreasts.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" /> <Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_Futa.cs" /> <Compile Include="Genes\ExtraGenitalia\Gene_Futa.cs" />
@ -190,6 +195,7 @@
<Compile Include="Genes\Special\Abilities\CompAbilityEffect_CocoonWeaver.cs" /> <Compile Include="Genes\Special\Abilities\CompAbilityEffect_CocoonWeaver.cs" />
<Compile Include="Genes\Special\Abilities\CompProperties_AbilityCocoonWeaver.cs" /> <Compile Include="Genes\Special\Abilities\CompProperties_AbilityCocoonWeaver.cs" />
<Compile Include="Genes\Special\Defs\AgeTransferExtension.cs" /> <Compile Include="Genes\Special\Defs\AgeTransferExtension.cs" />
<Compile Include="Genes\Special\Defs\GeneAlteringExtension.cs" />
<Compile Include="Genes\Special\Defs\HormonalSalivaExtension.cs" /> <Compile Include="Genes\Special\Defs\HormonalSalivaExtension.cs" />
<Compile Include="Genes\Special\Patches\Patch_AgeDrain.cs" /> <Compile Include="Genes\Special\Patches\Patch_AgeDrain.cs" />
<Compile Include="Genes\Special\Patches\Patch_GeneticSexSwap.cs" /> <Compile Include="Genes\Special\Patches\Patch_GeneticSexSwap.cs" />