mirror of
https://github.com/vegapnk/RJW-Genes.git
synced 2026-06-18 19:25:57 +00:00
Compare commits
No commits in common. "main" and "2.5.4" have entirely different histories.
46 changed files with 2124 additions and 176 deletions
Binary file not shown.
|
|
@ -27,7 +27,7 @@
|
|||
<li Class="RJW_Genes.GenitaliaTypeExtension">
|
||||
<penis>HorsePenis</penis>
|
||||
<vagina>HorseVagina</vagina>
|
||||
<anus>Anus</anus>
|
||||
<anus>GenericAnus</anus>
|
||||
</li>
|
||||
</modExtensions>
|
||||
<displayOrderInCategory>802</displayOrderInCategory>
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
<li Class="RJW_Genes.GenitaliaTypeExtension">
|
||||
<penis>DogPenis</penis>
|
||||
<vagina>DogVagina</vagina>
|
||||
<anus>Anus</anus>
|
||||
<anus>GenericAnus</anus>
|
||||
</li>
|
||||
</modExtensions>
|
||||
<displayOrderInCategory>803</displayOrderInCategory>
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
<li Class="RJW_Genes.GenitaliaTypeExtension">
|
||||
<penis>CatPenis</penis>
|
||||
<vagina>CatVagina</vagina>
|
||||
<anus>Anus</anus>
|
||||
<anus>GenericAnus</anus>
|
||||
</li>
|
||||
</modExtensions>
|
||||
<displayOrderInCategory>804</displayOrderInCategory>
|
||||
|
|
@ -106,7 +106,7 @@
|
|||
<li Class="RJW_Genes.GenitaliaTypeExtension">
|
||||
<penis>DragonPenis</penis>
|
||||
<vagina>DragonVagina</vagina>
|
||||
<anus>Anus</anus>
|
||||
<anus>GenericAnus</anus>
|
||||
</li>
|
||||
<li Class="RJW_Genes.QirkExtension">
|
||||
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
|
||||
|
|
@ -189,8 +189,6 @@
|
|||
<modExtensions>
|
||||
<li Class="RJW_Genes.GenitaliaTypeExtension">
|
||||
<penis>HemiPenis</penis>
|
||||
<vagina>CloacalVagina</vagina>
|
||||
<anus>CloacalAnus</anus>
|
||||
</li>
|
||||
<li Class="RJW_Genes.QirkExtension">
|
||||
<Satisfiedquirk>ScaleLoverQuirk</Satisfiedquirk>
|
||||
|
|
@ -235,31 +233,4 @@
|
|||
</exclusionTags>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef ParentName="GeneGenitalTypeBase">
|
||||
<defName>rjw_genes_rodent_genitalia</defName>
|
||||
<label>rodent genitalia</label>
|
||||
<description>Carriers of this gene develop rodent genitalia.</description>
|
||||
<iconPath>Genes/Icons/Genitalia_croc_icon</iconPath>
|
||||
<modExtensions>
|
||||
<li Class="RJW_Genes.GenitaliaTypeExtension">
|
||||
<penis>RodentPenis</penis>
|
||||
<vagina>RodentVagina</vagina>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef ParentName="GeneGenitalTypeBase">
|
||||
<defName>rjw_genes_cloacal_genitalia</defName>
|
||||
<label>cloacal genitalia</label>
|
||||
<description>Carriers of this gene develop cloacal genitalia.</description>
|
||||
<iconPath>Genes/Icons/Genitalia_croc_icon</iconPath>
|
||||
<modExtensions>
|
||||
<li Class="RJW_Genes.GenitaliaTypeExtension">
|
||||
<penis>CloacalPenis</penis>
|
||||
<vagina>CloacalVagina</vagina>
|
||||
<anus>CloacalAnus</anus>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
</Defs>
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
<capMods>
|
||||
<li>
|
||||
<capacity>Consciousness</capacity>
|
||||
<offset>-0.05</offset>
|
||||
<offset>-0.5</offset>
|
||||
</li>
|
||||
</capMods>
|
||||
<statOffsets>
|
||||
|
|
|
|||
30
1.6/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml
Normal file
30
1.6/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Defs>
|
||||
<RJW_BGS.RaceGeneDef Name="Insect_base" Abstract="True">
|
||||
<defName>Insect_base</defName>
|
||||
<genes>
|
||||
<li>
|
||||
<defName>AG_InsectBlood</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_ovipositor_genitalia</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
<RJW_BGS.RaceGeneDef Name="Slime_base" Abstract="True">
|
||||
<defName>Slime_base</defName>
|
||||
<genes>
|
||||
<li>
|
||||
<defName>AG_SlimeBlood</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_slime_genitalia</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
</Defs>
|
||||
285
1.6/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml
Normal file
285
1.6/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml
Normal file
|
|
@ -0,0 +1,285 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Defs>
|
||||
<RJW_BGS.RaceGeneDef Name = "Canine">
|
||||
<defName>Canine</defName>
|
||||
<raceGroups>
|
||||
<li>Canine_Group</li>
|
||||
<li>CanineAnimal</li>
|
||||
<li>CanineSingleGenderAnimal</li>
|
||||
<li>CanineSkinAnimal</li>
|
||||
</raceGroups>
|
||||
<genes>
|
||||
<li>
|
||||
<defName>Ears_Floppy</defName>
|
||||
<chance>0.75</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Tail_Furry</defName>
|
||||
<chance>0.2</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Furskin</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_canine_genitalia</defName>
|
||||
<chance>0.4</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>ViolenceDisabled</defName>
|
||||
<chance>0.05</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>PsychicBonding</defName>
|
||||
<chance>0.05</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Mood_Sanguine</defName>
|
||||
<chance>0.1</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
|
||||
<RJW_BGS.RaceGeneDef>
|
||||
<defName>Insect</defName>
|
||||
<raceGroups>
|
||||
<li>Insect_Group</li>
|
||||
<li>ArthropodOvipositorAnimal</li>
|
||||
<li>ArthropodOvipositorHornyAnimal</li>
|
||||
</raceGroups>
|
||||
<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>Feline</defName>
|
||||
<raceGroups>
|
||||
<li>Feline_Group</li>
|
||||
<li>FelineAnimal</li>
|
||||
<li>FelineHornyAnimal</li>
|
||||
<li>FelineSingleGenderAnimal</li>
|
||||
<li>AA_SandProwlerAnimal</li>
|
||||
</raceGroups>
|
||||
|
||||
<genes>
|
||||
<li>
|
||||
<defName>Tail_Furry</defName>
|
||||
<chance>0.2</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Furskin</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Ears_Cat</defName>
|
||||
<chance>0.9</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>PsychicBonding</defName>
|
||||
<chance>0.05</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Sleepy</defName>
|
||||
<chance>0.25</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>DarkVision</defName>
|
||||
<chance>0.25</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_feline_genitalia</defName>
|
||||
<chance>0.25</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
<RJW_BGS.RaceGeneDef>
|
||||
<defName>Equine</defName>
|
||||
<raceGroups>
|
||||
<li>Equine_Group</li>
|
||||
<li>HorseAnimal</li>
|
||||
</raceGroups>
|
||||
<genes>
|
||||
<li>
|
||||
<defName>Furskin</defName>
|
||||
<chance>0.2</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_equine_genitalia</defName>
|
||||
<chance>0.25</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>MoveSpeed_Quick</defName>
|
||||
<chance>0.4</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>MoveSpeed_VeryQuick</defName>
|
||||
<chance>0.1</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_much_fluid</defName>
|
||||
<chance>0.3</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_very_much_fluid</defName>
|
||||
<chance>0.05</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Body_Hulk</defName>
|
||||
<chance>0.4</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
<RJW_BGS.RaceGeneDef>
|
||||
<defName>Dragon</defName>
|
||||
<raceGroups>
|
||||
<li>Dragon_Group</li>
|
||||
<li>ThrumboAnimal</li>
|
||||
<li>DragonAnimal</li>
|
||||
<li>DragonSingleGenderAnimal</li>
|
||||
</raceGroups>
|
||||
<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_fluid</defName>
|
||||
<chance>0.3</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_very_much_fluid</defName>
|
||||
<chance>0.05</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Body_Hulk</defName>
|
||||
<chance>0.7</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
<RJW_BGS.RaceGeneDef>
|
||||
<defName>Rodent</defName>
|
||||
<raceGroups>
|
||||
<li>Rodent_Group</li>
|
||||
<li>RodentAnimal</li>
|
||||
<li>RodentSingleGenderAnimal</li>
|
||||
<li>DragonSingleGenderAnimal</li>
|
||||
</raceGroups>
|
||||
<genes>
|
||||
<li>
|
||||
<defName>Furskin</defName>
|
||||
<chance>0.2</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Fertile</defName>
|
||||
<chance>0.25</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>FastRunner</defName>
|
||||
<chance>0.6</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_small_genitalia</defName>
|
||||
<chance>0.6</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Immunity_Strong</defName>
|
||||
<chance>0.4</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>ToxicEnvironmentResistance_Partial</defName>
|
||||
<chance>0.1</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Body_Thin</defName>
|
||||
<chance>0.45</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
<RJW_BGS.RaceGeneDef>
|
||||
<defName>Racoon</defName>
|
||||
<raceGroups>
|
||||
<li>Raccon_Group</li>
|
||||
<li>RaccoonAnimal</li>
|
||||
</raceGroups>
|
||||
<genes>
|
||||
<li>
|
||||
<defName>Furskin</defName>
|
||||
<chance>0.25</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Tail_Furry</defName>
|
||||
<chance>0.25</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>StrongStomach</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>Immunity_Strong</defName>
|
||||
<chance>0.2</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>ToxicEnvironmentResistance_Partial</defName>
|
||||
<chance>0.1</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
</Defs>
|
||||
65
1.6/Defs/RaceGeneDefs/RaceGeneDefs_template.xml
Normal file
65
1.6/Defs/RaceGeneDefs/RaceGeneDefs_template.xml
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Defs>
|
||||
<!-- this is to disable the xml, remove it for your own xml
|
||||
<RJW_BGS.RaceGeneDef>
|
||||
<defName>Canine</defName>
|
||||
defName can be anything you want, as long as it is unique
|
||||
|
||||
<raceGroups>
|
||||
<li>Canine_Group</li>
|
||||
<li>CanineAnimal</li> from racesupport
|
||||
<li>CanineSingleGenderAnimal</li> from racesupport
|
||||
<li>CanineSkinAnimal</li> from racesupport
|
||||
</raceGroups>
|
||||
RJW.Racegroupdef, all animals in the added raceGroups will be part of this group, RJW race support uses other defnames and overwrite vanilla ones, so add them to if you use it.
|
||||
|
||||
<raceNames>
|
||||
<li> </li>
|
||||
</raceNames>
|
||||
For more direct control you can use raceNames directly. Use the defName of the animal. Can also use modded animals.
|
||||
|
||||
<pawnKindNames>
|
||||
<li> </li>
|
||||
</pawnKindNames>
|
||||
For even more direct control you can use pawnKindNames.
|
||||
|
||||
<priority>0</priority>
|
||||
You can use priority incase you have multiple racegenedefs with the same animal under the same list (racegroup, racenames or pawnKindNames). If not assigned the value is 0. Higher priority is chosen.
|
||||
|
||||
The RaceGeneDef for an animal will first be decided by if it is in the pawnkindNames, after that racenames and lastly racegroup,
|
||||
so if there is for a wolf a RaceGeneDef with the canine group and a second which has wolf under raceNames it will always use the second one to determine
|
||||
which genes can be inherited
|
||||
|
||||
<genes>
|
||||
<li>
|
||||
<defName>Ears_Floppy</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_slime_genitalia</defName> You can add modded genes which will be ignored if the mod is inactive.
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
</genes>
|
||||
For each gene you need to find the defname and give it a chance to appear. Each gene is rolled independently.
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
this is to disable the xml, remove it for your own xml -->
|
||||
|
||||
<!-- this is to disable the xml, remove it for your own xml
|
||||
You can use parents to have animals get specific genes in addition to the group. So warg children will have a chance for Ears_Floppy, rjw_genes_slime_genitalia and StrongStomach
|
||||
<RJW_BGS.RaceGeneDef ParentName = "Canine">
|
||||
<defName>Warg</defName>
|
||||
<raceNames>
|
||||
<li>Warg</li>
|
||||
</raceNames>
|
||||
<genes>
|
||||
<li>
|
||||
<defName>StrongStomach</defName>
|
||||
<chance>0.5</chance>
|
||||
</li>
|
||||
</genes>
|
||||
</RJW_BGS.RaceGeneDef>
|
||||
|
||||
|
||||
this is to disable the xml, remove it for your own xml -->
|
||||
</Defs>
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
<baseOpinionOffset>-3</baseOpinionOffset>
|
||||
</li>
|
||||
<li>
|
||||
<label>carries way more genetic diseases than me</label>
|
||||
<label>carries more way genetic diseases than me</label>
|
||||
<baseOpinionOffset>-8</baseOpinionOffset>
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
|||
4
1.6/Languages/English/Keyed/Bestiality.xml
Normal file
4
1.6/Languages/English/Keyed/Bestiality.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<rjw_genes_bestiality_hybrid_name>animal-hybrid</rjw_genes_bestiality_hybrid_name>
|
||||
</LanguageData>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
|
||||
<rjw_genes_animal_inheritance_settings_enabled_key>enabled</rjw_genes_animal_inheritance_settings_enabled_key>
|
||||
<rjw_genes_animal_inheritance_settings_enabled_explanation>If toggled, Animal Pregnancies will try inherit genes.</rjw_genes_animal_inheritance_settings_enabled_explanation>
|
||||
|
||||
<rjw_genes_animal_inheritance_settings_chance_key></rjw_genes_animal_inheritance_settings_chance_key>
|
||||
<rjw_genes_animal_inheritance_settings_chance_explanation></rjw_genes_animal_inheritance_settings_chance_explanation>
|
||||
|
||||
<rjw_genes_animal_inheritance_settings_added_as_xenogene_key>genes as xenogenes</rjw_genes_animal_inheritance_settings_added_as_xenogene_key>
|
||||
<rjw_genes_animal_inheritance_settings_added_as_xenogene_explanation>If toggled on, animal genes will be added as xenogenes.</rjw_genes_animal_inheritance_settings_added_as_xenogene_explanation>
|
||||
|
||||
<rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_key>enable VE genetics hybridation</rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_key>
|
||||
<rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_explanation>If enabled and if you have VE genetics it will enable the hybridation system.</rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_explanation>
|
||||
|
||||
<rjw_genes_animal_inheritance_settings_detailed_debug_key></rjw_genes_animal_inheritance_settings_detailed_debug_key>
|
||||
<rjw_genes_animal_inheritance_settings_detailed_debug_explanation></rjw_genes_animal_inheritance_settings_detailed_debug_explanation>
|
||||
</LanguageData>
|
||||
|
|
@ -4,6 +4,5 @@
|
|||
<StatsReport_NoChildren>Pawn doesn't have any children.</StatsReport_NoChildren>
|
||||
<StatsReport_ManyChildren>Pawn has a decent amount of children.</StatsReport_ManyChildren>
|
||||
<StatsReport_VeryManyChildren>Pawn has a lot of children.</StatsReport_VeryManyChildren>
|
||||
<RJW_Genes_GenitalsNotAlterable>Unable to geneticaly adapt or alter {PAWN_nameDef}'s genitals.</RJW_Genes_GenitalsNotAlterable>
|
||||
|
||||
</LanguageData>
|
||||
|
|
|
|||
Binary file not shown.
19
1.6/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml
Normal file
19
1.6/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml
Normal 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="VEF.AnimalBehaviours.HediffCompProperties_Draftable">
|
||||
<makeNonFleeingToo>true</makeNonFleeingToo>
|
||||
</li>
|
||||
</comps>
|
||||
<isBad>false</isBad>
|
||||
</HediffDef>
|
||||
|
||||
</Defs>
|
||||
654
1.6/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml
Normal file
654
1.6/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml
Normal 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_fluid</defName>
|
||||
<chance>0.3</chance>
|
||||
</li>
|
||||
<li>
|
||||
<defName>rjw_genes_very_much_fluid</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_fluid</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>
|
||||
164
1.6/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml
Normal file
164
1.6/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<Defs>
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Bear_Group</defName>
|
||||
<!-- Other Pawn is always assumed to be human -->
|
||||
<SupportedParentKindDefs>
|
||||
<li>Bear_Grizzly</li>
|
||||
<li>Bear_Polar</li>
|
||||
</SupportedParentKindDefs>
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Manbear</li>
|
||||
<li>GR_Bearman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Boomalope_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Boomalope</li>
|
||||
</SupportedParentKindDefs>
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Manalope</li>
|
||||
<li>GR_Booman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Poultry_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Chicken</li>
|
||||
<li>Cassowary</li>
|
||||
<li>Emu</li>
|
||||
<li>Ostrich</li>
|
||||
<li>Goose</li>
|
||||
<li>Turkey</li>
|
||||
<li>Duck</li>
|
||||
</SupportedParentKindDefs>
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Manchicken</li>
|
||||
<li>GR_Turkeyman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Bovine_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Muffalo</li>
|
||||
<li>Cow</li>
|
||||
<li>Bison</li>
|
||||
<li>Yak</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Manffalo</li>
|
||||
<li>GR_Muffaloman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Canine_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Warg</li>
|
||||
<li>Wolf_Timber</li>
|
||||
<li>Wolf_Arctic</li>
|
||||
<li>Fox_Fennec</li>
|
||||
<li>Fox_Red</li>
|
||||
<li>Fox_Arctic</li>
|
||||
<li>Husky</li>
|
||||
<li>LabradorRetriever</li>
|
||||
<li>YorkshireTerrier</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Manwolf</li>
|
||||
<li>GR_Dogman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Feline_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Cougar</li>
|
||||
<li>Panther</li>
|
||||
<li>Lynx</li>
|
||||
<li>Cat</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Mancat</li>
|
||||
<li>GR_Catman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Rabbit_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>GuineaPig</li>
|
||||
<li>Hare</li>
|
||||
<li>Snowhare</li>
|
||||
<li>Squirrel</li>
|
||||
<li>Rat</li>
|
||||
<li>Raccoon</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Mansquirrel</li>
|
||||
<li>GR_Moleman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Thrumbo_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Thrumbo</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Thrumboman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Equine_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Dromedary</li>
|
||||
<li>Elk</li>
|
||||
<li>Horse</li>
|
||||
<li>Caribou</li>
|
||||
<li>Donkey</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Hurseman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Insect_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Megascarab</li>
|
||||
<li>Spelopede</li>
|
||||
<li>Megaspider</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Manscarab</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
<RJW_Genes.VGEHybridOffspringDefs>
|
||||
<defName>Reptile_Group</defName>
|
||||
<SupportedParentKindDefs>
|
||||
<li>Iguana</li>
|
||||
<li>Cobra</li>
|
||||
<li>Tortoise</li>
|
||||
</SupportedParentKindDefs>
|
||||
|
||||
<PossibleHybridChildKindDefs>
|
||||
<li>GR_Lizardman</li>
|
||||
</PossibleHybridChildKindDefs>
|
||||
</RJW_Genes.VGEHybridOffspringDefs>
|
||||
|
||||
</Defs>
|
||||
|
|
@ -9,9 +9,16 @@
|
|||
<li Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VU_Returned" or defName="VU_Ghoul" or defName="VU_Frankenstein"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_Necro_genitalia</li>
|
||||
<li>rjw_genes_no_sex_need</li>
|
||||
</value>
|
||||
</li>
|
||||
<li Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VU_Revenant"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_Necro_genitalia</li>
|
||||
</value>
|
||||
</li>
|
||||
<li Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VU_Lycantrope"]/genes</xpath> <!-- sic -->
|
||||
<value>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
namespace RJW_BGS
|
||||
{
|
||||
public class BestialityGeneInheritanceDef
|
||||
{
|
||||
public string defName;
|
||||
public float chance = 1f;
|
||||
}
|
||||
}
|
||||
21
1.6/Source/Animal_Inheritance/Defs/RaceGeneDef.cs
Normal file
21
1.6/Source/Animal_Inheritance/Defs/RaceGeneDef.cs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
using rjw;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
public class RaceGeneDef : Def
|
||||
{
|
||||
public int priority;
|
||||
public string raceGroup; //keeping this for backwards compatibility
|
||||
public List<string> raceGroups; //racegroup, but in list form so multiple can be entered, preference to use this over racegroup
|
||||
public List<string> raceNames;
|
||||
public List<string> pawnKindNames;
|
||||
public List<BestialityGeneInheritanceDef> genes;
|
||||
public string hybridName;
|
||||
}
|
||||
}
|
||||
147
1.6/Source/Animal_Inheritance/Defs/RaceGeneDef_Helper.cs
Normal file
147
1.6/Source/Animal_Inheritance/Defs/RaceGeneDef_Helper.cs
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using rjw;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
public class RaceGeneDef_Helper
|
||||
{
|
||||
//code based on racegroupdefinternal which has a similar function
|
||||
public static RaceGeneDef GetRaceGeneDefInternal(Pawn pawn)
|
||||
{
|
||||
List<RaceGeneDef> Valids = ValidRaceGeneDefs(pawn);
|
||||
if (Valids.Count > 0)
|
||||
{
|
||||
RaceGeneDef result = Valids.MaxBy(r => r.priority);
|
||||
return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<RaceGeneDef> ValidRaceGeneDefs(Pawn pawn)
|
||||
{
|
||||
PawnKindDef kindDef = pawn.kindDef;
|
||||
if (kindDef == null)
|
||||
{
|
||||
RJW_Genes.ModLog.Warning($"Error looking up PawnKindDef for {pawn.Name} - Could not lookup Animal Inheritance Genes");
|
||||
return null;
|
||||
}
|
||||
|
||||
string raceName = kindDef.race.defName;
|
||||
string pawnKindName = kindDef.defName;
|
||||
//Wild animals have no name, so we will use pawnkindname instead
|
||||
string pawnName = pawn.Name != null ? pawn.Name.ToStringFull : pawnKindName;
|
||||
|
||||
RaceGroupDef raceGroupDef = GetRaceGroupDef(kindDef);
|
||||
|
||||
RJW_Genes.ModLog.Debug($"Looking up Animal-Inheritable Genes for {pawnName} with KindDef {kindDef.defName},RaceName {raceName}, PawnKind {pawnKindName} and RaceGroup {raceGroupDef.defName}");
|
||||
|
||||
IEnumerable<RaceGeneDef> allDefs = DefDatabase<RaceGeneDef>.AllDefs;
|
||||
List<RaceGeneDef> pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group)
|
||||
{
|
||||
List<string> pawnKindNames = group.pawnKindNames;
|
||||
return pawnKindNames != null && pawnKindNames.Contains(pawnKindName);
|
||||
}).ToList<RaceGeneDef>();
|
||||
if (pawnKindDefs.Count() > 0)
|
||||
{
|
||||
DebugPrintRaceGeneDefs("PawnKindDefs", pawnName,pawnKindDefs);
|
||||
return pawnKindDefs;
|
||||
}
|
||||
RJW_Genes.ModLog.Debug($"Did not find PawnKindDefs for {pawnName}");
|
||||
|
||||
List<RaceGeneDef> raceKindDefs = allDefs.Where(delegate (RaceGeneDef group)
|
||||
{
|
||||
List<string> raceNames = group.raceNames;
|
||||
return raceNames != null && raceNames.Contains(raceName);
|
||||
}).ToList<RaceGeneDef>();
|
||||
if (raceKindDefs.Count() > 0)
|
||||
{
|
||||
DebugPrintRaceGeneDefs("PawnKindDefs", pawnName, raceKindDefs);
|
||||
return raceKindDefs;
|
||||
}
|
||||
RJW_Genes.ModLog.Debug($"Did not find RaceKindDefs for {pawnName}");
|
||||
|
||||
List<RaceGeneDef> raceGroupDefs = new List<RaceGeneDef>();
|
||||
if (raceGroupDef != null)
|
||||
{
|
||||
raceGroupDefs = allDefs.Where(delegate (RaceGeneDef group)
|
||||
{
|
||||
string raceGroupDefName = group.raceGroup;
|
||||
List<string> list_raceGroupDefName = group.raceGroups;
|
||||
return (raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName)
|
||||
|| (list_raceGroupDefName != null && list_raceGroupDefName.Contains(raceGroupDef.defName));
|
||||
}).ToList<RaceGeneDef>();
|
||||
}
|
||||
|
||||
if (raceGroupDefs.Count() > 0)
|
||||
{
|
||||
DebugPrintRaceGeneDefs("RaceKindDefs", pawnName, raceGroupDefs);
|
||||
return raceGroupDefs;
|
||||
}
|
||||
RJW_Genes.ModLog.Debug($"Did not find RaceGroupDefs for {pawnName}");
|
||||
|
||||
RJW_Genes.ModLog.Message($"Did not find any Genes inheritable for {pawnName}");
|
||||
return new List<RaceGeneDef>();
|
||||
}
|
||||
|
||||
private static void DebugPrintRaceGeneDefs(String header,String identifier,List<RaceGeneDef> defs)
|
||||
{
|
||||
if (RJW_Genes.RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||
{
|
||||
var defString = "[";
|
||||
foreach (RaceGeneDef raceGeneDef in defs)
|
||||
defString += $"({raceGeneDef.priority}:{raceGeneDef.defName} - {raceGeneDef.genes.Count} Genes)";
|
||||
defString += "]";
|
||||
RJW_Genes.ModLog.Message($"Found the following {header}-Genes for {identifier}: {defString}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// These two Functions are Duplicates of private functions in RJW RaceGroupDef_Helper, used to get a racegroupdef from a kindDef.
|
||||
/// If the RaceGroupDef_Helper class is made accessable directly, these functions can be removed.
|
||||
/// </summary>
|
||||
/// <param name="kindDef"></param>
|
||||
/// <returns></returns>
|
||||
private static RaceGroupDef GetRaceGroupDef(PawnKindDef kindDef)
|
||||
{
|
||||
var raceName = kindDef.race.defName;
|
||||
var pawnKindName = kindDef.defName;
|
||||
var groups = DefDatabase<RaceGroupDef>.AllDefs;
|
||||
|
||||
var kindMatches = groups.Where(group => group.pawnKindNames?.Contains(pawnKindName) ?? false).ToList();
|
||||
var raceMatches = groups.Where(group => group.raceNames?.Contains(raceName) ?? false).ToList();
|
||||
var count = kindMatches.Count() + raceMatches.Count();
|
||||
if (count == 0)
|
||||
{
|
||||
//ModLog.Message($"Pawn named '{pawn.Name}' matched no RaceGroupDef. If you want to create a matching RaceGroupDef you can use the raceName '{raceName}' or the pawnKindName '{pawnKindName}'.");
|
||||
return null;
|
||||
}
|
||||
else if (count == 1)
|
||||
{
|
||||
// ModLog.Message($"Pawn named '{pawn.Name}' matched 1 RaceGroupDef.");
|
||||
return kindMatches.Concat(raceMatches).Single();
|
||||
}
|
||||
else
|
||||
{
|
||||
// ModLog.Message($"Pawn named '{pawn.Name}' matched {count} RaceGroupDefs.");
|
||||
|
||||
// If there are multiple RaceGroupDef matches, choose one of them.
|
||||
// First prefer defs NOT defined in rjw.
|
||||
// Then prefer a match by kind over a match by race.
|
||||
return kindMatches.FirstOrDefault(match => !IsThisMod(match))
|
||||
?? raceMatches.FirstOrDefault(match => !IsThisMod(match))
|
||||
?? kindMatches.FirstOrDefault()
|
||||
?? raceMatches.FirstOrDefault();
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsThisMod(Def def)
|
||||
{
|
||||
var rjwContent = LoadedModManager.RunningMods.Single(pack => pack.Name == "RimJobWorld");
|
||||
return rjwContent.AllDefs.Contains(def);
|
||||
}
|
||||
}
|
||||
}
|
||||
14
1.6/Source/Animal_Inheritance/Defs/VGEHybridOffspringDefs.cs
Normal file
14
1.6/Source/Animal_Inheritance/Defs/VGEHybridOffspringDefs.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
public class VGEHybridOffspringDefs : Verse.Def
|
||||
{
|
||||
public List<Verse.PawnKindDef> SupportedParentKindDefs;
|
||||
public List<Verse.PawnKindDef> PossibleHybridChildKindDefs;
|
||||
}
|
||||
}
|
||||
167
1.6/Source/Animal_Inheritance/InheritanceUtility.cs
Normal file
167
1.6/Source/Animal_Inheritance/InheritanceUtility.cs
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
using rjw;
|
||||
using RJW_Genes;
|
||||
using System.Linq;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
public class InheritanceUtility
|
||||
{
|
||||
public static List<GeneDef> AnimalInheritedGenes(Pawn father, Pawn mother)
|
||||
{
|
||||
List<GeneDef> genelist = new List<GeneDef>();
|
||||
//If Both are Humans, or Both are animals, do nothing & return empty GeneList
|
||||
if (!mother.RaceProps.Humanlike && !father.RaceProps.Humanlike)
|
||||
return genelist;
|
||||
if (mother.RaceProps.Humanlike && father.RaceProps.Humanlike)
|
||||
return genelist;
|
||||
|
||||
RJW_Genes.ModLog.Message($"Trigger an Animal-Gene-Inheritance for {father.Name} and {mother.Name}");
|
||||
//One parent must be an animal and the other must be human, so only one needs to return
|
||||
if (father != null && !father.RaceProps.Humanlike)
|
||||
{
|
||||
RJW_Genes.ModLog.Debug($"Father was found to be animal - looking up genes for {father.Name}");
|
||||
return SelectGenes(father);
|
||||
}
|
||||
if (mother != null && !mother.RaceProps.Humanlike)
|
||||
{
|
||||
RJW_Genes.ModLog.Debug($"Mother was found to be animal - looking up genes for {mother.Name}");
|
||||
return SelectGenes(mother);
|
||||
}
|
||||
|
||||
return genelist;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up potential genes for an animal,
|
||||
/// checks their chance and returns all 'triggered' genes.
|
||||
/// </summary>
|
||||
/// <param name="pawn">The animal for which to look up genes (Animals are Pawns in RW)</param>
|
||||
/// <returns>The genes that will be inherited from this animal.</returns>
|
||||
public static List<GeneDef> SelectGenes(Pawn pawn)
|
||||
{
|
||||
List<GeneDef> genelist = new List<GeneDef>();
|
||||
RaceGeneDef raceGeneDef = RaceGeneDef_Helper.GetRaceGeneDefInternal(pawn);
|
||||
if (raceGeneDef != null)
|
||||
{
|
||||
foreach (BestialityGeneInheritanceDef gene in raceGeneDef.genes)
|
||||
{
|
||||
if (gene.chance * RJW_BGSSettings.rjw_bgs_global_gene_chance >= Rand.Range(0.01f,1f))
|
||||
{
|
||||
GeneDef tmpGene = DefDatabase<GeneDef>.GetNamed(gene.defName, false);
|
||||
if (tmpGene != null)
|
||||
{
|
||||
genelist.Add(tmpGene);
|
||||
}
|
||||
else
|
||||
{
|
||||
RJW_Genes.ModLog.Warning($"Unable to find gene {gene.defName}, skipping. May need to update {raceGeneDef.defName} definition.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
RJW_Genes.ModLog.Debug($"From {raceGeneDef.genes.Count} possible genes in {raceGeneDef.defName}, {genelist.Count} were added by chance ({RJW_BGSSettings.rjw_bgs_global_gene_chance} chance multiplier from Settings).");
|
||||
return genelist;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Adds a list of Genes to the pawns existing GeneSet.
|
||||
/// Whether it is added as a Xenogene or Endogene is configured in Mod-Settings.
|
||||
/// </summary>
|
||||
/// <param name="pawn">The pawn for which Genes will be added</param>
|
||||
/// <param name="genes">The Genes to add (Endogene by default, Xenogene with Mod Settings)</param>
|
||||
public static void AddGenes(Pawn pawn, List<GeneDef> genes)
|
||||
{
|
||||
foreach (GeneDef gene in genes)
|
||||
{
|
||||
pawn.genes.AddGene(gene, RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initiates a bestiality baby with genes if the baby does not exist earlier.
|
||||
/// This is used to make rjw-egg-pregnancies work.
|
||||
/// Related file: PatchRJWHediffInsect_Egg.cs
|
||||
/// </summary>
|
||||
/// <param name="mother">The mother of the baby.</param>
|
||||
/// <param name="dad">The father of the baby.</param>
|
||||
/// <param name="baby">The baby created in non-pregnancy-way (has 0 Genes yet)</param>
|
||||
public static void NewGenes(Pawn mother, Pawn dad, Pawn baby)
|
||||
{
|
||||
if (!RJW_BGSSettings.rjw_bgs_enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RJW_Genes.ModLog.Message($"Triggering an New-Gene Animal-Gene-Inheritance for {baby.Name} ({dad.Name} + {mother.Name})");
|
||||
if (baby.RaceProps.Humanlike)
|
||||
{
|
||||
if (baby.genes == null)
|
||||
{
|
||||
baby.genes = new Pawn_GeneTracker(baby);
|
||||
}
|
||||
|
||||
//Remove the hair and skin genes pawns always start with, should get correct ones from human parent anyway.
|
||||
for (int i = baby.genes.Endogenes.Count - 1; i >= 0; i--)
|
||||
{
|
||||
baby.genes.RemoveGene(baby.genes.Endogenes[i]);
|
||||
}
|
||||
|
||||
List<GeneDef> genes = PregnancyUtility.GetInheritedGenes(dad, mother);
|
||||
List<GeneDef> beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
|
||||
InheritanceUtility.AddGenes(baby, beastgenes);
|
||||
InheritanceUtility.AddGenes(baby, genes);
|
||||
if(baby.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin) == null)
|
||||
{
|
||||
AddSkinColor(mother, dad, baby);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddSkinColor(Pawn mother, Pawn father, Pawn baby)
|
||||
{
|
||||
if (mother != null && mother.genes != null)
|
||||
{
|
||||
GeneDef gene = mother.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin);
|
||||
if (gene != null)
|
||||
{
|
||||
baby.genes.AddGene(gene, false);
|
||||
}
|
||||
}
|
||||
else if (father != null && father.genes != null)
|
||||
{
|
||||
GeneDef gene = father.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin);
|
||||
if (gene != null)
|
||||
{
|
||||
baby.genes.AddGene(gene, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Message("Could not find skincolor of " + baby.Name + "'s parents, giving random skincolor.");
|
||||
baby.genes.AddGene(PawnSkinColors.RandomSkinColorGene(baby), false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used only for debugging, to see what you loaded and how it looks.
|
||||
/// </summary>
|
||||
private static void LogAllFoundRaceGroupGenes()
|
||||
{
|
||||
foreach (RaceGroupDef def in DefDatabase<RaceGroupDef>.AllDefs)
|
||||
{
|
||||
Log.Message("defName = " + def.defName);
|
||||
if (def.raceNames != null)
|
||||
{
|
||||
foreach (string race in def.raceNames)
|
||||
{
|
||||
Log.Message(race);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
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 Patch_RJW_BasePregnancy_VanillaExpandedGenetics
|
||||
{
|
||||
public static HediffDef controler = DefDatabase<HediffDef>.GetNamed("rjw_genes_animal_control_hediff", false);
|
||||
|
||||
/// <summary>
|
||||
/// This Patch (only) adds the "rjw_genes_animal_control_hediff" to newborn VE hybrid-animals.
|
||||
/// </summary>
|
||||
/// <param name="__instance"></param>
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch("GenerateBabies")]
|
||||
public static void AddHediff (Hediff_BasePregnancy __instance)
|
||||
{
|
||||
|
||||
if (controler == null) return;
|
||||
|
||||
if (!RJW_BGSSettings.rjw_bgs_VE_genetics)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Pawn baby in __instance.babies)
|
||||
{
|
||||
if(baby != null && VGEHybridUtility.SupportedHybridRaces.Contains(baby.kindDef))
|
||||
baby.health.AddHediff(controler);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using HarmonyLib;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using rjw;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
[HarmonyPatch(typeof(Hediff_BasePregnancy), "Initialize")]
|
||||
public static class Patch_RJW_BestialityPregnancyUtility
|
||||
{
|
||||
[HarmonyPostfix]
|
||||
public static void AddGenes(Pawn mother, Pawn dad, ref Hediff_BasePregnancy __instance)
|
||||
{
|
||||
if (!RJW_BGSSettings.rjw_bgs_enabled || (!mother.IsAnimal && !dad.IsAnimal))
|
||||
{
|
||||
return;
|
||||
}
|
||||
foreach (Pawn baby in __instance.babies)
|
||||
{
|
||||
if (baby.RaceProps.Humanlike)
|
||||
{
|
||||
if (baby.genes == null)
|
||||
{
|
||||
baby.genes = new Pawn_GeneTracker(baby);
|
||||
}
|
||||
|
||||
//Remove the hair and skin genes pawns always start with, should get correct ones from human parent anyway.
|
||||
for (int i = baby.genes.Endogenes.Count - 1; i >= 0; i--)
|
||||
{
|
||||
baby.genes.RemoveGene(baby.genes.Endogenes[i]);
|
||||
}
|
||||
|
||||
List<GeneDef> humangenes = PregnancyUtility.GetInheritedGenes(dad, mother);
|
||||
List<GeneDef> beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
|
||||
InheritanceUtility.AddGenes(baby, beastgenes);
|
||||
InheritanceUtility.AddGenes(baby, humangenes);
|
||||
|
||||
// The mix-breed babies should be labelled hybrids
|
||||
baby.genes.hybrid = true;
|
||||
|
||||
//reason = "AbilityDisabledNoFertilinGene".Translate(this.parent.pawn);
|
||||
baby.genes.xenotypeName = "rjw_genes_bestiality_hybrid_name".Translate();
|
||||
|
||||
RJW_Genes.ModLog.Debug($"Conception of a Bestiality-Child - Added {humangenes.Count} human-genes and {beastgenes.Count} animal-genes.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Reflection.Emit;
|
||||
using HarmonyLib;
|
||||
using rjw;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
[HarmonyPatch(typeof(Hediff_InsectEgg), "GiveBirth")]
|
||||
public static class Patch_RJW_HediffInsect_Egg
|
||||
{
|
||||
[HarmonyTranspiler]
|
||||
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
MethodInfo newgenes = AccessTools.Method(typeof(InheritanceUtility), "NewGenes", null, null);
|
||||
FieldInfo implanter = AccessTools.Field(typeof(Hediff_InsectEgg), "implanter");
|
||||
FieldInfo father = AccessTools.Field(typeof(Hediff_InsectEgg), "father");
|
||||
|
||||
foreach (CodeInstruction instruction in instructions)
|
||||
{
|
||||
yield return instruction;
|
||||
if (instruction.opcode == OpCodes.Call && instruction.operand.ToString() == "Void BabyPostBirth(Verse.Pawn, Verse.Pawn, Verse.Pawn)")
|
||||
{
|
||||
yield return new CodeInstruction(OpCodes.Ldloc_0, null);
|
||||
yield return new CodeInstruction(OpCodes.Ldfld, implanter);
|
||||
yield return new CodeInstruction(OpCodes.Ldarg_0, null);
|
||||
yield return new CodeInstruction(OpCodes.Ldfld, father);
|
||||
yield return new CodeInstruction(OpCodes.Ldloc_1, null);
|
||||
yield return new CodeInstruction(OpCodes.Call, newgenes);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
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 Patch_RJW_PregnancyHelper_VanillaExpandedGenetics
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// This Patch changes the pregnancy logic to check for possible hybridization.
|
||||
/// Iff the hybridization applies, this prefix skips the normal AddPregnancyHediff (by returning false).
|
||||
///
|
||||
/// Small Note: Below we use `Hediff_BasePregnancy.Create<Hediff_BestialPregnancy>(mother, father, DnaGivingParent.Mother);`
|
||||
/// This completely creates the pregnancy, it does not need to be assigned to anything or added to some hediffs.
|
||||
///
|
||||
/// There was an issue with Pawn Generation and this has been Reworked - Please see #116 for more documentation.
|
||||
/// The current state of affairs is that hybrids are generated using RJW-Pregnancy and "switching" the Fathers KindDef only for Child Generation, before switching it back.
|
||||
/// It's not easy to just change the Babies kindDef, because RJW-Preg runs a PawnGeneration Request.
|
||||
/// Thus, if you just change that from Husky to Dogman, most of the things are still Husky and you get a lot of red errors after birth.
|
||||
///
|
||||
/// Relevant RJW Files:
|
||||
///
|
||||
/// - Hediff_BestialPregnancy https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Modules/Pregnancy/Hediffs/Hediff_BestialPregnancy.cs?ref_type=heads
|
||||
/// - Hediff_BasePregnancy https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Modules/Pregnancy/Hediffs/Hediff_BasePregnancy.cs?ref_type=heads
|
||||
/// </summary>
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch("AddPregnancyHediff")]
|
||||
public static bool AddPregnancyHediffPrefix(Pawn mother, Pawn father)
|
||||
{
|
||||
|
||||
// Error & Setting HandlingHandling, "true" means the normal method is run (and nothing else from this patch).
|
||||
// Behaviour of Harmony Prefixes: https://harmony.pardeike.net/articles/patching-prefix.html
|
||||
if (!RJW_BGSSettings.rjw_bgs_VE_genetics) return true;
|
||||
if (mother == null || father == null) return true;
|
||||
|
||||
RJW_Genes.ModLog.Debug("Trying to add RJW Pregnancy Hediff - Checking for potential VGE Animal-Hybridization");
|
||||
|
||||
bool humanMotherAndSupportedAnimal = xxx.is_human(mother) && VGEHybridUtility.SupportedInitialAnimalRaces.Contains(father.kindDef);
|
||||
bool humanMotherAndSupportedHybrid = xxx.is_human(mother) && VGEHybridUtility.SupportedHybridRaces.Contains(father.kindDef);
|
||||
bool humanFatherAndSupportedAnimal = xxx.is_human(father) && VGEHybridUtility.SupportedInitialAnimalRaces.Contains(mother.kindDef);
|
||||
bool humanFatherAndSupportedHybrid = xxx.is_human(father) && VGEHybridUtility.SupportedHybridRaces.Contains(mother.kindDef);
|
||||
|
||||
// Exit if there are no supported parents / nothing to do for my logic
|
||||
if (!(humanMotherAndSupportedAnimal || humanMotherAndSupportedHybrid || humanFatherAndSupportedAnimal || humanFatherAndSupportedHybrid))
|
||||
{
|
||||
RJW_Genes.ModLog.Debug("Aborting VGE-Hybdrization Pregnancy - Parents were unsupported RaceKinds");
|
||||
return true;
|
||||
}
|
||||
// Exit by chance
|
||||
if((new Random()).NextDouble() > RJW_BGSSettings.rjw_bgs_ve_genetics_chance)
|
||||
{
|
||||
RJW_Genes.ModLog.Debug($"VGE-Hybridization chance ({Math.Round(RJW_BGSSettings.rjw_bgs_ve_genetics_chance,3)*100}%) was not met - continuing with normal pregnancy behaviour.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (humanMotherAndSupportedAnimal)
|
||||
{
|
||||
RJW_Genes.ModLog.Debug("Found a human mother and a supported animal resulting in an animal-child - starting VGE pregnancy (rjw.Hediff_BestialPregnancy)");
|
||||
Hediff_BasePregnancy.Create<Hediff_BestialPregnancy>(mother, father, DnaGivingParent.Father);
|
||||
|
||||
var kindDef = VGEHybridUtility.LookupPossiblyOffspringHybrid(father.kindDef);
|
||||
var stored = father.kindDef;
|
||||
father.kindDef = kindDef;
|
||||
Hediff_BasePregnancy preg = Hediff_BasePregnancy.Create<Hediff_BestialPregnancy>(mother, father, DnaGivingParent.Father);
|
||||
father.kindDef = stored;
|
||||
|
||||
// "false" means the normal method is not run
|
||||
return false;
|
||||
}
|
||||
else if (humanMotherAndSupportedHybrid)
|
||||
{
|
||||
|
||||
RJW_Genes.ModLog.Debug("Found a human mother and a hybrid - this behaviour has been disabled from 2.2.1 onward - sorry :(");
|
||||
return true;
|
||||
}
|
||||
else if (humanFatherAndSupportedAnimal)
|
||||
{
|
||||
RJW_Genes.ModLog.Debug("Found a human father and a supported animal resulting in an animal-child - starting VGE pregnancy (rjw.Hediff_BestialPregnancy)");
|
||||
|
||||
var kindDef = VGEHybridUtility.LookupPossiblyOffspringHybrid(mother.kindDef);
|
||||
var stored = mother.kindDef;
|
||||
mother.kindDef = kindDef;
|
||||
Hediff_BasePregnancy preg = Hediff_BasePregnancy.Create<Hediff_BestialPregnancy>(mother, father, DnaGivingParent.Mother);
|
||||
mother.kindDef = stored;
|
||||
|
||||
return false;
|
||||
}
|
||||
else if (humanFatherAndSupportedHybrid)
|
||||
{
|
||||
RJW_Genes.ModLog.Debug("Found a human father and a hybrid - this behaviour has been disabled from 2.2.1 onward - sorry :(");
|
||||
return true;
|
||||
}
|
||||
|
||||
RJW_Genes.ModLog.Debug("Issues in applying the Patch for VGE hybdritization - doing nothing and continuing with normal pregnancy.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using HarmonyLib;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
/// <summary>
|
||||
/// This Patch is applied to change the normal pregnancy to add animal-inheritance.
|
||||
/// If the settings allow animal gene inheritance,
|
||||
/// the genes are determined and "simply added".
|
||||
/// </summary>
|
||||
[HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[]
|
||||
{
|
||||
typeof(Pawn),
|
||||
typeof(Pawn),
|
||||
//typeof(bool)
|
||||
}
|
||||
)]
|
||||
public static class Patch_Vanilla_PregnancyUtility
|
||||
{
|
||||
[HarmonyPostfix]
|
||||
public static void AnimalInheritedGenes(Pawn father, Pawn mother, ref GeneSet __result)
|
||||
{
|
||||
if (!RJW_BGSSettings.rjw_bgs_enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<GeneDef> genes = InheritanceUtility.AnimalInheritedGenes(father, mother);
|
||||
if (genes.Any())
|
||||
{
|
||||
RJW_Genes.ModLog.Debug($"Adding {(genes.Count)} Genes from an Animal-Pregnancy between {father} and {mother}");
|
||||
foreach (GeneDef gene in genes)
|
||||
{
|
||||
__result.AddGene(gene);
|
||||
}
|
||||
} else
|
||||
{
|
||||
RJW_Genes.ModLog.Debug($"Tried to add Genes from Animal-Pregnancy between {father} and {mother} but didn't find any");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
58
1.6/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
Normal file
58
1.6/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
public class RJW_BGSSettings : ModSettings
|
||||
{
|
||||
public static void DoWindowContents(Rect inRect)
|
||||
{
|
||||
//Copied from RJW settings mostly
|
||||
Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f);
|
||||
Rect rect = new Rect(0f, 0f, inRect.width - 16f, inRect.height + 300f);
|
||||
//Widgets.BeginScrollView(outRect, ref RJWSettings.scrollPosition, rect, true);
|
||||
Listing_Standard listing_Standard = new Listing_Standard();
|
||||
listing_Standard.maxOneColumn = true;
|
||||
listing_Standard.ColumnWidth = rect.width / 2.05f;
|
||||
listing_Standard.Begin(rect);
|
||||
listing_Standard.Gap(5f);
|
||||
listing_Standard.Gap(24f);
|
||||
listing_Standard.CheckboxLabeled("rjw_genes_animal_inheritance_settings_enabled_key".Translate(), ref rjw_bgs_enabled, "rjw_genes_animal_inheritance_settings_enabled_explanation".Translate(), 0f, 1f);
|
||||
//listing_Standard.CheckboxLabeled("sexfrenzy", ref sexfrenzy, "disable the effects", 0f, 1f);
|
||||
listing_Standard.Gap(5f);
|
||||
//1.6 Fix added (TipSignal?)(TipSignal)
|
||||
listing_Standard.Label("gene inheritance chance: " + Math.Round((double)(RJW_BGSSettings.rjw_bgs_global_gene_chance * 100f), 0).ToString() + "%", -1f, (TipSignal?)(TipSignal)"modify chance for a gene to be inherited.");
|
||||
RJW_BGSSettings.rjw_bgs_global_gene_chance = listing_Standard.Slider(RJW_BGSSettings.rjw_bgs_global_gene_chance, 0f, 5f);
|
||||
listing_Standard.Gap(5f);
|
||||
listing_Standard.CheckboxLabeled("rjw_genes_animal_inheritance_settings_added_as_xenogene_key".Translate(), ref rjw_bgs_animal_genes_as_xenogenes, "rjw_genes_animal_inheritance_settings_added_as_xenogene_explanation".Translate(), 0f, 1f);
|
||||
listing_Standard.Gap(5f);
|
||||
|
||||
listing_Standard.CheckboxLabeled("rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_key".Translate(), ref rjw_bgs_VE_genetics, "rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_explanation".Translate(), 0f, 1f);
|
||||
listing_Standard.Gap(5f);
|
||||
//1.6 Fix added (TipSignal?)(TipSignal)
|
||||
listing_Standard.Label("VE Hybrid Chance: " + Math.Round((double)(RJW_BGSSettings.rjw_bgs_ve_genetics_chance * 100f), 0).ToString() + "%", -1f, (TipSignal?)(TipSignal)"modify chance for a bestiality child to be hybrid.");
|
||||
RJW_BGSSettings.rjw_bgs_ve_genetics_chance = listing_Standard.Slider(RJW_BGSSettings.rjw_bgs_ve_genetics_chance, 0f, 1f);
|
||||
}
|
||||
|
||||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_Values.Look<bool>(ref RJW_BGSSettings.rjw_bgs_enabled, "rjw_bgs_enabled", RJW_BGSSettings.rjw_bgs_enabled, true);
|
||||
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_VE_genetics, "rjw_bgs_VE_genetics", RJW_BGSSettings.rjw_bgs_VE_genetics, true);
|
||||
Scribe_Values.Look<float>(ref RJW_BGSSettings.rjw_bgs_ve_genetics_chance, "rjw_bgs_ve_genetics_chance", RJW_BGSSettings.rjw_bgs_ve_genetics_chance, 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_VE_genetics = true;
|
||||
public static float rjw_bgs_ve_genetics_chance = 0.25f;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
public class RJW_BGSSettingsController : Mod
|
||||
{
|
||||
public RJW_BGSSettingsController(ModContentPack content) : base(content)
|
||||
{
|
||||
base.GetSettings<RJW_BGSSettings>();
|
||||
}
|
||||
|
||||
public override string SettingsCategory()
|
||||
{
|
||||
return "RJW Genes Animal Gene Inheritance";
|
||||
}
|
||||
public override void DoSettingsWindowContents(Rect inRect)
|
||||
{
|
||||
RJW_BGSSettings.DoWindowContents(inRect);
|
||||
}
|
||||
}
|
||||
}
|
||||
63
1.6/Source/Animal_Inheritance/VGEHybridUtility.cs
Normal file
63
1.6/Source/Animal_Inheritance/VGEHybridUtility.cs
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
using RJW_Genes;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_BGS
|
||||
{
|
||||
public class VGEHybridUtility
|
||||
{
|
||||
/// <summary>
|
||||
/// All VGE-Hybrids that can result from Bestiality - these are drawn from the existing XML-Defs.
|
||||
/// </summary>
|
||||
public static List<PawnKindDef> SupportedHybridRaces {
|
||||
get{return DefDatabase<VGEHybridOffspringDefs>.AllDefs.SelectMany(def => def.PossibleHybridChildKindDefs).Distinct().ToList();}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// All Animals that can produce VGE Hybrids - these are drawn from the existing XML-Defs.
|
||||
/// </summary>
|
||||
public static List<PawnKindDef> SupportedInitialAnimalRaces {
|
||||
get { return DefDatabase<VGEHybridOffspringDefs>.AllDefs.SelectMany(def => def.SupportedParentKindDefs).Distinct().ToList(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a possible Hybrid KindDef for a given Animal.
|
||||
/// Null if there is none.
|
||||
/// Random one if there are multiple.
|
||||
/// </summary>
|
||||
/// <param name="Parent">The animal fathering the baby</param>
|
||||
/// <returns>KindDef for Hybrid originated from Parent Animal. Null on None, Not-Supported or Error. Random one from multiple.</returns>
|
||||
public static PawnKindDef LookupPossiblyOffspringHybrid(PawnKindDef Parent)
|
||||
{
|
||||
if (Parent == null) return null;
|
||||
if (!SupportedInitialAnimalRaces.Contains(Parent)) return null;
|
||||
else
|
||||
{
|
||||
return DefDatabase<VGEHybridOffspringDefs>.AllDefs
|
||||
.Where(def => def.SupportedParentKindDefs.Contains(Parent))
|
||||
.SelectMany(def => def.PossibleHybridChildKindDefs)
|
||||
.Distinct()
|
||||
.RandomElementWithFallback(null);
|
||||
// Man I am a true Java Developer
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Small Method for debugging - I used it mostly on game-startup to see if reading all Defs worked fine.
|
||||
/// Introduced after the VGE-Hybridization Rework from #116
|
||||
/// </summary>
|
||||
public static void LogAllFoundVGEHybridDefinitions()
|
||||
{
|
||||
IEnumerable<VGEHybridOffspringDefs> defs = DefDatabase<VGEHybridOffspringDefs>.AllDefs;
|
||||
var parents = defs.SelectMany(def => def.SupportedParentKindDefs).Distinct();
|
||||
var offsprings = defs.SelectMany(def => def.PossibleHybridChildKindDefs).Distinct();
|
||||
RJW_Genes.ModLog.Debug($"Found {defs.Count()} VGEHybridOffspringDefs, covering {parents.Count()} distinct possible parent-animals and {offsprings.Count()} distinct possible hybrid-children.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ namespace RJW_Genes
|
|||
this.birthTotal = birthTotal;
|
||||
this.birthCount = 0;
|
||||
this.hasOvaryAgitator = pawn.health.hediffSet.HasHediff(HediffDef.Named("OvaryAgitator"));
|
||||
this.hasBioscaffold = pawn.health.hediffSet.HasHediff(HediffDef.Named("Bioscaffold"));
|
||||
this.hasBioscaffold = pawn.health.hediffSet.HasHediff(HediffDef.Named("OvaryAgitator"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,9 @@ using System.Text;
|
|||
using System.Threading.Tasks;
|
||||
using HarmonyLib;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using rjw;
|
||||
using rjw.Modules.Interactions;
|
||||
using Verse;
|
||||
using static rjw.RJWPregnancySettings;
|
||||
//using rjw.Modules.Interactions.Enums;
|
||||
|
||||
namespace RJW_Genes
|
||||
|
|
@ -18,18 +17,18 @@ namespace RJW_Genes
|
|||
{
|
||||
public static HediffDef vasectomydef = DefDatabase<HediffDef>.GetNamed("Vasectomy", true);
|
||||
// Token: 0x0600000F RID: 15
|
||||
//[HarmonyPostfix]
|
||||
//[HarmonyPatch("impregnate")]
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch("impregnate")]
|
||||
private static void ImpregnatePostfix(ref SexProps props)
|
||||
{
|
||||
|
||||
if (RJWSettings.DevMode) rjw.ModLog.Message("Rimjobworld::impregnate(" + props.sexType + "):: " + xxx.get_pawnname(props.pawn) + " + " + xxx.get_pawnname(props.partner) + ":");
|
||||
|
||||
//"mech" pregnancy
|
||||
//if (props.sexType == xxx.rjwSextype.MechImplant)
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
if (props.sexType == xxx.rjwSextype.MechImplant)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Pawn giver = props.pawn; // orgasmer
|
||||
Pawn receiver = props.partner;
|
||||
|
|
@ -56,6 +55,7 @@ namespace RJW_Genes
|
|||
|
||||
//"normal" and "beastial" pregnancy
|
||||
if (RJWSettings.DevMode) ModLog.Message(" 'normal' pregnancy checks");
|
||||
|
||||
//interaction stuff if for handling futa/see who penetrates who in interaction
|
||||
if (!props.isReceiver &&
|
||||
interaction.Extension.initiatorRequirement.genitalTags.Contains(GenitalTag.CanPenetrate) &&
|
||||
|
|
@ -77,13 +77,11 @@ namespace RJW_Genes
|
|||
return;
|
||||
}
|
||||
|
||||
if (!giver.GetLewdParts().AllRJWParts.Any(p => p.HasGenitalTag(GenitalTag.CanFertilize)))
|
||||
if (!interaction.Extension.initiatorRequirement.genitalTags.Contains(GenitalTag.CanFertilize))
|
||||
{
|
||||
if (RJWSettings.DevMode) ModLog.Message(xxx.get_pawnname(giver) + " has no parts to Fertilize with");
|
||||
return;
|
||||
}
|
||||
|
||||
//If recieving pawn has a Vasectomy,temporarily remove it to prevent fertility Malice, replace it after DoImpregnate.
|
||||
if (vasectomy != null)
|
||||
{
|
||||
if (RJWSettings.DevMode) ModLog.Message("vasectomy check");
|
||||
|
|
@ -91,9 +89,8 @@ namespace RJW_Genes
|
|||
}
|
||||
if (CanImpregnate2(giver, receiver, props.sexType))
|
||||
{
|
||||
if (RJWSettings.DevMode) ModLog.Message(xxx.get_pawnname(giver)+" is analy impregnating "+ xxx.get_pawnname(receiver));
|
||||
//DOES NOT EXIST
|
||||
//PregnancyHelper.DoImpregnate(giver, receiver);
|
||||
|
||||
PregnancyHelper.DoImpregnate(giver, receiver);
|
||||
|
||||
}
|
||||
if (vasectomy != null)
|
||||
|
|
@ -124,15 +121,15 @@ namespace RJW_Genes
|
|||
":"
|
||||
}));
|
||||
}
|
||||
//if (sexType == xxx.rjwSextype.MechImplant && !RJWPregnancySettings.mechanoid_pregnancy_enabled)
|
||||
//{
|
||||
// if (RJWSettings.DevMode)
|
||||
// {
|
||||
// ModLog.Message(" mechanoid 'pregnancy' disabled");
|
||||
// }
|
||||
//return false;
|
||||
if (sexType == xxx.rjwSextype.MechImplant && !RJWPregnancySettings.mechanoid_pregnancy_enabled)
|
||||
{
|
||||
if (RJWSettings.DevMode)
|
||||
{
|
||||
ModLog.Message(" mechanoid 'pregnancy' disabled");
|
||||
}
|
||||
return false;
|
||||
|
||||
//}
|
||||
}
|
||||
if (sexType != xxx.rjwSextype.Vaginal && sexType != xxx.rjwSextype.DoublePenetration && !(sexType == xxx.rjwSextype.Anal && fucked.genes.HasActiveGene(GeneDefOf.rjw_genes_fertile_anus)))
|
||||
{
|
||||
if (RJWSettings.DevMode)
|
||||
|
|
@ -151,15 +148,15 @@ namespace RJW_Genes
|
|||
return false;
|
||||
|
||||
}
|
||||
//if ((fucker.IsUnsexyRobot() || fucked.IsUnsexyRobot()) && sexType != xxx.rjwSextype.MechImplant)
|
||||
// {
|
||||
// if (RJWSettings.DevMode)
|
||||
// {
|
||||
// ModLog.Message(" unsexy robot cant be pregnant");
|
||||
// }
|
||||
// return false;
|
||||
if ((fucker.IsUnsexyRobot() || fucked.IsUnsexyRobot()) && sexType != xxx.rjwSextype.MechImplant)
|
||||
{
|
||||
if (RJWSettings.DevMode)
|
||||
{
|
||||
ModLog.Message(" unsexy robot cant be pregnant");
|
||||
}
|
||||
return false;
|
||||
|
||||
//}
|
||||
}
|
||||
if (!fucker.RaceHasPregnancy())
|
||||
{
|
||||
if (RJWSettings.DevMode)
|
||||
|
|
@ -226,7 +223,7 @@ namespace RJW_Genes
|
|||
return false;
|
||||
|
||||
}
|
||||
if (((xxx.is_animal(fucker) && xxx.is_human(fucked)) || (xxx.is_human(fucker) && xxx.is_animal(fucked))) && RJWPregnancySettings.bestial_pregnancy == BestialPregnancy.None)
|
||||
if (((xxx.is_animal(fucker) && xxx.is_human(fucked)) || (xxx.is_human(fucker) && xxx.is_animal(fucked))) && !RJWPregnancySettings.bestial_pregnancy_enabled)
|
||||
{
|
||||
if (RJWSettings.DevMode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ namespace RJW_Genes
|
|||
[MayRequire("vegapnk.cumpilation")] public static readonly GeneDef rjw_genes_un_inflatable;
|
||||
[MayRequire("vegapnk.cumpilation")] public static readonly GeneDef rjw_genes_inflatable;
|
||||
public static readonly GeneDef rjw_genes_generous_donor;
|
||||
[MayRequire("vegapnk.cumpilation")] public static readonly GeneDef rjw_genes_living_cumbucket;
|
||||
[MayRequire("rjw.sexperience")] public static readonly GeneDef rjw_genes_living_cumbucket;
|
||||
|
||||
|
||||
// Reproduction
|
||||
|
|
|
|||
|
|
@ -30,6 +30,6 @@ namespace RJW_Genes
|
|||
public static readonly HediffDef OvaryAgitator;
|
||||
public static readonly HediffDef Bioscaffold;
|
||||
|
||||
[MayRequire("vegapnk.cumpilation")] public static readonly HediffDef rjw_genes_filled_living_cumbucket;
|
||||
[MayRequire("rjw.sexperience")] public static readonly HediffDef rjw_genes_filled_living_cumbucket;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ namespace RJW_Genes
|
|||
return null;
|
||||
}
|
||||
|
||||
if (ModsConfig.IsActive("vegapnk.cumpilation") && gene_lifeforce.StoredCumAllowed && genes.HasActiveGene(GeneDefOf.rjw_genes_cum_eater))
|
||||
if (ModsConfig.IsActive("rjw.sexperience") && gene_lifeforce.StoredCumAllowed && genes.HasActiveGene(GeneDefOf.rjw_genes_cum_eater))
|
||||
{
|
||||
Thing gatheredCum = this.GetStoredCum(pawn);
|
||||
if (gatheredCum == null)
|
||||
|
|
|
|||
|
|
@ -56,13 +56,13 @@ namespace RJWLoveFeeding
|
|||
Pawn_GeneTracker genes = fucked.genes;
|
||||
if (genes.HasActiveGene(RJW_Genes.GeneDefOf.RS_MultiPregnancy))
|
||||
{
|
||||
if (RJWSettings.DevMode) Log.Message(xxx.get_pawnname(fucked) + " has multipregnancy gene");
|
||||
Log.Message(xxx.get_pawnname(fucked) + " has multipregnancy gene");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RJWSettings.DevMode) Log.Message(setNoPreggo.First<Hediff>().def.defName + ": This prevents pregnancy");
|
||||
Log.Message(setNoPreggo.First<Hediff>().def.defName + ": This prevents pregnancy");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ using System.Linq;
|
|||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
using HarmonyLib;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
|
|
@ -18,40 +17,18 @@ namespace RJW_Genes
|
|||
/// <param name="def"></param>
|
||||
/// <param name="severity"></param>
|
||||
/// <returns></returns>
|
||||
public static void Postfix(Pawn pawn, BodyPartRecord part, HediffDef def, float severity, ref bool __result)
|
||||
public static bool Prefix(Pawn pawn, BodyPartRecord part, HediffDef def, float severity)
|
||||
{
|
||||
if (pawn?.genes?.HasActiveGene(GeneDefOf.rjw_genes_elasticity) ?? false)
|
||||
ModLog.Debug($"Checking elasticity genes for pawn {pawn.Name}.");
|
||||
if (pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_elasticity))
|
||||
{
|
||||
ModLog.Debug($"Preventing creation of Injury Hediffs from streching for pawn {pawn.Name}.");
|
||||
__result = false;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Patch_eltoro_strechheal
|
||||
{
|
||||
/// <summary>
|
||||
/// Patch function that connects to Strecher.ApplyInjury, itercepting the creation of injury hediffs, and preventing if a Gene would stop the injury.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static void Postfix(ref HediffComp __instance, ref float __result)
|
||||
{
|
||||
if (__instance.Pawn?.genes?.HasActiveGene(GeneDefOf.rjw_genes_elasticity) ?? false)
|
||||
{
|
||||
ModLog.Debug($"Healing streching factor @ x2 speed for pawn : {__instance.Pawn.Name}.");
|
||||
__result = 2f;
|
||||
} else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,8 @@ namespace RJW_Genes
|
|||
if (props == null || props.pawn == null || !props.hasPartner())
|
||||
return;
|
||||
|
||||
// Exit for Animals - Animals can't get or trigger Orgasm Rushes.
|
||||
//if (props.pawn.IsAnimal() || props.partner.IsAnimal())
|
||||
if (props.pawn.IsAnimal())
|
||||
// Exit for Animals - Animals can't get or trigger Orgasm Rushes. Fixes #15
|
||||
if (props.pawn.IsAnimal() || props.partner.IsAnimal())
|
||||
return;
|
||||
|
||||
if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_orgasm_rush))
|
||||
|
|
|
|||
|
|
@ -54,18 +54,12 @@ namespace RJW_Genes
|
|||
prefix: new HarmonyMethod(typeof(Patch_sexualize_pawn), nameof(Patch_sexualize_pawn.PreFix)));
|
||||
|
||||
|
||||
//Patch for Elastic Gene support with Eltoro's Streching mod.
|
||||
if (ModsConfig.IsActive("eltoro.stretching"))
|
||||
//Patch for Elastic Gene support with Eltro's Streching mod.
|
||||
if (ModLister.GetActiveModWithIdentifier("eltoro.stretching") != null)
|
||||
{
|
||||
ModLog.Debug("Patching eltoro.Streching for elasticity gene Support.");
|
||||
// This patching structure allows to patch a class that is not allways present, and a Private function that is not normaly Available.
|
||||
harmony.Patch(AccessTools.Method(GenTypes.GetTypeInAnyAssembly("LLStretcher.Stretcher"), "ApplyInjuryHook"),
|
||||
postfix: new HarmonyMethod(typeof(Patch_eltoro_streching), nameof(Patch_eltoro_streching.Postfix)));
|
||||
|
||||
|
||||
// HediffComp_StretchMemory.StretchRecoveryHook
|
||||
harmony.Patch(AccessTools.Method(GenTypes.GetTypeInAnyAssembly("LLStretcher.HediffComp_StretchMemory"), "StretchRecoveryHook"),
|
||||
postfix: new HarmonyMethod(typeof(Patch_eltoro_strechheal), nameof(Patch_eltoro_strechheal.Postfix)));
|
||||
harmony.Patch(AccessTools.Method(typeof(Stretcher), "ApplyInjury"),
|
||||
prefix: new HarmonyMethod(typeof(Patch_eltoro_streching), nameof(Patch_eltoro_streching.Prefix)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Rjw-Genes")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2026")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
|
@ -32,4 +32,5 @@ using System.Runtime.InteropServices;
|
|||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.6.2")]
|
||||
[assembly: AssemblyVersion("2.5.3.0")]
|
||||
[assembly: AssemblyFileVersion("2.5.3.0")]
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ namespace RJW_Genes
|
|||
static RJW_Genes()
|
||||
{
|
||||
ModLog.Message("RJW-Genes loaded");
|
||||
|
||||
RJW_BGS.VGEHybridUtility.LogAllFoundVGEHybridDefinitions();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,19 @@
|
|||
<None Include="..\About\**" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Animal_Inheritance\Defs\VGEHybridOffspringDefs.cs" />
|
||||
<Compile Include="Animal_Inheritance\VGEHybridUtility.cs" />
|
||||
<Compile Include="Animal_Inheritance\InheritanceUtility.cs" />
|
||||
<Compile Include="Animal_Inheritance\Patches\Patch_RJW_BasePregnancy_VanillaExpandedGenetics.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_RJW_PregnancyHelper_VanillaExpandedGenetics.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\Settings\RJW_BGSSettings.cs" />
|
||||
<Compile Include="Animal_Inheritance\Settings\RJW_BGSSettingsController.cs" />
|
||||
<Compile Include="Animal_Inheritance\Defs\BestialityGeneInheritanceDef.cs" />
|
||||
<Compile Include="Common\Defs\ChanceExtension.cs" />
|
||||
<Compile Include="Common\Defs\DistanceExtension.cs" />
|
||||
<Compile Include="Common\Defs\HediffIncreaseOnSexExtension.cs" />
|
||||
|
|
@ -200,8 +213,8 @@
|
|||
<Content Include="GeneDefs_GenitaliaTypeEndogenes.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="0Harmony">
|
||||
<HintPath>..\..\..\..\..\..\Steam\steamapps\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath>
|
||||
<Reference Include="0Harmony, Version=2.3.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\..\..\..\..\Steam\steamapps\workshop\content\294100\2009463077\1.5\Assemblies\0Harmony.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp, Version=1.4.8385.39127, Culture=neutral, processorArchitecture=MSIL">
|
||||
|
|
|
|||
4
1.6/Source/packages.config
Normal file
4
1.6/Source/packages.config
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Lib.Harmony" version="2.3.3" targetFramework="net48" />
|
||||
</packages>
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<name>RJW Genes</name>
|
||||
<author>Vegapnk - 1.6 Rewrite by Telanda</author>
|
||||
<packageId>Vegapnk.rjw.genes</packageId>
|
||||
<modVersion>2.6.2</modVersion>
|
||||
<modVersion>2.5.3</modVersion>
|
||||
<supportedVersions>
|
||||
<li>1.4</li>
|
||||
<li>1.5</li>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Manifest>
|
||||
<identifier>RJW-Genes</identifier>
|
||||
<version>2.6.2</version>
|
||||
<version>2.5.3</version>
|
||||
<dependencies>
|
||||
<li>RimJobWorld</li>
|
||||
</dependencies>
|
||||
|
|
|
|||
48
CHANGELOG.md
48
CHANGELOG.md
|
|
@ -1,51 +1,3 @@
|
|||
#INPROG
|
||||
|
||||
# 2.6.2 (15-02-2026)
|
||||
(Commit by @Telanda-DDS)
|
||||
|
||||
**Fixes**
|
||||
- Fixed incorrect gene Definition for Big and Small - Vampires and the Undead.
|
||||
- Fixed missing translation text field `RJW_Genes_GenitalsNotAlterable`
|
||||
|
||||
|
||||
------------
|
||||
|
||||
# 2.6.1 (16-10-2025)
|
||||
(Commit by @Telanda-DDS)
|
||||
|
||||
**Fixes**
|
||||
- Updated RJW Patches to reference changed setting variable.
|
||||
|
||||
# 2.6.0 (05-09-2025)
|
||||
(Commit by @Telanda-DDS)
|
||||
|
||||
**Changes**
|
||||
- Removed Animal Gene Inheritance code from Core RJW_Genes and moved it into it's own mod.
|
||||
- Replaced all references to GenericAnus with Anus in Genital type Genes.
|
||||
|
||||
# 2.5.7 (18-08-2025)
|
||||
(Commit by @Telanda-DDS)
|
||||
|
||||
**Fixes**
|
||||
- Fixed fertile anus not correctly detecting if penetrating partner had a penis capable of impregnation.
|
||||
|
||||
|
||||
# 2.5.5 (25-07-2025)
|
||||
(Commit by @Telanda-DDS)
|
||||
|
||||
**Changes**
|
||||
- Support for RJW RC-5
|
||||
- Updated Elastic gene to also increase speed at which stretched parts return to normal under ElToro's stretching Mod.
|
||||
|
||||
|
||||
**Fixes**
|
||||
- Fixed Load bug with VRE-Genie Sexperience interaction.
|
||||
- Fixed incorrect consciousness value on infectious sex change Gene.
|
||||
- Fixed ElToro Stretching support causing an error if not present.
|
||||
- Fixed Typo in Disease ThoughtDef
|
||||
|
||||
|
||||
|
||||
# 2.5.3 (19-07-2025)
|
||||
(Commit by @Telanda-DDS)
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ But please consider also the following:
|
|||
|
||||
## Contributors
|
||||
|
||||
- Shabalox (MechBreeding, InsectBreeding)
|
||||
- Shabalox (MechBreeding, InsectBreeding, Animal Gene Inheritance)
|
||||
- WasMachenDennSachen (Various Icons)
|
||||
- Jaaldabaoth (1.5 Migration, MPreg, Femboys, Initial VE-Genetic Hybrids)
|
||||
- Flock-of-Birds (Cosmetic Genitalia per XML)
|
||||
|
|
|
|||
10
README.md
10
README.md
|
|
@ -14,19 +14,21 @@ This mod adds genes related and based on RJW to Rimworld.
|
|||
- Cum-Amount Changes, Transfer Nutrition Boosts
|
||||
- Sexual Vampires that need Cum, Cocks or some other sources.
|
||||
- Mech Breeding Additions & Orgasmic Mytosis
|
||||
- Human-Animal Gene Inheritance merged from [Shabakur](https://github.com/Shabakur/RJW_Animal_Gene_Inheritance)
|
||||
- Genetic Diseases that spread on Intercourse
|
||||
- Patches for some popular / common Xenotypes from other Mods.
|
||||
|
||||
*You might not see all of them. Many genes just show up if other mods are loaded*.
|
||||
|
||||
**Conflicts:**
|
||||
1. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
|
||||
2. CAI5000 will not crash, but will make *Seduce*-Ability fail. I think same goes for Combat Extended.
|
||||
3. Alpha Genes "Female / Male Only" Genes might overwrite later Genitalia-Changes and should be avoided in combination with RJW-Genes features.
|
||||
1. Should not be used with the original RJW_Animal_Gene_Inheritance anymore.
|
||||
2. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
|
||||
3. CAI5000 will not crash, but will make *Seduce*-Ability fail. I think same goes for Combat Extended.
|
||||
4. Alpha Genes "Female / Male Only" Genes might overwrite later Genitalia-Changes and should be avoided in combination with RJW-Genes features.
|
||||
|
||||
## Structure
|
||||
|
||||
- Toplevel: By Function (i.E. "Genes", "Utility")
|
||||
- Toplevel: By Function (i.E. "Genes", "Animal Inheritance", "Utility")
|
||||
- Then: By Domain, following the Gene-Categories ("Cosmetic","Special", "Damage",...)
|
||||
- Last: By Type of Action (Def, Patch, etc.)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue