diff --git a/CHANGELOG.md b/CHANGELOG.md
index c6b9f65..26387d8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,196 +1,4 @@
-# 2.2.0 (23-07-2024)
-
-## Explanations
-
-**Genetic Diseases**:
-
-This update introduces genetic diseases that are shared on sex.
-Infection is handled when sex finishes, so a coitus-interruptus will not result in infections.
-
-Infections can be
-
-- Turned off entirely
-- Spread only on penetrative sex
-- Chances are adjustable per XML per Gene
-
-By turning their spread off, you effectively have a set of normal negative genes.
-Dead pawns can spread diseases, but cannot receive them. For all you necros out there.
-
-*Why???*
-
-Most of the genes so far were positive or neutral,
-so I got some fair requests to introduce negative genes to keep xenotypes balanced.
-I know that this is some overlap with the STD mod, but well ... you are free to turn things off?
-
-In theory, you can specify and gene of any kind to be spreadable by sex, not only ones written by this mod.
-
-**Genetic Infectors**:
-
-These Genes can apply a genetic disease, but are not genetic diseases themselves.
-A single infector gene can have multiple resulting diseases, see this extension example:
-
-```xml
-
- 0.05
-
-
rjw_genes_size_blinded
-
rjw_genes_infectious_bisexuality
-
-
-```
-
-The infection-chance is applied per gene - for the example above there would be a 5% chance to apply `size_blinded` and 5% chance to apply `infectious_bisexuality`.
-Multiple infections can happen on a single sex.
-The `infectionGenes` can be any gene, this is not limited to genetic diseases (e.g. ugly or something).
-
-*Infectors* are always applied even if the genetic disease spread is turned off.
-The created genetic diseases will follow the logic outlined above.
-
-**Disease Immunity**:
-
-Pawns can be immune to genetic diseases.
-
-This is either done with a specialised gene (`rjw_genes_genetic_disease_immunity`)
-or by genes giving specific immunities.
-
-Any gene can give immunity against any genetic disease using an extension:
-
-```xml
-
-
-
rjw_genes_size_blinded
-
-
-```
-
-These extensions can be slapped on any gene,
-but they are meant mostly to have infectors immune against their own diseases.
-
-**Twinkification / Feminization**:
-
-Both approaches follow the same general logic.
-
-- Pawn `A` has Twinkifier Gene and fucks Pawn `B`
-- `B` receives a `twinkification progress` hediff with some effects
-- Upon having ANY sex, `B` can gain genes from a relevant genepool.
-- Genes can be minor or major, depending on the progress of twinkification.
-
-Pawn `B` might be immune against twinkifier as normal immunity logic against diseases.
-But once the hediff is there, the twinkification can happen unless you wait for it to cool down.
-Gene additions are subject to an application chance (25% for minor, 10% for major)
-and might try to add a gene that already exists - then nothing happens.
-
-*Twink Genepool*:
-- (Minor) Body_Thin
-- (Minor) Homosexual
-- (Minor) Beard_NoBeardOnly
-- (Minor) Small male genitalia
-- (Major) Minor Vulnerability
-- (Major) Infectious Homosexuality
-- (Major) Delicate
-- (Major) Beauty Pretty
-- (Major) Fertile Anus
-
-*Feminization Genepool*:
-- (Minor) Long Hair
-- (Minor) No-Beard
-- (Minor) Small Male Genitals
-- (Minor) No Cum
-- (Minor) Big Breasts (will only show later)
-- (Major) Female Only
-- (Major) No Penis
-- (Major) Minor Vulnerability
-
-You can configure all genes, as well as their application chance, in the Genes` XML.
-
-*Why are these changes Genetic?*
-Because this is the genes mod, and I find things here quite robust.
-
-## Changelog
-
-**Additions:**
-
-- Gene: Genetic Disease Immunity. cannot get infected by any genetic diseases, and won't be affected by some other genes (see relevant genes)
-- Disease Gene: Vulnerability. Pawn is likelier to be raped
-- Disease Gene: Infectious Hypersexuality
-- Disease Gene: Infectious Homosexuality & Bisexuality
-- Disease Gene: Infectious lower fertility
-- Disease Gene: Infectious higher sex need
-- Disease Gene: Fluctual Sexual Need. (Configurable) Chance to reset sex-need to near-zero and gain a bit of rest-need.
-- Disease Gene: Size Blinded. Pawns have a higher chance for hooking up with pawns with a big cock, lower chance for small cocks.
-- Infector Gene: Genetic Stretcher. Pawns can infect other pawns with *Size Blinded*
-- Gene: Hardwired Progenity. Pawns with this get a malus on having no-children, and bonus on having a lot.
-- Gene: Sexual Genetic Swap. Pawns have a chance to switch a random gene with their sexpartner.
-- (Archite) Gene: Sexual Genetic Thief. Pawns have a chance to steal a gene from their sexpartner. Genetic Disease Immunity shields against this.
-- Gene: Sperm Displacement. Pawns might overwrite an existing pregnancy, becoming the new father. The pregnancy will stay in its gestation progress.
-- Gene: Twinkification. Pawns turn their (male) sexual partners into breedable twinks.
-- Gene: Feminization. Pawns turn their (male) sexual partners into women.
-- Gene: Blocked Masturbation. Pawns cannot masturbate.
-- {Sexperience} Gene: Living Cumbucket. Pawns with this Gene get "filled" upon sex, and slowly disperse usable gathered cum.
-- Disease Gene: Infectious Blocked Masturbation
-- Gene: Rut. Pawns have a chance to go into heat and need more sex for a day. (Default: 5% chance per day, to go 1 day in heat).
-- Disease Gene: Infectious Rut.
-- Pawns will have negative thoughts about pawns with more genetic diseases than themselves.
-- Faction Penalties for spreading diseases, stealing genes and aging pawns with age transfer
-- Patch for [Imphilee Xeno](https://steamcommunity.com/sharedfiles/filedetails/?id=2990674516) by @Bunuffin
-
-**Changes**::
-
-- Cum-Amount-Changing genes now are XML Adjustable and share a single `.cs`-class
-- Incubi are now Bisexual too, as they should be.
-
-**Fixes:**
-
-- Fixed an Issue where pawns would always get the Pheromone social boost, unless they had the pheromone (#113)
-- Fixed two hidden dependencies on Ideology and Royalty (#115)
-- Fixed some more hidden dependencies on Ideology Icons (#118)
-- Fixed a hidden dependency on Licentialabs (#119)
-
-**Internal:**
-
-- GenderFluid-Gene now uses a generalized `TickBasedChanceExtension` over its unique special `GenderFluidExtension`
-- Introduced a `ModLog.Debug` Function that checks for the settings before printing - trying to spread it over the whole project.
-- Removed TODO File. I have enough to do.
-
-**Notes:**
-
-*One Time Error Load*
-
-The changes to the cum-gene will give a 1-time warning on loading the save. The warning looks like this:
-```
-Could not find class RJW_Genes.Gene_MuchCum while resolving node li. Trying to use Verse.Gene instead. Full node:
rjw_genes_much_cumThing_Human697null82
-UnityEngine.StackTraceUtility:ExtractStackTrace ()
-Verse.Log:Error (string)
-...
-```
-
-This is not dangerous.
-
-*Blocked Masturbation*
-
-Might not be fully working - for testing, I run things in DevMode, and I can just order people to masturbate.
-Please playtest this a bit for me, as I want to make it work nicely.
-
-*Supporting*
-
-You can now support me with [buying me a coffee](https://buymeacoffee.com/vegapnk).
-The mod will remain free, open source and I will not hide or lock any features.
-Its just meant if you want to drop me a tip.
-
-**Since Beta-1** (11-07-2024)
-
-- Made the Feminizer and Twinkifier configurable with XML.
-- Typos in the Hediff Defs, tweaking of some values.
-- Living Cum-Bucket & Rut Genes
-- Great icons by @Alpenglow
-
-**Since Beta-2** (17-07-2024)
-
-- Changed behaviour of living cumbucket. Now, once "really full" the output happens more rarely but is much more at once.
-- More Icons by @Alpenglow <3 this time attributed correct.
-- Adjusted some of the metabolic values - likes cumflation, generous donor and living cumbucket have small costs.
-
-# 2.1.0 (27-06-2024)
+# 2.1.0
**Additions**:
@@ -237,7 +45,7 @@ Its just meant if you want to drop me a tip.
- Some new Icons thanks to Kira-Bad-Artist
- Some new Icons thanks to Archer
-# 2.0.0 (30-05-2024)
+# 2.0.0
**Summary**:
@@ -284,20 +92,20 @@ Its just meant if you want to drop me a tip.
- Patches to RJW-Pregnancy Helper to account for Male Pregs.
- Some replacements from `hasGene` to `hasActiveGene`
-# 1.3.3 (02-11-2023)
+# 1.3.3
**Fixes:**
- Added another check to the AG Malachai Xenotype (Fixes #68)
- Fixed the `GatheredCum`Fertilin Ingestion Patch throwing an Error for people without Sexperience (Fixes #69 (nice))
-# 1.3.2 (24-10-2023)
+# 1.3.2
**Fixes:**
- Removed patch for Malachai, needs a different patching operator but I don't want to have broken fixes for now (Tracked in a new Issue)
-# 1.3.1 (22-10-2023)
+# 1.3.1
**Changes**
@@ -336,7 +144,7 @@ The pawns that are gender fluid can get pregnant.
However, with RJW 5.3.7 these pregnancies disappear.
This is a change needed upstream, but I will have a look.
-# 1.2.1 (18-06-2023)
+# 1.2.1
**Fixes**:
@@ -416,9 +224,9 @@ And I am aware that the TiTs-Myr work different than the things I made now.
- Mostly Patches and Changes to the Halamyr Defs
- Some re-arranging and mayRequires for other mods
-# 1.1.4 (06-04-2023)
+# 1.1.4
-**Fixes:**
+Fixes:
- Youth Fountain and Age Drainer **really** "stop" at 18 (#26, #28) and never age pawns
- Drastically reduced vomiting time due to an missunderstanding (#29). `0.4` instead of `0.01`
@@ -426,37 +234,37 @@ And I am aware that the TiTs-Myr work different than the things I made now.
Sometimes life is like that, and you have to fix the fixes.
It was never really broken, life is just very long.
-# 1.1.3 (28-03-2023)
+# 1.1.3
-**Changes:**
+Changes:
- Youth Fountain and Age Drainer "stop" at 18 (#26)
- Youth Fountain and Age Drainer activate only for pawns at 18 (#26)
- Drained Pawns vomit less (from mtb 0.05 to 0.01)(#29)
-**Fixes:**
+Fixes:
- InsectBreeder would mess with normal Pawn-Animal pregancy for egg laying animals (#23)
-# 1.1.2 (19-03-2023)
+# 1.1.2
-**Changes:**
+Changes:
- Added more cool images from WasMachenDennSachen (#22)
-**Fixes:**
+Fixes:
- Aphrodisiac Pheromones checks for children and other conditions (#25)
-# 1.1.1 (10-03-2023)
+# 1.1.1
-**Changes:**
+Changes:
- Drastically increased mood-penalty for Fertilin-Loss (if the pawn is still too happy, there will never be a breakdown for missing fertilin)
- No-Breast Genes add Nipples
- Featureless Chest Gene (No Nipples at all, adds the RJW Featureless Chest as requested per some Kobold fetishists)
-**Fixes:**
+Fixes:
- Small and Big Male Genitalia had images wrong way round
- Fertilin should activate at a MinAge of 18
diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index bb1f065..1099308 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/GeneDefs/GeneCategories.xml b/Common/Defs/GeneDefs/GeneCategories.xml
index e799489..e506741 100644
--- a/Common/Defs/GeneDefs/GeneCategories.xml
+++ b/Common/Defs/GeneDefs/GeneCategories.xml
@@ -67,11 +67,5 @@
8
-
- rjw_genes_diseases
-
- 22
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
index 1b946c2..bb6fbe4 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
@@ -15,6 +15,7 @@
+
rjw_genes_mechbreeder
@@ -41,9 +42,8 @@
rjw_genes_fertile_anus
- Xenotypes with this gene have a functional uterus if they do not possess one by
- means of their vagina.
- For males, it is connected to the anal cavity and leads to a normal pregnancy.
+ Xenotypes with this gene have a functional uterus connected to the anal cavity even
+ for malesGenes/Icons/Fertile_anus54
@@ -81,6 +81,7 @@
-1
+
rjw_genes_mating_call
@@ -97,6 +98,7 @@
-1
+
rjw_genes_pheromone_spit
@@ -113,62 +115,4 @@
-1
-
- rjw_genes_hardwired_progenity
-
- Carriers of this gene need to procreate. They suffer negative effects if they are
- childless, and have increased capabilities if they reach a high amount of offsprings.
- Genes/Icons/hardwired_progenity
- 70
-
-
-
-
- -0.1
- 1.2
- 1.2
- +0.15
- -0.1
-
-
-
-
- 0.05
- 0.1
- 0.1
- 0.4
-
-
-
-
- 0.15
- 0.25
- -0.25
-
-
-
-
- 1
- 0
-
-
-
- rjw_genes_basic_rut
-
- Carriers of this gene can enter a state of heat, resulting in drastically higher
- sexual activity.
- Genes/Icons/rut
- 1
- 1
- 11
- RJW_Genes.Gene_Rut
-
-
-
- 60000
- 0.05
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Cum.xml b/Common/Defs/GeneDefs/GeneDefs_Cum.xml
index 95580a8..32ac80c 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Cum.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Cum.xml
@@ -21,15 +21,10 @@
Males of these species have no fluid.Genes/Icons/No_Cum
- RJW_Genes.Gene_ChangeCumAmount
+ RJW_Genes.Gene_NoCum53301
-
-
- 0.0
-
-
@@ -37,15 +32,10 @@
Males of this species produce a lot of fluid.Genes/Icons/Much_Cum
- RJW_Genes.Gene_ChangeCumAmount
+ RJW_Genes.Gene_MuchCum5341
- 0
-
-
- 3.0
-
-
+ -1
@@ -54,15 +44,10 @@
Males of this species produce a whole lot of fluid. They are like fountains
basically.Genes/Icons/Very_Much_Cum
- RJW_Genes.Gene_ChangeCumAmount
+ RJW_Genes.Gene_VeryMuchCum5351
- -1
-
-
- 15.0
-
-
+ -2
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Damage.xml b/Common/Defs/GeneDefs/GeneDefs_Damage.xml
index 2e7f941..d045a68 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Damage.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Damage.xml
@@ -7,7 +7,7 @@
rjw_genes_damageThis Gene makes the Carrier unable to get mood or social penalties from being raped
and they cannot be broken for a long period of time.
- Genes/Icons/TrialDefend
+ UI/Icons/Rituals/TrialDefend2-11
diff --git a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml
deleted file mode 100644
index 017c1c4..0000000
--- a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-
- rjw_genes_diseases
- false
-
-
-
-
-
-
- rjw_genes_diseases
- rjw_genes_genetic_disease_immunity
- 1
- 0.95
-
- This gene makes the pawn immune against genetic STDs and some other genes that
- imply negative side-effects.
- 1
- -1
- Genes/Icons/disease_immunity
-
-
-
-
-
-
-
- rjw_genes_minor_vulnerability
-
- This gene makes the pawn a bit more vulnerable, and a slightly more attractive
- target for rape.
- 1
- 1
- 0.85
- Genes/Icons/minor_vulnerability
- 5
-
-
- 0.15
-
-
-
-
RJW_Genes_Vulnerability
-
-
-
-
- 0.05
-
-
-
-
-
- rjw_genes_major_vulnerability
-
- This gene makes the pawn more vulnerable, and a more attractive target for
- rape.
- 2
- 1
- Genes/Icons/major_vulnerability
- 6
-
-
-
RJW_Genes_Vulnerability
-
-
-
- 0.3
-
-
-
-
- 0.03
-
-
-
-
-
-
- rjw_genes_infectious_blocked_masturbation
-
- Carriers of this gene are unable to masturbate - they need a partner or
- equipment.
- Genes/Icons/blocked_masturbation
- 55
- 1
- 2
-
-
-
-
-
-
- rjw_genes_infectious_increased_sex_need
-
- Carriers of this genetic disease need more sex.
- 0
- 1
- 0.9
- UI/Icons/ColonistBar/Idle
- 5
-
-
- 0.15
-
-
-
-
- 0.08
-
-
-
-
-
- rjw_genes_infectious_major_increased_sex_need
-
- Carriers of this genetic disease need a lot more sex.
- 1
- 2
- 0.85
- UI/Icons/ColonistBar/Idle
- 5
-
-
- 1.0
-
-
-
-
- 0.03
-
-
-
-
-
- rjw_genes_infectious_hypersexuality
-
- This gene makes the pawn hypersexual, and has a chance to spread on
- intercourse.
- Genes/Icons/Hypersexual
- 2
- 2
- 7
-
-
rjw_genes_hypersexuality_trait_giver
-
-
-
-
- Nymphomaniac
-
-
-
-
-
- 0.05
-
-
-
-
-
- rjw_genes_infectious_bisexuality
-
- This gene makes the pawn bisexual, and has a chance to spread on intercourse.
- Genes/Icons/bisexuality
- 1
- 0
- 8
-
-
-
rjw_genes_bisexuality_trait_giver
-
rjw_genes_sexual_orientation
-
-
-
-
- Bisexual
-
-
-
-
-
- 0.1
-
-
-
-
-
- rjw_genes_infectious_homosexuality
-
- This gene makes the pawn homosexual, and has a chance to spread on intercourse.
- Genes/Icons/homosexuality
- 1
- 0
- 9
-
-
-
rjw_genes_homosexuality_trait_giver
-
rjw_genes_sexual_orientation
-
-
-
-
- Gay
-
-
-
-
-
- 0.1
-
-
-
-
-
- rjw_genes_fluctual_sexual_needs
-
- Carriers of this genetic disease have a chance to suddenly require sex, gaining
- a bit of energy to find quick relief.
- UI/Icons/ColonistBar/Idle
- 1
- 2
- 11
- RJW_Genes.Gene_FluctualSexualNeed
-
-
- 0.1
-
-
-
- 30000
- 0.15
-
-
-
-
-
-
- rjw_genes_size_blinded
-
- This genetic disease makes the carrier dramatically more drawn to pawns with
- huge cocks.
- Genes/Icons/size_blinded
- 1
- 1
- 11
-
-
- 0.1
-
-
-
-
-
- rjw_genes_stretcher
-
- Pawns with this gene have a chance to alter the genes of their sexual partners
- to prefer large cocks.
- Genes/Icons/stretcher
- 1
- 0
- 12
-
-
-
-
rjw_genes_size_blinded
-
-
-
- 0.05
-
-
rjw_genes_size_blinded
-
-
-
-
-
-
-
- rjw_genes_infectious_rut
-
- Carriers of this gene can enter a state of heat, resulting in drastically
- higher
- sexual activity.
- Genes/Icons/rut
- 1
- 2
- 11
- RJW_Genes.Gene_Rut
-
-
-
- 60000
- 0.05
-
-
- 0.1
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml
index a01e245..8a9d018 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml
@@ -14,10 +14,6 @@
-
-
rjw_genes_hypersexuality_trait_giver
-
-
false
+
+
rjw_genes_masochist
@@ -81,7 +102,7 @@
ReproductionThis Gene makes you gay.
- Genes/Icons/RoundC
+ UI\Ideoligions\Universal\RoundC03
@@ -90,7 +111,6 @@
-
rjw_genes_homosexuality_trait_giver
rjw_genes_sexual_orientation
@@ -109,7 +129,7 @@
ReproductionCarriers of this Gene are Bisexual.
- Genes/Icons/RoundC
+ UI\Ideoligions\Universal\RoundC04
@@ -119,7 +139,6 @@
rjw_genes_sexual_orientation
-
rjw_genes_bisexuality_trait_giver
false
@@ -181,46 +200,4 @@
-
- rjw_genes_pregnancy_overwrite
-
- Reproduction
- Carriers of this gene can 'overwrite' an existing pregnancy, keeping the
- progress but effectively replacing the father.
- Genes/Icons/pregnancy_overwrite
- 120
-
- 4
- -2
-
-
-
-
-
-
-
- rjw_genes_blocked_masturbation
-
- Reproduction
- Carriers of this gene are unable to masturbate - they need a partner or equipment.
- Genes/Icons/blocked_masturbation
- 60
- 0
- 1
-
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
index 1d44fe7..189a6c8 100644
--- a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
@@ -19,7 +19,7 @@
partially filled)
1-2
- Genes/Icons/FleshPurity
+ UI/Memes/FleshPurity1
@@ -30,7 +30,7 @@
(Partner stays adult)
2-2
- Genes/Icons/FireLeaves
+ UI/Ideoligions/FireLeaves2
@@ -140,7 +140,7 @@
rjw_genes_sex_tamer
-
+
sextamerBestiality has a chance to tame animals or advance their training.Genes/Icons/RJW_Genes_SexualTamer
@@ -149,119 +149,4 @@
-1
-
- rjw_genes_sexual_genetic_swap
-
- Carriers with this gene may switch a gene with their sex-partner. Switched Genes are always endogenes.
- Genes/Icons/sexual_genetic_swap
- 20
- 3
- 0
-
-
- 0.1
-
-
-
-
-
- rjw_genes_sexual_genetic_thief
-
- Carriers with this gene may steal a gene from their sex-partner. Stolen genes are always xenogenes.
- Genes/Icons/sexual_genetic_thief
- 21
- 5
- -2
- 1
-
-
- 0.2
-
-
-
-
-
- rjw_genes_feminizer
-
- Carriers with this gene slowly turn male sexual partners into females.
- Genes/Icons/feminizer
- 31
- 4
- -1
-
-
-
+
rjw_genes_succubus_drainedHediffWithComps
- The vitality of this pawn has been drained. Cannot be drained again until fully
- recovered.
+ The vitality of this pawn has been drained. Cannot be drained again until fully recovered.(1,0,0.5)1.01.0
@@ -75,13 +74,13 @@
-0.2
- 0.4
+ 0.40.10.35
-
+
rjw_genes_fertilin_craving
@@ -91,78 +90,77 @@
1.00.01
-
-
- 0.05
-
-
- Consciousness
- 0.9
-
-
-
-
-
- 0.35
- 0.1
-
-
- Consciousness
- 0.8
-
-
-
-
-
- 0.7
- 0.15
-
-
- Consciousness
- 0.5
-
-
-
+
+
+ 0.05
+
+
+ Consciousness
+ 0.9
+
+
+
+
+
+ 0.35
+ 0.1
+
+
+ Consciousness
+ 0.8
+
+
+
+
+
+ 0.7
+ 0.15
+
+
+ Consciousness
+ 0.5
+
+
+
-
- 0.05
- -0.1
-
+
+ 0.05
+ -0.1
+
-
- rjw_genes_naked_prowess
- (0.52, 1, 0.95)
-
- Driven by fertilin, this person has greatly increased strength and resilience.
- HediffWithComps
-
-
-
-
- 0.5
- 0.5
- 0.5
-
-
- 0.5
- 1.5
-
-
-
-
-
- True
- 5000
-
-
-
-
- false
-
+
+ rjw_genes_naked_prowess
+
+ Driven by fertilin, this person has greatly increased strength and resilience.
+ HediffWithComps
+
+
+
+
+ 0.5
+ 0.5
+ 0.5
+
+
+
+ 0.5
+ 1.5
+
+
+
+
+
+ True
+ 5000
+
+
+
+
+ false
+
-
\ No newline at end of file
+
diff --git a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml
deleted file mode 100644
index 45537fd..0000000
--- a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-
-
-
-
- rjw_genes_feminization_progress
- HediffWithComps
-
- Something is changing this pawn - there is a chance to develop female features
- upon sex.
- false
- 1.0
- false
- false
-
-
- -0.01
-
-
-
-
-
-
- false
-
-
-
-
- 0.6
- true
-
-
- Consciousness
- -0.5
-
-
-
- 0.25
-
-
-
-
-
- 0.8
-
-
- Consciousness
- -0.05
-
-
- true
-
- 0.5
- 0.25
-
-
-
-
-
- 0.9
-
-
- Consciousness
- -0.1
-
-
- true
-
- 1.0
- 0.5
-
-
-
-
-
-
-
- rjw_genes_twinkification_progress
- HediffWithComps
-
- Something is changing this pawn - there is a chance to turn into a cute,
- breedable twink upon sex.
- false
- 1.0
- false
- false
-
-
- -0.01
-
-
-
-
-
-
- false
-
-
-
-
- 0.6
- true
-
-
- Consciousness
- -0.05
-
-
-
- 0.25
-
-
-
-
-
- 0.8
-
-
- Consciousness
- -0.05
-
-
- true
-
- 0.5
- 0.25
-
-
-
-
-
- 0.9
-
-
- Consciousness
- -0.1
-
-
- true
-
- 1.5
- 0.5
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/HediffDefs/Hediffs_Rut.xml b/Common/Defs/HediffDefs/Hediffs_Rut.xml
deleted file mode 100644
index 6c6ac10..0000000
--- a/Common/Defs/HediffDefs/Hediffs_Rut.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
- rjw_genes_genetic_rut
- HediffWithComps
-
- Based on genetics, this pawn is in heat.
- (240,200,110)
- false
- 1.0
- false
- false
-
-
- -1.00
-
-
-
-
-
-
- 0.50
-
-
-
- BloodPumping
- 0.1
-
-
-
-
-
- 0.4
-
- 2.00
-
-
-
- Moving
- 0.1
-
-
- BloodPumping
- 0.15
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/HediffDefs/Scrambler.xml b/Common/Defs/HediffDefs/Scrambler.xml
index 4ab6071..a84299d 100644
--- a/Common/Defs/HediffDefs/Scrambler.xml
+++ b/Common/Defs/HediffDefs/Scrambler.xml
@@ -13,7 +13,7 @@
The Settings for Animal-Gene Inheritance are distributed between RJW-Pregnancy-Settings and their own Mod-Options.
-
Children born by pawns with the `Fertile Anus` gene might be bullied at school, but they can still live a fulfilling and happy life.
-
diff --git a/Common/Languages/English/Keyed/Mod_Settings.xml b/Common/Languages/English/Keyed/Mod_Settings.xml
index cf320c9..d425cd5 100644
--- a/Common/Languages/English/Keyed/Mod_Settings.xml
+++ b/Common/Languages/English/Keyed/Mod_Settings.xml
@@ -21,17 +21,10 @@
Regret Stealing LoveIf off, pawns will not get bad thoughts for seduction.
+
Animal-Mating GenitalCheckIf on, only animals that 'can rape' will be engaging in bestiality after being hit by a animal mating pulse. This usually means that only male animals will start breeding.
- Genetic STDS
- Genetic STD Spread
- If checked, certain Genes will spread on sex.
- Genetic STDs as Endogenes
- If checked, genetic diseases will be added as Endogenes. Otherwise they are added as Xenogenes.
- Genetic STDs on penetrative-sex only
- If checked, genetic STDs are only spread on penetrative sex. Otherwise, any sextype is considered for spread.
-
generous-donor cheatmodeWhen enabled, pawns with the 'generous donor' are not drained and not fertilin exhausted. Hence they can fuel succubi and incubi non-stop. This makes them drastically easier to keep, and you should not do it.
diff --git a/Common/Languages/English/Keyed/StatsReports.xml b/Common/Languages/English/Keyed/StatsReports.xml
deleted file mode 100644
index 715bccb..0000000
--- a/Common/Languages/English/Keyed/StatsReports.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- Pawn doesn't have any children.
- Pawn has a decent amount of children.
- Pawn has a lot of children.
-
-
diff --git a/Common/Patches/Xenotypes/PatchImphileeXeno.xml b/Common/Patches/Xenotypes/PatchImphileeXeno.xml
deleted file mode 100644
index 4a8655f..0000000
--- a/Common/Patches/Xenotypes/PatchImphileeXeno.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/Common/Textures/Genes/Icons/Cumflation_Immunity.png b/Common/Textures/Genes/Icons/Cumflation_Immunity.png
index 40b40ad..643e0bf 100644
Binary files a/Common/Textures/Genes/Icons/Cumflation_Immunity.png and b/Common/Textures/Genes/Icons/Cumflation_Immunity.png differ
diff --git a/Common/Textures/Genes/Icons/FireLeaves.png b/Common/Textures/Genes/Icons/FireLeaves.png
deleted file mode 100644
index 4f1b247..0000000
Binary files a/Common/Textures/Genes/Icons/FireLeaves.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/FleshPurity.png b/Common/Textures/Genes/Icons/FleshPurity.png
deleted file mode 100644
index 0843812..0000000
Binary files a/Common/Textures/Genes/Icons/FleshPurity.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Disease_Background.png b/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Disease_Background.png
deleted file mode 100644
index c614dc9..0000000
Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Disease_Background.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/RoundC.png b/Common/Textures/Genes/Icons/RoundC.png
deleted file mode 100644
index e2288f5..0000000
Binary files a/Common/Textures/Genes/Icons/RoundC.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Cumflation_Immunity.psd b/Common/Textures/Genes/Icons/Samples/Cumflation_Immunity.psd
deleted file mode 100644
index 06e07e4..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Cumflation_Immunity.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_Fertile.png b/Common/Textures/Genes/Icons/Samples/Gene_Fertile.png
deleted file mode 100644
index 46abbae..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_Fertile.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_Inbred.png b/Common/Textures/Genes/Icons/Samples/Gene_Inbred.png
deleted file mode 100644
index 3d8d705..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_Inbred.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureLargeIncrease.png b/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureLargeIncrease.png
deleted file mode 100644
index b07b305..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureLargeIncrease.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureSmallIncrease копия.png b/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureSmallIncrease копия.png
deleted file mode 100644
index 25ad570..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureSmallIncrease копия.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_PsychicBonding.png b/Common/Textures/Genes/Icons/Samples/Gene_PsychicBonding.png
deleted file mode 100644
index a558928..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_PsychicBonding.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_PsychicallyDeaf.png b/Common/Textures/Genes/Icons/Samples/Gene_PsychicallyDeaf.png
deleted file mode 100644
index 9a9eb8c..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_PsychicallyDeaf.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.png b/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.png
deleted file mode 100644
index dda02fd..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.psd b/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.psd
deleted file mode 100644
index 35dadab..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/Time.png b/Common/Textures/Genes/Icons/Samples/Time.png
deleted file mode 100644
index 84cc532..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/Time.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/blocked_masturbation.psd b/Common/Textures/Genes/Icons/Samples/blocked_masturbation.psd
deleted file mode 100644
index 79ca75b..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/blocked_masturbation.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/disease_immunity.psd b/Common/Textures/Genes/Icons/Samples/disease_immunity.psd
deleted file mode 100644
index f6a0ac3..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/disease_immunity.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/feminizer&twinkifier.psd b/Common/Textures/Genes/Icons/Samples/feminizer&twinkifier.psd
deleted file mode 100644
index cfda363..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/feminizer&twinkifier.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/hardwired_progenity.psd b/Common/Textures/Genes/Icons/Samples/hardwired_progenity.psd
deleted file mode 100644
index 25721ce..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/hardwired_progenity.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/la-copa-menstrual-04.png b/Common/Textures/Genes/Icons/Samples/la-copa-menstrual-04.png
deleted file mode 100644
index fdb0ccd..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/la-copa-menstrual-04.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/living_cumbucket.psd b/Common/Textures/Genes/Icons/Samples/living_cumbucket.psd
deleted file mode 100644
index 85796b3..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/living_cumbucket.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/low_fertility.psd b/Common/Textures/Genes/Icons/Samples/low_fertility.psd
deleted file mode 100644
index 5f6af24..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/low_fertility.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/pregnancy_overwrite.psd b/Common/Textures/Genes/Icons/Samples/pregnancy_overwrite.psd
deleted file mode 100644
index eaf1210..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/pregnancy_overwrite.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/rut.psd b/Common/Textures/Genes/Icons/Samples/rut.psd
deleted file mode 100644
index b15bcc6..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/rut.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/sexual_genetic_swap.psd b/Common/Textures/Genes/Icons/Samples/sexual_genetic_swap.psd
deleted file mode 100644
index 354b409..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/sexual_genetic_swap.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/sexual_genetic_thief.psd b/Common/Textures/Genes/Icons/Samples/sexual_genetic_thief.psd
deleted file mode 100644
index a2b92b2..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/sexual_genetic_thief.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/size_blinded&stretcher.psd b/Common/Textures/Genes/Icons/Samples/size_blinded&stretcher.psd
deleted file mode 100644
index 41faa92..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/size_blinded&stretcher.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/Samples/vulnerability.psd b/Common/Textures/Genes/Icons/Samples/vulnerability.psd
deleted file mode 100644
index 5fdc6aa..0000000
Binary files a/Common/Textures/Genes/Icons/Samples/vulnerability.psd and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/TrialDefend.png b/Common/Textures/Genes/Icons/TrialDefend.png
deleted file mode 100644
index 1275bf2..0000000
Binary files a/Common/Textures/Genes/Icons/TrialDefend.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/bisexuality.png b/Common/Textures/Genes/Icons/bisexuality.png
deleted file mode 100644
index e9356e8..0000000
Binary files a/Common/Textures/Genes/Icons/bisexuality.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/blocked_masturbation.png b/Common/Textures/Genes/Icons/blocked_masturbation.png
deleted file mode 100644
index f696996..0000000
Binary files a/Common/Textures/Genes/Icons/blocked_masturbation.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/disease_immunity.png b/Common/Textures/Genes/Icons/disease_immunity.png
deleted file mode 100644
index 9567e1a..0000000
Binary files a/Common/Textures/Genes/Icons/disease_immunity.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/feminizer.png b/Common/Textures/Genes/Icons/feminizer.png
deleted file mode 100644
index fafd7ed..0000000
Binary files a/Common/Textures/Genes/Icons/feminizer.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/hardwired_progenity.png b/Common/Textures/Genes/Icons/hardwired_progenity.png
deleted file mode 100644
index 97811e3..0000000
Binary files a/Common/Textures/Genes/Icons/hardwired_progenity.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/homosexuality.png b/Common/Textures/Genes/Icons/homosexuality.png
deleted file mode 100644
index cab42c7..0000000
Binary files a/Common/Textures/Genes/Icons/homosexuality.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/living_cumbucket.png b/Common/Textures/Genes/Icons/living_cumbucket.png
deleted file mode 100644
index b79f8cc..0000000
Binary files a/Common/Textures/Genes/Icons/living_cumbucket.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/low_fertility.png b/Common/Textures/Genes/Icons/low_fertility.png
deleted file mode 100644
index 0522d94..0000000
Binary files a/Common/Textures/Genes/Icons/low_fertility.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/major_vulnerability.png b/Common/Textures/Genes/Icons/major_vulnerability.png
deleted file mode 100644
index 6e96a10..0000000
Binary files a/Common/Textures/Genes/Icons/major_vulnerability.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/minor_vulnerability.png b/Common/Textures/Genes/Icons/minor_vulnerability.png
deleted file mode 100644
index 9a82f52..0000000
Binary files a/Common/Textures/Genes/Icons/minor_vulnerability.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/pregnancy_overwrite.png b/Common/Textures/Genes/Icons/pregnancy_overwrite.png
deleted file mode 100644
index 9404a6c..0000000
Binary files a/Common/Textures/Genes/Icons/pregnancy_overwrite.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/rut.png b/Common/Textures/Genes/Icons/rut.png
deleted file mode 100644
index 05a0d23..0000000
Binary files a/Common/Textures/Genes/Icons/rut.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/sexual_genetic_swap.png b/Common/Textures/Genes/Icons/sexual_genetic_swap.png
deleted file mode 100644
index b0407c4..0000000
Binary files a/Common/Textures/Genes/Icons/sexual_genetic_swap.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/sexual_genetic_thief.png b/Common/Textures/Genes/Icons/sexual_genetic_thief.png
deleted file mode 100644
index d871b9f..0000000
Binary files a/Common/Textures/Genes/Icons/sexual_genetic_thief.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/size_blinded.png b/Common/Textures/Genes/Icons/size_blinded.png
deleted file mode 100644
index 824a00d..0000000
Binary files a/Common/Textures/Genes/Icons/size_blinded.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/stretcher.png b/Common/Textures/Genes/Icons/stretcher.png
deleted file mode 100644
index 4c25049..0000000
Binary files a/Common/Textures/Genes/Icons/stretcher.png and /dev/null differ
diff --git a/Common/Textures/Genes/Icons/twinkifier.png b/Common/Textures/Genes/Icons/twinkifier.png
deleted file mode 100644
index 3b92f1f..0000000
Binary files a/Common/Textures/Genes/Icons/twinkifier.png and /dev/null differ
diff --git a/LoadFolders.xml b/LoadFolders.xml
index d3c2a27..8f11ba4 100644
--- a/LoadFolders.xml
+++ b/LoadFolders.xml
@@ -16,6 +16,5 @@
Mods/Android
Mods/VE_Genetics
Mods/LicentiaLabs
-
Mods/Sexperience
\ No newline at end of file
diff --git a/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml b/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml
index a0a7eee..22fb911 100644
--- a/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml
+++ b/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml
@@ -27,8 +27,6 @@
This Xenotype loves being cumflated.Genes/Icons/Cumflation536
- -1
- 2
Genes/Icons/RJW_Genes_Endogene_Background
diff --git a/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml b/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml
deleted file mode 100644
index 1d89b7e..0000000
--- a/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
- rjw_genes_living_cumbucket
-
- rjw_genes_cum
- When this Xenotype partakes in sexual activity, they store cum and produce it as an item.
- Genes/Icons/living_cumbucket
- 559
- 3
- -2
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml
deleted file mode 100644
index 2c55a7a..0000000
--- a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
- rjw_genes_filled_living_cumbucket
- HediffWithComps
-
- This pawn is a (filled) living cum bucket. Thanks to a generous donation, this pawn will slowly generate cum for pickup.
- (240,200,110)
- false
-
- false
- false
-
-
- -0.5
-
-
-
-
0
-
0.5
-
0.25
-
0.1
-
0.5
-
-
-
-
-
-
-
- -0.1
-
-
-
-
- 0.4
- 0.8
-
- -0.25
-
-
-
- Moving
- -0.05
-
-
-
-
-
- 0.65
- 0.75
-
- -0.25
-
-
-
- Moving
- -0.1
-
-
-
-
-
- 1.1
- 0.6
-
- -0.5
-
-
-
- Moving
- -0.15
-
-
-
-
-
- 10.1
- 0.1
-
- -1.5
-
-
-
- Moving
- -0.55
-
-
-
-
-
-
-
-
diff --git a/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml b/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml
deleted file mode 100644
index 6cbb372..0000000
--- a/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
- ProcessCumbucket
- RJW_Genes.JobDriver_ProcessingCumbucket
- false
- false
- processing internal cumbucket.
- false
-
-
-
diff --git a/README.md b/README.md
index b9e5d14..697bcdc 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,5 @@
# RJW-Genes [NSFW]
-[](https://buymeacoffee.com/vegapnk)
-[](https://opensource.org/licenses/MIT)
-
This mod adds genes related and based on RJW to Rimworld.
## Current Features
@@ -15,7 +12,6 @@ This mod adds genes related and based on RJW to Rimworld.
- 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*.
diff --git a/Source/Common/Defs/ChanceExtension.cs b/Source/Common/Defs/ChanceExtension.cs
deleted file mode 100644
index ff8b260..0000000
--- a/Source/Common/Defs/ChanceExtension.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class ChanceExtension : DefModExtension
- {
- public float chance;
- }
-
-}
diff --git a/Source/Common/Defs/HediffIncreaseOnSexExtension.cs b/Source/Common/Defs/HediffIncreaseOnSexExtension.cs
deleted file mode 100644
index c5f648f..0000000
--- a/Source/Common/Defs/HediffIncreaseOnSexExtension.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class HediffIncreaseOnSexExtension: DefModExtension
- {
- public HediffDef hediffDef;
- public float severityIncrease;
- public float applicationChance;
-
- public bool canCreateHediff;
-
- public bool applicableForWomen;
- public bool applicableForMen;
- public bool requiresPenetrativeSex;
- }
-
-}
diff --git a/Source/Common/Defs/MultiplierExtension.cs b/Source/Common/Defs/MultiplierExtension.cs
deleted file mode 100644
index 5be194e..0000000
--- a/Source/Common/Defs/MultiplierExtension.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class MultiplierExtension : DefModExtension
- {
- public float multiplier;
- }
-}
diff --git a/Source/Common/Defs/TickBasedChanceExtension.cs b/Source/Common/Defs/TickBasedChanceExtension.cs
deleted file mode 100644
index 1a8feca..0000000
--- a/Source/Common/Defs/TickBasedChanceExtension.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class TickBasedChanceExtension : TickIntervalExtension
- {
- ///
- /// Set to 1 for "always", set to 0 for "never".
- /// Everything else is a bit statistics, but e.g. when set to .5 the chances grow per day from [50%, 75%, 82.25%, ...]
- ///
- public float eventChance;
- }
-}
diff --git a/Source/Common/Helpers/FactionUtility.cs b/Source/Common/Helpers/FactionUtility.cs
deleted file mode 100644
index 10a4e7c..0000000
--- a/Source/Common/Helpers/FactionUtility.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class FactionUtility
- {
-
- ///
- /// Tries to change the goodwill between the factions of two pawns.
- /// Exceptions when nothing happens:
- /// - Pawns, or Pawns Factions, are null
- /// - The `actors` Faction is not the players faction
- /// - Both pawns have the same faction
- /// - The Event is not found
- ///
- /// The pawn that initiated a faction-goodwill change by his actions
- /// The pawn that was harmed/affected by the action
- /// The event defname, for proper reporting
- /// How much (positive or negative) the goodwill will change
- public static void HandleFactionGoodWillPenalties(Pawn actor, Pawn target, string HistoryEventDefname, int goodWillChange, bool canSendHostileLetter=true)
- {
- if (actor == null) return;
- if (target == null) return;
- if (
- target.Faction != null && actor.Faction != null
- && target.Faction != actor.Faction
- && target.Faction != Faction.OfPlayer)
- {
- HistoryEventDef reason = DefDatabase.GetNamedSilentFail(HistoryEventDefname);
- if (reason == null) return;
-
- target.Faction.TryAffectGoodwillWith(actor.Faction, goodWillChange, true, canSendHostileLetter, reason, target);
- }
- }
- }
-}
diff --git a/Source/Common/ModLog.cs b/Source/Common/ModLog.cs
index b78e675..407520a 100644
--- a/Source/Common/ModLog.cs
+++ b/Source/Common/ModLog.cs
@@ -30,12 +30,5 @@ namespace RJW_Genes
Log.Warning($"[{ModId}] {message}");
}
- public static void Debug(string message)
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- {
- Log.Message($"[{ModId}][debug] {message}");
- }
- }
}
}
diff --git a/Source/Common/patches/Patch_HediffIncreaseOnSex.cs b/Source/Common/patches/Patch_HediffIncreaseOnSex.cs
deleted file mode 100644
index 55e85a3..0000000
--- a/Source/Common/patches/Patch_HediffIncreaseOnSex.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// This patch "only" applies the hediff increase on sex.
- /// It checks for the hediff, creates it if necessary and applicable,
- /// and increases it based on the severity, chance and genders specified in the Extension.
- ///
- /// Some hediffs want follow up logic, e.g. the Feminization Gene,
- /// which is handled in an extra patch (that requires the hediff to be present already).
- ///
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public class Patch_HediffIncreaseOnSex
- {
-
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() || props.pawn.IsAnimal())
- {
- return;
- }
-
- Pawn pawn = props.pawn;
- Pawn partner = props.partner;
-
- if (pawn.genes == null || partner.genes == null) return;
-
- TryApplyHediffsOfSex(pawn, partner, props);
- TryApplyHediffsOfSex(partner, pawn, props);
- }
-
- ///
- /// Checks for every gene in a pawn if it applies a hediff or the severity of an existing hediff in a sexual partner.
- /// If the checks pass, the hediff is added or changed accordingly.
- ///
- /// Pawn that holds (one or many) genes that might apply a hediff change
- /// Pawn that will receive or alter any hediffs, if applicable
- /// The Sexprops, used for checking if sex is penetrative
- static void TryApplyHediffsOfSex(Pawn pawn, Pawn partner, SexProps props)
- {
- var random = new Random();
-
- foreach (Gene gene in pawn.genes.GenesListForReading)
- {
- HediffIncreaseOnSexExtension ext = gene.def.GetModExtension();
- if (ext == null) continue;
-
- if (DiseaseHelper.IsImmuneAgainstGeneticDisease(partner, gene.def)) continue;
- if (ext.requiresPenetrativeSex && DiseaseHelper.IsPenetrativeSex(props)) continue;
- if (!ext.applicableForMen && partner.gender == Gender.Male) continue;
- if (!ext.applicableForWomen && partner.gender == Gender.Female) continue;
- if (random.NextDouble() >= ext.applicationChance) continue;
-
- Hediff hediff = partner.health.hediffSet.GetFirstHediffOfDef(ext.hediffDef);
- if (hediff == null)
- {
- if (!ext.canCreateHediff) continue;
- hediff = partner.health.GetOrAddHediff(ext.hediffDef);
- hediff.Severity = 0.01f;
- ModLog.Debug($"{partner} got hediff {hediff.def.defName} from Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn}");
- }
- float initial_severity = hediff.Severity;
- ModLog.Debug($"{partner}s hediff {hediff.def.defName} was changed by Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn} [from {initial_severity} to {initial_severity + ext.severityIncrease}]");
- hediff.Severity += ext.severityIncrease;
-
- // DevNote: I also want to have "negative" hediff changes here, but I think its not necessary. Once the severity reaches 0, or below, the hediff should remove itself.
- }
- }
-
- }
-}
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index c410aea..6049b8b 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -73,18 +73,14 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_fervent_ovipositor;
public static readonly GeneDef rjw_genes_insectbreeder;
public static readonly GeneDef rjw_genes_insectincubator;
- public static readonly GeneDef rjw_genes_hardwired_progenity;
- public static readonly GeneDef rjw_genes_blocked_masturbation;
- public static readonly GeneDef rjw_genes_basic_rut;
-
- // Cum
+
+ // Cum
public static readonly GeneDef rjw_genes_no_cum;
public static readonly GeneDef rjw_genes_much_cum;
public static readonly GeneDef rjw_genes_very_much_cum;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_likes_cumflation;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_cumflation_immunity;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_generous_donor;
- [MayRequire("rjw.sexperience")] public static readonly GeneDef rjw_genes_living_cumbucket;
// Reproduction
@@ -108,17 +104,12 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_hormonal_saliva;
public static readonly GeneDef rjw_genes_cocoonweaver;
public static readonly GeneDef rjw_genes_sex_tamer;
- public static readonly GeneDef rjw_genes_sexual_genetic_swap;
- public static readonly GeneDef rjw_genes_sexual_genetic_thief;
- public static readonly GeneDef rjw_genes_pregnancy_overwrite;
- public static readonly GeneDef rjw_genes_feminizer;
- public static readonly GeneDef rjw_genes_twinkifier;
// Cosmetic
public static readonly GeneDef rjw_genes_succubus_tail;
public static readonly GeneDef rjw_genes_succubus_wings;
- // Life force | Fertilin
+ //life force
public static readonly GeneDef rjw_genes_lifeforce;
public static readonly GeneDef rjw_genes_pussyhealing;
public static readonly GeneDef rjw_genes_lifeforce_drain;
@@ -130,21 +121,6 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_cockeater;
public static readonly GeneDef rjw_genes_lifeforce_empath;
- // Diseases
- public static readonly GeneDef rjw_genes_genetic_disease_immunity;
- public static readonly GeneDef rjw_genes_minor_vulnerability;
- public static readonly GeneDef rjw_genes_major_vulnerability;
- public static readonly GeneDef rjw_genes_fluctual_sexual_needs;
- public static readonly GeneDef rjw_genes_size_blinded;
- public static readonly GeneDef rjw_genes_infectious_low_fertility;
- public static readonly GeneDef rjw_genes_infectious_increased_sex_need;
- public static readonly GeneDef rjw_genes_infectious_bisexuality;
- public static readonly GeneDef rjw_genes_infectious_homosexuality;
- public static readonly GeneDef rjw_genes_infectious_hypersexuality;
- public static readonly GeneDef rjw_genes_stretcher;
- public static readonly GeneDef rjw_genes_infectious_blocked_masturbation;
- public static readonly GeneDef rjw_genes_infectious_rut;
-
//Other Defs
public static readonly XenotypeDef rjw_genes_succubus;
public static readonly DutyDef rjw_genes_flirt;
diff --git a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_ManyChildren.cs b/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_ManyChildren.cs
deleted file mode 100644
index c483eb3..0000000
--- a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_ManyChildren.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class ConditionalStatAffecter_ManyChildren : ConditionalStatAffecter
- {
- public override string Label => (string)"StatsReport_ManyChildren".Translate();
-
- public const int THRESHOLD_FOR_CHILDREN = 3;
-
- public override bool Applies(StatRequest req)
- {
- if (req == null || req.Thing == null || !req.Thing.Spawned) return false;
-
- if (req.Thing is Pawn pawn)
- {
- // Do nothing if Pawn is Baby or Child (#25)
- if (!pawn.ageTracker.Adult)
- return false;
-
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_hardwired_progenity))
- {
- // This "middle" Conditional Stat Affecter only fires if the other one does not apply
- return pawn.relations.ChildrenCount >= THRESHOLD_FOR_CHILDREN
- && pawn.relations.ChildrenCount < ConditionalStatAffecter_VeryManyChildren.THRESHOLD_FOR_CHILDREN;
- }
- }
-
- return false;
- }
- }
-}
diff --git a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_NoChildren.cs b/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_NoChildren.cs
deleted file mode 100644
index 4f50994..0000000
--- a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_NoChildren.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This conditional stat affecter "fires" if the pawn has no children.
- ///
- /// DevNote: I salvaged this from 1.3.3 Halamyr Conditional Stat Affecters.
- /// It seems that with RW 1.5 there was a change how these work, as the req.Pawn seems to be null.
- /// Now, the pawn is in req.Thing.
- ///
- public class ConditionalStatAffecter_NoChildren : ConditionalStatAffecter
- {
- public override string Label => (string)"StatsReport_NoChildren".Translate();
-
- public override bool Applies(StatRequest req)
- {
- if (req == null || req.Thing == null || !req.Thing.Spawned) return false;
-
- if (req.Thing is Pawn pawn)
- {
- // Do nothing if Pawn is Baby or Child (#25)
- if (!pawn.ageTracker.Adult)
- return false;
-
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_hardwired_progenity))
- {
- return pawn.relations.ChildrenCount == 0;
- }
- }
-
- return false;
- }
-
- }
-
-}
diff --git a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_VeryManyChildren.cs b/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_VeryManyChildren.cs
deleted file mode 100644
index e14d4f1..0000000
--- a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_VeryManyChildren.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class ConditionalStatAffecter_VeryManyChildren : ConditionalStatAffecter
- {
- public override string Label => (string)"StatsReport_VeryManyChildren".Translate();
-
- public const int THRESHOLD_FOR_CHILDREN = 8;
-
- public override bool Applies(StatRequest req)
- {
- if (req == null || req.Thing == null || !req.Thing.Spawned) return false;
-
- if (req.Thing is Pawn pawn)
- {
- // Do nothing if Pawn is Baby or Child (#25)
- if (!pawn.ageTracker.Adult)
- return false;
-
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_hardwired_progenity))
- {
- return pawn.relations.ChildrenCount >= THRESHOLD_FOR_CHILDREN;
- }
- }
-
- return false;
- }
- }
-}
diff --git a/Source/Genes/Breeding/Genes/Gene_Rut.cs b/Source/Genes/Breeding/Genes/Gene_Rut.cs
deleted file mode 100644
index 9240dcd..0000000
--- a/Source/Genes/Breeding/Genes/Gene_Rut.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class Gene_Rut : Gene
- {
- public override void Tick()
- {
- base.Tick();
-
- if (pawn == null || pawn.genes == null)
- return;
-
- var chanceExtension = this.def.GetModExtension();
- if (chanceExtension == null) return;
-
- if (pawn.IsHashIntervalTick(chanceExtension.tickInterval)){
- Random r = new Random();
- if (r.NextDouble() < chanceExtension.eventChance)
- {
- Hediff rut = pawn.health.GetOrAddHediff(HediffDefOf.rjw_genes_genetic_rut);
- rut.Severity = 1;
- ModLog.Debug($"Pawn {pawn} gained rjw_genes_genetic_rut based on chance.");
- }
- }
- }
- }
-}
diff --git a/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation.cs b/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation.cs
deleted file mode 100644
index c888bda..0000000
--- a/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- [HarmonyPatch(typeof(xxx), "can_masturbate")]
- public class Patch_BlockedMasturbation
- {
- public void PostFix(Pawn pawn, ref bool __result)
- {
- if (pawn != null && !pawn.IsAnimal() && pawn.genes != null)
- {
- __result = __result
- && !pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_blocked_masturbation)
- && !pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_infectious_blocked_masturbation);
- }
- }
-
- }
-}
diff --git a/Source/Genes/Cum/CumUtility.cs b/Source/Genes/Cum/CumUtility.cs
index dba96b1..b483aed 100644
--- a/Source/Genes/Cum/CumUtility.cs
+++ b/Source/Genes/Cum/CumUtility.cs
@@ -34,23 +34,8 @@ namespace RJW_Genes
}
- ///
- /// Looks up the "MultiplierExtensions" Value for a given Gene, with a fall back.
- /// Returns the fallback if there is no Extension, or if the Multiplier is smaller than 0.
- ///
-
- public static float LookupCumMultiplier(Gene gene, float FALLBACK = 3.0f) => LookupCumMultiplier(gene.def,FALLBACK);
- public static float LookupCumMultiplier(GeneDef def, float FALLBACK = 3.0f)
- {
- MultiplierExtension multiplier = def.GetModExtension();
- if (multiplier == null || multiplier.multiplier < 0)
- return FALLBACK;
- else return multiplier.multiplier;
- }
-
-
- //Get total fluidamount a person has.
- public static float GetTotalFluidAmount(Pawn pawn, float multiplier = 1f)
+ //Get total fluidamount a person has.
+ public static float GetTotalFluidAmount(Pawn pawn, float multiplier = 1f)
{
var partBPR = Genital_Helper.get_genitalsBPR(pawn);
var parts = Genital_Helper.get_PartsHediffList(pawn, partBPR);
diff --git a/Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs b/Source/Genes/Cum/Gene_MuchCum.cs
similarity index 51%
rename from Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs
rename to Source/Genes/Cum/Gene_MuchCum.cs
index dc10ba4..e88ac3f 100644
--- a/Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs
+++ b/Source/Genes/Cum/Gene_MuchCum.cs
@@ -1,38 +1,36 @@
namespace RJW_Genes
{
- public class Gene_ChangeCumAmount : RJW_Gene
+ public class Gene_MuchCum : RJW_Gene
{
bool has_been_fired = false;
+ float multiplier_much_cum = 3f;
public override void PostMake()
{
base.PostMake();
- float multipier = CumUtility.LookupCumMultiplier(this);
- CumUtility.MultiplyFluidAmountBy(pawn, multipier);
+ CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum);
has_been_fired = true;
}
public override void PostAdd()
{
base.PostAdd();
- if (!has_been_fired)
- {
- float multipier = CumUtility.LookupCumMultiplier(this);
- CumUtility.MultiplyFluidAmountBy(pawn, multipier);
+ if (!has_been_fired) {
+ CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum);
has_been_fired = true;
}
}
+
public override void PostRemove()
{
base.PostAdd();
if (has_been_fired)
{
- float multipier = CumUtility.LookupCumMultiplier(this);
- CumUtility.MultiplyFluidAmountBy(pawn, 1/ multipier);
+ CumUtility.MultiplyFluidAmountBy(pawn, 1/multiplier_much_cum);
has_been_fired = false;
}
}
diff --git a/Source/Genes/Cum/Gene_NoCum.cs b/Source/Genes/Cum/Gene_NoCum.cs
new file mode 100644
index 0000000..0c3e888
--- /dev/null
+++ b/Source/Genes/Cum/Gene_NoCum.cs
@@ -0,0 +1,34 @@
+namespace RJW_Genes
+{
+ public class Gene_NoCum : RJW_Gene
+ {
+ bool has_been_fired = false;
+
+
+ public override void PostMake()
+ {
+ base.PostMake();
+
+ CumUtility.MultiplyFluidAmountBy(pawn, 0f);
+ has_been_fired = true;
+ }
+
+ public override void PostAdd()
+ {
+ base.PostAdd();
+ if (!has_been_fired) {
+ CumUtility.MultiplyFluidAmountBy(pawn, 0f);
+ has_been_fired = true;
+ }
+ }
+
+
+ public override void PostRemove()
+ {
+ // Cum Removal does not do at the moment :/ I would need to safe the old cum amount but I don't want to at the moment
+ base.PostAdd();
+
+ }
+
+ }
+}
diff --git a/Source/Genes/Cum/Gene_VeryMuchCum.cs b/Source/Genes/Cum/Gene_VeryMuchCum.cs
new file mode 100644
index 0000000..21faecc
--- /dev/null
+++ b/Source/Genes/Cum/Gene_VeryMuchCum.cs
@@ -0,0 +1,39 @@
+namespace RJW_Genes
+{
+ public class Gene_VeryMuchCum : RJW_Gene
+ {
+ bool has_been_fired = false;
+
+ float multiplier_much_cum = 10f;
+
+ public override void PostMake()
+ {
+ base.PostMake();
+
+ CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum);
+ has_been_fired = true;
+ }
+
+ public override void PostAdd()
+ {
+ base.PostAdd();
+ if (!has_been_fired) {
+ CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum);
+ has_been_fired = true;
+ }
+ }
+
+
+ public override void PostRemove()
+ {
+ base.PostAdd();
+
+ if (has_been_fired)
+ {
+ CumUtility.MultiplyFluidAmountBy(pawn, 1/multiplier_much_cum);
+ has_been_fired = false;
+ }
+ }
+
+ }
+}
diff --git a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs
deleted file mode 100644
index 48708cb..0000000
--- a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-
-using RimWorld;
-using System;
-using Verse;
-
-namespace RJW_Genes
-{
- public class HediffComp_ProcessCumbucket : HediffComp
- {
-
- public HediffsCompProperties_ProcessCumbucketMTB Props
- {
- get
- {
- return (HediffsCompProperties_ProcessCumbucketMTB)this.props;
- }
- }
-
- public override void CompPostTick(ref float severityAdjustment)
- {
- if (this.Props.mtbDaysPerStage[this.parent.CurStageIndex] > 0f && base.Pawn.IsHashIntervalTick(60) && Rand.MTBEventOccurs(this.Props.mtbDaysPerStage[this.parent.CurStageIndex], 60000f, 60f))
- {
- ModLog.Debug($"Triggered HediffComp_ProcessCumbucket CompPostTick - Starting a JobDriver ProcessCumbucket for {this.parent.pawn}");
- this.Pawn.jobs.StartJob(JobMaker.MakeJob(DefDatabase.GetNamed("ProcessCumbucket")), lastJobEndCondition: Verse.AI.JobCondition.InterruptForced, resumeCurJobAfterwards: true);
- }
- }
- }
-}
diff --git a/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs b/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs
deleted file mode 100644
index 919b715..0000000
--- a/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class HediffsCompProperties_ProcessCumbucketMTB : HediffCompProperties
- {
- public HediffsCompProperties_ProcessCumbucketMTB()
- {
- this.compClass = typeof(HediffComp_ProcessCumbucket);
- }
-
- public override IEnumerable ConfigErrors(HediffDef parentDef)
- {
- foreach (string text in base.ConfigErrors(parentDef))
- {
- yield return text;
- }
- if (this.mtbDaysPerStage == null)
- {
- yield return "mtbDaysPerStage is not defined";
- }
- else if (this.mtbDaysPerStage.Count != parentDef.stages.Count)
- {
- yield return "mtbDaysPerStage count doesn't match Hediffs number of stages";
- }
- yield break;
- }
-
- public List mtbDaysPerStage;
- }
-}
diff --git a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs
deleted file mode 100644
index b924a6d..0000000
--- a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-using LicentiaLabs;
-using System.Collections.Generic;
-using Verse;
-using Verse.AI;
-using UnityEngine;
-using System;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- ///
- /// Shamelessly stolen from LicentaLabs
- /// [Jaals Fork] https://gitgud.io/Jaaldabaoth/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/JobDriver_VomitCum.cs
- ///
- class JobDriver_ProcessingCumbucket : JobDriver_Vomit
- {
- public override bool CanBeginNowWhileLyingDown()
- {
- return true;
- }
-
- protected override IEnumerable MakeNewToils()
- {
- if (!ModsConfig.IsActive("rjw.sexperience"))
- yield break;
-
- Toil toil = new Toil();
- toil.initAction = delegate ()
- {
- this.ticksLeft = Rand.Range(150, 600);
- int num = 0;
- IntVec3 c;
- for (; ; )
- {
- c = this.pawn.Position + GenAdj.AdjacentCellsAndInside[Rand.Range(0, 9)];
- num++;
- if (num > 12)
- {
- break;
- }
- if (c.InBounds(this.pawn.Map) && c.Standable(this.pawn.Map))
- {
- // DevNote: I am not 100% what this all means, but IL_77 is a jump to the case below (it says IL_77).
- // basically, this calls the next part of the function, but I am not super sure why this has to be like this.
- // JobDrivers are scary.
- goto IL_77;
- }
- }
- c = this.pawn.Position;
- IL_77:
- this.job.targetA = c;
- this.pawn.pather.StopDead();
- };
- toil.tickAction = delegate ()
- {
- if (this.ticksLeft % 150 == 149)
- {
- if (!sourceName.NullOrEmpty())
- {
- if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
- FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum, sourceName);
- SpawnCum(this.pawn, this.job.targetA.Cell, base.Map);
- }
- else
- {
- if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
- FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum);
- SpawnCum(this.pawn, this.job.targetA.Cell, base.Map);
- }
- }
- this.ticksLeft--;
- if (this.ticksLeft <= 0)
- {
- base.ReadyForNextToil();
- TaleRecorder.RecordTale(Licentia.TaleDefs.VomitedCum, new object[]
- {
- this.pawn
- });
- }
- };
- toil.defaultCompleteMode = ToilCompleteMode.Never;
- toil.WithEffect(EffecterDefOf.Vomit, TargetIndex.A, new Color(100f, 100f, 100f, 0.5f));
- toil.PlaySustainerOrSound(() => SoundDefOf.Vomit, 1f);
- yield return toil;
- yield break;
- }
-
- private void SpawnCum(Pawn pawn, IntVec3 cell, Map map)
- {
- ThingDef cumDef = DefDatabase.GetNamed("GatheredCum", true);
-
- Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket);
- if (hediff == null)
- {
- ModLog.Warning($"{pawn} has the JobDriver_ProcessCumbucket but does not have the Hediff for filled cumbucket.");
- return;
- }
-
- // Case 1: "Normal Severity", just puke out a bit of cum here and there.
- if (hediff.Severity <= 10)
- {
- Thing cum = ThingMaker.MakeThing(cumDef);
- cum.Position = cell;
- int stacks = Math.Max(1, (int)(hediff.Severity * 1.5));
- stacks = Math.Min(stacks, 75); // 75 is the default max stacksize ...
- cum.stackCount = stacks;
- cum.SpawnSetup(map, false);
- hediff.Severity -= (stacks / 50);
- } else
- // Case 2: Reserviour mode, put out a lot of cum at once but less often.
- {
- int stacks = Math.Max(1, (int)(hediff.Severity * 1.5));
-
- while (stacks > 0)
- {
- Thing cum = ThingMaker.MakeThing(cumDef);
- cum.Position = cell;
- var curStacks = Math.Min(stacks, 75); // 75 is the default max stacksize ...
- cum.stackCount = stacks;
- cum.SpawnSetup(map, false);
- hediff.Severity -= (curStacks / 50);
- stacks -= curStacks;
- }
- }
- }
-
- private int ticksLeft;
-
- public string sourceName;
- }
-}
diff --git a/Source/Genes/Cum/Patches/Patch_CumflationImmunity.cs b/Source/Genes/Cum/Patch_CumflationImmunity.cs
similarity index 100%
rename from Source/Genes/Cum/Patches/Patch_CumflationImmunity.cs
rename to Source/Genes/Cum/Patch_CumflationImmunity.cs
diff --git a/Source/Genes/Cum/Patches/Patch_LikesCumflation.cs b/Source/Genes/Cum/Patch_LikesCumflation.cs
similarity index 100%
rename from Source/Genes/Cum/Patches/Patch_LikesCumflation.cs
rename to Source/Genes/Cum/Patch_LikesCumflation.cs
diff --git a/Source/Genes/Cum/Patches/Patch_TransferNutrition.cs b/Source/Genes/Cum/Patch_TransferNutrition.cs
similarity index 100%
rename from Source/Genes/Cum/Patches/Patch_TransferNutrition.cs
rename to Source/Genes/Cum/Patch_TransferNutrition.cs
diff --git a/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs b/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs
deleted file mode 100644
index 67ec45e..0000000
--- a/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using static System.Net.Mime.MediaTypeNames;
-
-namespace RJW_Genes
-{
-
- [HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
- public class Patch_LivingCumbucket_StackHediff
- {
-
- ///
- /// This is the amount of fluid required if the pawn has a bodysize of 1, to reach a severity in the hediff of 1.
- /// The hediff can still be increased over 1.0.
- ///
- const float fluid_amount_required_for_hediff_severity_ = 100.0f;
-
- public static void Postfix(SexProps props)
- {
- if (!ModsConfig.IsActive("rjw.sexperience"))
- return;
-
- // ShortCuts: Exit Early if Pawn or Partner are null (can happen with Masturbation or other nieche-cases)
- if (props == null || props.pawn == null || !props.hasPartner())
- return;
-
- Pawn pawnA = props.pawn;
- Pawn pawnB = props.partner;
-
- if (pawnA.genes != null && pawnA.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnB) > 0)
- {
- ProcessLivingCumbucket(pawnA, CumUtility.GetTotalFluidAmount(pawnB));
- }
-
- if (pawnB.genes != null && pawnB.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnA) > 0)
- {
- ProcessLivingCumbucket(pawnB, CumUtility.GetTotalFluidAmount(pawnA));
- }
- }
-
- public static void ProcessLivingCumbucket(Pawn pawn, float cumamount)
- {
- float bodysize = pawn.BodySize;
- float result_severity_increase = cumamount / (fluid_amount_required_for_hediff_severity_ * bodysize);
-
-
- Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket);
- if (hediff == null)
- {
- hediff = pawn.health.GetOrAddHediff(HediffDefOf.rjw_genes_filled_living_cumbucket);
- hediff.Severity = 0.01f;
- }
-
- hediff.Severity += result_severity_increase;
- ModLog.Debug($"Pumping the living cumbucket {pawn} (Bodysize {bodysize}) with {cumamount} cum, resulting in severity {hediff.Severity} (+{result_severity_increase})");
- }
- }
-}
diff --git a/Source/Genes/Diseases/Defs/GeneticDiseaseExtension.cs b/Source/Genes/Diseases/Defs/GeneticDiseaseExtension.cs
deleted file mode 100644
index e156195..0000000
--- a/Source/Genes/Diseases/Defs/GeneticDiseaseExtension.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class GeneticDiseaseExtension : DefModExtension
- {
- ///
- /// The chance for this gene to spread upon (finished) sex.
- ///
- public float infectionChance;
- }
-
-}
diff --git a/Source/Genes/Diseases/Defs/GeneticInfectorExtension.cs b/Source/Genes/Diseases/Defs/GeneticInfectorExtension.cs
deleted file mode 100644
index 2f00ce5..0000000
--- a/Source/Genes/Diseases/Defs/GeneticInfectorExtension.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class GeneticInfectorExtension : DefModExtension
- {
- public float infectionChance;
-
- public List infectionGenes;
- }
-
-}
diff --git a/Source/Genes/Diseases/Defs/ImmunityAgainstGenesExtension.cs b/Source/Genes/Diseases/Defs/ImmunityAgainstGenesExtension.cs
deleted file mode 100644
index 18fe8e0..0000000
--- a/Source/Genes/Diseases/Defs/ImmunityAgainstGenesExtension.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class ImmunityAgainstGenesExtension : DefModExtension
- {
- ///
- /// A list of the exact defnames of disease-genes that this extension will make immune against.
- /// Must perfectly match!
- ///
- public List givesImmunityAgainst;
- }
-
-}
diff --git a/Source/Genes/Diseases/DiseaseHelper.cs b/Source/Genes/Diseases/DiseaseHelper.cs
deleted file mode 100644
index 873a0e1..0000000
--- a/Source/Genes/Diseases/DiseaseHelper.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public static class DiseaseHelper
- {
-
- ///
- /// Checks for a pawn if it is immune against a disease.
- ///
- /// The pawn for which immunity is checked
- /// The genetic disease that is checked against
- /// True if the pawn is immune, false if the pawn can be infected by it.
- public static bool IsImmuneAgainstGeneticDisease(Pawn pawn, GeneDef disease)
- {
- // Case 1: Something is null / not working, return Immune (to have less follow up effects)
- if (pawn == null || pawn.genes == null) return true;
- if (disease == null) return true;
- // Case 1.B: Dead people can spread, but not receive, diseases.
- if (pawn.Dead) return true;
-
- // Case 2: The pawn has general genetic immunity to diseases
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_genetic_disease_immunity))
- return true;
-
- // Case 3: The pawn already has the genetic disease
- if (GeneUtility.HasGeneNullCheck(pawn, disease))
- return true;
-
- // Case 4: Check all genes if one of them has the Immunity Extension that covers the GeneDef
- List genes = pawn.genes.GenesListForReading;
- genes = genes.Where(x => pawn.genes.HasActiveGene(x.def)).ToList();
-
- foreach (Gene gene in genes)
- {
- ImmunityAgainstGenesExtension ext = gene.def.GetModExtension();
- if (ext != null) {
- foreach (string defname in ext.givesImmunityAgainst)
- if (disease.defName == defname)
- return true;
- }
- }
-
- // Case 5: Nothing special happens, so return false (not immune)
- return false;
- }
-
- ///
- /// Returns all active Genes with the `GeneticDiseaseExtension`.
- ///
- ///
- /// List of all active Genes with the `GeneticDiseaseExtension` in pawn
- public static List GetGeneticDiseaseGenes(Pawn pawn)
- {
- if (pawn != null && pawn.genes != null)
- {
- return pawn.genes
- .GenesListForReading
- .ConvertAll(gene => gene.def)
- .Where(genedef => pawn.genes.HasActiveGene(genedef))
- .Where(IsGeneticDiseaseGene)
- .ToList();
- }
-
- return new List() { };
- }
-
- public static List GetGeneticInfectorGenes(Pawn pawn)
- {
- if (pawn != null && pawn.genes != null)
- {
- return pawn.genes
- .GenesListForReading
- .ConvertAll(gene => gene.def)
- .Where(genedef => pawn.genes.HasActiveGene(genedef))
- .Where(IsGeneticInfectorGene)
- .ToList();
- }
-
- return new List() { };
- }
-
- public static List LookupInfectionGeneDefs(GeneticInfectorExtension infectorExt)
- {
- if (infectorExt == null) new List();
-
- return RimWorld.GeneUtility
- .GenesInOrder
- .Where(genedef => infectorExt.infectionGenes.Contains(genedef.defName))
- .ToList();
- }
-
- ///
- /// Checks if the performed sex was penetrative.
- /// Condom check is not done here!
- ///
- /// The sexprops
- ///
- public static bool IsPenetrativeSex(SexProps props)
- {
- if (props == null) return false;
-
- return props.sexType ==
- xxx.rjwSextype.Vaginal
- || props.sexType == xxx.rjwSextype.Anal
- || props.sexType == xxx.rjwSextype.Oral
- || props.sexType == xxx.rjwSextype.DoublePenetration
- || props.sexType == xxx.rjwSextype.Fellatio
- || props.sexType == xxx.rjwSextype.Sixtynine;
- }
-
- public static bool IsGeneticDiseaseGene(GeneDef geneDef)
- {
- if (geneDef == null) return false;
- GeneticDiseaseExtension diseaseExt = geneDef.GetModExtension();
- return diseaseExt != null;
- }
-
- public static bool IsGeneticInfectorGene(GeneDef geneDef)
- {
- if (geneDef == null) return false;
- GeneticInfectorExtension infectorExt = geneDef.GetModExtension();
- return infectorExt != null;
- }
-
- public static float LookupDiseaseInfectionChance(GeneDef geneDef)
- {
- if (IsGeneticDiseaseGene(geneDef))
- {
- GeneticDiseaseExtension diseaseExt = geneDef.GetModExtension();
- return diseaseExt != null ? diseaseExt.infectionChance : 0.0f;
- }
- else
- return 0.0f;
- }
-
-
- }
-}
diff --git a/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs b/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs
deleted file mode 100644
index b25e812..0000000
--- a/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using static HarmonyLib.Code;
-using static RimWorld.ColonistBar;
-
-namespace RJW_Genes
-{
- public class Gene_FluctualSexualNeed : Gene
- {
-
- int event_interval;
- float event_chance;
-
- const float REST_INCREASE = 0.1f;
- const float SET_SEXNEED_TO = 0.1f;
-
- public Gene_FluctualSexualNeed() : base()
- {
- TickBasedChanceExtension tickbasedChanceExt = GeneDefOf.rjw_genes_fluctual_sexual_needs.GetModExtension();
- event_interval = tickbasedChanceExt?.tickInterval ?? 30000; // 30K = 1/2 day
- event_chance = tickbasedChanceExt?.eventChance ?? 0.1f;
- }
-
-
- public override void Tick()
- {
- base.Tick();
-
- if (pawn.IsHashIntervalTick(event_interval) && (new Random()).NextDouble() < event_chance)
- {
- ModLog.Debug($"Firing Gene_FluctualSexualNeed for {pawn}");
- ApplyFluctualSexNeedEffect(pawn);
- }
- }
-
- public static void ApplyFluctualSexNeedEffect(Pawn pawn)
- {
- if (pawn == null || pawn.needs == null) return;
-
- var sexneed = pawn.needs.TryGetNeed();
- if (sexneed != null)
- {
- sexneed.CurLevelPercentage = SET_SEXNEED_TO;
- }
-
- // Pump up Wake-Ness
- if (pawn.needs.rest != null)
- pawn.needs.rest.CurLevel += REST_INCREASE;
- }
-
- }
-}
diff --git a/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs b/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs
deleted file mode 100644
index 06b0998..0000000
--- a/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.Remoting.Lifetime;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
-
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public class Patch_AfterSexUtility_ApplyGeneticInfectors
- {
-
- const int FACTION_GOODWILL_CHANGE = -3;
-
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || props.partner == null) return;
-
- Pawn pawn = props.pawn;
- Pawn partner = props.partner;
-
- if (pawn == partner) return;
- if (pawn.IsAnimal() || partner.IsAnimal()) return;
- if (pawn.genes == null || partner.genes == null) return;
- // No Infections on Condom Use
- if (props.usedCondom) return;
-
- // Exit early if settings require penetrative sex, but this is not penetrative sex
- if (!DiseaseHelper.IsPenetrativeSex(props) && RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex) return;
-
- TryApplyGeneticInfections(pawn, partner);
- TryApplyGeneticInfections(partner, pawn);
- }
-
- private static void TryApplyGeneticInfections(Pawn infector, Pawn partner)
- {
- foreach (GeneDef infectorGeneDef in DiseaseHelper.GetGeneticInfectorGenes(infector))
- {
- GeneticInfectorExtension diseaseExt = infectorGeneDef.GetModExtension();
- if (diseaseExt == null) continue;
- float application_chance = diseaseExt.infectionChance;
-
- foreach (GeneDef diseaseGeneDef in DiseaseHelper.LookupInfectionGeneDefs(diseaseExt))
- {
- if (DiseaseHelper.IsImmuneAgainstGeneticDisease(partner, diseaseGeneDef))
- continue;
-
- if ((new Random()).NextDouble() < application_chance)
- {
- partner.genes.AddGene(diseaseGeneDef, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
- FactionUtility.HandleFactionGoodWillPenalties(infector, partner, "rjw_genes_GoodwillChangedReason_infected_with_disease",FACTION_GOODWILL_CHANGE);
- }
- }
- }
- }
-
- }
-}
diff --git a/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs b/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs
deleted file mode 100644
index a00d40f..0000000
--- a/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public class Patch_AftersexUtility_TransferGeneticDiseases
- {
-
- public const int FACTION_GOODWILL_CHANGE = -2;
-
- public static void Postfix(SexProps props)
- {
- if (!RJW_Genes_Settings.rjw_genes_genetic_disease_spread) return;
-
- if (props == null || props.pawn == null || props.partner == null) return;
-
- Pawn pawn = props.pawn;
- Pawn partner = props.partner;
-
- if (pawn == partner) return;
- if (pawn.IsAnimal() || partner.IsAnimal()) return;
- if (pawn.genes == null || partner.genes == null) return;
- // No Infections on Condom Use
- if (props.usedCondom) return;
-
- // Exit early if settings require penetrative sex, but this is not penetrative sex
- if (!DiseaseHelper.IsPenetrativeSex(props) && RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex) return;
-
- //ModLog.Debug($"Firing Patch_TransferGeneticDiseases for {pawn} and {partner}");
- TryTransferGeneticDiseases(pawn, partner, props);
- TryTransferGeneticDiseases(partner, pawn, props);
- }
-
- private static void TryTransferGeneticDiseases(Pawn infector, Pawn infected, SexProps props)
- {
-
- foreach (GeneDef disease in DiseaseHelper.GetGeneticDiseaseGenes(infector)) {
- ModLog.Debug($"Found genetic disease {disease} in {infector}, trying to infect {infected}");
-
- if (DiseaseHelper.IsImmuneAgainstGeneticDisease(infected,disease))
- continue;
-
- if ((new Random()).NextDouble() <= DiseaseHelper.LookupDiseaseInfectionChance(disease))
- {
- infected.genes.AddGene(disease, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
- FactionUtility.HandleFactionGoodWillPenalties(infector, infected, "rjw_genes_GoodwillChangedReason_spread_genetic_disease", FACTION_GOODWILL_CHANGE);
- }
- }
- }
-
- }
-}
diff --git a/Source/Genes/Diseases/Patches/Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded.cs b/Source/Genes/Diseases/Patches/Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded.cs
deleted file mode 100644
index fa36398..0000000
--- a/Source/Genes/Diseases/Patches/Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This patch helps with the gene `rjw_genes_size_blinded`.
- /// Within RJW the CasualSexHelper utilizes the basefunction "pawn.relations.SecondaryRomanceChanceFactor"
- /// https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Common/Helpers/CasualSex_Helper.cs
- ///
- /// We check on hookup for the other pawn if they have a penis.
- /// If yes, we modulate the romance chance based on the following:
- /// (Severity * BodySize - 0.5) * romance_multiplier
- /// So pawns with a cock smaller than 0.5 will be penalized, while pawns with more than 0.5 will be preferred.
- ///
- [HarmonyPatch(typeof(Pawn_RelationsTracker), "SecondaryRomanceChanceFactor")]
- public class Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded
- {
-
- const float romance_multiplier = 2f;
-
- public static void Postfix( Pawn ___pawn, Pawn otherPawn, ref float __result)
- {
- if (otherPawn == null || ___pawn == null || ___pawn.genes == null || otherPawn.genes == null)
- {
- return;
- }
- if (___pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_size_blinded) && Genital_Helper.has_penis_fertile(otherPawn) || (Genital_Helper.has_penis_infertile(otherPawn)))
- {
- Hediff biggest_cock = GenitaliaUtility.GetBiggestPenis(otherPawn);
- if (biggest_cock != null)
- {
- float bodysize = GenitaliaUtility.GetBodySizeOfSexPart(biggest_cock);
- // Bodysize can only be a bonus, not a minus.
- bodysize = Math.Max(1.0f, bodysize);
-
- float attraction_bonus = (biggest_cock.Severity * bodysize - 0.5f) * romance_multiplier;
- float result_backup = __result;
- __result += attraction_bonus;
- // Don't make it smaller than 0, to not get issues.
- __result = __result < 0 ? 0.0f : __result;
-
- ModLog.Debug($"Gene_SizeBlind: Modulate Romance-Chance {___pawn}-->{otherPawn} from {result_backup} by {attraction_bonus} to {__result}");
- }
- }
- }
-
- }
-}
diff --git a/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs b/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs
deleted file mode 100644
index 7a85eb3..0000000
--- a/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class ThoughtWorker_HasMoreDiseasesThanMe_Social : ThoughtWorker
- {
- protected override ThoughtState CurrentSocialStateInternal(Pawn pawn, Pawn other)
- {
- // Return for trivial errors
- if (pawn == null || other == null || pawn == other)
- return (ThoughtState)false;
- // Check for position-existance
- if (pawn.Position == null || other.Position == null || pawn.Map == null || other.Map == null)
- return (ThoughtState)false;
- // Do nothing if pawn is carried
- if (pawn.CarriedBy != null)
- return (ThoughtState)false;
- // Do nothing if Pawn is Baby or Child (#25)
- if (!pawn.ageTracker.Adult)
- return (ThoughtState)false;
- if (!other.ageTracker.Adult)
- return (ThoughtState)false;
- // Only check if they are spawned humans
- if (!pawn.Spawned || !other.Spawned)
- return (ThoughtState)false;
- if (!pawn.RaceProps.Humanlike)
- return (ThoughtState)false;
- if (!other.RaceProps.Humanlike)
- return (ThoughtState)false;
-
- // Pawns that have not "met" wont give each other Mali
- // Known-Each-Other is a key-word for Rimworld that shows they have had any interaction and stored each other in relations.
- if (!RelationsUtility.PawnsKnowEachOther(pawn, other))
- return (ThoughtState)false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!MapUtility.PawnIsOnHomeMap(pawn))
- return (ThoughtState)false;
-
- int pawn_diseases = DiseaseHelper.GetGeneticDiseaseGenes(pawn).Count();
- int other_diseases = DiseaseHelper.GetGeneticDiseaseGenes(other).Count();
- int disease_diff = other_diseases - pawn_diseases;
-
- if (disease_diff >= 5)
- return ThoughtState.ActiveAtStage(2);
- else if (disease_diff >= 2)
- return ThoughtState.ActiveAtStage(1);
- else if (disease_diff >= 1)
- return ThoughtState.ActiveAtStage(0);
- else
- return (ThoughtState)false;
- }
- }
-}
diff --git a/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs b/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs
deleted file mode 100644
index 61199a6..0000000
--- a/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using Verse;
-
-namespace RJW_Genes
-{
- public class ThoughtWorker_SizeBlinded_Social : ThoughtWorker
- {
- protected override ThoughtState CurrentSocialStateInternal(Pawn pawn, Pawn other)
- {
- // Return for trivial errors
- if (pawn == null || other == null || pawn == other)
- return (ThoughtState)false;
- // Check for position-existance
- if (pawn.Position == null || other.Position == null || pawn.Map == null || other.Map == null)
- return (ThoughtState)false;
- // Do nothing if pawn is carried
- if (pawn.CarriedBy != null)
- return (ThoughtState)false;
- // Do nothing if Pawn is Baby or Child (#25)
- if (!pawn.ageTracker.Adult)
- return (ThoughtState)false;
- if (!other.ageTracker.Adult)
- return (ThoughtState)false;
- // Only check if they are spawned humans
- if (!pawn.Spawned || !other.Spawned)
- return (ThoughtState)false;
- if (!pawn.RaceProps.Humanlike)
- return (ThoughtState)false;
- if (!other.RaceProps.Humanlike)
- return (ThoughtState)false;
-
- // Pawns that have not "met" wont give each other Mali
- // Known-Each-Other is a key-word for Rimworld that shows they have had any interaction and stored each other in relations.
- if (!RelationsUtility.PawnsKnowEachOther(pawn, other))
- return (ThoughtState)false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!MapUtility.PawnIsOnHomeMap(pawn))
- return (ThoughtState)false;
-
-
- // Do nothing if there is no size-blinded involved
- if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_size_blinded))
- return (ThoughtState)false;
- else
- ModLog.Debug($"{pawn} has the size blinded gene");
-
- // Iff the pawn has a penis, retrieve it's size.
- var penis = GenitaliaUtility.GetBiggestPenis(other);
- // Do Nothing if the other pawn has no penis
- if (penis == null) return (ThoughtState)false;
- var bodysize = GenitaliaUtility.GetBodySizeOfSexPart(penis);
-
- if (penis.Severity + (bodysize) - 1.0 > 1.0)
- return ThoughtState.ActiveAtStage(2);
- else if (penis.Severity >= 0.8f)
- return ThoughtState.ActiveAtStage(1);
- else
- return ThoughtState.ActiveAtStage(0);
-
- }
- }
-}
diff --git a/Source/Genes/Gender/Defs/GenderFluidExtension.cs b/Source/Genes/Gender/Defs/GenderFluidExtension.cs
new file mode 100644
index 0000000..332015f
--- /dev/null
+++ b/Source/Genes/Gender/Defs/GenderFluidExtension.cs
@@ -0,0 +1,20 @@
+using Verse;
+
+namespace RJW_Genes
+{
+ public class GenderFluidExtension : DefModExtension
+ {
+ ///
+ /// Number of ticks until the change can be triggered.
+ /// Just being "triggered" does not mean changing, see the changeChance below.
+ ///
+ public int changeInterval;
+
+ ///
+ /// How high is the chance to change gender?
+ /// Set to 1 for "always", set to 0 for "never".
+ /// Everything else is a bit statistics, but e.g. when set to .5 the chances grow per day from [50%, 75%, 82.25%, ...]
+ ///
+ public float changeChance;
+ }
+}
\ No newline at end of file
diff --git a/Source/Genes/Gender/Genes/Gene_FemaleOnly.cs b/Source/Genes/Gender/Gene_FemaleOnly.cs
similarity index 100%
rename from Source/Genes/Gender/Genes/Gene_FemaleOnly.cs
rename to Source/Genes/Gender/Gene_FemaleOnly.cs
diff --git a/Source/Genes/Gender/Genes/Gene_GenderFluid.cs b/Source/Genes/Gender/Gene_GenderFluid.cs
similarity index 96%
rename from Source/Genes/Gender/Genes/Gene_GenderFluid.cs
rename to Source/Genes/Gender/Gene_GenderFluid.cs
index fe75f5d..bdd5c00 100644
--- a/Source/Genes/Gender/Genes/Gene_GenderFluid.cs
+++ b/Source/Genes/Gender/Gene_GenderFluid.cs
@@ -39,9 +39,9 @@ namespace RJW_Genes
private bool sexChangeWasBlocked = false;
public Gene_GenderFluid() : base() {
- TickBasedChanceExtension tickbasedChanceExt = GeneDefOf.rjw_genes_gender_fluid.GetModExtension();
- change_interval = tickbasedChanceExt?.tickInterval ?? CHANGE_INTERVAL_FALLBACK;
- switch_chance = tickbasedChanceExt?.eventChance ?? SWITCH_CHANCE_FALLBACK;
+ GenderFluidExtension genderFluidExt = GeneDefOf.rjw_genes_gender_fluid.GetModExtension();
+ change_interval = genderFluidExt?.changeInterval ?? CHANGE_INTERVAL_FALLBACK;
+ switch_chance = genderFluidExt?.changeChance ?? SWITCH_CHANCE_FALLBACK;
}
public override void Tick()
diff --git a/Source/Genes/Gender/Genes/Gene_MaleOnly.cs b/Source/Genes/Gender/Gene_MaleOnly.cs
similarity index 100%
rename from Source/Genes/Gender/Genes/Gene_MaleOnly.cs
rename to Source/Genes/Gender/Gene_MaleOnly.cs
diff --git a/Source/Genes/Genitalia/GenitaliaUtility.cs b/Source/Genes/Genitalia/GenitaliaUtility.cs
index 581ba64..6a6ba79 100644
--- a/Source/Genes/Genitalia/GenitaliaUtility.cs
+++ b/Source/Genes/Genitalia/GenitaliaUtility.cs
@@ -73,48 +73,5 @@ namespace RJW_Genes
{
return candidate.def.defName.ToLower().Contains("breast");
}
-
- ///
- /// Returns the biggest penis of a pawn.
- /// In case of a identical severity, the highest body size is returned.
- /// For women, or pawns without a penis, null is returned.
- ///
- ///
- /// The biggest penis of a pawn. Null on women or error.
- public static Hediff GetBiggestPenis(Pawn pawn)
- {
- Hediff best = null;
- var parts = Genital_Helper.get_AllPartsHediffList(pawn);
-
- foreach (var part in parts)
- {
- if (Genital_Helper.is_sex_part(part) && Genital_Helper.is_penis(part))
- {
- if (best == null) best = part;
-
- // On a draw of size, we check the body-size.
- if (part.Severity == best.Severity) {
- var partSize = part.TryGetComp();
- var bestSize = part.TryGetComp();
- if (partSize == null || bestSize == null) { continue; }
-
- best = partSize.SizeOwner > bestSize.SizeOwner ? part : best;
- } else if (part.Severity > best.Severity) {
- best = part;
- }
- }
- }
-
- return best;
- }
-
- public static float GetBodySizeOfSexPart(Hediff part)
- {
- if (part == null || part.TryGetComp() == null)
- return 0.0f;
- else
- return part.TryGetComp().SizeOwner;
- }
}
-
}
diff --git a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
index b7de209..adae607 100644
--- a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
+++ b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
@@ -17,6 +17,8 @@ namespace RJW_Genes
public abstract class Gene_GenitaliaResizingGene : RJW_Gene
{
+
+
///
/// Whether or not the gene was already applied.
/// If not, it is checked on every birthday and will be applied accordingly.
diff --git a/Source/Genes/Special/Defs/GeneAlteringExtension.cs b/Source/Genes/Special/Defs/GeneAlteringExtension.cs
deleted file mode 100644
index 64b40d4..0000000
--- a/Source/Genes/Special/Defs/GeneAlteringExtension.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class GeneAlteringExtension : DefModExtension
- {
- public List minorGenes;
- public List majorGenes;
-
- public float minorApplicationChance;
- public float majorApplicationChance;
- }
-}
diff --git a/Source/Genes/Special/Patches/Patch_AgeDrain.cs b/Source/Genes/Special/Patches/Patch_AgeDrain.cs
index 059baef..ab159b1 100644
--- a/Source/Genes/Special/Patches/Patch_AgeDrain.cs
+++ b/Source/Genes/Special/Patches/Patch_AgeDrain.cs
@@ -1,5 +1,4 @@
using HarmonyLib;
-using RimWorld;
using rjw;
using System;
using System.Collections.Generic;
@@ -25,8 +24,6 @@ namespace RJW_Genes.Genes.Special
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE_FALLBACK = 18 * 60 * 60000 + 1;
- const int FACTION_GOODWILL_CHANGE = -1;
-
public static void Postfix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() )
@@ -83,9 +80,6 @@ namespace RJW_Genes.Genes.Special
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
ModLog.Message($"[Sexual Age Drainer] {receiver} was too young ({receiver.ageTracker.AgeBiologicalYears}), and remains unchanged.");
}
-
- FactionUtility.HandleFactionGoodWillPenalties(receiver, giver, "rjw_genes_GoodwillChangedReason_aged_pawn_with_sex_gene",FACTION_GOODWILL_CHANGE);
}
-
}
}
diff --git a/Source/Genes/Special/Patches/Patch_Feminizer.cs b/Source/Genes/Special/Patches/Patch_Feminizer.cs
deleted file mode 100644
index 4259654..0000000
--- a/Source/Genes/Special/Patches/Patch_Feminizer.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This patch handles the changes produced by `rjw_genes_feminizer`.
- /// It requires the hediff `rjw_genes_feminzation_in_progress` which is managed separately, in `Patch_HediffIncreaseOnSex`.
- ///
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public static class Patch_Feminizer
- {
-
- static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_feminizer.GetModExtension();
-
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || !props.hasPartner() || props.partner == null)
- return;
- if (props.pawn.IsAnimal() || props.partner.IsAnimal())
- return;
-
- if (geneAlteringExtension == null)
- {
- ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Feminizer");
- return;
- }
-
- ApplyFeminization(props.pawn);
- ApplyFeminization(props.partner);
- }
-
- private static void ApplyFeminization(Pawn pawn)
- {
- if (pawn == null) return;
- Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_feminization_progress);
- if (hediff == null) return;
-
- var Random = new Random();
- // DevNote: I first had a switch (hediff.SeverityLabel) but SeverityLabel was null.
- // So now I have this approach which feels a bit more robust.
- // I was thinking about looking for strings in the label, but I think that will break the logic in case of translations.
- switch (hediff.Severity)
- {
- case float f when f > 0.8f:
- {
- if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance)
- MajorChange(pawn);
- } break;
- case float f when f > 0.6f:
- {
- if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance)
- MinorChange(pawn);
- } break;
- default:
- {
- ModLog.Debug($"Tried to feminize {pawn} - severity of feminization was too low ({hediff.def} @ {hediff.Severity} - {hediff.Label})") ;
- } break;
- }
- }
-
- private static void MinorChange(Pawn pawn)
- {
- List possibleGenes = geneAlteringExtension.minorGenes.ToList();
- GeneDef chosen = possibleGenes.RandomElement();
- if (chosen == null)
- {
- ModLog.Warning($"Error in retrieving a minor-feminization gene for feminizing {pawn}");
- return;
- }
-
- // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active.
- if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen))
- {
- ModLog.Debug($"{pawn} experienced a minor feminization change; {pawn} got new gene {chosen}.");
- pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
- } else
- {
- ModLog.Debug($"Tryed a minor feminization for {pawn} - {pawn} already had {chosen}");
- }
- }
-
- private static void MajorChange(Pawn pawn)
- {
- List possibleGenes = geneAlteringExtension.majorGenes.ToList();
- GeneDef chosen = possibleGenes.RandomElement();
- if (chosen == null)
- {
- ModLog.Warning($"Error in retrieving a minor-feminization gene for feminizing {pawn}");
- return;
- }
-
- // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active.
- if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen))
- {
- ModLog.Debug($"{pawn} experienced a major feminization change; {pawn} got new gene {chosen}.");
- pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
- }
- else
- {
- ModLog.Debug($"Tryed a major feminization for {pawn} - {pawn} already had {chosen}");
- ModLog.Debug($"Trying minor feminization for {pawn} instead ...");
- MinorChange(pawn);
- }
- }
- }
-}
diff --git a/Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs b/Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs
deleted file mode 100644
index 377b71d..0000000
--- a/Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
-
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public class Patch_GeneticSexSwap
- {
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
- {
- return;
- }
-
- Pawn pawn = props.pawn;
- Pawn partner = props.partner;
-
- if (pawn.genes == null || partner.genes == null) return;
-
- // If both have the swap gene, nothing happens
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_swap)
- && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_swap))
- return;
- // If neither has the swap gene, nothing happens
- if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_swap)
- && !GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_swap))
- return;
-
- ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_swap.GetModExtension();
- if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance)
- SwapOneRandomGene(pawn, partner);
- }
-
- ///
- /// Removes a random gene from one pawn and adds it too the other as xenogene.
- /// The "gene swap" gene cannot be swapped!
- ///
- private static void SwapOneRandomGene(Pawn a, Pawn b, bool AddAsXenogene = true)
- {
-
- var geneFromA = a.genes.GenesListForReading
- .Where(gene => a.genes.HasActiveGene(gene.def))
- .Where(gene => gene.def != GeneDefOf.rjw_genes_sexual_genetic_swap)
- .RandomElement();
- var geneFromB = b.genes.GenesListForReading
- .Where(gene => b.genes.HasActiveGene(gene.def))
- .Where(gene => gene.def != GeneDefOf.rjw_genes_sexual_genetic_swap)
- .RandomElement();
-
- if (geneFromA == null || geneFromB == null) return;
-
- ModLog.Debug($"Sexual Genetic Swap: Swapping {geneFromA.def} from {a} with {geneFromB.def} from {b}");
-
- a.genes.AddGene(geneFromB.def, AddAsXenogene);
- b.genes.AddGene(geneFromA.def, AddAsXenogene);
- a.genes.RemoveGene(geneFromA);
- b.genes.RemoveGene(geneFromB);
- }
-
- }
-}
diff --git a/Source/Genes/Special/Patches/Patch_GeneticSexThief.cs b/Source/Genes/Special/Patches/Patch_GeneticSexThief.cs
deleted file mode 100644
index d61f0bd..0000000
--- a/Source/Genes/Special/Patches/Patch_GeneticSexThief.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using RimWorld.Planet;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
-
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public class Patch_GeneticSexThief
- {
-
- public const int FACTION_GOODWILL_CHANGE = -10;
-
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
- {
- return;
- }
-
- Pawn pawn = props.pawn;
- Pawn partner = props.partner;
-
- if (pawn.genes == null || partner.genes == null) return;
-
- // If both have the swap gene, nothing happens
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_thief)
- && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_thief))
- return;
-
- if (GeneUtility.HasGeneNullCheck(pawn,GeneDefOf.rjw_genes_sexual_genetic_thief) &&
- !GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_genetic_disease_immunity))
- {
- ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_thief.GetModExtension();
- if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance)
- StealRandomGene(pawn, partner);
- }
-
- if (GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_thief) &&
- !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_genetic_disease_immunity))
- {
- ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_thief.GetModExtension();
- if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance)
- StealRandomGene(partner, pawn);
- }
- }
-
- ///
- /// Removes a random gene from one pawn and adds it too the other as xenogene.
- ///
- private static void StealRandomGene(Pawn stealer, Pawn victim, bool AddAsXenogene = true)
- {
- var stolenGene = victim.genes.GenesListForReading
- .Where(gene => victim.genes.HasActiveGene(gene.def))
- .RandomElement();
-
- if (stolenGene == null) return;
-
- ModLog.Debug($"Sexual Gene Thief: {stealer} steals {stolenGene.def} from {victim}");
-
- stealer.genes.AddGene(stolenGene.def, AddAsXenogene);
- victim.genes.RemoveGene(stolenGene);
-
- FactionUtility.HandleFactionGoodWillPenalties(stealer, victim, "rjw_genes_GoodwillChangedReason_StoleGene", FACTION_GOODWILL_CHANGE);
- }
-
- }
-}
diff --git a/Source/Genes/Special/Patches/Patch_HormonalSaliva.cs b/Source/Genes/Special/Patches/Patch_HormonalSaliva.cs
index fed69d7..150eeec 100644
--- a/Source/Genes/Special/Patches/Patch_HormonalSaliva.cs
+++ b/Source/Genes/Special/Patches/Patch_HormonalSaliva.cs
@@ -12,6 +12,7 @@ namespace RJW_Genes
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
public class Patch_HormonalSaliva
{
+ // TODO: Reduce to 0.02 after debug.
const float SIZE_INCREMENT_FALLBACK = 0.02f;
const float MAX_BODY_SIZE_FALLBACK = 2.5f;
const float CUM_MULTIPLIER_FALLBACK = 1.05f;
diff --git a/Source/Genes/Special/Patches/Patch_PregnancyOverwrite.cs b/Source/Genes/Special/Patches/Patch_PregnancyOverwrite.cs
deleted file mode 100644
index 704a2bd..0000000
--- a/Source/Genes/Special/Patches/Patch_PregnancyOverwrite.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-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 HarmonyLib.Code;
-
-namespace RJW_Genes
-{
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public class Patch_PregnancyOverwrite
- {
- public const int FACTION_GOODWILL_CHANGE = -5;
-
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
- {
- return;
- }
-
- Pawn pawn = props.pawn;
- Pawn partner = props.partner;
-
- if (pawn.genes == null || partner.genes == null) return;
-
- // If both have the swap gene, nothing happens
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pregnancy_overwrite)
- && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_pregnancy_overwrite))
- return;
-
- // If both are pregnant, we have some weird interaction. Exit Early
- if (pawn.IsPregnant() && partner.IsPregnant())
- return;
- // If neither are pregnant, nothing can happen.
- if (!pawn.IsPregnant() && !partner.IsPregnant())
- return;
-
- if (pawn.IsPregnant()
- && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_pregnancy_overwrite))
- TryReplacePregnancy(partner, pawn);
-
- if (partner.IsPregnant()
- && GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pregnancy_overwrite))
- TryReplacePregnancy(pawn, partner);
- }
-
- ///
- /// Tries to replace an existing pregnancy with a new pregnancy at the same gestation process.
- /// The new pregnancy will have the same mother, but a new father and a new set of genes.
- ///
- /// There is a check for pregnancy that checks for the general fertility (using Vanilla Functions) and multiplies it with a xml-configurable chance.
- /// If anything is replaced, there will be a faction penalty applied.
- ///
- ///
- ///
- public static void TryReplacePregnancy(Pawn replacer, Pawn pregnant)
- {
-
- // DevNote:
- // There are some issues with just checking PregnancyUtility.PregnancyChanceForPartners or rjw.PregnancyHelper.CanImpregnate
- // Both do give 0.0 chance when the pawn is already pregnant, which does not help me :/
- Hediff pregnancyHediff = PregnancyUtility.GetPregnancyHediff(pregnant);
- if (pregnancyHediff == null)
- return;
-
- if (DiseaseHelper.IsImmuneAgainstGeneticDisease(pregnant, GeneDefOf.rjw_genes_pregnancy_overwrite))
- {
- ModLog.Debug($"{pregnant} is immune against rjw_genes_pregnancy_overwrite from {replacer}");
- return;
- }
-
- ChanceExtension chanceExt = GeneDefOf.rjw_genes_pregnancy_overwrite.GetModExtension();
- float chance = chanceExt != null ? chanceExt.chance : 0.25f;
- float replacerFert = replacer.GetStatValueForPawn(StatDefOf.Fertility, replacer);
- chance *= replacerFert ;
- double roll = (new Random()).NextDouble();
- if (roll < chance)
- {
- ModLog.Debug($"Pregnancy-Overwrite for {replacer} and {pregnant}.");
- float gestationProgress = pregnancyHediff.Severity;
-
- PregnancyUtility.ForceEndPregnancy(pregnant);
-
- PregnancyHelper.StartVanillaPregnancy(pregnant, replacer);
- Hediff replacementPregnancyHediff = PregnancyUtility.GetPregnancyHediff(pregnant);
- replacementPregnancyHediff.Severity = gestationProgress;
-
- FactionUtility.HandleFactionGoodWillPenalties(replacer, pregnant, "rjw_genes_GoodwillChangedReason_OverwritePregnancy", FACTION_GOODWILL_CHANGE);
- } else
- {
- ModLog.Debug($"Did not Pregnancy-Overwrite for {replacer} and {pregnant}. Failed: Rolled {roll} <({chanceExt.chance}[XML-Chance] x {replacerFert} [Fert:{replacer}])");
- }
- }
-
- }
-}
diff --git a/Source/Genes/Special/Patches/Patch_Twinkifier.cs b/Source/Genes/Special/Patches/Patch_Twinkifier.cs
deleted file mode 100644
index b7205fb..0000000
--- a/Source/Genes/Special/Patches/Patch_Twinkifier.cs
+++ /dev/null
@@ -1,116 +0,0 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This patch handles the changes produced by `rjw_genes_twinkifier`.
- /// It requires the hediff `rjw_genes_twinkification_in_progress` which is managed separately, in `Patch_HediffIncreaseOnSex`.
- ///
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public static class Patch_Twinkifier
- {
-
- static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_twinkifier.GetModExtension();
-
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || !props.hasPartner() || props.partner == null)
- return;
- if (props.pawn.IsAnimal() || props.partner.IsAnimal())
- return;
-
- if (geneAlteringExtension == null)
- {
- ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Twinkifier");
- return;
- }
-
- ApplyTwinkification(props.pawn);
- ApplyTwinkification(props.partner);
- }
-
- private static void ApplyTwinkification(Pawn pawn)
- {
- if (pawn == null) return;
- Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_twinkification_progress);
- if (hediff == null) return;
-
- var Random = new Random();
- // DevNote: I first had a switch (hediff.SeverityLabel) but SeverityLabel was null.
- // So now I have this approach which feels a bit more robust.
- // I was thinking about looking for strings in the label, but I think that will break the logic in case of translations.
- switch (hediff.Severity)
- {
- case float f when f > 0.8f:
- {
- if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance)
- MajorChange(pawn);
- } break;
- case float f when f > 0.6f:
- {
- if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance)
- MinorChange(pawn);
- } break;
- default:
- {
- ModLog.Debug($"Tried to twinkify {pawn} - severity of twinkification was too low ({hediff.def} @ {hediff.Severity} - {hediff.Label})") ;
- } break;
- }
-
- }
-
- private static void MinorChange(Pawn pawn)
- {
- List possibleGenes = geneAlteringExtension.minorGenes.ToList();
-
- GeneDef chosen = possibleGenes.RandomElement();
- if (chosen == null)
- {
- ModLog.Warning($"Error in retrieving a minor-twinkification gene for twinkifying {pawn}");
- return;
- }
-
- // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active.
- if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen))
- {
- ModLog.Debug($"{pawn} experienced a minor twinkification change; {pawn} got new gene {chosen}.");
- pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
- } else
- {
- ModLog.Debug($"Tryed a minor twinkification for {pawn} - {pawn} already had {chosen}");
- }
- }
-
- private static void MajorChange(Pawn pawn)
- {
- List possibleGenes = geneAlteringExtension.majorGenes.ToList();
-
- GeneDef chosen = possibleGenes.RandomElement();
- if (chosen == null)
- {
- ModLog.Warning($"Error in retrieving a minor-twinkification gene for twinkifying {pawn}");
- return;
- }
-
- // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active.
- if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen))
- {
- ModLog.Debug($"{pawn} experienced a major twinkification change; {pawn} got new gene {chosen}.");
- pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
- }
- else
- {
- ModLog.Debug($"Tryed a major twinkification for {pawn} - {pawn} already had {chosen}");
- ModLog.Debug($"Trying minor twinkification for {pawn} instead ...");
- MinorChange(pawn);
- }
- }
- }
-}
diff --git a/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs b/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs
index 96ba204..d810bc6 100644
--- a/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs
+++ b/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs
@@ -1,5 +1,4 @@
using HarmonyLib;
-using RimWorld;
using rjw;
using System;
using System.Collections.Generic;
@@ -24,8 +23,6 @@ namespace RJW_Genes.Genes.Special
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE_FALLBACK = 18 * 60 * 60000 + 1;
- const int FACTION_GOODWILL_CHANGE = 1;
-
public static void Postfix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
@@ -42,12 +39,10 @@ namespace RJW_Genes.Genes.Special
if (GeneUtility.IsYouthFountain(props.pawn))
{
ChangeAgeForPawn(props.partner, props.pawn);
- FactionUtility.HandleFactionGoodWillPenalties(props.pawn, props.partner, "rjw_genes_GoodwillChangedReason_youthed_pawn_with_sex_gene",+1);
}
if (GeneUtility.IsYouthFountain(props.partner))
{
ChangeAgeForPawn(props.pawn,props.partner);
- FactionUtility.HandleFactionGoodWillPenalties(props.pawn, props.partner, "rjw_genes_GoodwillChangedReason_youthed_pawn_with_sex_gene", +1);
}
}
@@ -70,7 +65,6 @@ namespace RJW_Genes.Genes.Special
ModLog.Message($"[Youth Fountain] {ToYouth} was too young ({ToYouth.ageTracker.AgeBiologicalYears}), and remains unchanged.");
}
-
}
}
diff --git a/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs b/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs
index 6ae9fca..b236fc9 100644
--- a/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs
+++ b/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs
@@ -40,20 +40,10 @@ namespace RJW_Genes
// If the pawn is not on Map (e.g. caravan), no mali
if (!MapUtility.PawnIsOnHomeMap(pawn))
return (ThoughtState)false;
-
- // Do nothing if the pawn does not have the pheromones
- if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
+ // Do nothing for pawns that also have pheromones
+ if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
return (ThoughtState)false;
- // Do nothing for others that also have pheromones
- if (GeneUtility.HasGeneNullCheck(other, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
- return (ThoughtState)false;
-
- // Do nothing for pawns that wear Gas-Masks
- if (other.apparel != null && other.apparel.AnyApparel)
- if (other.apparel.WornApparel.Any(apparel => apparel.def == RimWorld.ThingDefOf.Apparel_GasMask))
- return (ThoughtState)false;
-
// Actual Logic:
// Pawn qualifies in right distance and needs line of sight.
var pos = other.Position;
diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs
index e06d6fc..d957096 100644
--- a/Source/HediffDefOf.cs
+++ b/Source/HediffDefOf.cs
@@ -20,18 +20,10 @@ namespace RJW_Genes
public static readonly HediffDef rjw_genes_orgasmic_mytosis_hediff;
public static readonly HediffDef rjw_genes_mytosis_shock_hediff;
- public static readonly HediffDef rjw_genes_twinkification_progress;
- public static readonly HediffDef rjw_genes_feminization_progress;
-
- public static readonly HediffDef rjw_genes_genetic_rut;
-
- // Note: Counter does meant it counters it, not it's counting
[MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumstuffed_counter;
[MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter;
public static readonly HediffDef OvaryAgitator;
public static readonly HediffDef Bioscaffold;
-
- [MayRequire("rjw.sexperience")] public static readonly HediffDef rjw_genes_filled_living_cumbucket;
}
}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index ddfa721..dadf954 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -56,49 +56,24 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
@@ -111,13 +86,16 @@
-
+
+
-
-
+
+
+
+
-
+
@@ -129,8 +107,8 @@
-
-
+
+
@@ -195,17 +173,11 @@
-
-
-
-
-
-
@@ -265,7 +237,9 @@
False
-
+
+
+
diff --git a/Source/Settings/RJW_Genes_Settings.cs b/Source/Settings/RJW_Genes_Settings.cs
index 249aa5d..49257a8 100644
--- a/Source/Settings/RJW_Genes_Settings.cs
+++ b/Source/Settings/RJW_Genes_Settings.cs
@@ -51,19 +51,9 @@ namespace RJW_Genes
listing_Standard.Gap(4f);
listing_Standard.CheckboxLabeled("rjw_genes_settings_animal_mating_needs_penis_key".Translate(), ref animalMatingPulseCheckForGenitals, "rjw_genes_settings_animal_mating_needs_penis_explanation".Translate());
-
listing_Standard.Gap(5f);
- listing_Standard.Label("rjw_genes_genetic_disease_header_key".Translate());
- listing_Standard.Gap(4f);
- listing_Standard.CheckboxLabeled("\t" + "rjw_genes_settings_genetic_disease_spread_key".Translate(), ref rjw_genes_genetic_disease_spread, "rjw_genes_settings_genetic_disease_spread_explanation".Translate(), 0f, 1f);
- listing_Standard.Gap(4f);
- listing_Standard.CheckboxLabeled("\t" + "rjw_genes_genetic_disease_as_endogenes_key".Translate(), ref rjw_genes_genetic_disease_as_endogenes, "rjw_genes_genetic_disease_as_endogenes_explanation".Translate(), 0f, 1f);
- listing_Standard.Gap(4f);
- listing_Standard.CheckboxLabeled("\t" + "rjw_genes_genetic_disease_spread_only_on_penetrative_sex_key".Translate(), ref rjw_genes_genetic_disease_spread_only_on_penetrative_sex, "rjw_genes_genetic_disease_spread_only_on_penetrative_sex_explanation".Translate(), 0f, 1f);
-
-
- listing_Standard.Gap(10f);
listing_Standard.CheckboxLabeled("rjw_genes_settings_generous_donor_cheatmode_key".Translate(), ref rjw_genes_generous_donor_cheatmode, "rjw_genes_settings_generous_donor_cheatmode_explanation".Translate(), 0f, 1f);
+
listing_Standard.Gap(5f);
listing_Standard.CheckboxLabeled("rjw_genes_settings_detailed_debug_key".Translate(), ref rjw_genes_detailed_debug, "rjw_genes_settings_detailed_debug_explanation".Translate(), 0f, 1f);
listing_Standard.End();
@@ -84,11 +74,6 @@ namespace RJW_Genes
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_sexdemon_visit_groups, "rjw_genes_sexdemon_groups", RJW_Genes_Settings.rjw_genes_sexdemon_visit_groups, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_sexdemon_visit_succubi, "rjw_genes_sexdemon_succubi", RJW_Genes_Settings.rjw_genes_sexdemon_visit_succubi, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_sexdemon_visit_incubi, "rjw_genes_sexdemon_incubi", RJW_Genes_Settings.rjw_genes_sexdemon_visit_incubi, true);
-
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_genetic_disease_spread, "rjw_genes_genetic_disease_spread", RJW_Genes_Settings.rjw_genes_genetic_disease_spread, true);
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes, "rjw_genes_genetic_disease_as_endogenes", RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes, true);
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex, "rjw_genes_genetic_disease_spread_only_on_penetrative", RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex, true);
-
}
public static bool rjw_genes_detailed_debug = false;
@@ -103,9 +88,8 @@ namespace RJW_Genes
public static bool rjw_genes_sexdemon_visit_succubi = true;
public static bool rjw_genes_sexdemon_visit_incubi = true;
- public static bool rjw_genes_genetic_disease_spread = true;
- public static bool rjw_genes_genetic_disease_as_endogenes = true;
- public static bool rjw_genes_genetic_disease_spread_only_on_penetrative_sex = false;
+
+
public static bool rjw_genes_generous_donor_cheatmode = false;
}
diff --git a/Source/ThoughtDefOf.cs b/Source/ThoughtDefOf.cs
index 596ecc0..f884d4a 100644
--- a/Source/ThoughtDefOf.cs
+++ b/Source/ThoughtDefOf.cs
@@ -15,9 +15,6 @@ namespace RJW_Genes
public static readonly ThoughtDef rjw_genes_pheromone_carrier_nearby;
- public static readonly ThoughtDef rjw_genes_appealing_cock;
- public static readonly ThoughtDef rjw_genes_has_more_diseases;
-
//Others with same names but other defs than in genedefof
public static readonly InteractionDef rjw_genes_flirt;
}
diff --git a/TODOS.md b/TODOS.md
new file mode 100644
index 0000000..25f5045
--- /dev/null
+++ b/TODOS.md
@@ -0,0 +1,29 @@
+# ToDos and Planned Genes
+
+Any help is very appreciated, even if it is just pointing me to existing similar projects.
+
+## Planned / Wanted Genes
+
+**Adjustable Cock-Size** like e.g. artificial genitalia have
+
+**Infectious Hypersexuality Gene** (Maybe?) add Hypersexuality Gene through sex with a certain chance.
+
+**Cum Addiction** add Cum-Addiction from Sexperience, slowly loose conciousness while addiction is not attended.
+
+**Cum-Drugs** eating cum has an effect similar to Go-Juice (including (separate?) addiction)
+
+**Death-Rest** until the pawn is cumflated. I would have liked
+
+**STD Immunity** & maybe a potential to be carrier, but not suffer effects. I just don't play with STDs
+
+## Genes with Abilities and more Effects
+
+There were some suggestions on the Discord I saved them somewhere else. I am far away from making that work, but to have them here:
+
+- Genitalia deal damage as per size (on normal sex-use) - This started in the branch `GenitaliaDamage` but prooves a bit overboarding!
+- Genitalia can cause Terror (as ability)
+- Cumshot Sniper Abilities. Scale damage with body size and genitalia size, scale distance by cum-amount (relative to the damage - high damage projectiles need more cum per meter).
+
+## Cleanups:
+
+- Change Project structure to the 1.3, 1.4 Structure of other mods