diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6baf611..df15b6f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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**:
diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index fac437a..2f5d259 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/AbilityDefs/Ability_MatingCall.xml b/Common/Defs/AbilityDefs/Ability_MatingCall.xml
new file mode 100644
index 0000000..98cb5c7
--- /dev/null
+++ b/Common/Defs/AbilityDefs/Ability_MatingCall.xml
@@ -0,0 +1,50 @@
+
+
+
+
+ rjw_genes_ability_mating_call
+ Mating Call
+ Calls nearby animals to breed me.
+ UI/Abilities/AnimalBerserkPulse
+
+ true
+ false
+
+ false
+
+ 50
+ 0
+
+
+ 410
+
+ 30000
+
+ 5
+ Verb_CastAbility
+
+ False
+ False
+ True
+ True
+
+
+
+
+
+ PsycastPsychicEffect
+
+
+ 40
+
+
+ CompAbilityEffect_GiveHediff
+ Hediff_Submitting
+ True
+
+
+ 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?
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml b/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml
new file mode 100644
index 0000000..584e0a8
--- /dev/null
+++ b/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml
@@ -0,0 +1,29 @@
+
+
+
+ rjw_genes_ability_pheromone_spit
+ pheromone spit
+ 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.
+ UI/Abilities/PiercingSpine
+ 3000
+ 201
+ true
+
+ Verb_CastAbility
+ 11
+ 1.2
+ PiercingSpine_Launch
+
+ True
+ False
+ False
+ False
+
+
+
+
+ 25
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
index c54ece4..76d4369 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
@@ -77,4 +77,38 @@
-1
+
+
+ rjw_genes_mating_call
+ Mating Call
+ This gene allows to call nearby animals and invite them for mating.
+ UI/Abilities/AnimalBerserkPulse
+ 65
+
+ rjw_genes_ability_mating_call
+
+
+ rjw_genes_ability_mating_call
+
+ 2
+ -1
+
+
+
+
+ rjw_genes_pheromone_spit
+ Pheromone Spit
+ This gene allows to mark targets for breeding, enticing nearby animals for a ride.
+ UI/Abilities/AnimalBerserkPulse
+ 66
+
+ rjw_genes_ability_pheromone_spit
+
+
+ rjw_genes_ability_pheromone_spit
+
+ 2
+ -1
+
+
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml b/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml
index cfe7024..cfeab86 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml
@@ -48,6 +48,9 @@
Genes/Icons/RJW_Genes_Endogene_Background
Genes/Icons/RJW_Genes_Xenogene_Background
+
+ DemonLoverQuirk
+
@@ -103,6 +106,9 @@
Genes/Icons/RJW_Genes_Endogene_Background
Genes/Icons/RJW_Genes_Xenogene_Background
+
+ DemonLoverQuirk
+
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Cum.xml b/Common/Defs/GeneDefs/GeneDefs_Cum.xml
index a3f9208..56615ae 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Cum.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Cum.xml
@@ -48,64 +48,4 @@
-2
-
- rjw_genes_likes_cumflation
- likes cumflation
- rjw_genes_cum
- This Xenotype loves being cumflated.
- Genes/Icons/Cumflation
- 536
-
-
- LikesCumflation
-
-
-
- NotCumflatable
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_cumflation_immunity
- cumflation immunity
- rjw_genes_cum
- This Xenotype cannot get cumflated.
- Genes/Icons/Cumflation_Immunity
- 537
-
- NotCumflatable
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
- rjw_genes_generous_donor
- generous donor
- rjw_genes_cum
- When this Xenotype transfers nutrition via cumshot, the giver will not get hungry. (Licentia Configuration for Transfer Nutrition must be enabled).
- Genes/Icons/Generous_Donor
- 538
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Damage.xml b/Common/Defs/GeneDefs/GeneDefs_Damage.xml
index 0e3f586..409fe35 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Damage.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Damage.xml
@@ -1,25 +1,6 @@
-
- rjw_genes_elasticity
- elasticity
- rjw_genes_damage
- This Xenotype cannot get stretched by huge penetrators.
- Genes/Icons/Elasticity
- RJW_Genes.Gene_Elasticity
- -1
- 1
- 1
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
rjw_genes_unbreakable
unbreakable
diff --git a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
index eaf8728..a9e9a46 100644
--- a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
@@ -1,7 +1,6 @@
- rjw_genes_genitalia_extras
false
@@ -15,6 +14,8 @@
rjw_genes_extra_penis
extra penis
+ rjw_genes_genitalia_extras
+
Males of this species grow an additional penis .
Genes/Icons/extra_male
RJW_Genes.Gene_ExtraPenis
@@ -27,6 +28,7 @@
rjw_genes_no_penis
no penis
+ rjw_genes_genitalia_extras
Males of this do not have a penis.
Genes/Icons/No_Male_Genitalia
RJW_Genes.Gene_NoPenis
@@ -40,6 +42,7 @@
rjw_genes_extra_vagina
extra vagina
+ rjw_genes_genitalia_extras
Females of this species grow an additional vagina .
Genes/Icons/Extra_Vagina
RJW_Genes.Gene_ExtraVagina
@@ -52,6 +55,7 @@
rjw_genes_no_vagina
no vagina
+ rjw_genes_genitalia_extras
Females of this do not have a vagina.
Genes/Icons/No_Vagina
RJW_Genes.Gene_NoVagina
@@ -65,6 +69,7 @@
rjw_genes_extra_breasts
extra breasts
+ rjw_genes_genitalia_extras
Females of this species grow an additional pair of breasts .
Genes/Icons/Extra_Breasts
RJW_Genes.Gene_ExtraBreasts
@@ -77,6 +82,7 @@
rjw_genes_no_breasts
no breasts
+ rjw_genes_genitalia_extras
Females of this do not have a pair of breasts, but only nipples.
Genes/Icons/No_Breasts
RJW_Genes.Gene_NoBreasts
@@ -89,6 +95,7 @@
rjw_genes_extra_anus
extra anus
+ rjw_genes_genitalia_extras
This specias has an extra anus.
Genes/Icons/Extra_Anus
RJW_Genes.Gene_ExtraAnus
@@ -101,6 +108,7 @@
rjw_genes_no_anus
no anus
+ rjw_genes_genitalia_extras
This specias has no anus.
Genes/Icons/No_Anus
RJW_Genes.Gene_NoAnus
@@ -113,6 +121,7 @@
rjw_genes_futa
futanari
+ rjw_genes_gender
Males with this gene grow additional female genitalia, females grow additional male genitalia.
Genes/Icons/Futa
RJW_Genes.Gene_Futa
@@ -126,6 +135,7 @@
rjw_genes_femboy
femboy
+ rjw_genes_gender
Males with this gene are considered female despite having a penis
Genes/Icons/Futa
RJW_Genes.Gene_Femboy
@@ -138,6 +148,7 @@
rjw_genes_featureless_chest
+ rjw_genes_genitalia_extras
featureless chest
Carriers of this gene do not have breasts or nipples.
Genes/Icons/No_Breasts
@@ -151,6 +162,7 @@
rjw_genes_udder
udder
+ rjw_genes_genitalia_extras
Carriers of this gene have udders and breasts.
Things/Mote/Heart
RJW_Genes.Gene_UdderBreasts
diff --git a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
index 6d173b9..5cc2e9d 100644
--- a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
@@ -7,7 +7,7 @@
GenitalType
- false
+ true
0
@@ -43,6 +43,7 @@
Penis
Vagina
Anus
+ Breasts
802
@@ -89,6 +90,10 @@
DemonVagina
DemonAnus
+
+ DemonLoverQuirk
+
+
805
@@ -104,6 +109,9 @@
DragonVagina
GenericAnus
+
+ ScaleLoverQuirk
+
806
@@ -118,7 +126,11 @@
SlimeTentacles
SlimeVagina
SlimeAnus
+ SlimeBreasts
+
+ SlimeLoverQuirk
+
807
@@ -134,6 +146,9 @@
DemonVagina
DemonAnus
+
+ DemonLoverQuirk
+
807
@@ -147,6 +162,9 @@
CrocodilianPenis
+
+ ScaleLoverQuirk
+
807
@@ -160,6 +178,7 @@
RaccoonPenis
+
807
@@ -173,6 +192,9 @@
HemiPenis
+
+ ScaleLoverQuirk
+
807
@@ -191,6 +213,9 @@
GhostPenis
GhostVagina
+
+ TeratophileQuirk
+
807
@@ -204,6 +229,9 @@
GolemPenis
+
+ TeratophileQuirk
+
807
@@ -230,6 +258,9 @@
NecroPenis
+
+ TeratophileQuirk
+
807
@@ -282,15 +313,14 @@
TentaclePenis
+
+ TeratophileQuirk
+
807
-
-
-
-
rjw_genes_ovipositor_genitalia
insect genitalia
@@ -302,6 +332,9 @@
OvipositorF
InsectAnus
+
+ ChitinLoverQuirk
+
808
diff --git a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml
index 4e5160a..6a0878a 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml
@@ -181,6 +181,13 @@
1.10
-2
1
+
+
+
+ ImpregnationFetishQuirk
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
index 0165d8f..a4ecb4d 100644
--- a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
@@ -82,11 +82,12 @@
rjw_genes_sexual_mytosis
orgasmic mytosis
- 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.
+ 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.
UI/Icons/Genes/Gene_PsychicBonding
5
5
-5
+ 1
@@ -124,6 +125,22 @@
1
-1
+
+
+ BreederQuirk
+
+
+
+ rjw_genes_sex_tamer
+ Sexual Tamer
+ sextamer
+ Bestiality has a chance to tame animals or advance their training.
+ UI/Abilities/AnimalBerserkPulse
+ 14
+ 2
+ -1
+
+
\ No newline at end of file
diff --git a/Common/Patches/Genes/Vanilla_Quirk_Patch.xml b/Common/Patches/Genes/Vanilla_Quirk_Patch.xml
new file mode 100644
index 0000000..40458da
--- /dev/null
+++ b/Common/Patches/Genes/Vanilla_Quirk_Patch.xml
@@ -0,0 +1,24 @@
+
+
+
+ /Defs/GeneDef[defName="Furskin"]
+
+
+
+ FurLoverQuirk
+
+
+
+
+
+ /Defs/GeneDef[defName="Head_Gaunt"]
+
+
+
+ TeratophileQuirk
+
+
+
+
+
+
diff --git a/Common/Patches/Xenotypes/GenitaliaUpdate.xml b/Common/Patches/Xenotypes/GenitaliaUpdate.xml
index e6a9681..1451a13 100644
--- a/Common/Patches/Xenotypes/GenitaliaUpdate.xml
+++ b/Common/Patches/Xenotypes/GenitaliaUpdate.xml
@@ -14,6 +14,8 @@
rjw_genes_much_cum
rjw_genes_zoophile
+ rjw_genes_Pig_genitalia
+ rjw_genes_human_genitalia
diff --git a/Common/Patches/Xenotypes/PatchPigskins.xml b/Common/Patches/Xenotypes/PatchPigskins.xml
new file mode 100644
index 0000000..c49c4ac
--- /dev/null
+++ b/Common/Patches/Xenotypes/PatchPigskins.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ Vanilla Races Expanded - Pigskin
+
+
+ Defs/XenotypeDef[defName="VRE_Boarskin"]/genes
+
+ rjw_genes_Pig_genitalia
+ rjw_genes_human_genitalia
+ rjw_genes_much_cum
+ rjw_genes_zoophile
+
+
+
+
\ No newline at end of file
diff --git a/Common/Patches/Xenotypes/PatchVRELycanthrope.xml b/Common/Patches/Xenotypes/PatchVRELycanthrope.xml
new file mode 100644
index 0000000..6896e98
--- /dev/null
+++ b/Common/Patches/Xenotypes/PatchVRELycanthrope.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ Vanilla Races Expanded - Lycanthrope
+
+
+ Defs/XenotypeDef[defName="VRE_Wolfman"]/genes
+
+ rjw_genes_human_genitalia
+ rjw_genes_zoophile
+
+
+
+
+
+ Vanilla Races Expanded - Lycanthrope
+
+
+ Defs/XenotypeDef[defName="VRE_Lycan"]/genes
+
+ rjw_genes_canine_genitalia
+ rjw_genes_zoophile
+ rjw_genes_rapist
+
+
+
+
\ No newline at end of file
diff --git a/Common/Textures/Genes/Icons/sex_curiosity.png b/Common/Textures/Genes/Icons/sex_curiosity.png
new file mode 100644
index 0000000..b5dcd7f
Binary files /dev/null and b/Common/Textures/Genes/Icons/sex_curiosity.png differ
diff --git a/Common/Textures/Genes/Icons/sex_disabled.png b/Common/Textures/Genes/Icons/sex_disabled.png
new file mode 100644
index 0000000..9ce4983
Binary files /dev/null and b/Common/Textures/Genes/Icons/sex_disabled.png differ
diff --git a/Common/Textures/Genes/Icons/sex_enabled.png b/Common/Textures/Genes/Icons/sex_enabled.png
new file mode 100644
index 0000000..86e0a6b
Binary files /dev/null and b/Common/Textures/Genes/Icons/sex_enabled.png differ
diff --git a/LoadFolders.xml b/LoadFolders.xml
index d708230..8f11ba4 100644
--- a/LoadFolders.xml
+++ b/LoadFolders.xml
@@ -5,5 +5,16 @@
Common
Mods/NotRaceSupport
+ Mods/Sanguophage
+ Mods/Saurid
+ Mods/Phytokin
+ Mods/Lycanthrope
+ Mods/Highmate
+ Mods/Genie
+ Mods/Fungoid
+ Mods/Archon
+ Mods/Android
+ Mods/VE_Genetics
+ Mods/LicentiaLabs
\ No newline at end of file
diff --git a/Mods/Android/Defs/AndroidConvertableGenesDefs/AndroidConvertableGenesDefs.xml b/Mods/Android/Defs/AndroidConvertableGenesDefs/AndroidConvertableGenesDefs.xml
new file mode 100644
index 0000000..2977367
--- /dev/null
+++ b/Mods/Android/Defs/AndroidConvertableGenesDefs/AndroidConvertableGenesDefs.xml
@@ -0,0 +1,11 @@
+
+
+
+ rjw_genes_AndroidConvertableGenesDefs
+
+ rjw_genes_gender
+
+
+
+
+
\ No newline at end of file
diff --git a/Mods/Android/Defs/GeneDefs/GeneDefs_Androids.xml b/Mods/Android/Defs/GeneDefs/GeneDefs_Androids.xml
new file mode 100644
index 0000000..058d719
--- /dev/null
+++ b/Mods/Android/Defs/GeneDefs/GeneDefs_Androids.xml
@@ -0,0 +1,54 @@
+
+
+
+ rjw_genes_bionic_genitalia
+ bionic genitalia
+ RJW_Genes.Gene_GenitaliaType
+ This piece of hardware is a set of bionic genitals of high quality
+ Genes/Icons/Genitalia_human
+
+
+ BionicPenis
+ BionicVagina
+ BionicAnus
+ BionicBreasts
+
+
+ 802
+ -2
+
+
+
+ rjw_genes_hydrolic_genitalia
+ hydrolic genitalia
+ RJW_Genes.Gene_GenitaliaType
+ This piece of hardware is a set of crude hydrolic genitals, at least it come with a suspension system
+ Genes/Icons/Genitalia_human
+
+
+ HydraulicPenis
+ HydraulicVagina
+ HydraulicAnus
+ HydraulicBreasts
+
+
+ 802
+
+ 1.12
+
+
+
+
+ rjw_genes_SexDisabled
+ sex disabled
+ Androids do not feel satisfaction from sex, and have no need to feel it.
+ Genes/Icons/sex_disabled
+ 3
+ 1
+
+ Sex
+
+ true
+
+
+
\ No newline at end of file
diff --git a/Mods/Android/Patches/Android_Quirk_Patch.xml b/Mods/Android/Patches/Android_Quirk_Patch.xml
new file mode 100644
index 0000000..52f9333
--- /dev/null
+++ b/Mods/Android/Patches/Android_Quirk_Patch.xml
@@ -0,0 +1,26 @@
+
+
+
+ /Defs/VREAndroids.AndroidGeneDef[defName="VREA_SyntheticBody"]
+
+
+ RobotLoverQuirk
+
+
+
+
+ /Defs/VREAndroids.AndroidGeneDef[defName="VREA_SyntheticSkin"]
+
+
+ RobotLoverQuirk
+
+
+
+
+ /Defs/GeneCategoryDef[defName="VREA_Subroutine"]/displayPriorityInXenotype
+
+ 10
+
+
+
+
diff --git a/Mods/Archon/Patches/Archon_Quirk_Patch.xml b/Mods/Archon/Patches/Archon_Quirk_Patch.xml
new file mode 100644
index 0000000..0f7e119
--- /dev/null
+++ b/Mods/Archon/Patches/Archon_Quirk_Patch.xml
@@ -0,0 +1,12 @@
+
+
+
+ /Defs/GeneDef[defName="VRE_Leatherskin"]
+
+
+ SkinLoverQuirk
+
+
+
+
+
diff --git a/Mods/Fungoid/Patches/Fungoid_Quirk_Patch.xml b/Mods/Fungoid/Patches/Fungoid_Quirk_Patch.xml
new file mode 100644
index 0000000..bcb1e72
--- /dev/null
+++ b/Mods/Fungoid/Patches/Fungoid_Quirk_Patch.xml
@@ -0,0 +1,28 @@
+
+
+
+ /Defs/GeneDef[defName="VRE_FungalCrest"]
+
+
+ PlantLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_HairMushroom"]
+
+
+ PlantLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_FungalFlesh"]
+
+
+ PlantLoverQuirk
+
+
+
+
+
diff --git a/Mods/Genie/Defs/GeneDefs/GeneDefs_Curiosity_sex.xml b/Mods/Genie/Defs/GeneDefs/GeneDefs_Curiosity_sex.xml
new file mode 100644
index 0000000..98cd404
--- /dev/null
+++ b/Mods/Genie/Defs/GeneDefs/GeneDefs_Curiosity_sex.xml
@@ -0,0 +1,30 @@
+
+
+
+
+ VRE_Curiosity
+
+ VRE_Curiosity
+ Curiosity
+
+ -2
+ 2
+
+
+
+ VRE_Curiosity_Sex
+ sex curiosity
+ 0
+ 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.
+
+ Genes/Icons/sex_curiosity
+
+
+ Sex
+ Sex
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Mods/Highmate/Patches/Highmate_Quirk_Patch.xml b/Mods/Highmate/Patches/Highmate_Quirk_Patch.xml
new file mode 100644
index 0000000..0f69977
--- /dev/null
+++ b/Mods/Highmate/Patches/Highmate_Quirk_Patch.xml
@@ -0,0 +1,28 @@
+
+
+
+ /Defs/GeneDef[defName="VRE_FelineEars"]
+
+
+ FurLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_FelineTail"]
+
+
+ FurLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_PerfectBody"]
+
+
+ SkinLoverQuirk
+
+
+
+
+
diff --git a/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml b/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml
new file mode 100644
index 0000000..22fb911
--- /dev/null
+++ b/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ rjw_genes_elasticity
+ elasticity
+ rjw_genes_damage
+ This Xenotype cannot get stretched by huge penetrators.
+ Genes/Icons/Elasticity
+ RJW_Genes.Gene_Elasticity
+ -1
+ 1
+ 1
+
+
+
+ Genes/Icons/RJW_Genes_Endogene_Background
+ Genes/Icons/RJW_Genes_Xenogene_Background
+
+
+
+
+
+ rjw_genes_likes_cumflation
+ likes cumflation
+ rjw_genes_cum
+ This Xenotype loves being cumflated.
+ Genes/Icons/Cumflation
+ 536
+
+
+ LikesCumflation
+
+
+
+ NotCumflatable
+
+
+
+
+ Genes/Icons/RJW_Genes_Endogene_Background
+ Genes/Icons/RJW_Genes_Xenogene_Background
+
+
+
+
+
+ rjw_genes_cumflation_immunity
+ cumflation immunity
+ rjw_genes_cum
+ This Xenotype cannot get cumflated.
+ Genes/Icons/Cumflation_Immunity
+ 537
+
+ NotCumflatable
+
+
+
+
+ Genes/Icons/RJW_Genes_Endogene_Background
+ Genes/Icons/RJW_Genes_Xenogene_Background
+
+
+
+
+
+ rjw_genes_generous_donor
+ generous donor
+ rjw_genes_cum
+ When this Xenotype transfers nutrition via cumshot, the giver will not get hungry. (Licentia Configuration for Transfer Nutrition must be enabled).
+ Genes/Icons/Generous_Donor
+ 538
+
+
+
+ Genes/Icons/RJW_Genes_Endogene_Background
+ Genes/Icons/RJW_Genes_Xenogene_Background
+
+
+
+
+
\ No newline at end of file
diff --git a/Mods/Lycanthrope/Patches/Lycanthrope_Quirk_Patch.xml b/Mods/Lycanthrope/Patches/Lycanthrope_Quirk_Patch.xml
new file mode 100644
index 0000000..475950c
--- /dev/null
+++ b/Mods/Lycanthrope/Patches/Lycanthrope_Quirk_Patch.xml
@@ -0,0 +1,20 @@
+
+
+
+ /Defs/GeneDef[defName="VRE_ChestFur"]
+
+
+ FurLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_CanineTail"]
+
+
+ FurLoverQuirk
+
+
+
+
+
diff --git a/Mods/Phytokin/Patches/Phytokin_Quirk_Patch.xml b/Mods/Phytokin/Patches/Phytokin_Quirk_Patch.xml
new file mode 100644
index 0000000..78089d4
--- /dev/null
+++ b/Mods/Phytokin/Patches/Phytokin_Quirk_Patch.xml
@@ -0,0 +1,28 @@
+
+
+
+ /Defs/GeneDef[defName="VRE_BarkSkin"]
+
+
+ PlantLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_FoliageHair"]
+
+
+ PlantLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_SapBlood"]
+
+
+ PlantLoverQuirk
+
+
+
+
+
diff --git a/Mods/Sanguophage/Patches/Sanguophage_Quirk_Patch.xml b/Mods/Sanguophage/Patches/Sanguophage_Quirk_Patch.xml
new file mode 100644
index 0000000..cf01f46
--- /dev/null
+++ b/Mods/Sanguophage/Patches/Sanguophage_Quirk_Patch.xml
@@ -0,0 +1,44 @@
+
+
+
+ /Defs/GeneDef[defName="VRE_SanguineHair"]
+
+
+ DemonLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_BatEars"]
+
+
+ TeratophileQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_UpperBatEars"]
+
+
+ TeratophileQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_Talons"]
+
+
+ DemonLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRE_BatNose"]
+
+
+ TeratophileQuirk
+
+
+
+
+
diff --git a/Mods/Saurid/Patches/Saurid_Quirk_Patch.xml b/Mods/Saurid/Patches/Saurid_Quirk_Patch.xml
new file mode 100644
index 0000000..37188ff
--- /dev/null
+++ b/Mods/Saurid/Patches/Saurid_Quirk_Patch.xml
@@ -0,0 +1,44 @@
+
+
+
+ /Defs/GeneDef[defName="VRESaurids_FrilledEars"]
+
+
+ ScaleLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRESaurids_CenterFrill"]
+
+
+ ScaleLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRESaurids_GeckoTail"]
+
+
+ ScaleLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRESaurids_SauridClaws"]
+
+
+ ScaleLoverQuirk
+
+
+
+
+ /Defs/GeneDef[defName="VRESaurids_ScaleSkin"]
+
+
+ ScaleLoverQuirk
+
+
+
+
+
diff --git a/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml b/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml
new file mode 100644
index 0000000..93aa987
--- /dev/null
+++ b/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ rjw_genes_animal_control_hediff
+ part human
+ This creature is more controlable with a natural human part.
+ HediffWithComps
+ (0.9, 1.0, 0.35)
+ 1
+
+
+ true
+
+
+ false
+
+
+
\ No newline at end of file
diff --git a/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml b/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml
new file mode 100644
index 0000000..a4d43ef
--- /dev/null
+++ b/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml
@@ -0,0 +1,654 @@
+
+
+
+
+ GR_Manbear_GenGroup
+
+
+ GR_Manbear
+ GR_Bearman
+
+
+
+
+
+ Immunity_Strong
+ 0.8
+
+
+ MinTemp_LargeDecrease
+ 0.8
+
+
+ Aggression_Aggressive
+ 0.8
+
+
+ Sleepy
+ 0.8
+
+
+ Beard_Always
+ 0.8
+
+
+ VoiceRoar
+ 0.8
+
+
+ Body_Fat
+ 0.8
+
+
+ Body_Hulk
+ 0.8
+
+
+ Hair_ReddishBrown
+ 0.8
+
+
+ Hair_DarkBrown
+ 0.8
+
+
+ Hair_DarkSaturatedReddish
+ 0.8
+
+
+ Hair_DarkReddish
+ 0.8
+
+
+ RobustDigestion
+ 0.8
+
+
+ Furskin
+ 0.8
+
+
+ Unstoppable
+ 0.8
+
+
+ AptitudeTerrible_Artistic
+ 0.8
+
+
+ AptitudeTerrible_Social
+ 0.8
+
+
+ AptitudePoor_Intellectual
+ 0.8
+
+
+
+
+
+
+
+ GR_Manalope_GenGroup
+
+
+ GR_Manalope
+ GR_Booman
+
+
+
+
+
+ FireSpew
+ 0.8
+
+
+ Beauty_Ugly
+ 0.8
+
+
+ Hair_Blonde
+ 0.8
+
+
+ Hair_SandyBlonde
+ 0.8
+
+
+ Hair_LightOrange
+ 0.8
+
+
+ rjw_genes_udder
+ 0.8
+
+
+
+
+
+
+
+ GR_Manchicken_GenGroup
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+
+ Mood_Optimist
+ 0.8
+
+
+ Delicate
+ 0.8
+
+
+ Beauty_Pretty
+ 0.8
+
+
+ Body_Thin
+ 0.8
+
+
+ AptitudeTerrible_Melee
+ 0.8
+
+
+ AptitudeTerrible_Mining
+ 0.8
+
+
+ AptitudeRemarkable_Social
+ 0.8
+
+
+ AptitudeStrong_Intellectual
+ 0.8
+
+
+
+
+
+
+
+ GR_Manffalo_GenGroup
+
+
+ GR_Manffalo
+ GR_Muffaloman
+
+
+
+
+
+ Headbone_Human
+ 0.9
+
+
+ Headbone_MiniHorns
+ 0.9
+
+
+ Furskin
+ 0.9
+
+
+ MinTemp_SmallIncrease
+ 0.9
+
+
+ rjw_genes_big_male_genitalia
+ 0.7
+
+
+ rjw_genes_loose_female_genitalia
+ 0.7
+
+
+ rjw_genes_big_breasts
+ 0.7
+
+
+ rjw_genes_udder
+ 0.7
+
+
+ rjw_genes_Needle_genitalia
+ 0.7
+
+
+ rjw_mc_genes_perm_lactating
+ 0.05
+
+
+ rjw_genes_zoophile
+ 0.5
+
+
+ AptitudeTerrible_Intellectual
+ 0.05
+
+
+ AptitudePoor_Intellectual
+ 0.7
+
+
+
+
+
+
+ GR_Manwolf_GenGroup
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+
+ AptitudeTerrible_Mining
+ 0.05
+
+
+ PsychicBonding
+ 0.05
+
+
+ Mood_Sanguine
+ 0.05
+
+
+ Ears_Floppy
+ 0.9
+
+
+ rjw_genes_canine_genitalia
+ 0.9
+
+
+ Furskin
+ 0.9
+
+
+ MinTemp_SmallIncrease
+ 0.9
+
+
+ Libido_High
+ 0.9
+
+
+ AptitudePoor_Mining
+ 0.5
+
+
+ rjw_genes_zoophile
+ 0.5
+
+
+ Mood_Optimist
+ 0.5
+
+
+
+
+
+
+ GR_Mancat_GenGroup
+
+
+ GR_Mancat
+ GR_Catman
+
+
+
+
+
+ PsychicBonding
+ 0.05
+
+
+ AptitudeTerrible_Animals
+ 0.05
+
+
+ Ears_Cat
+ 0.9
+
+
+ Body_Thin
+ 0.9
+
+
+ rjw_genes_feline_genitalia
+ 0.9
+
+
+ Furskin
+ 0.9
+
+
+ MinTemp_SmallIncrease
+ 0.9
+
+
+ rjw_genes_small_male_genitalia
+ 0.7
+
+
+ rjw_genes_tight_female_genitalia
+ 0.7
+
+
+ rjw_genes_small_breasts
+ 0.7
+
+
+ rjw_genes_tight_anus
+ 0.7
+
+
+ DarkVision
+ 0.8
+
+
+ AptitudePoor_Animals
+ 0.5
+
+
+ Beauty_Pretty
+ 0.7
+
+
+ rjw_genes_zoophile
+ 0.5
+
+
+
+
+
+
+ GR_Mansquirrel_GenGroup
+
+
+ GR_Mansquirrel
+ GR_Moleman
+
+
+
+
+
+ MoveSpeed_VeryQuick
+ 0.8
+
+
+ KindInstinct
+ 0.8
+
+
+ Delicate
+ 0.8
+
+
+ Ears_Cat
+ 0.8
+
+
+ Body_Thin
+ 0.8
+
+
+ Tail_Furry
+ 0.8
+
+
+ AptitudeTerrible_Shooting
+ 0.8
+
+
+ AptitudeTerrible_Melee
+ 0.8
+
+
+ AptitudeTerrible_Mining
+ 0.8
+
+
+ AptitudeTerrible_Animals
+ 0.8
+
+
+ AptitudeStrong_Intellectual
+ 0.8
+
+
+ rjw_genes_Needle_genitalia
+ 0.8
+
+
+ rjw_genes_zoophile
+ 0.8
+
+
+
+
+
+
+
+ GR_Thrumboman_GenGroup
+
+
+ GR_Thrumboman
+
+
+
+
+
+ Unstoppable
+ 0.25
+
+
+ Headbone_CenterHorn
+ 0.9
+
+
+ VoiceRoar
+ 0.6
+
+
+ MaxTemp_SmallIncrease
+ 0.7
+
+
+ MaxTemp_LargeIncrease
+ 0.1
+
+
+ rjw_genes_dragon_genitalia
+ 0.6
+
+
+ FireResistant
+ 0.15
+
+
+ rjw_genes_much_cum
+ 0.3
+
+
+ rjw_genes_very_much_cum
+ 0.05
+
+
+ Body_Hulk
+ 0.7
+
+
+
+
+
+
+
+
+
+ GR_Hurseman_GenGroup
+
+
+ GR_Hurseman
+
+
+
+
+
+ Body_Standard
+ 0.9
+
+
+ Body_Hulk
+ 0.7
+
+
+ rjw_genes_equine_genitalia
+ 0.9
+
+
+ rjw_genes_zoophile
+ 0.5
+
+
+ rjw_genes_much_cum
+ 0.5
+
+
+ MoveSpeed_Quick
+ 0.5
+
+
+ AptitudeTerrible_Mining
+ 0.5
+
+
+ AptitudeTerrible_Intellectual
+ 0.5
+
+
+ Furskin
+ 0.9
+
+
+ MinTemp_SmallIncrease
+ 0.9
+
+
+
+
+
+
+
+
+
+ GR_Manscarab_GenGroup
+
+
+ GR_Manscarab
+
+
+
+
+
+ Beauty_Ugly
+ 0.5
+
+
+ Immunity_Strong
+ 0.6
+
+
+ ToxicEnvironmentResistance_Partial
+ 0.4
+
+
+ rjw_genes_ovipositor_genitalia
+ 0.15
+
+
+ rjw_genes_insectincubator
+ 0.1
+
+
+ rjw_genes_insectbreeder
+ 0.1
+
+
+ Body_Thin
+ 0.3
+
+
+
+
+
+
+
+ GR_Lizardman_GenGroup
+
+
+ GR_Lizardman
+
+
+
+
+
+ AcidSpray
+ 0.7
+
+
+ MinTemp_SmallIncrease
+ 0.7
+
+
+ MaxTemp_SmallIncrease
+ 0.7
+
+
+ Robust
+ 0.7
+
+
+ Hair_BaldOnly
+ 0.7
+
+
+ Beard_NoBeardOnly
+ 0.7
+
+
+ Body_Standard
+ 0.7
+
+
+ Headbone_CenterHorn
+ 0.7
+
+
+ AptitudeTerrible_Artistic
+ 0.7
+
+
+ AptitudeTerrible_Social
+ 0.7
+
+
+ rjw_genes_reptilian_genitalia
+ 0.7
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml b/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml
new file mode 100644
index 0000000..ab3ba01
--- /dev/null
+++ b/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml
@@ -0,0 +1,795 @@
+
+
+
+
+ Bear_Grizzly_Group
+
+ Human
+ Bear_Grizzly
+
+
+ GR_Manbear
+ GR_Bearman
+
+
+
+
+ Bear_Polar_Group
+
+ Human
+ Bear_Polar
+
+
+
+ GR_Manbear
+ GR_Bearman
+
+
+
+
+ GR_Manbear_Group
+
+ Human
+ GR_Manbear
+
+
+
+ Human
+
+
+
+
+ GR_Bearman_Group
+
+ Human
+ GR_Bearman
+
+
+
+ Human
+
+
+
+
+ Boomalope_Group
+
+ Human
+ Boomalope
+
+
+
+ GR_Manalope
+ GR_Booman
+
+
+
+
+ GR_Manalope_Group
+
+ Human
+ GR_Manalope
+
+
+
+ Human
+
+
+
+
+ GR_Booman_Group
+
+ Human
+ GR_Booman
+
+
+
+ Human
+
+
+
+
+ Chicken_Group
+
+ Human
+ Chicken
+
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+ Duck_Group
+
+ Human
+ Duck
+
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+ Turkey_Group
+
+ Human
+ Turkey
+
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+ Goose_Group
+
+ Human
+ Goose
+
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+ Ostrich_Group
+
+ Human
+ Ostrich
+
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+ Emu_Group
+
+ Human
+ Emu
+
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+ Cassowary_Group
+
+ Human
+ Cassowary
+
+
+
+ GR_Manchicken
+ GR_Turkeyman
+
+
+
+
+ GR_Manchicken_Group
+
+ Human
+ GR_Manchicken
+
+
+
+ Human
+
+
+
+
+ GR_Turkeyman_Group
+
+ Human
+ GR_Turkeyman
+
+
+
+ Human
+
+
+
+
+ Cow_Group
+
+ Human
+ Cow
+
+
+
+ GR_Manffalo
+ GR_Muffaloman
+
+
+
+
+ Muffalo_Group
+
+ Human
+ Muffalo
+
+
+
+ GR_Manffalo
+ GR_Muffaloman
+
+
+
+
+ Bison_Group
+
+ Human
+ Bison
+
+
+
+ GR_Manffalo
+ GR_Muffaloman
+
+
+
+
+ Yak_Group
+
+ Human
+ Yak
+
+
+
+ GR_Manffalo
+ GR_Muffaloman
+
+
+
+
+ GR_Manffalo_Group
+
+ Human
+ GR_Manffalo
+
+
+
+ Human
+
+
+
+
+ GR_Muffaloman_Group
+
+ Human
+ GR_Muffaloman
+
+
+
+ Human
+
+
+
+
+ Warg_Group
+
+ Human
+ Warg
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ Wolf_Timber_Group
+
+ Human
+ Wolf_Timber
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ Wolf_Arctic_Group
+
+ Human
+ Wolf_Arctic
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ Fox_Fennec_Group
+
+ Human
+ Fox_Fennec
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ Fox_Red_Group
+
+ Human
+ Fox_Red
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ Fox_Arctic_Group
+
+ Human
+ Fox_Arctic
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ Husky_Group
+
+ Human
+ Husky
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ LabradorRetriever_Group
+
+ Human
+ LabradorRetriever
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ YorkshireTerrier_Group
+
+ Human
+ YorkshireTerrier
+
+
+
+ GR_Manwolf
+ GR_Dogman
+
+
+
+
+ GR_Manwolf_Group
+
+ Human
+ GR_Manwolf
+
+
+
+ Human
+
+
+
+
+ GR_Dogman_Group
+
+ Human
+ GR_Dogman
+
+
+
+ Human
+
+
+
+
+ Cougar_Group
+
+ Human
+ Cougar
+
+
+
+ GR_Mancat
+ GR_Catman
+
+
+
+
+ Panther_Group
+
+ Human
+ Panther
+
+
+
+ GR_Mancat
+ GR_Catman
+
+
+
+
+ Lynx_Group
+
+ Human
+ Lynx
+
+
+
+ GR_Mancat
+ GR_Catman
+
+
+
+
+ Cat_Group
+
+ Human
+ Cat
+
+
+
+ GR_Mancat
+ GR_Catman
+
+
+
+
+ GR_Mancat_Group
+
+ Human
+ GR_Mancat
+
+
+
+ Human
+
+
+
+
+ GR_Catman_Group
+
+ Human
+ GR_Catman
+
+
+
+ Human
+
+
+
+
+ GuineaPig_Group
+
+ Human
+ GuineaPig
+
+
+
+ GR_Mansquirrel
+ GR_Moleman
+
+
+
+
+ Hare_Group
+
+ Human
+ Hare
+
+
+
+ GR_Mansquirrel
+ GR_Moleman
+
+
+
+
+ Snowhare_Group
+
+ Human
+ Snowhare
+
+
+
+ GR_Mansquirrel
+ GR_Moleman
+
+
+
+
+ Squirrel_Group
+
+ Human
+ Squirrel
+
+
+
+ GR_Mansquirrel
+ GR_Moleman
+
+
+
+
+ Rat_Group
+
+ Human
+ Rat
+
+
+
+ GR_Mansquirrel
+ GR_Moleman
+
+
+
+
+ Raccoon_Group
+
+ Human
+ Raccoon
+
+
+
+ GR_Mansquirrel
+ GR_Moleman
+
+
+
+
+ GR_Mansquirrel_Group
+
+ Human
+ GR_Mansquirrel
+
+
+
+ Human
+
+
+
+
+ GR_Moleman_Group
+
+ Human
+ GR_Moleman
+
+
+
+ Human
+
+
+
+
+ Thrumbo_Group
+
+ Human
+ Thrumbo
+
+
+
+ GR_Thrumboman
+
+
+
+
+ GR_Thrumboman_Group
+
+ Human
+ GR_Thrumboman
+
+
+
+ Human
+
+
+
+
+
+
+
+ Dromedary_Group
+
+ Human
+ Dromedary
+
+
+
+ GR_Hurseman
+
+
+
+
+ Elk_Group
+
+ Human
+ Elk
+
+
+
+ GR_Hurseman
+
+
+
+
+ Horse_Group
+
+ Human
+ Horse
+
+
+
+ GR_Hurseman
+
+
+
+
+ Caribou_Group
+
+ Human
+ Caribou
+
+
+
+ GR_Hurseman
+
+
+
+
+ Donkey_Group
+
+ Human
+ Donkey
+
+
+
+ GR_Hurseman
+
+
+
+
+ GR_Hurseman_Group
+
+ Human
+ GR_Hurseman
+
+
+
+ Human
+
+
+
+
+ Megascarab_Group
+
+ Human
+ Megascarab
+
+
+
+ GR_Manscarab
+
+
+
+
+ Spelopede_Group
+
+ Human
+ Spelopede
+
+
+
+ GR_Manscarab
+
+
+
+
+ Megaspider_Group
+
+ Human
+ Megaspider
+
+
+
+ GR_Manscarab
+
+
+
+
+ GR_Manscarab_Group
+
+ Human
+ GR_Manscarab
+
+
+
+ Human
+
+
+
+
+ Iguana_Group
+
+ Human
+ Iguana
+
+
+
+ GR_Lizardman
+
+
+
+
+ Cobra_Group
+
+ Human
+ Cobra
+
+
+
+ GR_Lizardman
+
+
+
+
+ Tortoise_Group
+
+ Human
+ Tortoise
+
+
+
+ GR_Lizardman
+
+
+
+
+ GR_Lizardman_Group
+
+ Human
+ GR_Lizardman
+
+
+
+ Human
+
+
+
+
diff --git a/Source/Animal_Inheritance/Patches/BasePregnancyPatcher.cs b/Source/Animal_Inheritance/Patches/BasePregnancyPatcher.cs
new file mode 100644
index 0000000..1395575
--- /dev/null
+++ b/Source/Animal_Inheritance/Patches/BasePregnancyPatcher.cs
@@ -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 supportedHybridRaces = new List()
+ {
+ "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 supportedInitialAnimalRaces = new List()
+ {
+ "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.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);
+ }
+ }
+
+ }
+}
diff --git a/Source/Animal_Inheritance/Patches/PregnancyHelperPatcher.cs b/Source/Animal_Inheritance/Patches/PregnancyHelperPatcher.cs
new file mode 100644
index 0000000..0d7aafd
--- /dev/null
+++ b/Source/Animal_Inheritance/Patches/PregnancyHelperPatcher.cs
@@ -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(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(mother, father, DnaGivingParent.Mother);
+ return false;
+ }
+ else if (humanFatherAndSupportedHybrid)
+ {
+ Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Father);
+ return false;
+ }
+ return true;
+ }
+
+ }
+}
diff --git a/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs b/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
index d619354..d853424 100644
--- a/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
+++ b/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
@@ -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(ref RJW_BGSSettings.rjw_bgs_global_gene_chance, "rjw_bgs_global_gene_chance", RJW_BGSSettings.rjw_bgs_global_gene_chance, true);
Scribe_Values.Look(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(ref RJW_BGSSettings.rjw_bgs_detailed_debug, "rjw_bgs_detailed_debug", RJW_BGSSettings.rjw_bgs_detailed_debug, true);
+ Scribe_Values.Look(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;
}
}
diff --git a/Source/Common/patches/PatchGetParents.cs b/Source/Common/patches/PatchGetParents.cs
index 9038d17..98f3aff 100644
--- a/Source/Common/patches/PatchGetParents.cs
+++ b/Source/Common/patches/PatchGetParents.cs
@@ -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;
+ }
}
}
diff --git a/Source/Common/patches/PatchPregnancyHelper.cs b/Source/Common/patches/PatchPregnancyHelper.cs
index 30aa788..d646323 100644
--- a/Source/Common/patches/PatchPregnancyHelper.cs
+++ b/Source/Common/patches/PatchPregnancyHelper.cs
@@ -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 pawnparts = giver.GetGenitalsList();
List 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;
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index ef269cf..6049b8b 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -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;
diff --git a/Source/Genes/Breeding/Abilities/CompAbilityEffect_MatingCall.cs b/Source/Genes/Breeding/Abilities/CompAbilityEffect_MatingCall.cs
new file mode 100644
index 0000000..e50291b
--- /dev/null
+++ b/Source/Genes/Breeding/Abilities/CompAbilityEffect_MatingCall.cs
@@ -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);
+ }
+
+ }
+}
diff --git a/Source/Genes/Breeding/Abilities/CompAbilityEffect_PheromoneSpit.cs b/Source/Genes/Breeding/Abilities/CompAbilityEffect_PheromoneSpit.cs
new file mode 100644
index 0000000..5064003
--- /dev/null
+++ b/Source/Genes/Breeding/Abilities/CompAbilityEffect_PheromoneSpit.cs
@@ -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);
+ }
+
+ }
+}
diff --git a/Source/Genes/Breeding/Abilities/CompProperties_AbilityMatingCall.cs b/Source/Genes/Breeding/Abilities/CompProperties_AbilityMatingCall.cs
new file mode 100644
index 0000000..e30485c
--- /dev/null
+++ b/Source/Genes/Breeding/Abilities/CompProperties_AbilityMatingCall.cs
@@ -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);
+ }
+ }
+}
diff --git a/Source/Genes/Breeding/Abilities/CompProperties_AbilityPheromoneSpit.cs b/Source/Genes/Breeding/Abilities/CompProperties_AbilityPheromoneSpit.cs
new file mode 100644
index 0000000..381843f
--- /dev/null
+++ b/Source/Genes/Breeding/Abilities/CompProperties_AbilityPheromoneSpit.cs
@@ -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);
+ }
+ }
+}
diff --git a/Source/Genes/Breeding/AnimalBreedingHelper.cs b/Source/Genes/Breeding/AnimalBreedingHelper.cs
new file mode 100644
index 0000000..f2386e9
--- /dev/null
+++ b/Source/Genes/Breeding/AnimalBreedingHelper.cs
@@ -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
+ {
+
+ ///
+ /// 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!
+ ///
+ /// The pawn that will be target of breeding animals
+ /// The range around the pawn for which animals will be triggered.
+ public static void DoAnimalBreedingPulse(Pawn toBeBred, int pulse_distance, bool ends_manhunter = true)
+ {
+ IEnumerable 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 GetAnimalsInRange(Map map, IntVec3 position, int distance)
+ {
+ IEnumerable animals =
+ map.mapPawns
+ .AllPawnsSpawned
+ .Where((Func)(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();
+ }
+
+ }
+ }
+}
diff --git a/Source/Genes/Breeding/Gene_FerventOvipositor.cs b/Source/Genes/Breeding/Genes/Gene_FerventOvipositor.cs
similarity index 100%
rename from Source/Genes/Breeding/Gene_FerventOvipositor.cs
rename to Source/Genes/Breeding/Genes/Gene_FerventOvipositor.cs
diff --git a/Source/Genes/Breeding/Gene_InsectIncubator.cs b/Source/Genes/Breeding/Genes/Gene_InsectIncubator.cs
similarity index 100%
rename from Source/Genes/Breeding/Gene_InsectIncubator.cs
rename to Source/Genes/Breeding/Genes/Gene_InsectIncubator.cs
diff --git a/Source/Genes/Breeding/Gene_MechBreeder.cs b/Source/Genes/Breeding/Genes/Gene_MechBreeder.cs
similarity index 100%
rename from Source/Genes/Breeding/Gene_MechBreeder.cs
rename to Source/Genes/Breeding/Genes/Gene_MechBreeder.cs
diff --git a/Source/Genes/Breeding/PatchMechBirth.cs b/Source/Genes/Breeding/Patches/PatchMechBirth.cs
similarity index 100%
rename from Source/Genes/Breeding/PatchMechBirth.cs
rename to Source/Genes/Breeding/Patches/PatchMechBirth.cs
diff --git a/Source/Genes/Cum/Patch_TransferNutrition.cs b/Source/Genes/Cum/Patch_TransferNutrition.cs
index 1f3f0bb..3e81a5f 100644
--- a/Source/Genes/Cum/Patch_TransferNutrition.cs
+++ b/Source/Genes/Cum/Patch_TransferNutrition.cs
@@ -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();
- inflatorFood.CurLevel += donatedNutrition;
+ if (inflatorFood != null)
+ inflatorFood.CurLevel += donatedNutrition;
}
- */
+
}
}
}
\ No newline at end of file
diff --git a/Source/Genes/Damage/Gene_Elasticity.cs b/Source/Genes/Damage/Gene_Elasticity.cs
index 5d26c07..3da6ecf 100644
--- a/Source/Genes/Damage/Gene_Elasticity.cs
+++ b/Source/Genes/Damage/Gene_Elasticity.cs
@@ -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;
}
}
- */
+
}
}
\ No newline at end of file
diff --git a/Source/Genes/ExtraGenitalia/Gene_Femboy.cs b/Source/Genes/ExtraGenitalia/Gene_Femboy.cs
index 6641025..e86beed 100644
--- a/Source/Genes/ExtraGenitalia/Gene_Femboy.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_Femboy.cs
@@ -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
diff --git a/Source/Genes/Gender/Gene_FemaleOnly.cs b/Source/Genes/Gender/Gene_FemaleOnly.cs
index 97c4365..df48328 100644
--- a/Source/Genes/Gender/Gene_FemaleOnly.cs
+++ b/Source/Genes/Gender/Gene_FemaleOnly.cs
@@ -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()
diff --git a/Source/Genes/Gender/Gene_MaleOnly.cs b/Source/Genes/Gender/Gene_MaleOnly.cs
index e081700..d99652a 100644
--- a/Source/Genes/Gender/Gene_MaleOnly.cs
+++ b/Source/Genes/Gender/Gene_MaleOnly.cs
@@ -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()
diff --git a/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs b/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs
index fce2ded..61430a2 100644
--- a/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs
+++ b/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs
@@ -11,5 +11,8 @@ namespace RJW_Genes
public HediffDef_PartBase vagina;
public HediffDef_PartBase anus;
+
+ public HediffDef_PartBase breasts;
+
}
}
diff --git a/Source/Genes/Genitalia/Gene_GenitaliaType.cs b/Source/Genes/Genitalia/Gene_GenitaliaType.cs
index 7ffda55..21fada8 100644
--- a/Source/Genes/Genitalia/Gene_GenitaliaType.cs
+++ b/Source/Genes/Genitalia/Gene_GenitaliaType.cs
@@ -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);
}
}
}
diff --git a/Source/Genes/Genitalia/GenitaliaChanger.cs b/Source/Genes/Genitalia/GenitaliaChanger.cs
index 86d112b..71f0f05 100644
--- a/Source/Genes/Genitalia/GenitaliaChanger.cs
+++ b/Source/Genes/Genitalia/GenitaliaChanger.cs
@@ -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
/// the new type of penis
/// the new type of vagina
/// the new type of anus
- 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
}
}
+
+
}
}
diff --git a/Source/Genes/Genitalia/GenitaliaUtility.cs b/Source/Genes/Genitalia/GenitaliaUtility.cs
index a56d9ae..6a6ba79 100644
--- a/Source/Genes/Genitalia/GenitaliaUtility.cs
+++ b/Source/Genes/Genitalia/GenitaliaUtility.cs
@@ -16,12 +16,11 @@ namespace RJW_Genes
/// The first GeneDef of the pawn related to GenitaliaTypes
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()?.breasts ?? Genital_Helper.average_breasts;
}
public static bool PawnStillNeedsGenitalia(Pawn pawn)
diff --git a/Source/Genes/Quirks/Defs/QirkExtension.cs b/Source/Genes/Quirks/Defs/QirkExtension.cs
new file mode 100644
index 0000000..8e90319
--- /dev/null
+++ b/Source/Genes/Quirks/Defs/QirkExtension.cs
@@ -0,0 +1,12 @@
+using Verse;
+using RimWorld;
+using rjw;
+using System;
+
+namespace RJW_Genes
+{
+ public class QirkExtension : DefModExtension
+ {
+ public string Satisfiedquirk;
+ }
+}
diff --git a/Source/Genes/Quirks/QuirkPatcher.cs b/Source/Genes/Quirks/QuirkPatcher.cs
new file mode 100644
index 0000000..ac2b477
--- /dev/null
+++ b/Source/Genes/Quirks/QuirkPatcher.cs
@@ -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
+ {
+ ///
+ /// 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.
+ ///
+ 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 potentiallySatisfiedQuirks = new List();
+ foreach (Gene gene in partner.genes.GenesListForReading)
+ {
+ if (partner.genes.HasActiveGene(gene.def))
+ {
+ string satisfiable_quirk = gene.def?.GetModExtension()?.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;
+ }
+
+ }
+}
diff --git a/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs b/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs
index 709d05b..ff5ab07 100644
--- a/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs
+++ b/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs
@@ -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 ()
-
*/
\ No newline at end of file
diff --git a/Source/Genes/Special/Patches/Patch_SexualTamer.cs b/Source/Genes/Special/Patches/Patch_SexualTamer.cs
new file mode 100644
index 0000000..15215af
--- /dev/null
+++ b/Source/Genes/Special/Patches/Patch_SexualTamer.cs
@@ -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);
+ }
+ }
+ }
+
+ }
+
+
+}
diff --git a/Source/HarmonyInit.cs b/Source/HarmonyInit.cs
index c2cba10..f4396b9 100644
--- a/Source/HarmonyInit.cs
+++ b/Source/HarmonyInit.cs
@@ -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
+ }
}
}
diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs
index 2ff339c..443c32e 100644
--- a/Source/HediffDefOf.cs
+++ b/Source/HediffDefOf.cs
@@ -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");
}
}
diff --git a/Source/RJW.dll b/Source/RJW.dll
deleted file mode 100644
index c07fda1..0000000
Binary files a/Source/RJW.dll and /dev/null differ
diff --git a/Source/RJWSexperience.dll b/Source/RJWSexperience.dll
deleted file mode 100644
index 533e46c..0000000
Binary files a/Source/RJWSexperience.dll and /dev/null differ
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 757086f..7b8559b 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -48,11 +48,13 @@
+
+
@@ -64,8 +66,13 @@
-
-
+
+
+
+
+
+
+
@@ -76,8 +83,8 @@
-
-
+
+
@@ -161,6 +168,8 @@
+
+
@@ -168,6 +177,7 @@
+
@@ -189,8 +199,6 @@
-
-
@@ -203,8 +211,10 @@
..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
False
-
- False
+
+ ..\..\licentia-labs-master\Assemblies\LicentiaLabs.dll
+
+
..\..\rjw\1.5\Assemblies\RJW.dll
False
@@ -231,5 +241,8 @@
+
+
+
\ No newline at end of file