Compare commits

...

19 commits

Author SHA1 Message Date
Vegapnk
8139991123 Re-Added Elasticity from Licentia, Fixes #87 2024-06-04 18:15:07 +02:00
Vegapnk
1311b6da61 Brought Licentia bag - and updated changelogs 2024-06-04 18:11:13 +02:00
Vegapnk
806d2bb487 Moved LicentiaLabs Genes into extra folder too 2024-06-04 17:48:47 +02:00
Vegapnk
d3b85aee20 Minor renaming 2024-06-04 17:16:36 +02:00
Vegapnk
23e143c381 Merge branch 'WildWalker' into dev 2024-06-04 17:01:48 +02:00
Vegapnk
17872508af Minor Naming Changes - again 2024-06-04 17:01:30 +02:00
Vegapnk
51ab700ec2 Revert "Moved a lot of files"
This reverts commit 6d45dd8756.
2024-06-04 16:49:00 +02:00
Vegapnk
aa85ce0786 Revert "Conditionalised the Quirk Patches - only if their VRE Mod is loaded"
This reverts commit ea63db147d.
2024-06-04 16:48:10 +02:00
Vegapnk
710efc7d85 Some documentation 2024-06-04 16:44:50 +02:00
Vegapnk
70f7ce1f7d Removed VRE Android Convertables for now 2024-06-04 16:31:18 +02:00
Vegapnk
ea63db147d Conditionalised the Quirk Patches - only if their VRE Mod is loaded 2024-06-04 16:20:32 +02:00
Vegapnk
6d45dd8756 Moved a lot of files 2024-06-04 16:00:11 +02:00
Vegapnk
f51a85f191 Interrim Documentation Update 2024-06-04 15:49:54 +02:00
vegapnk
147892ea18
Merge pull request #88 from Jaaldabaoth/dev
post VE genetics patching
2024-06-04 14:36:40 +02:00
Jaaldabaoth
25008ce5dc merge 2024-06-04 13:08:37 +02:00
Vegapnk
a68c263aa1 Added PheromoneSpit Gene 2024-06-01 10:12:00 +02:00
Vegapnk
48e06ff97f Another important null check for Sextamer 2024-05-31 17:42:33 +02:00
Vegapnk
5fe252bd67 Added a Gene to tame and train animals with Sex 2024-05-31 17:28:11 +02:00
Vegapnk
79895f352e Draft for Mating Call 2024-05-31 16:41:42 +02:00
68 changed files with 2842 additions and 163 deletions

View file

@ -1,3 +1,33 @@
# 2.1.0
**Additions**:
- New Ability Gene *Mating-Call*: Get bred by all nearby animals.
- New Ability Gene *Pheromone Spit*: Mark a target to be bred by nearby animals
- New Passive Gene *Sexual Tamer*: Chance to tame or train animals on bestiality.
- Human + Animal Pregnancy can (if enabled in settings) produce Vanilla Expanded Genetics Hybrids. Thanks to @Jaaldabaoth (#88)
- Xenogenes for "Big and Small" Xenotypes thanks to @Flock-of-birds (#83)
- Xenogenes for "Biotech Expansion Mammalia" and "Biotech Expansion - Mythic" thanks to @Ohreallyow (#86)
- Xenogenes update for (many?) "Vanilla Races Expanded (VRE)" Mods - Thanks to @Jaaldabaoth (#84 / #88 )
- Genes can now fulfill RJW Quirks, configurable in XML. Thanks to @Jaaldabaoth (#84 / #88)
- "Genes" to support VRE Androids having Mechanical Genitalia. Thanks to @Jaaldabaoth (#88)
- "Curiosity Genes" alongside other Curiosities from VRE. Thanks to @Jaaldabaoth (#88)
- Support for many VE-Genetics Animals into the Animal-Framework. Thanks to @Jaaldabaoth (#88)
**Fixes**:
- Licentia Genes are back in and should work again. I used the [updated for by Jaaldabaoth](https://gitgud.io/Jaaldabaoth/licentia-labs) for my testing.
- Lower-casing most labels to fit rimworld standards, thanks to @Flock-of-birds (#83)
- X-Gender-Only Genes leave / re-add artificial genitalia. Thanks to @Jaaldabaoth (#84 / #88)
- Issues with Elasticity References (#87)
**Changes**:
- Minified some Race-Patches, thanks to @Flock-of-birds (#83)
- XML-Genitalia-Genes can now also provide Breasts. Thanks to @Jaaldabaoth (#84 / #88)
- Many patches and files went into a `Mods`Folder and use an `LoadFolders.xml`. Thanks to @Jaaldabaoth (#84 / #88)
# 2.0.0
**Summary**:

Binary file not shown.

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<AbilityDef>
<defName>rjw_genes_ability_mating_call</defName>
<label>Mating Call</label>
<description>Calls nearby animals to breed me.</description>
<iconPath>UI/Abilities/AnimalBerserkPulse</iconPath>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<statBases>
<Ability_Duration>50</Ability_Duration>
<Ability_EffectRadius>0</Ability_EffectRadius>
</statBases>
<displayOrder>410</displayOrder>
<!-- 30k Ticks = 12h -->
<cooldownTicksRange>30000</cooldownTicksRange>
<verbProperties>
<warmupTime>5</warmupTime>
<verbClass>Verb_CastAbility</verbClass>
<targetParams>
<canTargetHumans>False</canTargetHumans>
<canTargetMechs>False</canTargetMechs>
<canTargetAnimals>True</canTargetAnimals>
<canTargetLocations>True</canTargetLocations>
</targetParams>
</verbProperties>
<comps>
<li Class="CompProperties_AbilityFleckOnTarget">
<fleckDef>PsycastPsychicEffect</fleckDef>
</li>
<li Class="RJW_Genes.CompProperties_AbilityMatingCall">
<calldistance>40</calldistance>
</li>
<li Class="CompProperties_AbilityGiveHediff">
<compClass>CompAbilityEffect_GiveHediff</compClass>
<hediffDef>Hediff_Submitting</hediffDef>
<onlyApplyToSelf>True</onlyApplyToSelf>
</li>
</comps>
<confirmationDialogText>Being Bred is not an easy business.\nThis might lead to a broken pawn, torn genitalia and hybrid-pregnancies.\nMaybe this is what you want.\nThe pawn will `submit` and e.g. Insects might cocoon him.\n\nAre you sure to proceed?</confirmationDialogText>
</AbilityDef>
</Defs>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<AbilityDef>
<defName>rjw_genes_ability_pheromone_spit</defName>
<label>pheromone spit</label>
<description>Spit a condensed ball of animal pheromones to mark a target. Nearby Animals will try to breed the target. This means all animals - hostile, friendly and wild.</description>
<iconPath>UI/Abilities/PiercingSpine</iconPath>
<cooldownTicksRange>3000</cooldownTicksRange>
<displayOrder>201</displayOrder>
<aiCanUse>true</aiCanUse>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<range>11</range>
<warmupTime>1.2</warmupTime>
<soundCast>PiercingSpine_Launch</soundCast>
<targetParams>
<canTargetHumans>True</canTargetHumans>
<canTargetMechs>False</canTargetMechs>
<canTargetAnimals>False</canTargetAnimals>
<canTargetLocations>False</canTargetLocations>
</targetParams>
</verbProperties>
<comps>
<li Class="RJW_Genes.CompProperties_AbilityPheromoneSpit">
<calldistance>25</calldistance>
</li>
</comps>
</AbilityDef>
</Defs>

View file

@ -77,4 +77,38 @@
<biostatMet>-1</biostatMet>
</GeneDef>
<GeneDef ParentName="BreedingBase">
<defName>rjw_genes_mating_call</defName>
<label>Mating Call</label>
<description>This gene allows to call nearby animals and invite them for mating.</description>
<iconPath>UI/Abilities/AnimalBerserkPulse</iconPath>
<displayOrderInCategory>65</displayOrderInCategory>
<abilities>
<li>rjw_genes_ability_mating_call</li>
</abilities>
<descriptionHyperlinks>
<AbilityDef>rjw_genes_ability_mating_call</AbilityDef>
</descriptionHyperlinks>
<biostatCpx>2</biostatCpx>
<biostatMet>-1</biostatMet>
</GeneDef>
<GeneDef ParentName="BreedingBase">
<defName>rjw_genes_pheromone_spit</defName>
<label>Pheromone Spit</label>
<description>This gene allows to mark targets for breeding, enticing nearby animals for a ride.</description>
<iconPath>UI/Abilities/AnimalBerserkPulse</iconPath>
<displayOrderInCategory>66</displayOrderInCategory>
<abilities>
<li>rjw_genes_ability_pheromone_spit</li>
</abilities>
<descriptionHyperlinks>
<AbilityDef>rjw_genes_ability_pheromone_spit</AbilityDef>
</descriptionHyperlinks>
<biostatCpx>2</biostatCpx>
<biostatMet>-1</biostatMet>
</GeneDef>
</Defs>

View file

@ -48,6 +48,9 @@
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>DemonLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
</GeneDef>
@ -103,6 +106,9 @@
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>DemonLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -48,64 +48,4 @@
<biostatMet>-2</biostatMet>
</GeneDef>
<GeneDef MayRequire="LustLicentia.RJWLabs">
<defName>rjw_genes_likes_cumflation</defName>
<label>likes cumflation</label>
<displayCategory>rjw_genes_cum</displayCategory>
<description>This Xenotype loves being cumflated.</description>
<iconPath>Genes/Icons/Cumflation</iconPath>
<displayOrderInCategory>536</displayOrderInCategory>
<forcedTraits>
<li>
<def>LikesCumflation</def>
</li>
</forcedTraits>
<exclusionTags>
<li>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 MayRequire="LustLicentia.RJWLabs">
<defName>rjw_genes_cumflation_immunity</defName>
<label>cumflation immunity</label>
<displayCategory>rjw_genes_cum</displayCategory>
<description>This Xenotype cannot get cumflated.</description>
<iconPath>Genes/Icons/Cumflation_Immunity</iconPath>
<displayOrderInCategory>537</displayOrderInCategory>
<exclusionTags>
<li>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 MayRequire="LustLicentia.RJWLabs">
<defName>rjw_genes_generous_donor</defName>
<label>generous donor</label>
<displayCategory>rjw_genes_cum</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>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -1,25 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef MayRequire="LustLicentia.RJWLabs">
<defName>rjw_genes_elasticity</defName>
<label>elasticity</label>
<displayCategory>rjw_genes_damage</displayCategory>
<description>This Xenotype cannot get stretched by huge penetrators.</description>
<iconPath>Genes/Icons/Elasticity</iconPath>
<geneClass>RJW_Genes.Gene_Elasticity</geneClass>
<biostatMet>-1</biostatMet>
<biostatCpx>1</biostatCpx>
<displayOrderInCategory>1</displayOrderInCategory>
<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_unbreakable</defName>
<label>unbreakable</label>

View file

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef Name="GeneExtraGenitaliaBase" Abstract="True">
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<randomChosen>false</randomChosen>
<modExtensions>
@ -15,6 +14,8 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_extra_penis</defName>
<label>extra penis</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>Males of this species grow an additional penis .</description>
<iconPath>Genes/Icons/extra_male</iconPath>
<geneClass>RJW_Genes.Gene_ExtraPenis</geneClass>
@ -27,6 +28,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_no_penis</defName>
<label>no penis</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>Males of this do not have a penis.</description>
<iconPath>Genes/Icons/No_Male_Genitalia</iconPath>
<geneClass>RJW_Genes.Gene_NoPenis</geneClass>
@ -40,6 +42,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_extra_vagina</defName>
<label>extra vagina</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>Females of this species grow an additional vagina .</description>
<iconPath>Genes/Icons/Extra_Vagina</iconPath>
<geneClass>RJW_Genes.Gene_ExtraVagina</geneClass>
@ -52,6 +55,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_no_vagina</defName>
<label>no vagina</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>Females of this do not have a vagina.</description>
<iconPath>Genes/Icons/No_Vagina</iconPath>
<geneClass>RJW_Genes.Gene_NoVagina</geneClass>
@ -65,6 +69,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_extra_breasts</defName>
<label>extra breasts</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>Females of this species grow an additional pair of breasts .</description>
<iconPath>Genes/Icons/Extra_Breasts</iconPath>
<geneClass>RJW_Genes.Gene_ExtraBreasts</geneClass>
@ -77,6 +82,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_no_breasts</defName>
<label>no breasts</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>Females of this do not have a pair of breasts, but only nipples.</description>
<iconPath>Genes/Icons/No_Breasts</iconPath>
<geneClass>RJW_Genes.Gene_NoBreasts</geneClass>
@ -89,6 +95,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_extra_anus</defName>
<label>extra anus</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>This specias has an extra anus.</description>
<iconPath>Genes/Icons/Extra_Anus</iconPath>
<geneClass>RJW_Genes.Gene_ExtraAnus</geneClass>
@ -101,6 +108,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_no_anus</defName>
<label>no anus</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>This specias has no anus.</description>
<iconPath>Genes/Icons/No_Anus</iconPath>
<geneClass>RJW_Genes.Gene_NoAnus</geneClass>
@ -113,6 +121,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_futa</defName>
<label>futanari</label>
<displayCategory>rjw_genes_gender</displayCategory>
<description>Males with this gene grow additional female genitalia, females grow additional male genitalia.</description>
<iconPath>Genes/Icons/Futa</iconPath>
<geneClass>RJW_Genes.Gene_Futa</geneClass>
@ -126,6 +135,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_femboy</defName>
<label>femboy</label>
<displayCategory>rjw_genes_gender</displayCategory>
<description>Males with this gene are considered female despite having a penis</description>
<iconPath>Genes/Icons/Futa</iconPath>
<geneClass>RJW_Genes.Gene_Femboy</geneClass>
@ -138,6 +148,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_featureless_chest</defName>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<label>featureless chest</label>
<description>Carriers of this gene do not have breasts or nipples.</description>
<iconPath>Genes/Icons/No_Breasts</iconPath>
@ -151,6 +162,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_udder</defName>
<label>udder</label>
<displayCategory>rjw_genes_genitalia_extras</displayCategory>
<description>Carriers of this gene have udders and breasts.</description>
<iconPath>Things/Mote/Heart</iconPath>
<geneClass>RJW_Genes.Gene_UdderBreasts</geneClass>

View file

@ -7,7 +7,7 @@
<exclusionTags>
<li>GenitalType</li>
</exclusionTags>
<randomChosen>false</randomChosen>
<randomChosen>true</randomChosen>
<biostatCpx>0</biostatCpx>
<modExtensions>
@ -43,6 +43,7 @@
<penis>Penis</penis>
<vagina>Vagina</vagina>
<anus>Anus</anus>
<breasts>Breasts</breasts>
</li>
</modExtensions>
<displayOrderInCategory>802</displayOrderInCategory>
@ -89,6 +90,10 @@
<vagina>DemonVagina</vagina>
<anus>DemonAnus</anus>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>DemonLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>805</displayOrderInCategory>
</GeneDef>
@ -104,6 +109,9 @@
<vagina>DragonVagina</vagina>
<anus>GenericAnus</anus>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>806</displayOrderInCategory>
</GeneDef>
@ -118,7 +126,11 @@
<penis>SlimeTentacles</penis>
<vagina>SlimeVagina</vagina>
<anus>SlimeAnus</anus>
<breasts>SlimeBreasts</breasts>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>SlimeLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -134,6 +146,9 @@
<vagina>DemonVagina</vagina>
<anus>DemonAnus</anus>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>DemonLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -147,6 +162,9 @@
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>CrocodilianPenis</penis>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -160,6 +178,7 @@
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>RaccoonPenis</penis>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -173,6 +192,9 @@
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>HemiPenis</penis>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -191,6 +213,9 @@
<penis>GhostPenis</penis>
<vagina>GhostVagina</vagina>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -204,6 +229,9 @@
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>GolemPenis</penis>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -230,6 +258,9 @@
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>NecroPenis</penis>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
@ -282,15 +313,14 @@
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>TentaclePenis</penis>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>807</displayOrderInCategory>
</GeneDef>
<GeneDef ParentName="GeneGenitalTypeBase">
<defName>rjw_genes_ovipositor_genitalia</defName>
<label>insect genitalia</label>
@ -302,6 +332,9 @@
<vagina>OvipositorF</vagina>
<anus>InsectAnus</anus>
</li>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ChitinLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
<displayOrderInCategory>808</displayOrderInCategory>

View file

@ -181,6 +181,13 @@
<marketValueFactor>1.10</marketValueFactor>
<biostatMet>-2</biostatMet>
<biostatCpx>1</biostatCpx>
<modExtensions>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ImpregnationFetishQuirk</Satisfiedquirk>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -82,11 +82,12 @@
<defName>rjw_genes_sexual_mytosis</defName>
<label>orgasmic mytosis</label>
<!-- <geneClass>RJW_Genes.Gene_Aphrodisiac_Pheromones</geneClass> -->
<description>Carriers of this gene grow more unstable with ongoing multiple orgasms - climaxing in a process of mytosis. This will result in an (biologically) identical pawn and both twins are set in a regenerative state. Also, the pawn can have multiple orgasms: In a state of higher unstableness, they come quicker.</description>
<description>Carriers have malfunctioning regenerative archites that grow more unstable with ongoing multiple orgasms - climaxing in a process of mytosis. This will result in an (biologically) identical pawn and both twins are set in a regenerative state. Also, the pawn can have multiple orgasms: In a state of higher unstableness, they come quicker.</description>
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath>
<displayOrderInCategory>5</displayOrderInCategory>
<biostatCpx>5</biostatCpx>
<biostatMet>-5</biostatMet>
<biostatArc>1</biostatArc>
</GeneDef>
<GeneDef ParentName="SpecialBase">
@ -124,6 +125,22 @@
</descriptionHyperlinks>
<biostatCpx>1</biostatCpx>
<biostatMet>-1</biostatMet>
<modExtensions>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>BreederQuirk</Satisfiedquirk>
</li>
</modExtensions>
</GeneDef>
<GeneDef ParentName="SpecialBase">
<defName>rjw_genes_sex_tamer</defName>
<label>Sexual Tamer</label>
<labelShortAdj>sextamer</labelShortAdj>
<description>Bestiality has a chance to tame animals or advance their training.</description>
<iconPath>UI/Abilities/AnimalBerserkPulse</iconPath>
<displayOrderInCategory>14</displayOrderInCategory>
<biostatCpx>2</biostatCpx>
<biostatMet>-1</biostatMet>
</GeneDef>
</Defs>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAdd">
<xpath>/Defs/GeneDef[defName="Furskin"]</xpath>
<value>
<modExtensions>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>FurLoverQuirk</Satisfiedquirk>
</li>
</modExtensions>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>/Defs/GeneDef[defName="Head_Gaunt"]</xpath>
<value>
<modExtensions>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</modExtensions>
</value>
</Operation>
</Patch>

View file

@ -14,6 +14,8 @@
<value>
<li>rjw_genes_much_cum</li>
<li>rjw_genes_zoophile</li>
<li>rjw_genes_Pig_genitalia</li>
<li>rjw_genes_human_genitalia</li>
</value>
</Operation>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Vanilla Races Expanded - Pigskin</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="VRE_Boarskin"]/genes</xpath>
<value>
<li>rjw_genes_Pig_genitalia</li>
<li>rjw_genes_human_genitalia</li>
<li>rjw_genes_much_cum</li>
<li>rjw_genes_zoophile</li>
</value>
</match>
</Operation>
</Patch>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Vanilla Races Expanded - Lycanthrope</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="VRE_Wolfman"]/genes</xpath>
<value>
<li>rjw_genes_human_genitalia</li>
<li>rjw_genes_zoophile</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Vanilla Races Expanded - Lycanthrope</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="VRE_Lycan"]/genes</xpath>
<value>
<li>rjw_genes_canine_genitalia</li>
<li>rjw_genes_zoophile</li>
<li>rjw_genes_rapist</li>
</value>
</match>
</Operation>
</Patch>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View file

@ -5,5 +5,16 @@
<li>Common</li>
<!-- Mods -->
<li IfModNotActive="asmr.rjw.racesupport">Mods/NotRaceSupport</li>
<li IfModActive="vanillaracesexpanded.sanguophage">Mods/Sanguophage</li>
<li IfModActive="vanillaracesexpanded.saurid">Mods/Saurid</li>
<li IfModActive="vanillaracesexpanded.phytokin">Mods/Phytokin</li>
<li IfModActive="vanillaracesexpanded.lycanthrope">Mods/Lycanthrope</li>
<li IfModActive="vanillaracesexpanded.highmate">Mods/Highmate</li>
<li IfModActive="vanillaracesexpanded.genie">Mods/Genie</li>
<li IfModActive="vanillaracesexpanded.fungoid">Mods/Fungoid</li>
<li IfModActive="vanillaracesexpanded.archon">Mods/Archon</li>
<li IfModActive="vanillaracesexpanded.android">Mods/Android</li>
<li IfModActive="VanillaExpanded.VGeneticsE">Mods/VE_Genetics</li>
<li IfModActive="LustLicentia.RJWLabs">Mods/LicentiaLabs</li>
</v1.5>
</loadFolders>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<Defs>
<VREAndroids.AndroidConvertableGenesDef>
<defName>rjw_genes_AndroidConvertableGenesDefs</defName>
<geneCategories>
<li>rjw_genes_gender</li>
</geneCategories>
</VREAndroids.AndroidConvertableGenesDef>
</Defs>

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<VREAndroids.AndroidGeneDef ParentName="VREA_SubroutineBase">
<defName>rjw_genes_bionic_genitalia</defName>
<label>bionic genitalia</label>
<geneClass>RJW_Genes.Gene_GenitaliaType</geneClass>
<description>This piece of hardware is a set of bionic genitals of high quality</description>
<iconPath>Genes/Icons/Genitalia_human</iconPath>
<modExtensions>
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>BionicPenis</penis>
<vagina>BionicVagina</vagina>
<anus>BionicAnus</anus>
<breasts>BionicBreasts</breasts>
</li>
</modExtensions>
<displayOrderInCategory>802</displayOrderInCategory>
<biostatMet>-2</biostatMet>
</VREAndroids.AndroidGeneDef>
<VREAndroids.AndroidGeneDef ParentName="VREA_HardwareBase">
<defName>rjw_genes_hydrolic_genitalia</defName>
<label>hydrolic genitalia</label>
<geneClass>RJW_Genes.Gene_GenitaliaType</geneClass>
<description>This piece of hardware is a set of crude hydrolic genitals, at least it come with a suspension system</description>
<iconPath>Genes/Icons/Genitalia_human</iconPath>
<modExtensions>
<li Class="RJW_Genes.GenitaliaTypeExtension">
<penis>HydraulicPenis</penis>
<vagina>HydraulicVagina</vagina>
<anus>HydraulicAnus</anus>
<breasts>HydraulicBreasts</breasts>
</li>
</modExtensions>
<displayOrderInCategory>802</displayOrderInCategory>
<statFactors>
<MoveSpeed>1.12</MoveSpeed>
</statFactors>
</VREAndroids.AndroidGeneDef>
<VREAndroids.AndroidGeneDef ParentName="VREA_HardwareBase">
<defName>rjw_genes_SexDisabled</defName>
<label>sex disabled</label>
<description>Androids do not feel satisfaction from sex, and have no need to feel it.</description>
<iconPath>Genes/Icons/sex_disabled</iconPath>
<displayOrderInCategory>3</displayOrderInCategory>
<biostatCpx>1</biostatCpx>
<disablesNeeds>
<li>Sex</li>
</disablesNeeds>
<removeWhenAwakened>true</removeWhenAwakened>
</VREAndroids.AndroidGeneDef>
</Defs>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/VREAndroids.AndroidGeneDef[defName="VREA_SyntheticBody"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>RobotLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/VREAndroids.AndroidGeneDef[defName="VREA_SyntheticSkin"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>RobotLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationReplace">
<xpath>/Defs/GeneCategoryDef[defName="VREA_Subroutine"]/displayPriorityInXenotype</xpath>
<value>
<displayPriorityInXenotype>10</displayPriorityInXenotype>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_Leatherskin"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>SkinLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_FungalCrest"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>PlantLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_HairMushroom"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>PlantLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_FungalFlesh"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>PlantLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef Name="VRE_CuriosityBase" Abstract="True">
<displayCategory>VRE_Curiosity</displayCategory>
<exclusionTags>
<li>VRE_Curiosity</li>
<li>Curiosity</li>
</exclusionTags>
<biostatMet>-2</biostatMet>
<biostatCpx>2</biostatCpx>
</GeneDef>
<GeneDef ParentName="VRE_CuriosityBase">
<defName>VRE_Curiosity_Sex</defName>
<label>sex curiosity</label>
<displayOrderInCategory>0</displayOrderInCategory>
<description>The carrier has a natural curiosity for sex which makes them gain recreation whenever they learn it. Furthermore, curiosity prevents skill loss in sex completely.
</description>
<iconPath>Genes/Icons/sex_curiosity</iconPath>
<modExtensions>
<li Class="VanillaGenesExpanded.GeneExtension">
<noSkillLoss>Sex</noSkillLoss>
<skillRecreation>Sex</skillRecreation>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_FelineEars"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>FurLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_FelineTail"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>FurLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_PerfectBody"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>SkinLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef>
<defName>rjw_genes_elasticity</defName>
<label>elasticity</label>
<displayCategory>rjw_genes_damage</displayCategory>
<description>This Xenotype cannot get stretched by huge penetrators.</description>
<iconPath>Genes/Icons/Elasticity</iconPath>
<geneClass>RJW_Genes.Gene_Elasticity</geneClass>
<biostatMet>-1</biostatMet>
<biostatCpx>1</biostatCpx>
<displayOrderInCategory>1</displayOrderInCategory>
<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_likes_cumflation</defName>
<label>likes cumflation</label>
<displayCategory>rjw_genes_cum</displayCategory>
<description>This Xenotype loves being cumflated.</description>
<iconPath>Genes/Icons/Cumflation</iconPath>
<displayOrderInCategory>536</displayOrderInCategory>
<forcedTraits>
<li>
<def>LikesCumflation</def>
</li>
</forcedTraits>
<exclusionTags>
<li>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_cumflation_immunity</defName>
<label>cumflation immunity</label>
<displayCategory>rjw_genes_cum</displayCategory>
<description>This Xenotype cannot get cumflated.</description>
<iconPath>Genes/Icons/Cumflation_Immunity</iconPath>
<displayOrderInCategory>537</displayOrderInCategory>
<exclusionTags>
<li>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_generous_donor</defName>
<label>generous donor</label>
<displayCategory>rjw_genes_cum</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>
<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,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_ChestFur"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>FurLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_CanineTail"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>FurLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_BarkSkin"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>PlantLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_FoliageHair"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>PlantLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_SapBlood"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>PlantLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_SanguineHair"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>DemonLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_BatEars"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_UpperBatEars"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_Talons"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>DemonLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRE_BatNose"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>TeratophileQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRESaurids_FrilledEars"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRESaurids_CenterFrill"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRESaurids_GeckoTail"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRESaurids_SauridClaws"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/GeneDef[defName="VRESaurids_ScaleSkin"]</xpath>
<value>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
</li>
</value>
</Operation>
</Patch>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<HediffDef>
<defName>rjw_genes_animal_control_hediff</defName>
<label>part human</label>
<description>This creature is more controlable with a natural human part.</description>
<hediffClass>HediffWithComps</hediffClass>
<defaultLabelColor>(0.9, 1.0, 0.35)</defaultLabelColor>
<initialSeverity>1</initialSeverity>
<comps>
<li Class="AnimalBehaviours.HediffCompProperties_Draftable">
<makeNonFleeingToo>true</makeNonFleeingToo>
</li>
</comps>
<isBad>false</isBad>
</HediffDef>
</Defs>

View file

@ -0,0 +1,654 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RJW_BGS.RaceGeneDef>
<defName>GR_Manbear_GenGroup</defName>
<raceNames>
<li>GR_Manbear</li>
<li>GR_Bearman</li>
</raceNames>
<genes>
<li>
<defName>Immunity_Strong</defName>
<chance>0.8</chance>
</li>
<li>
<defName>MinTemp_LargeDecrease</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Aggression_Aggressive</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Sleepy</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Beard_Always</defName>
<chance>0.8</chance>
</li>
<li>
<defName>VoiceRoar</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Body_Fat</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Body_Hulk</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Hair_ReddishBrown</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Hair_DarkBrown</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Hair_DarkSaturatedReddish</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Hair_DarkReddish</defName>
<chance>0.8</chance>
</li>
<li>
<defName>RobustDigestion</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Furskin</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Unstoppable</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Artistic</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Social</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudePoor_Intellectual</defName>
<chance>0.8</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Manalope_GenGroup</defName>
<raceNames>
<li>GR_Manalope</li>
<li>GR_Booman</li>
</raceNames>
<genes>
<li>
<defName>FireSpew</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Beauty_Ugly</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Hair_Blonde</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Hair_SandyBlonde</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Hair_LightOrange</defName>
<chance>0.8</chance>
</li>
<li>
<defName>rjw_genes_udder</defName>
<chance>0.8</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Manchicken_GenGroup</defName>
<raceNames>
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</raceNames>
<genes>
<li>
<defName>Mood_Optimist</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Delicate</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Beauty_Pretty</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Body_Thin</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Melee</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Mining</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeRemarkable_Social</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeStrong_Intellectual</defName>
<chance>0.8</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Manffalo_GenGroup</defName>
<raceNames>
<li>GR_Manffalo</li>
<li>GR_Muffaloman</li>
</raceNames>
<genes>
<li>
<defName>Headbone_Human</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Headbone_MiniHorns</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Furskin</defName>
<chance>0.9</chance>
</li>
<li>
<defName>MinTemp_SmallIncrease</defName>
<chance>0.9</chance>
</li>
<li>
<defName>rjw_genes_big_male_genitalia</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_loose_female_genitalia</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_big_breasts</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_udder</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_Needle_genitalia</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_mc_genes_perm_lactating</defName>
<chance>0.05</chance>
</li>
<li>
<defName>rjw_genes_zoophile</defName>
<chance>0.5</chance>
</li>
<li>
<defName>AptitudeTerrible_Intellectual</defName>
<chance>0.05</chance>
</li>
<li>
<defName>AptitudePoor_Intellectual</defName>
<chance>0.7</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Manwolf_GenGroup</defName>
<raceNames>
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</raceNames>
<genes>
<li>
<defName>AptitudeTerrible_Mining</defName>
<chance>0.05</chance>
</li>
<li>
<defName>PsychicBonding</defName>
<chance>0.05</chance>
</li>
<li>
<defName>Mood_Sanguine</defName>
<chance>0.05</chance>
</li>
<li>
<defName>Ears_Floppy</defName>
<chance>0.9</chance>
</li>
<li>
<defName>rjw_genes_canine_genitalia</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Furskin</defName>
<chance>0.9</chance>
</li>
<li>
<defName>MinTemp_SmallIncrease</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Libido_High</defName>
<chance>0.9</chance>
</li>
<li>
<defName>AptitudePoor_Mining</defName>
<chance>0.5</chance>
</li>
<li>
<defName>rjw_genes_zoophile</defName>
<chance>0.5</chance>
</li>
<li>
<defName>Mood_Optimist</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Mancat_GenGroup</defName>
<raceNames>
<li>GR_Mancat</li>
<li>GR_Catman</li>
</raceNames>
<genes>
<li>
<defName>PsychicBonding</defName>
<chance>0.05</chance>
</li>
<li>
<defName>AptitudeTerrible_Animals</defName>
<chance>0.05</chance>
</li>
<li>
<defName>Ears_Cat</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Body_Thin</defName>
<chance>0.9</chance>
</li>
<li>
<defName>rjw_genes_feline_genitalia</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Furskin</defName>
<chance>0.9</chance>
</li>
<li>
<defName>MinTemp_SmallIncrease</defName>
<chance>0.9</chance>
</li>
<li>
<defName>rjw_genes_small_male_genitalia</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_tight_female_genitalia</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_small_breasts</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_tight_anus</defName>
<chance>0.7</chance>
</li>
<li>
<defName>DarkVision</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudePoor_Animals</defName>
<chance>0.5</chance>
</li>
<li>
<defName>Beauty_Pretty</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_zoophile</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Mansquirrel_GenGroup</defName>
<raceNames>
<li>GR_Mansquirrel</li>
<li>GR_Moleman</li>
</raceNames>
<genes>
<li>
<defName>MoveSpeed_VeryQuick</defName>
<chance>0.8</chance>
</li>
<li>
<defName>KindInstinct</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Delicate</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Ears_Cat</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Body_Thin</defName>
<chance>0.8</chance>
</li>
<li>
<defName>Tail_Furry</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Shooting</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Melee</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Mining</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeTerrible_Animals</defName>
<chance>0.8</chance>
</li>
<li>
<defName>AptitudeStrong_Intellectual</defName>
<chance>0.8</chance>
</li>
<li>
<defName>rjw_genes_Needle_genitalia</defName>
<chance>0.8</chance>
</li>
<li>
<defName>rjw_genes_zoophile</defName>
<chance>0.8</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Thrumboman_GenGroup</defName>
<raceNames>
<li>GR_Thrumboman</li>
</raceNames>
<genes>
<li>
<defName>Unstoppable</defName>
<chance>0.25</chance>
</li>
<li>
<defName>Headbone_CenterHorn</defName>
<chance>0.9</chance>
</li>
<li>
<defName>VoiceRoar</defName>
<chance>0.6</chance>
</li>
<li>
<defName>MaxTemp_SmallIncrease</defName>
<chance>0.7</chance>
</li>
<li>
<defName>MaxTemp_LargeIncrease</defName>
<chance>0.1</chance>
</li>
<li>
<defName>rjw_genes_dragon_genitalia</defName>
<chance>0.6</chance>
</li>
<li>
<defName>FireResistant</defName>
<chance>0.15</chance>
</li>
<li>
<defName>rjw_genes_much_cum</defName>
<chance>0.3</chance>
</li>
<li>
<defName>rjw_genes_very_much_cum</defName>
<chance>0.05</chance>
</li>
<li>
<defName>Body_Hulk</defName>
<chance>0.7</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Hurseman_GenGroup</defName>
<raceNames>
<li>GR_Hurseman</li>
</raceNames>
<genes>
<li>
<defName>Body_Standard</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Body_Hulk</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_equine_genitalia</defName>
<chance>0.9</chance>
</li>
<li>
<defName>rjw_genes_zoophile</defName>
<chance>0.5</chance>
</li>
<li>
<defName>rjw_genes_much_cum</defName>
<chance>0.5</chance>
</li>
<li>
<defName>MoveSpeed_Quick</defName>
<chance>0.5</chance>
</li>
<li>
<defName>AptitudeTerrible_Mining</defName>
<chance>0.5</chance>
</li>
<li>
<defName>AptitudeTerrible_Intellectual</defName>
<chance>0.5</chance>
</li>
<li>
<defName>Furskin</defName>
<chance>0.9</chance>
</li>
<li>
<defName>MinTemp_SmallIncrease</defName>
<chance>0.9</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Manscarab_GenGroup</defName>
<raceNames>
<li>GR_Manscarab</li>
</raceNames>
<genes>
<li>
<defName>Beauty_Ugly</defName>
<chance>0.5</chance>
</li>
<li>
<defName>Immunity_Strong</defName>
<chance>0.6</chance>
</li>
<li>
<defName>ToxicEnvironmentResistance_Partial</defName>
<chance>0.4</chance>
</li>
<li>
<defName>rjw_genes_ovipositor_genitalia</defName>
<chance>0.15</chance>
</li>
<li>
<defName>rjw_genes_insectincubator</defName>
<chance>0.1</chance>
</li>
<li>
<defName>rjw_genes_insectbreeder</defName>
<chance>0.1</chance>
</li>
<li>
<defName>Body_Thin</defName>
<chance>0.3</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>GR_Lizardman_GenGroup</defName>
<raceNames>
<li>GR_Lizardman</li>
</raceNames>
<genes>
<li>
<defName>AcidSpray</defName>
<chance>0.7</chance>
</li>
<li>
<defName>MinTemp_SmallIncrease</defName>
<chance>0.7</chance>
</li>
<li>
<defName>MaxTemp_SmallIncrease</defName>
<chance>0.7</chance>
</li>
<li>
<defName>Robust</defName>
<chance>0.7</chance>
</li>
<li>
<defName>Hair_BaldOnly</defName>
<chance>0.7</chance>
</li>
<li>
<defName>Beard_NoBeardOnly</defName>
<chance>0.7</chance>
</li>
<li>
<defName>Body_Standard</defName>
<chance>0.7</chance>
</li>
<li>
<defName>Headbone_CenterHorn</defName>
<chance>0.7</chance>
</li>
<li>
<defName>AptitudeTerrible_Artistic</defName>
<chance>0.7</chance>
</li>
<li>
<defName>AptitudeTerrible_Social</defName>
<chance>0.7</chance>
</li>
<li>
<defName>rjw_genes_reptilian_genitalia</defName>
<chance>0.7</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
</Defs>

View file

@ -0,0 +1,795 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<rjw.RaceGroupDef>
<defName>Bear_Grizzly_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Bear_Grizzly</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manbear</li>
<li>GR_Bearman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Bear_Polar_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Bear_Polar</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manbear</li>
<li>GR_Bearman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Manbear_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Manbear</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Bearman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Bearman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Boomalope_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Boomalope</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manalope</li>
<li>GR_Booman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Manalope_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Manalope</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Booman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Booman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Chicken_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Chicken</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Duck_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Duck</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Turkey_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Turkey</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Goose_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Goose</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Ostrich_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Ostrich</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Emu_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Emu</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Cassowary_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Cassowary</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manchicken</li>
<li>GR_Turkeyman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Manchicken_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Manchicken</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Turkeyman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Turkeyman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Cow_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Cow</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manffalo</li>
<li>GR_Muffaloman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Muffalo_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Muffalo</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manffalo</li>
<li>GR_Muffaloman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Bison_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Bison</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manffalo</li>
<li>GR_Muffaloman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Yak_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Yak</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manffalo</li>
<li>GR_Muffaloman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Manffalo_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Manffalo</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Muffaloman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Muffaloman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Warg_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Warg</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Wolf_Timber_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Wolf_Timber</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Wolf_Arctic_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Wolf_Arctic</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Fox_Fennec_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Fox_Fennec</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Fox_Red_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Fox_Red</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Fox_Arctic_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Fox_Arctic</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Husky_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Husky</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>LabradorRetriever_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>LabradorRetriever</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>YorkshireTerrier_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>YorkshireTerrier</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manwolf</li>
<li>GR_Dogman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Manwolf_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Manwolf</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Dogman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Dogman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Cougar_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Cougar</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mancat</li>
<li>GR_Catman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Panther_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Panther</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mancat</li>
<li>GR_Catman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Lynx_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Lynx</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mancat</li>
<li>GR_Catman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Cat_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Cat</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mancat</li>
<li>GR_Catman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Mancat_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Mancat</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Catman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Catman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GuineaPig_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GuineaPig</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mansquirrel</li>
<li>GR_Moleman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Hare_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Hare</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mansquirrel</li>
<li>GR_Moleman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Snowhare_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Snowhare</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mansquirrel</li>
<li>GR_Moleman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Squirrel_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Squirrel</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mansquirrel</li>
<li>GR_Moleman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Rat_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Rat</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mansquirrel</li>
<li>GR_Moleman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Raccoon_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Raccoon</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Mansquirrel</li>
<li>GR_Moleman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Mansquirrel_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Mansquirrel</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Moleman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Moleman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Thrumbo_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Thrumbo</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Thrumboman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Thrumboman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Thrumboman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Dromedary_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Dromedary</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Hurseman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Elk_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Elk</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Hurseman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Horse_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Horse</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Hurseman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Caribou_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Caribou</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Hurseman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Donkey_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Donkey</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Hurseman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Hurseman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Hurseman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Megascarab_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Megascarab</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manscarab</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Spelopede_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Spelopede</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manscarab</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Megaspider_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Megaspider</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Manscarab</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Manscarab_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Manscarab</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Iguana_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Iguana</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Lizardman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Cobra_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Cobra</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Lizardman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>Tortoise_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>Tortoise</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>GR_Lizardman</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
<rjw.RaceGroupDef>
<defName>GR_Lizardman_Group</defName>
<hybridRaceParents><!-- hybrid Pregnancy checks both parents races (who are not same race) -->
<li>Human</li>
<li>GR_Lizardman</li>
</hybridRaceParents>
<hybridChildKindDef><!-- hybrid Pregnancy child KindDef output -->
<li>Human</li>
</hybridChildKindDef>
</rjw.RaceGroupDef>
</Defs>

View file

@ -0,0 +1,103 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using UnityEngine;
using HarmonyLib;
using rjw;
namespace RJW_BGS
{
[HarmonyPatch(typeof(Hediff_BasePregnancy))]
public class BasePregnancyPatcher
{
public static List<string> supportedHybridRaces = new List<string>()
{
"GR_Manbear",
"GR_Bearman",
"GR_Manalope",
"GR_Booman",
"GR_Manchicken",
"GR_Turkeyman",
"GR_Manffalo",
"GR_Muffaloman",
"GR_Manwolf",
"GR_Dogman",
"GR_Mancat",
"GR_Catman",
"GR_Mansquirrel",
"GR_Moleman",
"GR_Thrumboman",
"GR_Hurseman",
"GR_Manscarab",
"GR_Lizardman"
};
public static List<string> supportedInitialAnimalRaces = new List<string>()
{
"Bear_Grizzly",
"Bear_Polar",
"Boomalope",
"Chicken",
"Duck",
"Turkey",
"Goose",
"Ostrich",
"Emu",
"Cassowary",
"Cow",
"Muffalo",
"Bison",
"Yak",
"Warg",
"Wolf_Timber",
"Wolf_Arctic",
"Fox_Fennec",
"Fox_Red",
"Fox_Arctic",
"Husky",
"LabradorRetriever",
"YorkshireTerrier",
"Cougar",
"Panther",
"Lynx",
"Cat",
"GuineaPig",
"Hare",
"Snowhare",
"Squirrel",
"Rat",
"Raccoon",
"Thrumbo",
"Dromedary",
"Elk",
"Horse",
"Caribou",
"Donkey",
"Megascarab",
"Spelopede",
"Megaspider",
"Iguana",
"Cobra",
"Tortoise"
};
public static HediffDef controler = DefDatabase<HediffDef>.GetNamed("rjw_genes_animal_control_hediff", false);
[HarmonyPostfix]
[HarmonyPatch("GenerateBabies")]
public static void addHedif (Hediff_BasePregnancy __instance)
{
if (controler == null) return;
foreach (Pawn baby in __instance.babies)
{
if(baby != null && supportedHybridRaces.Contains(baby.kindDef.race.defName))
baby.health.AddHediff(controler);
}
}
}
}

View file

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using RJW_BGS;
using HarmonyLib;
using rjw;
using static rjw.Hediff_BasePregnancy;
using RJW_Genes;
namespace RJW_BGS
{
[HarmonyPatch(typeof(PregnancyHelper))]
public class PregnancyHelperPatcher
{
[HarmonyPrefix]
[HarmonyPatch("AddPregnancyHediff")]
public static bool AddPregnancyHediffPrefix(Pawn mother, Pawn father)
{
if (!RJW_BGSSettings.rjw_bgs_VE_genetics) return true;
if (mother == null || father == null) return true;
bool humanMotherAndSupportedAnimal = mother.IsHuman() && BasePregnancyPatcher.supportedInitialAnimalRaces.Contains(father.kindDef.race.defName);
bool humanMotherAndSupportedHybrid = mother.IsHuman() && BasePregnancyPatcher.supportedHybridRaces.Contains(father.kindDef.race.defName);
bool humanFatherAndSupportedAnimal = father.IsHuman() && BasePregnancyPatcher.supportedInitialAnimalRaces.Contains(mother.kindDef.race.defName);
bool humanFatherAndSupportedHybrid = father.IsHuman() && BasePregnancyPatcher.supportedHybridRaces.Contains(mother.kindDef.race.defName);
if (!(humanMotherAndSupportedAnimal || humanMotherAndSupportedHybrid||humanFatherAndSupportedAnimal|| humanFatherAndSupportedHybrid)) return true;
if (humanMotherAndSupportedAnimal)
{
Hediff_BasePregnancy.Create<Hediff_BestialPregnancy>(mother, father, DnaGivingParent.Father);
return false;
}
else if (humanMotherAndSupportedHybrid)
{
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
RJW_Genes.ModLog.Message("preg hediffdefof PregnantHuman " + RimWorld.HediffDefOf.PregnantHuman);
PregnancyHelper.StartVanillaPregnancy(mother, father);
return false;
}
else if (humanFatherAndSupportedAnimal)
{
Hediff_BasePregnancy.Create<Hediff_BestialPregnancy>(mother, father, DnaGivingParent.Mother);
return false;
}
else if (humanFatherAndSupportedHybrid)
{
Hediff_BasePregnancy.Create<Hediff_BestialPregnancy>(mother, father, DnaGivingParent.Father);
return false;
}
return true;
}
}
}

View file

@ -30,6 +30,8 @@ namespace RJW_BGS
listing_Standard.Gap(5f);
listing_Standard.CheckboxLabeled("genes as xenogenes", ref rjw_bgs_animal_genes_as_xenogenes, "If toggled, animal genes will be added as xenogenes.", 0f, 1f);
listing_Standard.Gap(5f);
listing_Standard.CheckboxLabeled("enable VE genetics hybridation", ref rjw_bgs_VE_genetics, "If enabled and if you have VE genetics it will enable the hybridation system.", 0f, 1f);
listing_Standard.Gap(5f);
listing_Standard.CheckboxLabeled("detailed-debug", ref rjw_bgs_detailed_debug, "Adds detailed information to the log about pregnancies and genes.", 0f, 1f);
listing_Standard.End();
}
@ -41,11 +43,13 @@ namespace RJW_BGS
Scribe_Values.Look<float>(ref RJW_BGSSettings.rjw_bgs_global_gene_chance, "rjw_bgs_global_gene_chance", RJW_BGSSettings.rjw_bgs_global_gene_chance, true);
Scribe_Values.Look<bool>(ref RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, "rjw_bgs_animal_genes_as_xenogenes", RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, true);
Scribe_Values.Look<bool>(ref RJW_BGSSettings.rjw_bgs_detailed_debug, "rjw_bgs_detailed_debug", RJW_BGSSettings.rjw_bgs_detailed_debug, true);
Scribe_Values.Look<bool>(ref RJW_BGSSettings.rjw_bgs_VE_genetics, "rjw_bgs_VE_genetics", RJW_BGSSettings.rjw_bgs_VE_genetics, true);
}
public static float rjw_bgs_global_gene_chance = 1f;
public static bool rjw_bgs_enabled = true;
public static bool rjw_bgs_animal_genes_as_xenogenes = false;
public static bool rjw_bgs_detailed_debug = false;
public static bool rjw_bgs_VE_genetics = true;
}
}

View file

@ -125,5 +125,43 @@ namespace RJW_Genes
}
}
}
[HarmonyPrefix]
[HarmonyPatch("SetFather")]
private static bool SetFatherPrefix(Pawn pawn, Pawn newFather)
{
Pawn father = pawn.GetFather();
if (father != newFather)
{
if (father != null)
{
pawn.relations.RemoveDirectRelation(PawnRelationDefOf.Parent, father);
}
if (newFather != null)
{
pawn.relations.AddDirectRelation(PawnRelationDefOf.Parent, newFather);
}
}
return false;
}
[HarmonyPrefix]
[HarmonyPatch("SetMother")]
private static bool SetMotherPrefix(Pawn pawn, Pawn newMother)
{
Pawn mother = pawn.GetMother();
if (mother != newMother)
{
if (mother != null)
{
pawn.relations.RemoveDirectRelation(PawnRelationDefOf.Parent, mother);
}
if (newMother != null)
{
pawn.relations.AddDirectRelation(PawnRelationDefOf.Parent, newMother);
}
}
return false;
}
}
}

View file

@ -32,6 +32,11 @@ namespace RJW_Genes
Pawn giver = props.pawn; // orgasmer
Pawn receiver = props.partner;
if (receiver.genes == null)
{
return;
}
Hediff vasectomy;
receiver.health.hediffSet.TryGetHediff(vasectomydef, out vasectomy);
@ -40,10 +45,7 @@ namespace RJW_Genes
List<Hediff> pawnparts = giver.GetGenitalsList();
List<Hediff> partnerparts = receiver.GetGenitalsList();
var interaction = rjw.Modules.Interactions.Helpers.InteractionHelper.GetWithExtension(props.dictionaryKey);
if (receiver.genes == null)
{
return;
}
if (!(props.sexType == xxx.rjwSextype.Anal && receiver.genes.HasActiveGene(GeneDefOf.rjw_genes_fertile_anus)))
return;

View file

@ -69,7 +69,12 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_mechbreeder;
public static readonly GeneDef rjw_genes_zoophile;
public static readonly GeneDef rjw_genes_fertile_anus;
// Cum
public static readonly GeneDef rjw_genes_mating_call;
public static readonly GeneDef rjw_genes_fervent_ovipositor;
public static readonly GeneDef rjw_genes_insectbreeder;
public static readonly GeneDef rjw_genes_insectincubator;
// Cum
public static readonly GeneDef rjw_genes_no_cum;
public static readonly GeneDef rjw_genes_much_cum;
public static readonly GeneDef rjw_genes_very_much_cum;
@ -97,6 +102,8 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_aphrodisiac_pheromones;
public static readonly GeneDef rjw_genes_sexual_mytosis;
public static readonly GeneDef rjw_genes_hormonal_saliva;
public static readonly GeneDef rjw_genes_cocoonweaver;
public static readonly GeneDef rjw_genes_sex_tamer;
// Cosmetic
public static readonly GeneDef rjw_genes_succubus_tail;

View file

@ -0,0 +1,36 @@
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse.Sound;
using Verse;
using RimWorld.Planet;
using rjw;
using HarmonyLib;
using Verse.AI;
namespace RJW_Genes
{
public class CompAbilityEffect_MatingCall : CompAbilityEffect
{
bool fired = false;
private new CompProperties_AbilityMatingCall Props
{
get
{
return (CompProperties_AbilityMatingCall)this.props;
}
}
public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
{
base.Apply(target, dest);
ModLog.Message($"{this.parent.pawn} is casting MatingCall");
AnimalBreedingHelper.DoAnimalBreedingPulse(this.parent.pawn, Props.calldistance);
}
}
}

View file

@ -0,0 +1,31 @@
using RimWorld;
using rjw;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using Verse.AI;
namespace RJW_Genes
{
public class CompAbilityEffect_PheromoneSpit : CompAbilityEffect
{
bool fired = false;
private new CompProperties_AbilityPheromoneSpit Props
{
get
{
return (CompProperties_AbilityPheromoneSpit)this.props;
}
}
public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
{
base.Apply(target, dest);
AnimalBreedingHelper.DoAnimalBreedingPulse(target.Pawn, Props.calldistance);
}
}
}

View file

@ -0,0 +1,20 @@
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RJW_Genes
{
public class CompProperties_AbilityMatingCall : CompProperties_AbilityEffect
{
public int calldistance;
public CompProperties_AbilityMatingCall()
{
this.compClass = typeof(CompAbilityEffect_MatingCall);
}
}
}

View file

@ -0,0 +1,18 @@
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RJW_Genes {
public class CompProperties_AbilityPheromoneSpit : CompProperties_AbilityEffect
{
public int calldistance;
public CompProperties_AbilityPheromoneSpit()
{
this.compClass = typeof(CompAbilityEffect_PheromoneSpit);
}
}
}

View file

@ -0,0 +1,70 @@
using RimWorld;
using rjw;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse.AI;
using Verse;
namespace RJW_Genes
{
public class AnimalBreedingHelper
{
/// <summary>
/// Finds animals in a distance around a pawn, and schedules a breeding job.
/// This is done regardless of the animals genitalia at the moment.
/// This function has no checks if the Pawn is hostile, downed, etc., such checks must be done upstream!
/// </summary>
/// <param name="toBeBred">The pawn that will be target of breeding animals</param>
/// <param name="pulse_distance">The range around the pawn for which animals will be triggered.</param>
public static void DoAnimalBreedingPulse(Pawn toBeBred, int pulse_distance, bool ends_manhunter = true)
{
IEnumerable<Pawn> animals = GetAnimalsInRange(toBeBred.Map, toBeBred.Position, pulse_distance);
int breeder_counter = 0;
foreach (Pawn animal in animals)
{
if (ends_manhunter)
EndManHunter(animal);
ForceBreedingJob(toBeBred, animal);
breeder_counter++;
}
ModLog.Message($"{breeder_counter} of {animals.Count()} Animals in range are trying to breed {toBeBred}");
}
private static IEnumerable<Pawn> GetAnimalsInRange(Map map, IntVec3 position, int distance)
{
IEnumerable<Pawn> animals =
map.mapPawns
.AllPawnsSpawned
.Where<Pawn>((Func<Pawn, bool>)(p =>
p.IsNonMutantAnimal
&& p.Position.InHorDistOf(position, distance)
&& xxx.is_healthy_enough(p))
);
return animals;
}
private static void ForceBreedingJob(Pawn toBeBred, Pawn animal)
{
// Stopping all Jobs in this way is a bit heavy - but as it's only about Animals this should be fine.
animal.jobs.CaptureAndClearJobQueue();
animal.jobs.StopAll();
Job job = JobMaker.MakeJob(xxx.animalBreed, toBeBred);
animal.jobs.TryTakeOrderedJob(job);
}
private static void EndManHunter(Pawn animal)
{
if (animal.MentalState != null && (animal.MentalState.def == MentalStateDefOf.Manhunter || animal.MentalState.def == MentalStateDefOf.ManhunterPermanent))
{
animal?.MentalState?.RecoverFromState();
}
}
}
}

View file

@ -9,6 +9,7 @@ using HarmonyLib;
using rjw;
using RimWorld;
using Verse;
using LicentiaLabs;
namespace RJW_Genes
@ -28,18 +29,16 @@ namespace RJW_Genes
// 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.
/*
TODO: Move this back in, once Licentia is 1.5 compatible. It should not drastically change.
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>();
inflatorFood.CurLevel += donatedNutrition;
if (inflatorFood != null)
inflatorFood.CurLevel += donatedNutrition;
}
*/
}
}
}

View file

@ -1,4 +1,4 @@
//using LicentiaLabs;
using LicentiaLabs;
using Verse;
@ -15,7 +15,7 @@ namespace RJW_Genes
{
private const int RESET_INTERVAL = 60000; // 60k should be 1 day
/*
public override void PostAdd()
{
base.PostAdd();
@ -51,6 +51,6 @@ namespace RJW_Genes
candidate.Severity = severity;
}
}
*/
}
}

View file

@ -55,6 +55,18 @@ namespace RJW_Genes
compHediffBodyPart.updatesize(0f);
}
this.pawn.health.AddHediff(this.additional_genital, part, null, null);
foreach (Gene g in pawn.genes.GenesListForReading)
{
if (g.def.defName == "rjw_genes_hydrolic_genitalia")
{
g.PostAdd();
}
if (g.def.defName == "rjw_genes_bionic_genitalia")
{
g.PostAdd();
return;
}
}
}
// Token: 0x040001B0 RID: 432

View file

@ -36,6 +36,18 @@ namespace RJW_Genes
});
GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Female);
}
foreach(Gene g in pawn.genes.GenesListForReading)
{
if(g.def.defName== "rjw_genes_hydrolic_genitalia")
{
g.PostAdd();
}
if (g.def.defName == "rjw_genes_bionic_genitalia")
{
g.PostAdd();
return;
}
}
}
public override void Notify_OnPawnGeneration()

View file

@ -36,6 +36,18 @@ namespace RJW_Genes
});
GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Male);
}
foreach (Gene g in pawn.genes.GenesListForReading)
{
if (g.def.defName == "rjw_genes_hydrolic_genitalia")
{
g.PostAdd();
}
if (g.def.defName == "rjw_genes_bionic_genitalia")
{
g.PostAdd();
return;
}
}
}
public override void Notify_OnPawnGeneration()

View file

@ -11,5 +11,8 @@ namespace RJW_Genes
public HediffDef_PartBase vagina;
public HediffDef_PartBase anus;
public HediffDef_PartBase breasts;
}
}

View file

@ -17,7 +17,7 @@ namespace RJW_Genes
Apply();
}
protected virtual void Apply()
public virtual void Apply()
{
if (this.Active)
{
@ -27,7 +27,7 @@ namespace RJW_Genes
ModLog.Error($"Gene {def} failed to change genitals - Need a modExtension with Class=\"{typeof(GenitaliaTypeExtension).FullName}\".");
return;
}
GenitaliaChanger.ChangeGenitalia(pawn, genitals.penis, genitals.vagina, genitals.anus);
GenitaliaChanger.ChangeGenitalia(pawn, genitals.penis, genitals.vagina, genitals.anus, genitals.breasts);
}
}
}

View file

@ -2,6 +2,7 @@
using RimWorld;
using Verse;
using System.Collections.Generic;
using rjw.Modules.Interactions.DefModExtensions;
namespace RJW_Genes
{
@ -16,7 +17,7 @@ namespace RJW_Genes
/// <param name="penisReplacement">the new type of penis</param>
/// <param name="vaginaReplacement">the new type of vagina</param>
/// <param name="anusReplacement">the new type of anus</param>
public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement = null, HediffDef vaginaReplacement = null, HediffDef anusReplacement = null)
public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement = null, HediffDef vaginaReplacement = null, HediffDef anusReplacement = null , HediffDef breastsReplacement = null)
{
var oldParts = Genital_Helper.get_AllPartsHediffList(pawn);
BodyPartRecord correctBPR;
@ -40,6 +41,12 @@ namespace RJW_Genes
if (Genital_Helper.is_vagina(existingGenital) && vaginaReplacement != null && existingGenital.def != vaginaReplacement)
replacementGenital = HediffMaker.MakeHediff(vaginaReplacement, pawn, correctBPR);
if (is_breast(existingGenital) && breastsReplacement != null && existingGenital.def != breastsReplacement)
{
correctBPR = Genital_Helper.get_breastsBPR(pawn);
replacementGenital = HediffMaker.MakeHediff(breastsReplacement, pawn, correctBPR);
}
if (IsAnus(existingGenital) && anusReplacement != null && existingGenital.def != anusReplacement)
{
correctBPR = Genital_Helper.get_anusBPR(pawn);
@ -74,7 +81,18 @@ namespace RJW_Genes
{
return candidate.def.defName.ToLower().Contains("anus"); }
public static bool IsArtificial(Hediff candidate)
public static bool is_breast(Hediff hed)
{
if (!GenitalPartExtension.TryGet(hed, out var ext))
{
return false;
}
return ext.family == rjw.Modules.Interactions.Enums.GenitalFamily.Breasts;
}
public static bool IsArtificial(Hediff candidate)
{
return candidate.def.defName.ToLower().Contains("bionic") || candidate.def.defName.ToLower().Contains("archo");
}
@ -88,5 +106,7 @@ namespace RJW_Genes
}
}
}
}

View file

@ -16,12 +16,11 @@ namespace RJW_Genes
/// <returns>The first GeneDef of the pawn related to GenitaliaTypes</returns>
public static GeneDef GetGenitaliaTypeGeneForPawn(Pawn pawn)
{
foreach (var gene in pawn.genes.GenesListForReading)
{
foreach (var gene in pawn.genes.GenesListForReading)
{
if (gene is Gene_GenitaliaType)
if (!gene.Overridden)
return gene.def;
return gene.def;
}
return null;
}
@ -46,23 +45,7 @@ namespace RJW_Genes
public static HediffDef GetBreastsForGene(GeneDef gene)
{
if (gene == null)
return Genital_Helper.average_breasts;
switch (gene.defName)
{
//TODO: Do I want the default to be generic or average?
case "rjw_genes_equine_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_canine_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_feline_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_demonic_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_dragon_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_slime_genitalia": return Genital_Helper.slime_breasts;
case "rjw_genes_udder_breasts": return Genital_Helper.udder_breasts;
case "rjw_genes_ovipositor_genitalia": return Genital_Helper.average_breasts;
default: return Genital_Helper.average_breasts;
}
return gene?.GetModExtension<GenitaliaTypeExtension>()?.breasts ?? Genital_Helper.average_breasts;
}
public static bool PawnStillNeedsGenitalia(Pawn pawn)

View file

@ -0,0 +1,12 @@
using Verse;
using RimWorld;
using rjw;
using System;
namespace RJW_Genes
{
public class QirkExtension : DefModExtension
{
public string Satisfiedquirk;
}
}

View file

@ -0,0 +1,64 @@
using Verse;
using RimWorld;
using rjw;
using System.Collections.Generic;
using rjw.Modules.Quirks;
using System;
namespace RJW_Genes
{
public class QuirkPatcher
{
/// <summary>
/// This Patch is applied after the quirk-satisfaction and checks
/// a) which quirks can the sex-partner satisfy?
/// b) which of the quirks has the pawn?
///
/// The result of the Satisfied is an integer, based on the original framework.
/// The framework "just checks" the number of satisfied quirks - we increase this number with this postfix.
/// </summary>
public static void CountSatisfiedPostfix(ref int __result, SexProps props)
{
if (props == null) return;
Pawn pawn = props.pawn;
Pawn partner = props.partner;
if (partner == null || pawn == null) return;
if(!pawn.IsHuman()||!partner.IsHuman()) return;
List<string> potentiallySatisfiedQuirks = new List<string>();
foreach (Gene gene in partner.genes.GenesListForReading)
{
if (partner.genes.HasActiveGene(gene.def))
{
string satisfiable_quirk = gene.def?.GetModExtension<QirkExtension>()?.Satisfiedquirk;
if (!string.IsNullOrEmpty(satisfiable_quirk))
{
potentiallySatisfiedQuirks.Add(satisfiable_quirk);
}
}
}
int QuirksSatisfiedByGenes = -1;
foreach (Quirk quirk in Quirk.All)
{
if (pawn.Has(quirk))
{
foreach (string satisfiableQuirk in potentiallySatisfiedQuirks)
{
if (!string.IsNullOrEmpty(satisfiableQuirk) && quirk.LocaliztionKey == satisfiableQuirk)
{
QuirksSatisfiedByGenes++;
Quirk.AddThought(pawn);
}
}
}
}
if(QuirksSatisfiedByGenes > 0)
__result = __result + QuirksSatisfiedByGenes;
return;
}
}
}

View file

@ -1,5 +1,6 @@
using HarmonyLib;
using RimWorld;
using RimWorld.BaseGen;
using RimWorld.QuestGen;
using rjw;
using rjw.Modules.Shared.Extensions;
@ -10,6 +11,7 @@ using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
@ -24,13 +26,19 @@ namespace RJW_Genes
private const float SEVERITY_INCREASE_PER_ORGASM = 0.075f;
public static void Postfix(JobDriver_Sex __instance)
public static void Postfix(JobDriver_Sex __instance)
{
Pawn orgasmingPawn = __instance.pawn;
if (orgasmingPawn != null && GeneUtility.HasGeneNullCheck(orgasmingPawn, GeneDefOf.rjw_genes_sexual_mytosis) && ! orgasmingPawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_mytosis_shock_hediff))
bool hasPollutedMytosis = false;
if (orgasmingPawn != null && (GeneUtility.HasGeneNullCheck(orgasmingPawn, GeneDefOf.rjw_genes_sexual_mytosis) || hasPollutedMytosis) && ! orgasmingPawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_mytosis_shock_hediff))
{
var mytosisHediff = GetOrgasmMytosisHediff(orgasmingPawn);
mytosisHediff.Severity += SEVERITY_INCREASE_PER_ORGASM;
if(hasPollutedMytosis && orgasmingPawn.Spawned && GridsUtility.IsPolluted(orgasmingPawn.Position, orgasmingPawn.Map))
{
mytosisHediff.Severity -= SEVERITY_INCREASE_PER_ORGASM;
}
if (mytosisHediff.Severity >= 1.0)
{
@ -163,7 +171,6 @@ namespace RJW_Genes
private static Pawn_GeneTracker CopyGeneTracker(Pawn toCopyTo, Pawn_GeneTracker toCopyFrom)
{
var tracker = new Pawn_GeneTracker(toCopyTo);
// Due to Overwrite logics, we first add Endogenes and then a second pass on xenogenes
// Pass 1: Endogenes
@ -182,12 +189,6 @@ namespace RJW_Genes
}
tracker.Reset();
var skin = tracker.GetMelaninGene();
var hair = tracker.GetHairColorGene();
//ModLog.Message($"{toCopyTo} had Skin {skin.defName} and {hair.defName} as colour-genes");
return tracker;
}
@ -294,7 +295,6 @@ namespace RJW_Genes
}
}
}
/*
@ -318,5 +318,4 @@ Verse.TickList:Tick ()
Verse.TickManager:TickManagerUpdate ()
Verse.Game:UpdatePlay ()
Verse.Root_Play:Update ()
*/

View file

@ -0,0 +1,57 @@
using HarmonyLib;
using RimWorld;
using rjw;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using static RJWSexperience.RsDefOf;
namespace RJW_Genes
{
[HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
public static class Patch_SexualTamer
{
public static void Postfix(SexProps props)
{
// 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() || props.partner == null)
return;
// Exit for non Animals or Animal on Animal
if (!(props.pawn.IsAnimal() || props.partner.IsAnimal() ) )
return;
Pawn animal = props.pawn.IsAnimal() ? props.pawn : props.partner;
Pawn human = props.pawn.IsAnimal() ? props.partner : props.pawn;
// Another Short Sanity Check
if (animal == null || human == null ) return;
if (human.genes == null) return;
if (human.genes.HasActiveGene(GeneDefOf.rjw_genes_sex_tamer))
{
// Case 1: Wild Animal - Try to Tame
if (animal.AnimalOrWildMan() && animal.Faction == null)
{
if(RJW_Genes_Settings.rjw_genes_detailed_debug)
ModLog.Message($"{human} is a sextamer with bestiality on wild animal {animal} - trying to recruit");
human.interactions.TryInteractWith(animal, InteractionDefOf.TameAttempt);
}
// Case 2: Colony Animal - Try to Train
else if (human.Faction != null && animal.Faction == human.Faction && animal.training != null)
{
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
ModLog.Message($"{human} is a sextamer with bestiality on colony animal {animal} - trying to train");
var trainable = animal.training.NextTrainableToTrain();
animal.training.Train(trainable, human);
}
}
}
}
}

View file

@ -4,50 +4,73 @@ using System;
using rjw;
using RJWLoveFeeding;
using RimWorld;
using System.Linq;
namespace RJW_Genes
{
[StaticConstructorOnStartup]
internal static class HarmonyInit
{
static HarmonyInit()
{
Harmony harmony = new Harmony("rjw_genes");
var original = typeof(Hediff_Pregnant).GetMethod("Tick");
harmony.Unpatch(original, HarmonyPatchType.Prefix, "rjw");
var RJW_Pregnancy_Tick_Prefixes = typeof(Hediff_Pregnant).GetMethod("Tick");
harmony.Unpatch(RJW_Pregnancy_Tick_Prefixes, HarmonyPatchType.Prefix, "rjw");
harmony.PatchAll();
if (ModsConfig.BiotechActive)
{
harmony.Patch(typeof(SexUtility).GetMethod("ProcessSex"), new HarmonyMethod(typeof(LustFeeding), "Postfix", null));
}
// Non-rapist would_rape bypass for limbic stimulator
harmony.Patch(AccessTools.Method(typeof(SexAppraiser), nameof(SexAppraiser.would_rape)),
postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.would_rape_PostFix)));
// Non-rapist is_rapist bypass for limbic stimulator
harmony.Patch(AccessTools.Method(typeof(xxx), nameof(xxx.is_rapist)),
postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.is_rapist_PostFix)));
// Non-Rapist trait rape thoughts
harmony.Patch(AccessTools.Method(typeof(AfterSexUtility), nameof(AfterSexUtility.think_about_sex_Rapist)),
postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.think_about_sex_Rapist_PostFix)));
// Bioscaffold double gestation speed tick
harmony.Patch(AccessTools.Method(typeof(PawnUtility), nameof(PawnUtility.BodyResourceGrowthSpeed)),
postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.MultiplyPregnancy)));
// Hediff_Labor state capture
harmony.Patch(AccessTools.Method(typeof(Hediff_Labor), nameof(Hediff_Labor.PostRemoved)),
postfix: new HarmonyMethod(typeof(PatchLitteredBirth), nameof(PatchLitteredBirth.Hediff_Labor_PostRemovedPostFix)));
// OvaryAgitator/Gene_LitteredBirths multibirth logic
harmony.Patch(AccessTools.Method(typeof(Hediff_LaborPushing), nameof(Hediff_LaborPushing.PostRemoved)),
postfix: new HarmonyMethod(typeof(PatchLitteredBirth), nameof(PatchLitteredBirth.Hediff_LaborPushing_PostRemovedPostFix)));
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)
try
{
((Action)(() =>
{
if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
{
// Gene: Cumflation Immunity [Prefix Patch]
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)),
prefix: new HarmonyMethod(typeof(Patch_Cumflation), nameof(Patch_Cumflation.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)));
}
}))();
}
catch (TypeLoadException ex)
{
// To be expected for people without Licentia Labs
}
}
}

View file

@ -22,18 +22,5 @@ namespace RJW_Genes
public static readonly HediffDef OvaryAgitator;
public static readonly HediffDef Bioscaffold;
public static HediffDef NeedlePenis = HediffDef.Named("NeedlePenis");
public static HediffDef PigPenis = HediffDef.Named("PigPenis");
public static HediffDef MarinePenis = HediffDef.Named("MarinePenis");
public static HediffDef TentaclePenis = HediffDef.Named("TentaclePenis");
public static HediffDef GolemPenis = HediffDef.Named("GolemPenis");
public static HediffDef OrcPenis = HediffDef.Named("OrcPenis");
public static HediffDef GhostPenis = HediffDef.Named("GhostPenis");
public static HediffDef NecroPenis = HediffDef.Named("NecroPenis");
public static HediffDef GhostVagina = HediffDef.Named("GhostVagina");
public static HediffDef Vagina = HediffDef.Named("Vagina");
public static HediffDef Penis = HediffDef.Named("Penis");
public static HediffDef Anus = HediffDef.Named("Anus");
}
}

Binary file not shown.

Binary file not shown.

View file

@ -48,11 +48,13 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Animal_Inheritance\InheritanceUtility.cs" />
<Compile Include="Animal_Inheritance\Patches\BasePregnancyPatcher.cs" />
<Compile Include="Animal_Inheritance\Patches\Patch_RJW_BestialityPregnancyUtility.cs" />
<Compile Include="Animal_Inheritance\Patches\Patch_RJW_HediffInsect_Egg.cs" />
<Compile Include="Animal_Inheritance\Patches\Patch_Vanilla_PregnancyUtility.cs" />
<Compile Include="Animal_Inheritance\Defs\RaceGeneDef.cs" />
<Compile Include="Animal_Inheritance\Defs\RaceGeneDef_Helper.cs" />
<Compile Include="Animal_Inheritance\Patches\PregnancyHelperPatcher.cs" />
<Compile Include="Animal_Inheritance\Settings\RJW_BGSSettings.cs" />
<Compile Include="Animal_Inheritance\Settings\RJW_BGSSettingsController.cs" />
<Compile Include="Animal_Inheritance\Defs\BestialityGeneInheritanceDef.cs" />
@ -64,8 +66,13 @@
<Compile Include="Common\ModLog.cs" />
<Compile Include="Common\Defs\TickIntervalExtension.cs" />
<Compile Include="Common\Patches\PatchImplants.cs" />
<Compile Include="Genes\Breeding\Gene_FerventOvipositor.cs" />
<Compile Include="Genes\Breeding\Gene_InsectIncubator.cs" />
<Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_MatingCall.cs" />
<Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_PheromoneSpit.cs" />
<Compile Include="Genes\Breeding\Abilities\CompProperties_AbilityMatingCall.cs" />
<Compile Include="Genes\Breeding\Abilities\CompProperties_AbilityPheromoneSpit.cs" />
<Compile Include="Genes\Breeding\AnimalBreedingHelper.cs" />
<Compile Include="Genes\Breeding\Genes\Gene_FerventOvipositor.cs" />
<Compile Include="Genes\Breeding\Genes\Gene_InsectIncubator.cs" />
<Compile Include="Genes\Damage\Gene_Elasticity.cs" />
<Compile Include="Genes\Life_Force\Events\SuccubusVisit\IncidentWorker_SuccubusVisit.cs" />
<Compile Include="Genes\Life_Force\Events\SuccubusVisit\LordJob_SuccubusVisit.cs" />
@ -76,8 +83,8 @@
<Compile Include="Common\Patches\PatchGetParents.cs" />
<Compile Include="Common\Patches\PatchPregnancyHelper.cs" />
<Compile Include="GeneDefOf.cs" />
<Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
<Compile Include="Genes\Breeding\PatchMechBirth.cs" />
<Compile Include="Genes\Breeding\Genes\Gene_MechBreeder.cs" />
<Compile Include="Genes\Breeding\Patches\PatchMechBirth.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_Femboy.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_UdderBreasts.cs" />
<Compile Include="Genes\Gender\Defs\GenderFluidExtension.cs" />
@ -161,6 +168,8 @@
<Compile Include="Genes\Patches\LustFeeding.cs" />
<Compile Include="Genes\Patches\MultiplePregnancies.cs" />
<Compile Include="Genes\Patch_AddNotifyOnGeneration.cs" />
<Compile Include="Genes\Quirks\Defs\QirkExtension.cs" />
<Compile Include="Genes\Quirks\QuirkPatcher.cs" />
<Compile Include="Genes\Special\Abilities\CompAbilityEffect_CocoonWeaver.cs" />
<Compile Include="Genes\Special\Abilities\CompProperties_AbilityCocoonWeaver.cs" />
<Compile Include="Genes\Special\Defs\AgeTransferExtension.cs" />
@ -168,6 +177,7 @@
<Compile Include="Genes\Special\Patches\Patch_AgeDrain.cs" />
<Compile Include="Genes\Special\Patches\Patch_HormonalSaliva.cs" />
<Compile Include="Genes\Special\Patches\Patch_OrgasmMytosis.cs" />
<Compile Include="Genes\Special\Patches\Patch_SexualTamer.cs" />
<Compile Include="Genes\Special\Thoughts\ThoughtWorker_Aphrodisiac_Pheromones_Social.cs" />
<Compile Include="LetterDefOf.cs" />
<Compile Include="Interactions\SuccubusTailjob\CompAbility_SexInteractionRequirements.cs" />
@ -189,8 +199,6 @@
</ItemGroup>
<ItemGroup>
<Content Include="GeneDefs_GenitaliaTypeEndogenes.xml" />
<Content Include="RJW.dll" />
<Content Include="RJWSexperience.dll" />
</ItemGroup>
<ItemGroup>
<Reference Include="0Harmony, Version=2.2.2.0, Culture=neutral, processorArchitecture=MSIL">
@ -203,8 +211,10 @@
<HintPath>..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="RJW, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<Reference Include="LicentiaLabs">
<HintPath>..\..\licentia-labs-master\Assemblies\LicentiaLabs.dll</HintPath>
</Reference>
<Reference Include="RJW">
<HintPath>..\..\rjw\1.5\Assemblies\RJW.dll</HintPath>
<Private>False</Private>
</Reference>
@ -231,5 +241,8 @@
<ItemGroup>
<Folder Include="Genes\Gender\Patches\" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>