diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 26265ae..0000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-name: Bug Report
-about: Create a report to help us improve
-
----
-
-**Description**
-Whats happening? What should happen?
-
-Put any error message here too.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Screenshots**
-If applicable, add screenshots.
-
-Add the Error Message, if there is some
-
-**Hugslog / ModList**
-
-Please put your Link to Hugslog here.
-
-**Additional context**
-Add anything else here.
-
-Please mention if you have a changed config or if you suspect a certain mod / interaction.
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md
deleted file mode 100644
index 340d79d..0000000
--- a/.github/ISSUE_TEMPLATE/feature.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-name: Feature Request
-about: Suggest an Idea for this project
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. I'm always frustrated when [...]
-**OR**
-I would love to see something like [...]
-
-**Describe the solution you'd like**
-
-Feel free to be oppinionated, or a bit crazy.
-I might not do it, but I usually don't judge.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
-Feel free to share your paint-sketch
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 580f022..971fc41 100644
--- a/.gitignore
+++ b/.gitignore
@@ -255,5 +255,3 @@ paket-files/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
-
-*.dds
diff --git a/1.4/Assemblies/Rjw-Genes.dll b/1.4/Assemblies/Rjw-Genes.dll
deleted file mode 100644
index 6152493..0000000
Binary files a/1.4/Assemblies/Rjw-Genes.dll and /dev/null differ
diff --git a/1.4/Defs/AbilityDefs/Ability_CockEater.xml b/1.4/Defs/AbilityDefs/Ability_CockEater.xml
deleted file mode 100644
index 4a8f2e3..0000000
--- a/1.4/Defs/AbilityDefs/Ability_CockEater.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- rjw_genes_ability_cockeater
- Eat Cock
- Eat the cock of another pawn, restoring fertilin based on the size of the cock.
- Genes/Icons/cockeater
- true
- true
- false
- Mote_CoagulateStencil
- Coagulate
- Coagulate_Cast
- CastAbilityOnThingMelee
- 402
-
- Verb_CastAbilityTouch
- false
- -1
- 10
-
- true
- false
- false
- false
- true
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/AbilityDefs/Ability_CocoonWeaver.xml b/1.4/Defs/AbilityDefs/Ability_CocoonWeaver.xml
deleted file mode 100644
index 2a1577a..0000000
--- a/1.4/Defs/AbilityDefs/Ability_CocoonWeaver.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- rjw_genes_ability_cocoonweaver
- Cocoon
- Weaves the victim into a (self-sustaining) cocoon. The victim cannot move, but can be bred.
- Genes/Icons/Cocoon
- true
- true
- false
- Mote_CocoonStencil
- CocoonWeave
- CastAbilityOnThingMelee
- 404
-
- 30000
-
- Verb_CastAbilityTouch
- false
- -1
- 15
-
- true
- false
- false
- false
- true
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/AbilityDefs/Ability_PussyHeal.xml b/1.4/Defs/AbilityDefs/Ability_PussyHeal.xml
deleted file mode 100644
index c31cb75..0000000
--- a/1.4/Defs/AbilityDefs/Ability_PussyHeal.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
- rjw_genes_ability_pussyheal
- SexHeal
- Rape another pawn, so you can heal them with your vagina's special healing power.
- Things/Mote/Heart
- false
- true
- false
- Mote_CoagulateStencil
- Coagulate
- Coagulate_Cast
- rjw_genes_lifeforce_healpussy
- 401
-
- Verb_CastAbilityTouch
- false
- -1
- 0
-
- true
- false
- false
- false
- true
-
-
-
-
- 0.3
-
-
- 0.4~0.8
-
-
-
-
- Rape
-
-
-
- Vagina
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/AbilityDefs/Ability_Seduce.xml b/1.4/Defs/AbilityDefs/Ability_Seduce.xml
deleted file mode 100644
index d4467e6..0000000
--- a/1.4/Defs/AbilityDefs/Ability_Seduce.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- rjw_genes_ability_seduce
- seduce
- Seduce the target to approach the caster.
- Genes/Icons/seduce
- True
- true
- true
- false
-
- 10
-
- Mote_CoagulateStencil
- Coagulate
- Coagulate_Cast
-
- Verb_CastAbility
- 10
- 1
-
- false
- false
- false
- false
- true
-
-
-
-
- RJW_Genes.CompAbilityEffect_Seduce
- Caster
-
-
- Heart
-
-
- 0.20
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/AbilityDefs/Ability_SpawnSpelopede.xml b/1.4/Defs/AbilityDefs/Ability_SpawnSpelopede.xml
deleted file mode 100644
index 7279149..0000000
--- a/1.4/Defs/AbilityDefs/Ability_SpawnSpelopede.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- rjw_genes_ability_spawn_spelopede
- Insect Ally
- Generates a tame spelopede, ready to serve their master.
- Genes/Icons/Spelopede_Dispenser
- true
- false
-
-
- Verb_CastAbility
- 3
- False
- False
- 2
-
- False
- True
-
-
-
- False
- 1800000
-
-
-
- RJW_Genes.CompAbilityEffect_SpawnSpelopede
- Spelopede
- true
- 1.00
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/Effects/cocoonweave.xml b/1.4/Defs/Effects/cocoonweave.xml
deleted file mode 100644
index 945e631..0000000
--- a/1.4/Defs/Effects/cocoonweave.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
- CocoonWeave
-
-
- SubEffecter_SprayerChance
- BloodSplash
- 0.15
- 2~3
- 0.75~1.5
- (244, 244, 244)
- RandomDrawPosOnTarget
- true
-
-
-
-
-
- Mote_CocoonStencil
- MoteAttached
- Terrain
-
- 0.1
- 0.4
- 999999
- True
-
-
- Graphic_PawnBodySilhouette
- PawnSilhouetteStencil
- Things/Mote/Transparent
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneCategories.xml b/1.4/Defs/GeneDefs/GeneCategories.xml
deleted file mode 100644
index 8106c8e..0000000
--- a/1.4/Defs/GeneDefs/GeneCategories.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
- rjw_genes_gender
- Gender
- 21
-
-
-
- rjw_genes_genitalia_type
- Genitalia Types
- 19
-
-
-
- rjw_genes_genitalia_extras
- Genitalia Amounts
- 17
-
-
-
- rjw_genes_genitalia_size
- Genitalia Size / Attributes
- 15
-
-
-
- rjw_genes_fertilin
- Fertilin
- 14
-
-
-
- rjw_genes_breeding
- Breeding
- 13
-
-
-
- rjw_genes_cum
- Cum
- 12
-
-
-
- rjw_genes_damage
- Genital Related Damage
- 11
-
-
-
- rjw_genes_special
- Genital Based Special Abilities
- 8
-
-
-
- rjw_genes_hive
- Hive
- 7
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_Breeding.xml b/1.4/Defs/GeneDefs/GeneDefs_Breeding.xml
deleted file mode 100644
index aadecc9..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
- rjw_genes_mechbreeder
- Mechbreeder
- Pawns with this gene are able to birth mechanoids unharmed.
- World/WorldObjects/Expanding/Mechanoids
- 51
- rjw_genes_breeding
- 1
- -1
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_zoophile
- Zoophile
- rjw_genes_breeding
- Xenotypes with this Gene are Zoophile.
- Genes/Icons/Zoophile
- 54
-
-
- Zoophile
-
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_Cosmetic.xml b/1.4/Defs/GeneDefs/GeneDefs_Cosmetic.xml
deleted file mode 100644
index 6767e77..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_Cosmetic.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
- Miscellaneous
- true
-
- Wing
-
-
- Tailbone
-
-
-
-
- rjw_genes_succubus_wings
- succubus wings
- Carriers of this gene grow succubus wings.
- Genes/Icons/Succubus_Wings
- (0.75, 0.75, 0.75)
- 1000
-
- rjw_genes_ability_flight
-
-
- rjw_genes_ability_flight
-
- 1
- -1
-
- Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings/RJW_Genes_Succubus_Wings
- Skin
- 2
- (0.0, 0.01, -0.1)
- (0.0, 0.0, -0.1)
- (0.1, 0.0, 0.0)
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_succubus_tail
- succubus tail
- Carriers of this gene grow a slender tail ending with a heart that can act as a dexterous fifth limb.
- Genes/Icons/Succubus_Tail
- (1, 0, 0)
- 1000
-
-
- Manipulation
- 0.05
-
-
- 1
- -1
-
- Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail/RJW_Genes_Succubus_Tail
- Skin
- 2
- (0, 0.2, -0.1)
- (0, -0.1, 0.1)
- (0.2, 0.2, 0.1)
-
- true
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_Cum.xml b/1.4/Defs/GeneDefs/GeneDefs_Cum.xml
deleted file mode 100644
index 28b841a..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_Cum.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
- rjw_genes_cum
-
- CumAmount
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
- rjw_genes_no_cum
- No Cum
- Males of these species have no fluid.
- Genes/Icons/No_Cum
- RJW_Genes.Gene_NoCum
- 533
- 0
- 1
-
-
-
- rjw_genes_much_cum
- Much Cum
- Males of this species produce a lot of fluid.
- Genes/Icons/Much_Cum
- RJW_Genes.Gene_MuchCum
- 534
- 1
- -1
-
-
-
- rjw_genes_very_much_cum
- Very Much Cum
- Males of this species produce a whole lot of fluid. They are like fountains basically.
- Genes/Icons/Very_Much_Cum
- RJW_Genes.Gene_VeryMuchCum
- 535
- 1
- -2
-
-
-
- rjw_genes_likes_cumflation
- Likes Cumflation
- rjw_genes_cum
- This Xenotype loves being cumflated.
- Genes/Icons/Cumflation
- 536
-
-
- LikesCumflation
-
-
-
- NotCumflatable
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_cumflation_immunity
- Cumflation Immunity
- rjw_genes_cum
- This Xenotype cannot get cumflated.
- Genes/Icons/Cumflation_Immunity
- 537
-
- NotCumflatable
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
- rjw_genes_generous_donor
- Generous Donor
- rjw_genes_cum
- When this Xenotype transfers nutrition via cumshot, the giver will not get hungry. (Licentia Configuration for Transfer Nutrition must be enabled).
- Genes/Icons/Generous_Donor
- 538
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_Damage.xml b/1.4/Defs/GeneDefs/GeneDefs_Damage.xml
deleted file mode 100644
index 97aba0e..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_Damage.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
- rjw_genes_elasticity
- Elasticity
- rjw_genes_damage
- This Xenotype cannot get stretched by huge penetrators.
- Genes/Icons/Elasticity
- RJW_Genes.Gene_Elasticity
- -1
- 1
- 1
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_unbreakable
- Unbreakable
- rjw_genes_damage
- This 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.
- UI/Icons/Rituals/TrialDefend
- 2
- -1
- 1
-
- RJW_Genes.Gene_Unbreakable
-
- FeelingBroken
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml b/1.4/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
deleted file mode 100644
index 294dc66..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
- rjw_genes_genitalia_extras
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_extra_penis
- extra penis
- Males of this species grow an additional penis .
- Genes/Icons/extra_male
- RJW_Genes.Gene_ExtraPenis
- 701
-
- PenisAmount
-
-
-
-
- rjw_genes_no_penis
- no penis
- Males of this do not have a penis.
- Genes/Icons/No_Male_Genitalia
- RJW_Genes.Gene_NoPenis
- 702
-
- PenisAmount
-
-
-
-
-
- rjw_genes_extra_vagina
- extra vagina
- Females of this species grow an additional vagina .
- Genes/Icons/Extra_Vagina
- RJW_Genes.Gene_ExtraVagina
- 703
-
- VaginaAmount
-
-
-
-
- rjw_genes_no_vagina
- no vagina
- Females of this do not have a vagina.
- Genes/Icons/No_Vagina
- RJW_Genes.Gene_NoVagina
- 704
-
- VaginaAmount
-
-
-
-
-
- rjw_genes_extra_breasts
- extra breasts
- Females of this species grow an additional pair of breasts .
- Genes/Icons/Extra_Breasts
- RJW_Genes.Gene_ExtraBreasts
- 705
-
- BreastAmount
-
-
-
-
- rjw_genes_no_breasts
- no breasts
- Females of this do not have a pair of breasts, but only nipples.
- Genes/Icons/No_Breasts
- RJW_Genes.Gene_NoBreasts
- 706
-
- BreastAmount
-
-
-
-
- rjw_genes_extra_anus
- extra anus
- This specias has an extra anus.
- Genes/Icons/Extra_Anus
- RJW_Genes.Gene_ExtraAnus
- 707
-
- AnusAmount
-
-
-
-
- rjw_genes_no_anus
- no anus
- This specias has no anus.
- Genes/Icons/No_Anus
- RJW_Genes.Gene_NoAnus
- 708
-
- AnusAmount
-
-
-
-
- rjw_genes_futa
- futanari
- Males with this gene grow additional female genitalia, females grow additional male genitalia.
- Genes/Icons/Futa
- RJW_Genes.Gene_Futa
- 709
-
- PenisAmount
- VaginaAmount
-
-
-
-
- rjw_genes_featureless_chest
- Featureless Chest
- Carriers of this gene do not have breasts or nipples.
- Genes/Icons/No_Breasts
- RJW_Genes.Gene_FeaturelessChest
- 710
-
- BreastAmount
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml b/1.4/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
deleted file mode 100644
index 4c27701..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
- rjw_genes_genitalia_type
-
- GenitalType
-
- 0
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_equine_genitalia
- equine genitalia
- Carriers of this gene develop equine genitalia.
- Genes/Icons/Genitalia_Equine
- RJW_Genes.Gene_EquineGenitalia
- 802
-
-
-
- rjw_genes_canine_genitalia
- canine genitalia
- Carriers of this gene develop canine genitalia.
- Genes/Icons/Genitalia_Canine
- RJW_Genes.Gene_CanineGenitalia
- 803
-
-
-
- rjw_genes_feline_genitalia
- feline genitalia
- Carriers of this gene develop feline genitalia.
- Genes/Icons/Genitalia_Feline
- RJW_Genes.Gene_FelineGenitalia
- 804
-
-
-
- rjw_genes_demonic_genitalia
- demonic genitalia
- Carriers of this gene have demonic genitalia.
- Genes/Icons/Genitalia_Demon
- RJW_Genes.Gene_DemonicGenitalia
- 805
-
-
-
- rjw_genes_dragon_genitalia
- dragon genitalia
- Carriers of this gene develop dragon genitalia.
- Genes/Icons/Genitalia_Draconic
- RJW_Genes.Gene_DragonGenitalia
- 806
-
-
-
- rjw_genes_slime_genitalia
- slime genitalia
- Carriers of this gene have slime genitalia.
- Genes/Icons/Slime_Genitalia
- RJW_Genes.Gene_SlimeGenitalia
- 807
-
-
-
- rjw_genes_ovipositor_genitalia
- insect genitalia
- Carriers of this gene have ovipositors similar to insects.
- Genes/Icons/Ovipositor_Genitalia
- RJW_Genes.Gene_OvipositorGenitalia
- 808
-
-
- Egglaying
- AG_Egglaying
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_Hive.xml b/1.4/Defs/GeneDefs/GeneDefs_Hive.xml
deleted file mode 100644
index e4a747d..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_Hive.xml
+++ /dev/null
@@ -1,214 +0,0 @@
-
-
-
-
- rjw_genes_hive
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_queen
- Hive Queen
- queen
- This gene represents the royal caste amongst its xenotype. Children of a queen are usually born as sterile workers, unless the father was a drone. Having multiple (adult) queens leads to intense rivalry and can throw the whole colony into chaos!
- Genes/Icons/Queen
- 1
-
-
- 0.5
- 0.25
-
-
-
-
-
-
- 0.7
-
-
- -0.5
-
-
-
-
- 0.4
- 0.2
-
-
-
-
-
- rjw_genes_hive_caste
- rjw_genes_swearing_loyalty
-
-
- 7
- -3
-
-
-
- rjw_genes_drone
- Hive Drone
- drone
- This gene represents the drone caste amongst its xenotype. Drones are highly specialised experts that ensure the hives functioning. Other than that, drones are the only xenotypes capable of producing fertile offspring with a queen.
- Genes/Icons/Drone
- 2
-
-
- rjw_genes_hive_caste
-
-
-
-
-
- 0.9
-
-
- -0.1
-
-
-
-
- 4
- -2
-
-
-
-
- rjw_genes_worker
- Hive Worker
- worker
- This gene marks the lowest caste of a hive, the workers. Usually sterile, they are despised by higher castes and only live to serve with labour.
- Genes/Icons/Worker
- 3
-
-
- rjw_genes_hive_caste
-
-
-
-
-
- 0.7
-
-
- -0.5
-
-
-
-
- 0.7
-
-
- -0.5
-
-
-
-
- 1.2
- 1.2
-
-
-
-
- 1
- 0
-
-
-
- rjw_genes_zealous_loyalty
- Zealous Loyalty
- loyalty
- Carriers of this gene are genetically wired to worship carriers of the 'Queen'-gene. They receive a massive relation-ship bonus towards the queen and a slight mood bonus. Having multiple queens in the colony causes severe distress.
- Genes/Icons/Loyalty
- 10
-
-
- rjw_genes_swearing_loyalty
-
-
- 1
- -1
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_cocoonweaver
- Cocoon Weaver
- cocooner
- Carriers of this gene can produce a cocoon to prepare helpless (or willing) victims for breeding.
- Genes/Icons/Cocoon
- 11
-
- rjw_genes_ability_cocoonweaver
-
-
- rjw_genes_ability_cocoonweaver
-
- 1
- -1
-
-
-
- rjw_genes_spawn_spelopede
- Spelopede Dispenser
- spelopede
- Carriers of this gene can generate tame spelopedes. Higher psychic-sensitivity will spawn more spelopedes.
- Genes/Icons/Spelopede_Dispenser
- 12
-
- rjw_genes_ability_spawn_spelopede
-
-
- rjw_genes_ability_spawn_spelopede
-
- 1
- -1
-
-
-
-
- rjw_genes_insectincubator
- Insect Incubator
- RJW_Genes.Gene_InsectIncubator
- Pawns with this gene are able to hold more insect eggs.
- Genes/Icons/Egg
- 52
- 1
- -1
-
-
-
- rjw_genes_insectbreeder
- Insect Breeder
- Pawns with this gene are able to fertilize eggs with any fertile penis.
- Genes/Icons/Insect_Breeder
- 53
- 1
- -1
-
-
-
- rjw_genes_fervent_ovipositor
- Fervent Ovipositor
- RJW_Genes.Gene_FerventOvipositor
- Pawns that have a female (egg producing) ovipositor produce eggs at drastically increased speed.
- Genes/Icons/Fervent_Ovipositor
- 55
- 1
- -1
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_LifeForce.xml b/1.4/Defs/GeneDefs/GeneDefs_LifeForce.xml
deleted file mode 100644
index 8c793e2..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_LifeForce.xml
+++ /dev/null
@@ -1,237 +0,0 @@
-
-
-
-
- rjw_genes_fertilin
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_lifeforce
- fertilin
- Carriers of this gene have a reserve of biological strength powered by a resource called fertilin. The resource can be gained and spent in various ways, some of which are unlocked by other genes.\n\nCarriers lose 5 fertilin per day from biological entropy. \n\nGene is inactive until carrier is able to have sex.
- RJW_Genes.Gene_LifeForce
- RJW_Genes.GeneGizmo_ResourceLifeForce
- fertilin
-
- 0.25
- 0.5
- 0.75
-
- true
- true
- A reserve of biological strength which can be gained and spent in a variety of ways. \n\nFertilin can be increased by absorbing cum, typically through oral sex or stored cum. \n\nIf fertilin reaches zero, {PAWN_nameDef} will become very unhappy and may try to obtain some forcefully.
- Genes/Icons/FertilinAlt
- 0
- -2
- 18
-
- Gives fertilin supply.
-
-
-
- fert
-
-
- 0.025
- 1
- 1
-
-
-
- rjw_genes_lifeforce_drain
- fertilin drain
- draining
- Carriers lose an additional 7.5 fertilin per day from biological entropy.
- fertilin
- RJW_Genes.Gene_LifeForceDrain
- Genes/Icons/FertilinDrainAlt
- rjw_genes_lifeforce
- 0.075
- 18
- -1
- 1
- 6
-
-
-
- rjw_genes_pussyhealing
- Pussy Healer
- pussyhealer
- Carriers of this gene are able use vaginal sex to tend to other's wounds.
- Genes/Icons/Healpussy
- rjw_genes_lifeforce
- 9
-
- rjw_genes_ability_pussyheal
-
-
- rjw_genes_ability_pussyheal
-
- 1
- -1
-
-
- life
- pussy
- heal
-
-
-
-
-
- rjw_genes_cockeater
- Cockeater
- cockeater
- Carriers of this gene are able eat cocks to restore their fertilin supply. Cocks are consumed during that process.
- Genes/Icons/cockeater
- rjw_genes_lifeforce
- 11
-
- rjw_genes_ability_cockeater
-
-
- rjw_genes_ability_cockeater
-
- 1
- -1
-
-
- life
- cock
- eat
-
-
-
-
-
- rjw_genes_paralysingkiss
- paralysing kiss
- paralysing kiss
- Carriers of this gene are able to briefly stun an enemy with a kiss.
- Genes/Icons/Paralysing_Kiss
- rjw_genes_lifeforce
- 12
-
- rjw_genes_ability_paralysingkiss
-
-
- rjw_genes_ability_paralysingkiss
-
- 1
- -1
-
-
- stun
- kiss
-
-
-
-
-
- rjw_genes_seduce
- seduction
- seduction
- Carriers of this gene are able to seduce a pawn into having sex with them.
- Genes/Icons/seduce
- rjw_genes_lifeforce
- 13
-
- rjw_genes_ability_seduce
-
-
- rjw_genes_ability_seduce
-
- 1
- -1
-
-
-
- stun
- kiss
-
-
-
-
-
- rjw_genes_naked_prowess
- naked prowess
- Carriers of this gene are able to temporarily increase their strength and resilience, while they are naked.
- Genes/Icons/rjw_naked_prowess
- rjw_genes_lifeforce
- 14
-
- rjw_genes_ability_naked_prowess
-
-
- rjw_genes_ability_naked_prowess
-
- 1
- -1
-
-
-
- rjw_genes_cum_eater
- Cum eater
- Carriers of this gene are able to absorb fertilin through eating cum. This includes oral sex, eating cum for food or sucking out cumflated pawns.
- Genes/Icons/cumeater
- rjw_genes_lifeforce
- 1
- 1
-
-
-
- rjw_genes_fertilin_absorber
- Fertilin Absorber
- Carriers of this gene are able to absorb the fertilin inside sperm through their vagina and anus.
- Genes/Icons/Vaginal_cum_absorption
- rjw_genes_lifeforce
- 2
- 1
-
-
-
- rjw_genes_lifeforce_empath
- empathic lifeforce
- RJW_Genes.Gene_LifeForce_Empath
- Carriers of this gene generate lifeforce if nearby pawns are sexually satisfied. Be careful: Sexually frustrated pawns will make your empath loose lifeforce!
- Genes/Icons/Hypersexual
- rjw_genes_lifeforce
- 3
- 3
- -2
-
-
-
- 0.02
- 0.01
- -0.01
-
-
-
- 2500
-
-
-
- 25
-
-
-
-
-
- rjw_genes_drainer
- vitality drainer
- Carriers of this gene are able to absorb a great amount of fertilin by draining the vitality of the partner. This is done passively through having sex with a non-drained pawn that does not have this gene.
- Genes/Icons/Vitality_Drainer
- rjw_genes_lifeforce
- 4
- 1
- -1
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_Reproduction.xml b/1.4/Defs/GeneDefs/GeneDefs_Reproduction.xml
deleted file mode 100644
index 12eafe5..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_Reproduction.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-
-
-
-
- rjw_genes_hypersexual
- Hypersexuality
- Reproduction
- Xenotypes with this Gene are Hypersexual (Nymphs).
- Genes/Icons/Hypersexual
- 1
-
-
- Nymphomaniac
-
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_rapist
- Rapist
- Reproduction
- Xenotypes with this Gene are Rapists.
- Genes/Icons/Rape
- 1
- 2
-
-
- Rapist
-
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_homosexual
- Homosexual
- Reproduction
- This Gene makes you gay.
- UI\Ideoligions\Universal\RoundC
- 0
- 3
-
-
- Gay
-
-
-
- rjw_genes_sexual_orientation
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_bisexual
- Bisexual
- Reproduction
- Carriers of this Gene are Bisexual.
- UI\Ideoligions\Universal\RoundC
- 0
- 4
-
-
- Bisexual
-
-
-
- rjw_genes_sexual_orientation
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
- rjw_genes_no_sex_need
- Asexual
- Carriers of this gene do not have a sex-need. They can still participate in sex,
- Genes/Icons/Empty
- 5
-
- Sex
-
- -1
- 2
-
-
- rjw_genes_sexual_orientation
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_SexSpecial.xml b/1.4/Defs/GeneDefs/GeneDefs_SexSpecial.xml
deleted file mode 100644
index c3c042f..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_SexSpecial.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
- rjw_genes_special
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_orgasm_rush
- Orgasm Rush
- On orgasm, carriers of this gene get a boost in activity. (rest-need is partially filled)
- 1
- -2
- UI/Memes/FleshPurity
- 1
-
-
-
- rjw_genes_youth_fountain
- Youth Fountain
- Having sex with a carrier of this gene makes the partner slightly younger. (Partner stays adult)
- 2
- -2
- UI/Ideoligions/FireLeaves
- 2
-
-
-
- 60000
- 18
-
-
-
-
-
- rjw_genes_sex_age_drain
- Sexual Age Drain
- Having sex transfers some of the partners life-time to themselves. (Pawn stays adult)
- 2
- -1
- UI/Icons/ColonistBar/Idle
- 3
-
-
-
- 120000
- 18
-
-
-
-
-
- rjw_genes_aphrodisiac_pheromones
- Aphrodisiac Pheromones
- RJW_Genes.Gene_Aphrodisiac_Pheromones
- Pheremones of this pawn induce an incressed sexdrive to others nearby.
- Genes/Icons/Pheromones
- 4
- 1
- 1
-
-
-
-
- 1250
-
-
-
- 25
-
-
-
-
-
- rjw_genes_sexual_mytosis
- Orgasmic Mytosis
-
- Carriers of this gene grow more unstable with ongoing multiple orgasms - climaxing in a process of mytosis. This will result in an (biologically) identical pawn and both twins are set in a regenerative state. Also, the pawn can have multiple orgasms: In a state of higher unstableness, they come quicker.
- UI/Icons/Genes/Gene_PsychicBonding
- 5
- 5
- -5
-
-
-
- rjw_genes_hormonal_saliva
- Hormonal Saliva
- The saliva of this xenotype stimulates growth in penises. Regular contact will lead to noticable growth.
- 2
- -1
- Genes/Icons/Big_Male_Genitalia
- 6
-
-
-
-
- 0.02
- 2.5
-
- 1.05
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml b/1.4/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml
deleted file mode 100644
index d7541e7..0000000
--- a/1.4/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
- rjw_genes_female_only
- Female
- rjw_genes_gender
- This Xenotype only has females.
- 0
- Genes/Icons/Female_Only
- RJW_Genes.Gene_FemaleOnly
- 1
-
-
- AG_Gender
- Gender
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_male_only
- rjw_genes_gender
- Male
- This Xenotype only has males.
- 0
- Genes/Icons/Male_Only
- RJW_Genes.Gene_MaleOnly
- 2
-
-
- AG_Gender
- Gender
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
- rjw_genes_gender_fluid
- rjw_genes_gender
- Gender Fluid
- Everyday carriers of this gene might change their biological sex.
- 0
- Genes/Icons/Futa
- RJW_Genes.Gene_GenderFluid
- 2
-
-
- 0.9
-
-
- AG_Gender
- Gender
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
- 120000
- 0.25
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/Xenotype_Hive.xml b/1.4/Defs/GeneDefs/Xenotype_Hive.xml
deleted file mode 100644
index bca30ab..0000000
--- a/1.4/Defs/GeneDefs/Xenotype_Hive.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
-
-
- rjw_genes_halamyr_queen_xenotype
- Halamyr Queen
- Genes/Icons/Xenotypes/Xenotype-Queen
- false
- false
-
- The Halamyr are a race of insect-xenotypes living in a caste-system. On top of the caste, the queens are the centerpiece of any hive. They are the only Halamyr that can produce drones, or mass-produce workers. A hive can virtually not live without a queen - without their royalty the drones and workers are irritated and receive sever penalties. Queens are very fragile and need to be kept safe and in best conditions.
- The fragile queens of the Halamyr are the center of the hives reproduction. Multiple queens, or and absence of a queen, can cause to fall the best hive into disarray real quick.
-
-
- AG_LargerBodySize
- AG_InsectBlood
- AG_InsectJellyProduction
- AG_SurvivalInstinct_Low
- WoundHealing_Slow
- PsychicAbility_Extreme
- MoveSpeed_Slow
- FireTerror
- MeleeDamage_Weak
- Sleepy
- Delicate
- rjw_genes_hypersexual
- rjw_genes_bisexual
- Libido_High
- Beauty_Beautiful
- AG_OutwardsAntennas
- Skin_DeepRed
- Learning_Fast
- rjw_genes_fervent_ovipositor
- AptitudeTerrible_Shooting
- AptitudeTerrible_Melee
- AptitudeRemarkable_Social
- AptitudeRemarkable_Sex
- rjw_genes_female_only
- rjw_genes_ovipositor_genitalia
- rjw_genes_aphrodisiac_pheromones
- rjw_genes_queen
- rjw_genes_cocoonweaver
- rjw_genes_spawn_spelopede
-
-
-
-
- rjw_genes_halamyr_hiveguard_xenotype
- Halamyr Hiveguard
- Genes/Icons/Xenotypes/Xenotype-Guard
-
- 1.5
- false
-
- The Halamyr hiveguards are the bastion to protect the hive. Next to the walls, these meele specialists form the ultimate guard for the queen, for which they'd give their lifes. Their tuned bodies come with a price, crippling them for social interactions and increased hunger.
- Frontline of the Halamyr, guards of the hive, specialised in meele combat. Heavily handicapped without a queen.
-
-
- AG_InsectBlood
- AG_EfficientMandibles
- Immunity_Strong
- WoundHealing_Fast
- MoveSpeed_Quick
- FireTerror
- MeleeDamage_Strong
- KillThirst
- LowSleep
- AG_WaspWings
- Hair_ShortOnly
- AG_DownwardsAntennas
- Hair_DarkBlack
- Skin_DeepRed
- AG_FeraliskEyes
- AptitudeTerrible_Shooting
- AptitudeRemarkable_Melee
- AptitudePoor_Construction
- AptitudePoor_Cooking
- AptitudePoor_Plants
- AptitudePoor_Crafting
- AptitudeTerrible_Artistic
- AptitudeTerrible_Medicine
- AptitudePoor_Social
- rjw_genes_male_only
- rjw_genes_ovipositor_genitalia
- rjw_genes_drone
- rjw_genes_zealous_loyalty
-
-
-
-
- rjw_genes_halamyr_breeder_xenotype
- Halamyr Breeder
- Genes/Icons/Xenotypes/Xenotype-Breeder
- false
- false
- 0.8
-
- The Halamyr breeders are the backbone of the hive. Their special genes allow them to carry more eggs and hatch them faster, enabling a steady output of hivelings. To support their position in the hive, breeders spend most of their life in the queens cocoon, a task which they gladly accept.
- Made for incubating Halamyr eggs, breeders spend most of their life in the queens cocoon.
-
-
- AG_Spinnerets
- AG_InsectBlood
- AG_InsectJellyProduction
- AG_FormicAntennas
- Fertile
- AG_FastGestation
- FireTerror
- VerySleepy
- rjw_genes_bisexual
- Skin_DeepRed
- AptitudeStrong_Social
- rjw_genes_drone
- rjw_genes_female_only
- rjw_genes_zealous_loyalty
- rjw_genes_insectincubator
- rjw_genes_zoophile
- rjw_genes_no_vagina
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/GeneDefs/Xenotype_Lifeforce.xml b/1.4/Defs/GeneDefs/Xenotype_Lifeforce.xml
deleted file mode 100644
index 608a2f4..0000000
--- a/1.4/Defs/GeneDefs/Xenotype_Lifeforce.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
-
- rjw_genes_succubus
- Succubus
- Succubi are strongly enhanced xenohumans. These overnaturally beautiful creatures strive parasitically on the Fertilin found in semen.
- Succubi are beautiful and extremely hungry Xenohumans. They strive on having sex and extracting their victims life-force through this.
- Genes/Icons/Xenotypes/Xenotype-Succubus
- PawnBecameSanguophage
- 0.5
- 0.1~140
- 1
- -1000
- 0.005
- false
-
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
-
-
- rjw_genes_bisexual
- rjw_genes_hypersexual
- rjw_genes_female_only
- rjw_genes_lifeforce
- rjw_genes_lifeforce_drain
- rjw_genes_demonic_genitalia
-
- rjw_genes_cum_eater
- rjw_genes_fertilin_absorber
-
- rjw_genes_paralysingkiss
- rjw_genes_seduce
- AptitudeRemarkable_Sex
-
- DominantGene
- rjw_genes_elasticity
- rjw_genes_succubus_wings
- rjw_genes_succubus_tail
- rjw_genes_aphrodisiac_pheromones
- Beauty_Pretty
- MoveSpeed_Quick
- AptitudeStrong_Social
- Ears_Pointed
- Headbone_MiniHorns
- Skin_Purple
-
-
-
-
- rjw_genes_incubus
- Incubus
- Incubi are strongly enhanced xenohumans. These overnaturally beautiful creatures strive parasitically on the Fertilin found in semen.
- Incubi are beautiful and extremely hungry Xenohumans. They strive on having sex and extracting their victims life-force through this.
- Genes/Icons/Xenotypes/Xenotype-Incubus
- PawnBecameSanguophage
- 0.5
- 0.1~140
- 1
- -1000
- 0.005
- false
-
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
-
-
- rjw_genes_hypersexual
- rjw_genes_male_only
- rjw_genes_lifeforce
- rjw_genes_lifeforce_drain
- rjw_genes_drainer
- rjw_genes_demonic_genitalia
-
- AptitudeRemarkable_Sex
-
-
- DominantGene
- rjw_genes_seduce
- rjw_genes_succubus_wings
- rjw_genes_succubus_tail
- rjw_genes_aphrodisiac_pheromones
-
- Beauty_Pretty
- MoveSpeed_Quick
- Robust
- UVSensitivity_Intense
- AptitudeStrong_Intellectual
- Ears_Pointed
- Headbone_CenterHorn
- Skin_InkBlack
-
-
-
-
- rjw_genes_cumazone
- Cumazone
- Cumazone are a female only xenotype that excel at meele combat. Originally created as bodyguards for glitterworld amazon communities, they spred to other systems by mere strength and providing for some fetishes. They can use Fertilin to enhance their skin to overpower any combatant in meele. Their only source for Fertilin is biting of male genitalia - so be sure to have a steady supply of victim males or prepare to raid unsuspecting men of the rim.
- Female only, strong meele fighters, that use Fertilin from bitten-off cocks for powerful buffs.
- Genes/Icons/Xenotypes/Xenotype-Cumazon
- 0.5
- 0.1~140
- 2.5
- -1000
- 0.01
- false
-
- WoundHealing_Fast
- NakedSpeed
- Aggression_Aggressive
- MeleeDamage_Strong
- KillThirst
- Robust
- Pain_Reduced
- Beauty_Ugly
- Hair_BaldOnly
- Hair_ShortOnly
- Brow_Heavy
- Body_Hulk
- AptitudeStrong_Shooting
- AptitudeRemarkable_Melee
- AptitudePoor_Crafting
- AptitudePoor_Artistic
- Unstoppable
- rjw_genes_rapist
- rjw_genes_female_only
- rjw_genes_lifeforce
- rjw_genes_lifeforce_drain
- rjw_genes_pussyhealing
- rjw_genes_cockeater
- rjw_genes_naked_prowess
- rjw_genes_orgasm_rush
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/HediffDefs/Hediffs_Fertilin.xml b/1.4/Defs/HediffDefs/Hediffs_Fertilin.xml
deleted file mode 100644
index fdca8d4..0000000
--- a/1.4/Defs/HediffDefs/Hediffs_Fertilin.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
- rjw_genes_fertilin_lost
- Hediff_HemogenCraving
- lost fertilin
- Percentage of fertilin lost.
- (1,1,1)
- 1
-
-
- -0.5
-
-
-
-
- true
-
-
-
-
-
- rjw_genes_succubus_drained
- HediffWithComps
- Drained
- The vitality of this pawn has been drained. Cannot be drained again until fully recovered.
- (1,0,0.5)
- 1.0
- 1.0
-
-
- -0.25
-
-
-
-
- minor
-
-
- Consciousness
- -0.1
-
-
- 0.1
-
- -0.1
-
-
-
- 0.5
- moderate
-
-
- Consciousness
- -0.2
-
-
- 0.05
- 0.20
-
- -0.1
-
-
-
- 0.8
- severe
-
-
- Consciousness
- -0.3
-
-
-
- -0.2
-
- 0.4
- 0.1
- 0.35
-
-
-
-
-
- rjw_genes_fertilin_craving
- fertilin craving
- Hediff_HemogenCraving
- weakened due to running out of fertilin.
- (1,0,0.5)
- 1.0
- 0.01
-
-
- minor
- 0.05
-
-
- Consciousness
- 0.9
-
-
-
-
- moderate
- 0.35
- 0.1
-
-
- Consciousness
- 0.8
-
-
-
-
- major
- 0.7
- 0.15
-
-
- Consciousness
- 0.5
-
-
-
-
-
-
- 0.05
- -0.1
-
-
-
-
-
- rjw_genes_naked_prowess
- naked prowss
- 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
-
-
-
diff --git a/1.4/Defs/HediffDefs/Hediffs_OrgasmRush.xml b/1.4/Defs/HediffDefs/Hediffs_OrgasmRush.xml
deleted file mode 100644
index f68663f..0000000
--- a/1.4/Defs/HediffDefs/Hediffs_OrgasmRush.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
- rjw_genes_orgasm_rush_hediff
- HediffWithComps
- Orgasm Rush
- Xenotypes with this Gene are pushed beyond normal limits when they have an orgasm.
- (240,200,110)
- false
- 1.0
- false
- false
-
-
- -0.75
-
-
-
-
- pumped
-
- 4
- 4
-
-
-
- Consciousness
- 0.05
-
-
-
-
- charged
- 0.4
-
- 8
- 8
-
-
-
- Moving
- 0.08
-
-
- Consciousness
- 0.08
-
-
-
-
- super-charged
- 0.7
-
- 10
- 10
-
-
-
- Moving
- 0.1
-
-
- Consciousness
- 0.1
-
-
- BloodPumping
- 0.1
-
-
-
-
-
-
-
-
-
diff --git a/1.4/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml b/1.4/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml
deleted file mode 100644
index 884bd6a..0000000
--- a/1.4/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
- rjw_genes_default_hive_offspring_chances
- default
-
- 0.02
- 0.48
- 0.5
-
-
-
-
- rjw_genes_test_queen_offspring_chances
- rjw_genes_test_queen_xenotype
-
- 0.02
- 0.28
- 0.7
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/JobDefs/Jobs_LifeForce.xml b/1.4/Defs/JobDefs/Jobs_LifeForce.xml
deleted file mode 100644
index 13dd1e3..0000000
--- a/1.4/Defs/JobDefs/Jobs_LifeForce.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
- rjw_genes_lifeforce_randomrape
- rjw.JobDriver_RandomRape
- Raping
- false
-
-
-
- rjw_genes_lifeforce_healpussy
- RJW_Genes.JobDriver_CastAbilityAfterSex
- Tending someones wounds with sex.
- false
-
-
-
- rjw_genes_lifeforce_seduced
- RJW_Genes.JobDriver_Seduced
- Seduced.
- false
- false
-
-
-
- rjw_genes_flirt
- RJW_Genes.JobDriver_Flirt
- Seduced.
- false
-
-
\ No newline at end of file
diff --git a/1.4/Defs/JobDefs/Jobs_SexOnSpot.xml b/1.4/Defs/JobDefs/Jobs_SexOnSpot.xml
deleted file mode 100644
index e904f3e..0000000
--- a/1.4/Defs/JobDefs/Jobs_SexOnSpot.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- sex_on_spot
- RJW_Genes.JobDriver_SexOnSpot
- Making love on the spot.
- false
-
-
-
- sex_on_spot_reciever
- RJW_Genes.JobDriver_SexOnSpotReciever
- lovin'.
- false
-
-
\ No newline at end of file
diff --git a/1.4/Defs/PawnKindDefs/PawnKind_LifeForce.xml b/1.4/Defs/PawnKindDefs/PawnKind_LifeForce.xml
deleted file mode 100644
index 9d48cdc..0000000
--- a/1.4/Defs/PawnKindDefs/PawnKind_LifeForce.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
- rjw_genes_succubus
- succubus
- 50
- Human
-
-
- 999
-
-
- 0.5
- false
- 18
- 27
- Poor
- 0.0
- false
-
- 0.3
- 0.9
-
- true
-
- Tribal
-
-
- 0
- 0
-
- 0
-
- 0
- 0
-
-
- Poor
-
- 0.0
- 2~4
- 28~44
-
-
-
- rjw_genes_incubus
- succubus
- 50
- Human
-
-
- 999
-
-
- 0.5
- false
- 18
- 27
- Poor
- 0.0
- false
-
- 0.3
- 0.9
-
- true
-
- Tribal
-
-
- 0
- 0
-
- 0
-
- 0
- 0
-
-
- Poor
-
- 0.0
- 2~4
- 28~44
-
-
\ No newline at end of file
diff --git a/1.4/Defs/QueenWorkerMappingDefs/QueenWorkerMappingDefs_base.xml b/1.4/Defs/QueenWorkerMappingDefs/QueenWorkerMappingDefs_base.xml
deleted file mode 100644
index 1ccfebd..0000000
--- a/1.4/Defs/QueenWorkerMappingDefs/QueenWorkerMappingDefs_base.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
- rjw_genes_default_worker_genes
- default
-
- StrongStomach
- AG_FasterAging
- PsychicAbility_Dull
- FireTerror
- Sterile
- AptitudeTerrible_Intellectual
- rjw_genes_featureless_chest
- rjw_genes_worker
- rjw_genes_zealous_loyalty
-
-
-
-
- rjw_genes_halamyr_queen_worker_mapping
- rjw_genes_halamyr_queen_xenotype
-
- AG_SmallerBodySize
- StrongStomach
- AG_EfficientMandibles
- AG_FasterAging
- PsychicAbility_Dull
- FireTerror
- Sterile
- AG_FormicAntennas
- Skin_DeepRed
- AptitudeTerrible_Intellectual
- rjw_genes_featureless_chest
- rjw_genes_worker
- rjw_genes_zealous_loyalty
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/Scenarios/Halamyr_Hive.xml b/1.4/Defs/Scenarios/Halamyr_Hive.xml
deleted file mode 100644
index 1673a15..0000000
--- a/1.4/Defs/Scenarios/Halamyr_Hive.xml
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
-
- rjw_genes_scenario_halamyr_hive
- Halamyr Hive
- A young queen set out to build a new hive. After a long path, a suitable place is found to generate new offspring. DEVNOTE: Try to choose a high-food biome to keep up with the Hive!
-
- A Halamyr queen set out to build a new hive.
-
- PlayerFaction
- PlayerTribe
-
-
-
-
-
-
- ConfigurePawnsXenotypes
- 4
- Start with a set of Halamyr Xenotypes and one other colonist of any age.
-
-
-
- rjw_genes_halamyr_queen_xenotype
- 1
- non-baby halamyr queen
- true
- Adult
-
-
-
- rjw_genes_halamyr_hiveguard_xenotype
- 1
- non-baby halamyr hiveguard
- true
- Adult
-
-
-
- rjw_genes_halamyr_breeder_xenotype
- 1
- adulthalamyr breeder
- true
- Adult
-
-
-
- Baseliner
- 2
-
-
-
-
-
-
- PlayerPawnsArriveMethod
- Standing
-
-
-
-
- ForcedHediff
- false
- PlayerStarter
- 0.5
- Malnutrition
- 0.1~0.2
-
-
- SetNeedLevel
- false
- PlayerStarter
- 1.0
- Food
- 0.3~0.8
-
-
-
-
- StartingThing_Defined
- Silver
- 300
-
-
- StartingThing_Defined
- Pemmican
- 350
-
-
- StartingThing_Defined
- InsectJelly
- 300
-
-
- StartingThing_Defined
- MedicineHerbal
- 30
-
-
- StartingThing_Defined
- MeleeWeapon_Club
- WoodLog
-
-
-
- StartingAnimal
- Spelopede
- 2
-
-
- StartingAnimal
- Megascarab
- 3
- 1.0
-
-
-
- StartingAnimal
- Megaspider
- 1
-
-
-
-
- ScatterThingsNearPlayerStart
- WoodLog
- 500
-
-
- ScatterThingsNearPlayerStart
- Jade
- 100
-
-
-
- ScatterThingsNearPlayerStart
- Pemmican
- 150
-
-
- ScatterThingsNearPlayerStart
- Steel
- 200
-
-
-
-
- GameStartDialog
- After a long journey, this is it: \n\nThis is the right place to start the new hive. Spin in your breeders, build your defenses and start mating.\n\nMake this a place worthy for a queen.
- GameStartSting
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Defs/ThoughtDefs/Thoughts_Hive.xml b/1.4/Defs/ThoughtDefs/Thoughts_Hive.xml
deleted file mode 100644
index 8a232b3..0000000
--- a/1.4/Defs/ThoughtDefs/Thoughts_Hive.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
- rjw_genes_rival_queen_mood
- RJW_Genes.Thoughtworker_RivalQueen_Mood
- false
-
-
- Rivaled
- There is another queen nearby!
- -70
-
-
-
-
-
-
- rjw_genes_rival_queen_social
- Thought_SituationalSocial
- RJW_Genes.Thoughtworker_RivalQueen_Social
-
-
- rivals me
- {0} threatens my dominion. {0} must be perished.
- -130
-
-
-
-
-
- rjw_genes_queen_despises_workers_social
- Thought_SituationalSocial
- RJW_Genes.ThoughtWorker_WorkerDespised_Social
-
-
- underling
- those workers are not even worth a glance.
- -20
-
-
-
-
-
-
- rjw_genes_multiple_queens_mood
- RJW_Genes.Thoughtworker_MultipleQueens_Mood
- false
-
-
- Confused Servitude
- I have too many queens around me!
- -30
-
-
-
-
-
-
- rjw_genes_queen_loyalty_social
- Thought_SituationalSocial
- RJW_Genes.Thoughtworker_QueenPresent_Social
-
-
- Worship
- {0} is my queen. My one and only reason to live.
- +80
-
-
-
-
-
-
- rjw_genes_no_queen_mood
- RJW_Genes.Thoughtworker_QueenAbsent_Mood
- false
-
-
- Missing Queen
- We do not have a queen! How are we suppossed to face the cruelties of the world without a shepherd?
- -20
-
-
-
-
-
-
- rjw_genes_queen_present_mood
- RJW_Genes.Thoughtworker_QueenPresent_Mood
- false
-
-
- Queen Present
- Our queen is so wonderful.
- +10
-
-
-
-
-
diff --git a/1.4/Defs/ThoughtDefs/Thoughts_Special.xml b/1.4/Defs/ThoughtDefs/Thoughts_Special.xml
deleted file mode 100644
index b669317..0000000
--- a/1.4/Defs/ThoughtDefs/Thoughts_Special.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
- rjw_genes_pheromone_carrier_nearby
- Thought_SituationalSocial
- RJW_Genes.ThoughtWorker_Aphrodisiac_Pheromones_Social
-
-
- Pheromones
- {0} has a special vibe, we should hang out more often.
- +3
-
-
-
-
-
diff --git a/1.4/Defs/TipSetDefs/Tips.xml b/1.4/Defs/TipSetDefs/Tips.xml
deleted file mode 100644
index 7147147..0000000
--- a/1.4/Defs/TipSetDefs/Tips.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
- RJWGenesTips
-
-
- Succubi and Incubi can spawn at a rare event when a horny pawn is sleeping alone in the night.
-
- Cumazones need to regularly bite of cocks. This hunger can be stilled by animals - but they will need much more this way!
-
- Succubi drain Fertilin through sex. The drained pawn will give less Fertilin in consequent acts until they are recovered.
-
- Incubi 'tap' pawns they have sex with to gain fertilin. Incubi cannot gain further Fertilin this way until the pawn is fully recovered.
-
- The Xenotypes added by RJW_Genes require a lot of human resources - have yourself a big colony or lots of prisoners before you keep their company!
-
- Succubi receive their fertilin from cum. Make sure to have enough juice around to keep them happy.
-
- The gene 'cumeater' allows you to drain cumflation by cunnilingus. ... Cool, huh?
-
- Some animals carry rare genes - you can try to breed them and create your own super-hybrids! (No warranty provided for cat girls or genetic waste)
-
- The Settings for Animal-Gene Inheritance are distributed between RJW-Pregnancy-Settings and their own Mod-Options.
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Languages/English/Keyed/Dialog_StatsReport.xml b/1.4/Languages/English/Keyed/Dialog_StatsReport.xml
deleted file mode 100644
index 53837f8..0000000
--- a/1.4/Languages/English/Keyed/Dialog_StatsReport.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
- queen in proximity
- queen absent
- multiple queens present
-
-
\ No newline at end of file
diff --git a/1.4/Languages/English/Keyed/Hive.xml b/1.4/Languages/English/Keyed/Hive.xml
deleted file mode 100644
index 60cff64..0000000
--- a/1.4/Languages/English/Keyed/Hive.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- New Queen
- A new Queen was born! Make sure to adress inheritance before the new queen reaches adolesence.
-
-
\ No newline at end of file
diff --git a/1.4/Patches/Xenotypes/PatchAlphaGenes.xml b/1.4/Patches/Xenotypes/PatchAlphaGenes.xml
deleted file mode 100644
index 33622b0..0000000
--- a/1.4/Patches/Xenotypes/PatchAlphaGenes.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_Fleetkind"]/genes
-
- rjw_genes_slime_genitalia
- rjw_genes_elasticity
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_Helixien"]/genes
-
- rjw_genes_slime_genitalia
- rjw_genes_elasticity
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_Taukai"]/genes
-
- rjw_genes_sexual_mytosis
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_MindDevourer"]/genes
-
- rjw_genes_demonic_genitalia
- rjw_genes_sex_age_drain
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_Lapis"]/genes
-
- rjw_genes_big_breasts
- rjw_genes_no_cum
- rjw_genes_big_male_genitalia
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_Efreet"]/genes
-
- rjw_genes_demonic_genitalia
- rjw_genes_small_breasts
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_Drakonori"]/genes
-
- rjw_genes_dragon_genitalia
- rjw_genes_big_male_genitalia
- rjw_genes_aphrodisiac_pheromones
- rjw_genes_big_breasts
-
-
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="AG_Animusen"]/genes
-
- rjw_genes_canine_genitalia
-
-
-
-
-
-
- Alpha Genes
-
-
-
- Vanilla Races Expanded - Sanguophage
-
-
- Defs/XenotypeDef[defName="AG_Malachai"]/genes
-
- rjw_genes_demonic_genitalia
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Patches/Xenotypes/PatchVREPhytokin.xml b/1.4/Patches/Xenotypes/PatchVREPhytokin.xml
deleted file mode 100644
index d58226c..0000000
--- a/1.4/Patches/Xenotypes/PatchVREPhytokin.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
- Vanilla Races Expanded - Phytokin
-
-
- Defs/XenotypeDef[defName="VRE_Poluxkin"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_elasticity
- rjw_genes_bisexual
-
-
-
-
-
- Vanilla Races Expanded - Phytokin
-
-
- Defs/XenotypeDef[defName="VRE_Gauranlenkin"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_elasticity
- rjw_genes_bisexual
-
-
-
-
-
-
- Vanilla Races Expanded - Phytokin
-
-
- Defs/XenotypeDef[defName="VRE_Animakin"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_elasticity
- rjw_genes_bisexual
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Patches/Xenotypes/PatchVRESanguophage.xml b/1.4/Patches/Xenotypes/PatchVRESanguophage.xml
deleted file mode 100644
index 14c581e..0000000
--- a/1.4/Patches/Xenotypes/PatchVRESanguophage.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
- Vanilla Races Expanded - Sanguophage
-
-
- Defs/XenotypeDef[defName="VRE_Bruxa"]/genes
-
- rjw_genes_demonic_genitalia
-
-
-
-
-
- Vanilla Races Expanded - Sanguophage
-
-
- Defs/XenotypeDef[defName="VRE_Ekkimian"]/genes
-
- rjw_genes_demonic_genitalia
-
-
-
-
-
-
- Vanilla Races Expanded - Sanguophage
-
-
- Defs/XenotypeDef[defName="VRE_Strigoi"]/genes
-
- rjw_genes_demonic_genitalia
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Patches/Xenotypes/PatchXenotech.xml b/1.4/Patches/Xenotypes/PatchXenotech.xml
deleted file mode 100644
index 846cb3a..0000000
--- a/1.4/Patches/Xenotypes/PatchXenotech.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
- [LTS]Xenotech
-
-
- Defs/XenotypeDef[defName="LTS_Nyankind"]/genes
-
- rjw_genes_feline_genitalia
-
-
-
-
-
- [LTS]Xenotech
-
-
- Defs/XenotypeDef[defName="LTS_Growler"]/genes
-
- rjw_genes_canine_genitalia
-
-
-
-
-
-
- [LTS]Xenotech
-
-
- Defs/XenotypeDef[defName="LTS_Elfin"]/genes
-
- rjw_genes_small_male_genitalia
- rjw_genes_tight_female_genitalia
-
-
-
-
-
-
- [LTS]Xenotech
-
-
- Defs/XenotypeDef[defName="LTS_Ork"]/genes
-
- rjw_genes_big_male_genitalia
- rjw_genes_loose_female_genitalia
-
-
-
-
-
-
- [LTS]Xenotech
-
-
- Defs/XenotypeDef[defName="LTS_Lilime"]/genes
-
- rjw_genes_demonic_genitalia
- rjw_genes_elasticity
- AptitudeRemarkable_Sex
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/README.md b/1.4/README.md
deleted file mode 100644
index 6c427df..0000000
--- a/1.4/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# RJW-Genes [NSFW]
-
-This mod adds genes related and based on RJW to Rimworld.
-
-## Current Features
-
-- Different Genitalia Types
-- Genitalia Size Scaling
-- Extra Genitalia (and a Futa Attempt)
-- Most RJW Traits, Cumflation Immunity, Elasticity
-- Cum-Amount Changes, Transfer Nutrition Boosts
-- Mech Breeding / Insect Breeding Additions & Orgasmic Mytosis
-- Human-Animal Gene Inheritance merged from [Shabakur](https://github.com/Shabakur/RJW_Animal_Gene_Inheritance)
-- Succubi, Incubi & Cumazones that utilize Fertilin, similar to Hemogen
-- Insect-Caste Mechanics, with Queens, Drones and Workers and a conditional reproduction
-- Patches for some popular / common Xenotypes from other Mods.
-
-See [planned things](TODOS.md) and feel free to contribute.
-With the Human-Animal-Gene Inheritance we have a lot of XML that you can contribute!
-We have a [template](./Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml) and you can add animals and/or genes from mods there (Racegroups are base-rjw).
-If you want to make your own Hive-Xenotypes, please see the required XMLs at [Changelog - 1.2](./CHANGELOG.md).
-
-## Bugs?
-
-I never wrote a bug in my life but if you found one please open an issue or find me somewhere on the RJW Discord.
-
-Please consider looking at [the known bugs](./KNOWN_BUGS.md)
-
-## Genes vs. Races
-
-I currently don't use Races after Biotech was introduced.
-One of the main motivations was to have genes being added to the xenotypes that other mods and the base game add, e.g. adding demonic penis for impids.
-
-Some HAR races change sex-ages and behave unfriendly with this mod.
-You can make reports about that, but I might not fix it.
-
-## Load Order, Dependencies and Conflicts
-
-Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience).
-
-**Conflicts:**
-1. Should not be used with the original RJW_Animal_Gene_Inheritance anymore.
-2. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
-3. CAI5000 will not crash, but will make *Seduce*-Ability fail. I think same goes for Combat Extended.
-4. Alpha Genes "Female / Male Only" Genes might overwrite later Genitalia-Changes and should be avoided in combination with RJW-Genes features.
-5. rjw.sexperience.cumgenes removes fertilin-gain from Cum item - I hope I addressed this by adding a load order but keep me posted (Issue #41)
-6. [Consistent Gene Inheritance](https://steamcommunity.com/sharedfiles/filedetails/?id=2881479142&searchtext=Consistent+Gene+Inheritance) alters inheritance - it messes a bit with the Insect-Caste Logic. Your game will not crash, but the insect xenotypes will be a bit messed up.
\ No newline at end of file
diff --git a/1.4/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs b/1.4/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs
deleted file mode 100644
index c5f6366..0000000
--- a/1.4/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HarmonyLib;
-using RimWorld;
-using Verse;
-using rjw;
-
-namespace RJW_BGS
-{
- [HarmonyPatch(typeof(Hediff_BasePregnancy), "Initialize")]
- public static class Patch_RJW_BestialityPregnancyUtility
- {
- [HarmonyPostfix]
- public static void AddGenes(Pawn mother, Pawn dad, ref Hediff_BasePregnancy __instance)
- {
- if (!RJW_BGSSettings.rjw_bgs_enabled)
- {
- return;
- }
- foreach (Pawn baby in __instance.babies)
- {
- if (baby.RaceProps.Humanlike)
- {
- if (baby.genes == null)
- {
- baby.genes = new Pawn_GeneTracker(baby);
- }
-
-
- //Remove the hair and skin genes pawns always start with, should get correct ones from human parent anyway.
- for (int i = baby.genes.Endogenes.Count - 1; i >= 0; i--)
- {
- baby.genes.RemoveGene(baby.genes.Endogenes[i]);
- }
-
- List humangenes = PregnancyUtility.GetInheritedGenes(dad, mother);
- List beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
- InheritanceUtility.AddGenes(baby, beastgenes);
- InheritanceUtility.AddGenes(baby, humangenes);
-
- // The mix-breed babies should be labelled hybrids
- baby.genes.hybrid = true;
- baby.genes.xenotypeName = "Hybrid";
- }
- }
- }
- }
-}
diff --git a/1.4/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs b/1.4/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
deleted file mode 100644
index d619354..0000000
--- a/1.4/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using UnityEngine;
-
-namespace RJW_BGS
-{
- public class RJW_BGSSettings : ModSettings
- {
- public static void DoWindowContents(Rect inRect)
- {
- //Copied from RJW settings mostly
- Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f);
- Rect rect = new Rect(0f, 0f, inRect.width - 16f, inRect.height + 300f);
- //Widgets.BeginScrollView(outRect, ref RJWSettings.scrollPosition, rect, true);
- Listing_Standard listing_Standard = new Listing_Standard();
- listing_Standard.maxOneColumn = true;
- listing_Standard.ColumnWidth = rect.width / 2.05f;
- listing_Standard.Begin(rect);
- listing_Standard.Gap(24f);
- listing_Standard.CheckboxLabeled("enabled", ref rjw_bgs_enabled, "If toggled, Animal Pregnancies will try inherit genes.", 0f, 1f);
- //listing_Standard.CheckboxLabeled("sexfrenzy", ref sexfrenzy, "disable the effects", 0f, 1f);
- listing_Standard.Gap(5f);
- listing_Standard.Label("gene inheritance chance"+ ": " +
- Math.Round((double)(RJW_BGSSettings.rjw_bgs_global_gene_chance * 100f), 0).ToString() + "%", -1f, "modify chance for a gene to be inherited.");
- RJW_BGSSettings.rjw_bgs_global_gene_chance = listing_Standard.Slider(RJW_BGSSettings.rjw_bgs_global_gene_chance, 0f, 5f);
- listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("genes as xenogenes", ref rjw_bgs_animal_genes_as_xenogenes, "If toggled, animal genes will be added as xenogenes.", 0f, 1f);
- listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("detailed-debug", ref rjw_bgs_detailed_debug, "Adds detailed information to the log about pregnancies and genes.", 0f, 1f);
- listing_Standard.End();
- }
-
- public override void ExposeData()
- {
- base.ExposeData();
- Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_enabled, "rjw_bgs_enabled", RJW_BGSSettings.rjw_bgs_enabled, true);
- Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_global_gene_chance, "rjw_bgs_global_gene_chance", RJW_BGSSettings.rjw_bgs_global_gene_chance, true);
- Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, "rjw_bgs_animal_genes_as_xenogenes", RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, true);
- Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_detailed_debug, "rjw_bgs_detailed_debug", RJW_BGSSettings.rjw_bgs_detailed_debug, true);
- }
-
- public static float rjw_bgs_global_gene_chance = 1f;
- public static bool rjw_bgs_enabled = true;
- public static bool rjw_bgs_animal_genes_as_xenogenes = false;
- public static bool rjw_bgs_detailed_debug = false;
- }
-}
diff --git a/1.4/Source/Common/ModLog.cs b/1.4/Source/Common/ModLog.cs
deleted file mode 100644
index 407520a..0000000
--- a/1.4/Source/Common/ModLog.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Verse;
-
-namespace RJW_Genes
-{
- internal class ModLog
- {
- public static string ModId => "RJW-Genes";
-
- ///
- /// Logs the given message with [SaveStorage.ModId] appended.
- ///
- public static void Error(string message)
- {
- Log.Error($"[{ModId}] {message}");
- }
-
- ///
- /// Logs the given message with [SaveStorage.ModId] appended.
- ///
- public static void Message(string message)
- {
- Log.Message($"[{ModId}] {message}");
- }
-
- ///
- /// Logs the given message with [SaveStorage.ModId] appended.
- ///
- public static void Warning(string message)
- {
- Log.Warning($"[{ModId}] {message}");
- }
-
- }
-}
diff --git a/1.4/Source/GeneDefOf.cs b/1.4/Source/GeneDefOf.cs
deleted file mode 100644
index f016e97..0000000
--- a/1.4/Source/GeneDefOf.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using RimWorld;
-using Verse;
-using Verse.AI;
-namespace RJW_Genes
-{
- [DefOf]
- public static class GeneDefOf
- {
- public static readonly GeneCategoryDef rjw_genes_genitalia_type;
- public static readonly GeneCategoryDef rjw_genes_genitalia_size;
- public static readonly GeneCategoryDef rjw_genes_gender;
- public static readonly GeneCategoryDef rjw_genes_breeding;
- public static readonly GeneCategoryDef rjw_genes_damage;
- public static readonly GeneCategoryDef rjw_genes_special;
-
- // Base Genitalia Types
- public static readonly GeneDef rjw_genes_equine_genitalia;
- public static readonly GeneDef rjw_genes_demonic_genitalia;
- public static readonly GeneDef rjw_genes_dragon_genitalia;
- public static readonly GeneDef rjw_genes_slime_genitalia;
- public static readonly GeneDef rjw_genes_ovipositor_genitalia;
- public static readonly GeneDef rjw_genes_feline_genitalia;
- public static readonly GeneDef rjw_genes_canine_genitalia;
-
- // Extra Genitalia
- public static readonly GeneDef rjw_genes_extra_penis;
- public static readonly GeneDef rjw_genes_no_penis;
- public static readonly GeneDef rjw_genes_extra_vagina;
- public static readonly GeneDef rjw_genes_no_vagina;
- public static readonly GeneDef rjw_genes_extra_breasts;
- public static readonly GeneDef rjw_genes_no_breasts;
- public static readonly GeneDef rjw_genes_extra_anus;
- public static readonly GeneDef rjw_genes_no_anus;
- public static readonly GeneDef rjw_genes_futa;
- public static readonly GeneDef rjw_genes_featureless_chest;
-
- // Genitalia Sizes
- public static readonly GeneDef rjw_genes_big_male_genitalia;
- public static readonly GeneDef rjw_genes_small_male_genitalia;
- public static readonly GeneDef rjw_genes_loose_female_genitalia;
- public static readonly GeneDef rjw_genes_tight_female_genitalia;
- public static readonly GeneDef rjw_genes_big_breasts;
- public static readonly GeneDef rjw_genes_small_breasts;
- public static readonly GeneDef rjw_genes_loose_anus;
- public static readonly GeneDef rjw_genes_tight_anus;
- public static readonly GeneDef rjw_genes_evergrowth;
-
- // Gender
- public static readonly GeneDef rjw_genes_female_only;
- public static readonly GeneDef rjw_genes_male_only;
- public static readonly GeneDef rjw_genes_gender_fluid;
-
- // Breeding
- public static readonly GeneDef rjw_genes_mechbreeder;
- public static readonly GeneDef rjw_genes_insectincubator;
- public static readonly GeneDef rjw_genes_insectbreeder;
- public static readonly GeneDef rjw_genes_zoophile;
-
- // 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;
-
- // Reproduction
- public static readonly GeneDef rjw_genes_hypersexual;
- public static readonly GeneDef rjw_genes_rapist;
- public static readonly GeneDef rjw_genes_homosexual;
- public static readonly GeneDef rjw_genes_bisexual;
- public static readonly GeneDef rjw_genes_no_sex_need;
-
- // Damage & Side Effects
- [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_elasticity;
- public static readonly GeneDef rjw_genes_unbreakable;
-
- // Special
- public static readonly GeneDef rjw_genes_orgasm_rush;
- public static readonly GeneDef rjw_genes_youth_fountain;
- public static readonly GeneDef rjw_genes_sex_age_drain;
- public static readonly GeneDef rjw_genes_aphrodisiac_pheromones;
- public static readonly GeneDef rjw_genes_sexual_mytosis;
- public static readonly GeneDef rjw_genes_hormonal_saliva;
-
- // LifeForce
- public static readonly GeneDef rjw_genes_lifeforce;
- public static readonly GeneDef rjw_genes_pussyhealing;
- public static readonly GeneDef rjw_genes_lifeforce_drain;
- public static readonly GeneDef rjw_genes_cum_eater;
- public static readonly GeneDef rjw_genes_fertilin_absorber;
- public static readonly GeneDef rjw_genes_drainer;
- public static readonly GeneDef rjw_genes_seduce;
- public static readonly GeneDef rjw_genes_paralysingkiss;
- public static readonly GeneDef rjw_genes_cockeater;
- public static readonly GeneDef rjw_genes_lifeforce_empath;
-
- // Cosmetic
- public static readonly GeneDef rjw_genes_succubus_tail;
- public static readonly GeneDef rjw_genes_succubus_wings;
-
- // Hive
- public static readonly GeneDef rjw_genes_queen;
- public static readonly GeneDef rjw_genes_drone;
- public static readonly GeneDef rjw_genes_worker;
- public static readonly GeneDef rjw_genes_zealous_loyalty;
- public static readonly GeneDef rjw_genes_cocoonweaver;
- public static readonly GeneDef rjw_genes_spawn_spelopede;
-
-
- //Other Defs
- public static readonly XenotypeDef rjw_genes_succubus;
- public static readonly DutyDef rjw_genes_flirt;
- public static readonly MentalBreakDef rjw_genes_lifeforce_randomrape;
-
- }
-
-}
diff --git a/1.4/Source/Genes/Cum/Gene_MuchCum.cs b/1.4/Source/Genes/Cum/Gene_MuchCum.cs
deleted file mode 100644
index e88ac3f..0000000
--- a/1.4/Source/Genes/Cum/Gene_MuchCum.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-namespace RJW_Genes
-{
- public class Gene_MuchCum : RJW_Gene
- {
- bool has_been_fired = false;
-
- float multiplier_much_cum = 3f;
-
- 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/1.4/Source/Genes/Cum/Gene_NoCum.cs b/1.4/Source/Genes/Cum/Gene_NoCum.cs
deleted file mode 100644
index 0c3e888..0000000
--- a/1.4/Source/Genes/Cum/Gene_NoCum.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-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/1.4/Source/Genes/Cum/Gene_VeryMuchCum.cs b/1.4/Source/Genes/Cum/Gene_VeryMuchCum.cs
deleted file mode 100644
index 21faecc..0000000
--- a/1.4/Source/Genes/Cum/Gene_VeryMuchCum.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-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/1.4/Source/Genes/Damage/Gene_Elasticity.cs b/1.4/Source/Genes/Damage/Gene_Elasticity.cs
deleted file mode 100644
index 5d92b51..0000000
--- a/1.4/Source/Genes/Damage/Gene_Elasticity.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using LicentiaLabs;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This Gene adds Licentia-Labs Elasticised Hediff to a Pawn.
- /// Note: I had a HarmonyPatch first, similar to skipping cumflation, but the Stretching Logic is called quite a lot and for both pawns actually.
- /// Hence, I think choosing the Elasticiced Hediff was good as then everything is covered by "Licentia-Logic".
- ///
- public class Gene_Elasticity : Gene
- {
- private const int RESET_INTERVAL = 60000; // 60k should be 1 day
-
- public override void PostAdd()
- {
- base.PostAdd();
- // Doing it like this will add the hediff with a severity of ~0.5, but it will decay.
- // Hence we check with the Ticks to update.
- this.pawn.health.AddHediff(Licentia.HediffDefs.Elasticised);
- ResetSeverity();
- }
-
- public override void Tick()
- {
- base.Tick();
- if (pawn.IsHashIntervalTick(RESET_INTERVAL))
- ResetSeverity();
- }
-
- public override void PostRemove()
- {
- Hediff candidate = pawn.health.hediffSet.GetFirstHediffOfDef(Licentia.HediffDefs.Elasticised);
- if (candidate != null)
- {
- pawn.health.RemoveHediff(candidate);
- }
- base.PostRemove();
- }
-
-
- private void ResetSeverity(float severity = 0.7f)
- {
- Hediff candidate = pawn.health.hediffSet.GetFirstHediffOfDef(Licentia.HediffDefs.Elasticised);
- if (candidate != null)
- {
- candidate.Severity = severity;
- }
- }
- }
-}
diff --git a/1.4/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs b/1.4/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
deleted file mode 100644
index 8bf4a90..0000000
--- a/1.4/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-using System.Linq;
-
-namespace RJW_Genes
-{
- public class Gene_ExtraAnus : RJW_Gene
- {
-
- internal Hediff additional_anus;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoAnus())
- {
- return;
- }
-
- if (additional_anus == null)
- {
- CreateAndAddAnus();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoAnus())
- {
- return;
- }
-
- if (additional_anus == null)
- {
- CreateAndAddAnus();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(additional_anus != null)
- pawn.health.RemoveHediff(additional_anus);
- }
-
- internal void CreateAndAddAnus()
- {
- var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
- var anusDef = GenitaliaUtility.GetAnusForGene(correctGene);
- var partBPR = Genital_Helper.get_anusBPR(pawn);
- additional_anus = HediffMaker.MakeHediff(anusDef, pawn);
-
- var CompHediff = additional_anus.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.Init(pawn);
- CompHediff.UpdateSeverity();
- }
-
- pawn.health.AddHediff(additional_anus, partBPR);
- }
-
- internal bool HasAlreadyTwoAnus()
- {
- if (pawn == null)
- return false;
-
- var possible_breasts =
- Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_anus(t));
-
- return possible_breasts.Count() >= 2;
- }
- }
-}
diff --git a/1.4/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs b/1.4/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
deleted file mode 100644
index 4008ec0..0000000
--- a/1.4/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-using System.Linq;
-
-namespace RJW_Genes
-{
- public class Gene_ExtraBreasts : RJW_Gene
- {
-
- internal Hediff additional_breasts;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoBreasts())
- {
- return;
- }
-
- // Tits are only added for female pawns!
- if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
- {
- CreateAndAddBreasts();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoBreasts())
- {
- return;
- }
-
- // Tits are only added for female pawns!
- if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
- {
- CreateAndAddBreasts();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(additional_breasts != null)
- pawn.health.RemoveHediff(additional_breasts);
- }
-
- internal void CreateAndAddBreasts()
- {
- var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
- var breastDef = GenitaliaUtility.GetBreastsForGene(correctGene);
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- additional_breasts = HediffMaker.MakeHediff(breastDef, pawn);
-
- var CompHediff = additional_breasts.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.Init(pawn);
- CompHediff.UpdateSeverity();
- }
-
- pawn.health.AddHediff(additional_breasts, partBPR);
- }
-
- internal bool HasAlreadyTwoBreasts()
- {
- if (pawn == null)
- return false;
-
- var possible_breasts =
- Genital_Helper.get_AllPartsHediffList(pawn).Where(t => t.def.defName.Contains("breast"));
-
- return possible_breasts.Count() >= 2;
- }
-
- }
-}
diff --git a/1.4/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs b/1.4/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs
deleted file mode 100644
index e098a8c..0000000
--- a/1.4/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using rjw;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// Removes breasts for female (and trap, futa) pawns and adds Udders.
- /// Wished for in Issue #27.
- ///
- /// TODO: Currently, the sexualizer over-writes the added udders and just adds another pair of breasts!
- /// I commented out the gene in .xml for now.
- ///
- public class Gene_UdderBreasts : RJW_Gene
- {
-
- Hediff removed_breasts;
- Hediff added_udders;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Breasts are replaced for female,trap and futa pawns
- if ( removed_breasts == null
- && (GenderUtility.IsFemale(pawn) || GenderHelper.GetSex(pawn) == GenderHelper.Sex.futa || GenderHelper.GetSex(pawn) == GenderHelper.Sex.trap)
- )
- {
- RemoveButStoreBreasts();
- AddUdders();
- }
-
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Breasts are replaced for female,trap and futa pawns
- if (removed_breasts == null
- && (GenderUtility.IsFemale(pawn) || GenderHelper.GetSex(pawn) == GenderHelper.Sex.futa || GenderHelper.GetSex(pawn) == GenderHelper.Sex.trap)
- )
- {
- RemoveButStoreBreasts();
- AddUdders();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- // Re-Add the old breasts
- if (removed_breasts != null)
- pawn.health.AddHediff(removed_breasts);
- if (added_udders != null)
- pawn.health.RemoveHediff(added_udders);
- }
-
- internal void RemoveButStoreBreasts()
- {
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
-
- if (breastsToRemove != null)
- {
- removed_breasts = breastsToRemove;
- pawn.health.RemoveHediff(breastsToRemove);
- }
- }
-
- internal void AddUdders()
- {
- BodyPartRecord bpr = Genital_Helper.get_uddersBPR(pawn);
- added_udders = pawn.health.AddHediff(Genital_Helper.udder_breasts, bpr);
- }
- }
-
-}
\ No newline at end of file
diff --git a/1.4/Source/Genes/Gender/Defs/GenderFluidExtension.cs b/1.4/Source/Genes/Gender/Defs/GenderFluidExtension.cs
deleted file mode 100644
index 332015f..0000000
--- a/1.4/Source/Genes/Gender/Defs/GenderFluidExtension.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-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/1.4/Source/Genes/Gender/GenderUtility.cs b/1.4/Source/Genes/Gender/GenderUtility.cs
deleted file mode 100644
index 700f3c9..0000000
--- a/1.4/Source/Genes/Gender/GenderUtility.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-using System.Linq;
-using System;
-using System.Collections.Generic;
-using HarmonyLib;
-
-namespace RJW_Genes
-{
- public class GenderUtility
- {
- ///
- /// Returns if a Pawn is female (Gender==Female) or if it should be (Gene==FemaleOnly)
- /// This is used as a small helper, as the genes might fire in different orders.
- ///
- public static bool IsFemale(Pawn pawn)
- {
- return
- pawn.gender == Gender.Female || pawn.genes.GenesListForReading.Any(gene => gene.def.defName.EqualsIgnoreCase(GeneDefOf.rjw_genes_female_only.defName));
- }
-
- ///
- /// Returns if a Pawn is male (Gender==Male) or if it should be (Gene==MaleOnly)
- /// This is used as a small helper, as the genes might fire in different orders.
- ///
- public static bool IsMale(Pawn pawn)
- {
- return
- pawn.gender == Gender.Male || pawn.genes.GenesListForReading.Any(gene => gene.def.defName.EqualsIgnoreCase(GeneDefOf.rjw_genes_male_only.defName));
- }
-
- ///
- /// Adjusts the Body Type to match the given target gender.
- /// This is only for "drawing" attributes of the pawn, the genitalia are untouched at this point.
- /// (for male and female only, baby,child and hulks don't change)
- ///
- ///
- ///
- public static void AdjustBodyToTargetGender(Pawn pawn, Gender targetGender)
- {
- if (pawn == null)
- return;
- if (pawn.story.bodyType == BodyTypeDefOf.Baby || pawn.story.bodyType == BodyTypeDefOf.Hulk || pawn.story.bodyType == BodyTypeDefOf.Child)
- return;
-
- if (targetGender == Gender.Male)
- {
- pawn.story.bodyType = BodyTypeDefOf.Male;
- }
- else if (targetGender == Gender.Female)
- {
- pawn.story.bodyType = BodyTypeDefOf.Female;
- pawn.style.beardDef = BeardDefOf.NoBeard;
- }
-
- // Re-Choose heads if it is wrong gender
- if (pawn.story.headType.gender == Gender.None || pawn.story.headType.gender == targetGender)
- {
- // Do nothing, Gender of Heat is Neutral or matches
- }
- else
- {
- // Below line tries to get (and set) an available head from the backstory, if it returns true everything worked if it returns false we log it
- if(! pawn.story.TryGetRandomHeadFromSet(DefDatabase.AllDefs.Where((Func)(x => x.randomChosen))))
- {
- Log.Message("Failed to retrieve a correct-gender head for the pawn " + pawn.Name);
- };
- }
-
- // Force Redraw at the spot
- pawn.Drawer.renderer.graphics.SetAllGraphicsDirty();
- }
-
- // Fetch these once at load time because they don't change inside RJW
- private static readonly List wasSexThoughts = Traverse.Create(typeof(GenderHelper)).Field("old_sex_list").GetValue>();
- private static readonly List sexChangeThoughts = Traverse.Create(typeof(GenderHelper)).Field("SexChangeThoughts").GetValue>();
-
- ///
- /// This method removes all RJW-Sexchange-Hediffs from the pawn.
- /// It used with the RJW_Gene.Notify_OnPawnGeneration() to check for pawns on spawn.
- ///
- /// Fixes Issue #32, where pawns that spawn fresh with a "all female" gene may have m2f thoughts.
- ///
- /// The pawn that needs to have SexChange-Thoughts removed.
- public static void RemoveAllSexChangeThoughts(Pawn pawn)
- {
- // Shouldn't ever be true in the normal case, but this stops someone from calling this with an incorrect setup
- if (pawn?.health == null)
- return;
-
- if(wasSexThoughts == null || sexChangeThoughts == null || !wasSexThoughts.Any() || !sexChangeThoughts.Any())
- {
- Log.Warning($"Couldn't get values from RJW.\nold_sex_list: {wasSexThoughts.ToStringSafeEnumerable()}\nSexChangeThoughts: {sexChangeThoughts.ToStringSafeEnumerable()}");
- return;
- }
-
- foreach(var def in wasSexThoughts.Concat(sexChangeThoughts))
- {
- var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(def);
- if (hediff != null)
- pawn.health.RemoveHediff(hediff);
- }
- }
- }
-}
diff --git a/1.4/Source/Genes/Gender/Gene_FemaleOnly.cs b/1.4/Source/Genes/Gender/Gene_FemaleOnly.cs
deleted file mode 100644
index 97c4365..0000000
--- a/1.4/Source/Genes/Gender/Gene_FemaleOnly.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using Verse;
-using rjw;
-
-
-namespace RJW_Genes
-{
- public class Gene_FemaleOnly : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- AdjustPawnToFemale();
- // Here we call Sexualization after the Sex-Change
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
- }
-
- public override void PostAdd()
- {
- base.PostMake();
- AdjustPawnToFemale();
- }
-
- private void AdjustPawnToFemale()
- {
- // Here we really use the Gender.Female and not our helper IsFemale(pawn)
- if (pawn.gender == Gender.Female)
- return;
- else
- {
- GenderHelper.ChangeSex(pawn, () => {
- pawn.gender = Gender.Female;
- GenitaliaChanger.RemoveAllGenitalia(pawn);
- Sexualizer.sexualize_pawn(pawn);
- });
- GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Female);
- }
- }
-
- public override void Notify_OnPawnGeneration()
- {
- base.Notify_OnPawnGeneration();
- // If this is Pawn generation, then we can assume that the pawn was never any gender other than female, so they shouldn't have sex change thoughts. (Issue #32)
- GenderUtility.RemoveAllSexChangeThoughts(pawn);
- }
- }
-}
diff --git a/1.4/Source/Genes/Gender/Gene_GenderFluid.cs b/1.4/Source/Genes/Gender/Gene_GenderFluid.cs
deleted file mode 100644
index 1ffdf20..0000000
--- a/1.4/Source/Genes/Gender/Gene_GenderFluid.cs
+++ /dev/null
@@ -1,276 +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 Verse.AI;
-
-namespace RJW_Genes
-{
-
- /*
- * Once per day (or slightly different per configuration) checks if the pawn changes gender.
- * At the triggered tick, there is a random chance to change gender.
- * This will swap genitalia, appearance and breasts.
- *
- * For some situations, the pawn better not change genitalia, e.g. while having vaginal sex. This would throw errors.
- * For these cases a check is implemented, and if there was a block the change happens a bit later when "unblocked".
- *
- * TODO: Keep pregnancies.
- * The pregnancies remove their things on Tick at the end, which kills it for male pawns.
- * This seems to be an upstream RJW thing, but needs a bit of investigation.
- */
- public class Gene_GenderFluid : RJW_Gene
- {
-
- //public const int CHANGE_INTERVAL_FALLBACK = 1000; // Test value for Quick Trials
- const int CHANGE_INTERVAL_FALLBACK = 60000; // 60k == 1 day
- const float SWITCH_CHANCE_FALLBACK = 0.25f;
-
- int change_interval;
- float switch_chance;
-
- List storedBreasts = new List();
-
- private bool sexChangeWasBlocked = false;
-
- public Gene_GenderFluid() : base() {
- 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()
- {
- base.Tick();
-
- // Case 1: We had a blocked SexChange, now Pawn is free, apply sexchange a bit delayed.
- if (pawn.IsHashIntervalTick(1500) && sexChangeWasBlocked && !SexChangeBlocked(pawn)){
- ChangeSex();
- sexChangeWasBlocked = false;
- }
- // Case 2: Check every interval if the Chance triggers
- else if (pawn.IsHashIntervalTick(change_interval) && (new Random()).NextDouble() < switch_chance)
- {
-
- // Case 2.A) SexChange was blocked, postpone it
- if (SexChangeBlocked(pawn))
- {
- sexChangeWasBlocked |= true;
- return;
- }
- // Case 2.B) Nothing blocking, change the sex.
- else { ChangeSex();}
- }
-
- }
-
- private void ChangeSex()
- {
- if (rjw.Genital_Helper.is_futa(pawn))
- {
- // Handle Futa Pawns - Keep Genitalia as is, just change RW Gender
- pawn.gender = pawn.gender == Gender.Male? Gender.Female: Gender.Male;
- }
- // Handle Non-Futas - Change Genitalia and Store breasts.
- else
- {
- if (pawn.gender == Gender.Female)
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"genderfluid pawn {pawn} is changing from female to male");
- SwitchToMale();
- }
- else if (pawn.gender == Gender.Male)
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"genderfluid pawn {pawn} is changing from male to female");
- SwitchToFemale();
- }
- }
- GenderUtility.RemoveAllSexChangeThoughts(pawn);
- }
-
- private void SwitchToFemale()
- {
- // Change Drawing
- GenderUtility.AdjustBodyToTargetGender(pawn, Verse.Gender.Female);
- // Change Gender
- pawn.gender = Verse.Gender.Female;
-
- // Switch Penisses to Vaginas
- var genitalsToRemove = pawn.GetGenitalsList().FindAll(g => Genital_Helper.is_penis(g) || Genital_Helper.is_vagina(g));
- foreach (var genital in genitalsToRemove)
- {
- var genitaliaHediffDef = GenitaliaUtility.GetVaginaForGene(GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn));
- float size = genital.Severity;
- pawn.health.RemoveHediff(genital);
-
- var newVagina = HediffMaker.MakeHediff(genitaliaHediffDef, pawn, Genital_Helper.get_genitalsBPR(pawn));
- pawn.health.AddHediff(newVagina);
- newVagina.Severity = size;
- }
-
- SwitchBreasts();
- }
-
- private void SwitchToMale()
- {
- // Change Drawing
- GenderUtility.AdjustBodyToTargetGender(pawn, Verse.Gender.Male);
- // Change Gender
- pawn.gender = Verse.Gender.Male;
-
- // Switch Vaginas to Penisses
- var genitalsToRemove = pawn.GetGenitalsList().FindAll(g => Genital_Helper.is_penis(g) || Genital_Helper.is_vagina(g));
- foreach (var genital in genitalsToRemove)
- {
- var genitaliaHediffDef = GenitaliaUtility.GetPenisForGene(GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn));
- float size = genital.Severity;
- pawn.health.RemoveHediff(genital);
-
- var newPenis = HediffMaker.MakeHediff(genitaliaHediffDef, pawn, Genital_Helper.get_genitalsBPR(pawn));
- pawn.health.AddHediff(newPenis);
- newPenis.Severity = size;
- }
-
- SwitchBreasts();
-
- RemoveLicentiaVaginaHediffs();
- }
-
-
- private void SwitchBreasts()
- {
- List current_breasts = pawn.GetBreastList();
-
- // Stored_Breasts can be empty when the pawn first ever switches gender!
- if (storedBreasts.NullOrEmpty())
- {
- foreach (var breasts in current_breasts)
- {
- // Is Male, and does not have the "no breast gene"
- if (pawn.gender == Gender.Male && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_no_breasts))
- {
- storedBreasts.Add(CreateNewBreasts());
- }
- else if (pawn.gender == Gender.Female && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_featureless_chest) )
- {
- storedBreasts.Add(CreateNewBreasts());
- }
- }
- }
-
-
- foreach (var breast in current_breasts)
- {
- pawn.health.RemoveHediff(breast);
- }
- foreach (var breast in storedBreasts)
- {
- pawn.health.AddHediff(breast);
- }
-
- storedBreasts.Clear();
- storedBreasts.AddRange(current_breasts);
- }
-
-
- internal Hediff CreateNewBreasts()
- {
- var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
- var breastDef = GenitaliaUtility.GetBreastsForGene(correctGene);
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- var additional_breasts = HediffMaker.MakeHediff(breastDef, pawn,partBPR);
-
- var CompHediff = additional_breasts.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.initComp(pawn);
- CompHediff.updatesize();
- }
-
- return additional_breasts;
- }
-
- ///
- /// Checks the pawn if it has any of the vagina-related hediffs (e.g. stretched) and removes them.
- /// Anal Soreness, Stretching etc. remains.
- ///
- private void RemoveLicentiaVaginaHediffs()
- {
- try
- {
- if (ModsConfig.IsActive("LustLicentia.RJWLabs")){
- Hediff cumflation = pawn.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumflation);
- if (cumflation != null)
- pawn.health.RemoveHediff(cumflation);
-
- Hediff stretched = pawn.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Stretched);
- if (stretched != null && stretched.Part != Genital_Helper.get_anusBPR(pawn))
- pawn.health.RemoveHediff(stretched);
-
- Hediff torn = pawn.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.StretchTear);
- if (torn != null && torn.Part != Genital_Helper.get_anusBPR(pawn))
- pawn.health.RemoveHediff(torn);
-
- Hediff prolapsed = pawn.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Prolapse);
- if (prolapsed != null && prolapsed.Part != Genital_Helper.get_anusBPR(pawn))
- pawn.health.RemoveHediff(prolapsed);
-
- Hediff extremeProlapsed = pawn.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.ExtremeProlapse);
- if (extremeProlapsed != null && extremeProlapsed.Part != Genital_Helper.get_anusBPR(pawn))
- pawn.health.RemoveHediff(extremeProlapsed);
- };
- }
- //TODO: Don't make this an "catch all" Exception!
- catch (Exception ex)
- {
- // To be expected for people without Licentia Labs, do nothing.
- }
- }
-
-
- ///
- /// There are some actions that block sex change,
- /// being drafted or having sex.
- ///
- /// The pawn that want to sexchange.
- /// False if the SexChange is applicable, True if there needs to be a wait timer.
- internal bool SexChangeBlocked(Pawn pawn)
- {
- // DEVNOTE: This list might extend on new cases, thus the explicit method.
- return pawn == null
- || pawn.health.Dead
- || (pawn.jobs.curDriver is JobDriver_Masturbate)
- || (pawn.jobs.curDriver is JobDriver_Sex)
- || (pawn.jobs.curDriver is JobDriver_SexBaseReciever)
- || (pawn.jobs.curDriver is JobDriver_SexBaseInitiator)
- || (pawn.jobs.curDriver is JobDriver_JoinInBed)
-
- || (pawn.jobs.curDriver is JobDriver_SexQuick)
- || (pawn.jobs.curDriver is JobDriver_SexBaseRecieverQuickie)
- || (pawn.jobs.curDriver is JobDriver_SexOnSpot)
- || (pawn.jobs.curDriver is JobDriver_SexOnSpotReciever)
-
- || (pawn.jobs.curDriver is JobDriver_Knotted)
- || (pawn.jobs.curDriver is JobDriver_Mate)
- || (pawn.jobs.curDriver is JobDriver_Mating)
- || (pawn.jobs.curDriver is JobDriver_Breeding)
-
- || (pawn.jobs.curDriver is JobDriver_Rape)
- || (pawn.jobs.curDriver is JobDriver_SexBaseRecieverRaped)
- || (pawn.jobs.curDriver is JobDriver_RandomRape)
- || (pawn.jobs.curDriver is JobDriver_RapeComfortPawn)
- || (pawn.jobs.curDriver is JobDriver_RapeEnemy)
- || pawn.jobs.curDriver is JobDriver_Lovin
-
- // This is a heavy check, but this is necessary because sometimes the pawns go somewhere to have sex and then they start despite missing genitalia!
- || (pawn.jobs.curDriver is JobDriver_Goto)
-
- || pawn.Drafted;
- }
- }
-}
diff --git a/1.4/Source/Genes/Gender/Gene_MaleOnly.cs b/1.4/Source/Genes/Gender/Gene_MaleOnly.cs
deleted file mode 100644
index e081700..0000000
--- a/1.4/Source/Genes/Gender/Gene_MaleOnly.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using Verse;
-using rjw;
-
-
-namespace RJW_Genes
-{
- public class Gene_MaleOnly : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- AdjustPawnToMale();
- // Here we call Sexualization after the Sex-Change
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
- }
-
- public override void PostAdd()
- {
- base.PostMake();
- AdjustPawnToMale();
- }
-
- private void AdjustPawnToMale()
- {
- if (pawn.gender == Gender.Male)
- return;
- else
- {
- GenderHelper.ChangeSex(pawn, () => {
-
- pawn.gender = Gender.Male;
- GenitaliaChanger.RemoveAllGenitalia(pawn);
- Sexualizer.sexualize_pawn(pawn);
- });
- GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Male);
- }
- }
-
- public override void Notify_OnPawnGeneration()
- {
- base.Notify_OnPawnGeneration();
- // If this is Pawn generation, then we can assume that the pawn was never any gender other than male, so they shouldn't have sex change thoughts. (Issue #32)
- GenderUtility.RemoveAllSexChangeThoughts(pawn);
- }
- }
-}
diff --git a/1.4/Source/Genes/GeneUtility.cs b/1.4/Source/Genes/GeneUtility.cs
deleted file mode 100644
index c46e6e1..0000000
--- a/1.4/Source/Genes/GeneUtility.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Verse;
-using RimWorld;
-namespace RJW_Genes
-{
- public class GeneUtility
- {
-
- //Split function so I can offsetlifeforce from gene without needing to look for the gene agian (for the constant drain tick)
- public static Gene_LifeForce GetLifeForceGene(Pawn pawn)
- {
- Pawn_GeneTracker genes = pawn.genes;
- Gene_LifeForce gene_LifeForce = genes.GetFirstGeneOfType();
- return gene_LifeForce;
- }
-
- public static void OffsetLifeForce(IGeneResourceDrain drain, float offset)
- {
- if (drain.Resource != null && drain.Resource.Active) {
- float old_value = drain.Resource.Value;
- drain.Resource.Value += offset;
- PostOffSetLifeForce(drain, old_value);
- }
- }
-
- public static void PostOffSetLifeForce(IGeneResourceDrain drain, float old_value)
- {
-
- if (drain.Resource != null && drain.Resource.Active)
- {
- if (old_value > 0.2f && drain.Resource.Value <= 0.2f)
- {
- //TODO: Mood debuff
- }
- else if (old_value > 0f && drain.Resource.Value <= 0f)
- {
- Pawn pawn = drain.Pawn;
- if (!drain.Pawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_fertilin_craving))
- {
- drain.Pawn.health.AddHediff(HediffDefOf.rjw_genes_fertilin_craving);
- }
- }
- }
- }
-
-
- public static bool HasLowLifeForce(Pawn pawn)
- {
- if (HasLifeForce(pawn))
- {
- Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType();
- if (gene == null || !gene.Active)
- return false;
- if (gene.Resource.Value < gene.targetValue)
- {
- return true;
- }
- }
- return false;
- }
-
- public static bool HasCriticalLifeForce(Pawn pawn)
- {
- if (HasLifeForce(pawn))
- {
- Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType();
- if (gene == null || !gene.Active)
- return false;
- if (gene.Resource.Value < gene.MinLevelForAlert)
- {
- return true;
- }
- }
- return false;
- }
-
- public static float MaxEggSizeMul(Pawn pawn)
- {
- float MaxEggSize = 1;
- if (IsInsectIncubator(pawn))
- {
- MaxEggSize *= 2;
- }
- return MaxEggSize;
- }
- public static List GetGenitaliaResizingGenes(Pawn pawn)
- {
- var ResizingGenes = new List();
-
- // Error Handling: Issue with Pawn or Genes return empty.
- if (pawn == null || pawn.genes == null)
- return ResizingGenes;
-
- foreach (Gene gene in pawn.genes.GenesListForReading)
- if (gene is Gene_GenitaliaResizingGene resizing_gene)
- ResizingGenes.Add(resizing_gene);
-
- return ResizingGenes;
- }
-
- ///
- /// Unified small check for a pawn if it has a specified Gene.
- /// Handles some errors and returns false as default.
- ///
- /// The pawn for which to look up a gene.
- /// The gene to look up.
- ///
- public static bool HasGeneNullCheck(Pawn pawn, GeneDef genedef)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(genedef);
- }
-
- public static bool HasLifeForce(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_lifeforce); }
- public static bool IsMechbreeder(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_mechbreeder); }
- public static bool IsInsectIncubator(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_insectincubator); }
- public static bool IsYouthFountain(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_youth_fountain); }
- public static bool IsAgeDrainer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sex_age_drain); }
- public static bool IsInsectBreeder(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_insectbreeder); }
- public static bool IsElastic(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_elasticity); }
- public static bool IsCumflationImmune(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_cumflation_immunity); }
- public static bool IsGenerousDonor(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_generous_donor); }
- public static bool IsPussyHealer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pussyhealing); }
- public static bool IsUnbreakable(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_unbreakable); }
- public static bool HasParalysingKiss(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_paralysingkiss); }
- public static bool HasSeduce(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_seduce); }
- public static bool IsSexualDrainer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_drainer); }
- public static bool IsCumEater(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_cum_eater); }
-
- }
-}
diff --git a/1.4/Source/Genes/Genitalia/Gene_CanineGenitalia.cs b/1.4/Source/Genes/Genitalia/Gene_CanineGenitalia.cs
deleted file mode 100644
index 01f0015..0000000
--- a/1.4/Source/Genes/Genitalia/Gene_CanineGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_CanineGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.canine_penis,Genital_Helper.canine_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.canine_penis, Genital_Helper.canine_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/1.4/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs b/1.4/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs
deleted file mode 100644
index cc0cc29..0000000
--- a/1.4/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_DemonicGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.demon_penis,Genital_Helper.demon_vagina,Genital_Helper.demon_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.demon_penis, Genital_Helper.demon_vagina, Genital_Helper.demon_anus);
- }
- }
-
-}
diff --git a/1.4/Source/Genes/Genitalia/Gene_DragonGenitalia.cs b/1.4/Source/Genes/Genitalia/Gene_DragonGenitalia.cs
deleted file mode 100644
index 34d24f6..0000000
--- a/1.4/Source/Genes/Genitalia/Gene_DragonGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_DragonGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.dragon_penis,Genital_Helper.dragon_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.dragon_penis, Genital_Helper.dragon_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/1.4/Source/Genes/Genitalia/Gene_EquineGenitalia.cs b/1.4/Source/Genes/Genitalia/Gene_EquineGenitalia.cs
deleted file mode 100644
index 74b8b2f..0000000
--- a/1.4/Source/Genes/Genitalia/Gene_EquineGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_EquineGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.equine_penis,Genital_Helper.equine_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.equine_penis, Genital_Helper.equine_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/1.4/Source/Genes/Genitalia/Gene_FelineGenitalia.cs b/1.4/Source/Genes/Genitalia/Gene_FelineGenitalia.cs
deleted file mode 100644
index 2fe4882..0000000
--- a/1.4/Source/Genes/Genitalia/Gene_FelineGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_FelineGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.feline_penis,Genital_Helper.feline_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.feline_penis, Genital_Helper.feline_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/1.4/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs b/1.4/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs
deleted file mode 100644
index b7a1141..0000000
--- a/1.4/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_OvipositorGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.ovipositorM,Genital_Helper.ovipositorF,Genital_Helper.insect_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.ovipositorM, Genital_Helper.ovipositorF, Genital_Helper.insect_anus);
- }
- }
-
-}
diff --git a/1.4/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs b/1.4/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs
deleted file mode 100644
index 5671f1f..0000000
--- a/1.4/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_SlimeGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.slime_penis,Genital_Helper.slime_vagina,Genital_Helper.slime_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.slime_penis, Genital_Helper.slime_vagina, Genital_Helper.slime_anus);
- }
- }
-
-}
diff --git a/1.4/Source/Genes/Genitalia/GenitaliaChanger.cs b/1.4/Source/Genes/Genitalia/GenitaliaChanger.cs
deleted file mode 100644
index 48ddc4d..0000000
--- a/1.4/Source/Genes/Genitalia/GenitaliaChanger.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using rjw;
-using RimWorld;
-using Verse;
-using System.Collections.Generic;
-
-namespace RJW_Genes
-{
- internal class GenitaliaChanger
- {
-
- ///
- /// This method changes the pawns genitalia to the given types of genitalia.
- /// All genitals will be changed, e.g. pawns with 2 penises (for whatever reason) or is a futa, all genitals will be changed.
- ///
- /// the pawn who's genitals will be changed
- /// the new type of penis
- /// the new type of vagina
- /// the new type of anus
- public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement, HediffDef vaginaReplacement, HediffDef anusReplacement)
- {
- var oldParts = Genital_Helper.get_AllPartsHediffList(pawn);
- BodyPartRecord correctBPR;
-
- if (!oldParts.NullOrEmpty())
- {
- Hediff replacementGenital;
- CompHediffBodyPart CompHediff;
-
- foreach (Hediff existingGenital in oldParts)
- {
- if (IsArtificial(existingGenital))
- continue;
- correctBPR = Genital_Helper.get_genitalsBPR(pawn);
-
- replacementGenital = null;
- CompHediff = null;
- if (Genital_Helper.is_penis(existingGenital))
- replacementGenital = HediffMaker.MakeHediff(penisReplacement, pawn, correctBPR);
-
- if (Genital_Helper.is_vagina(existingGenital))
- replacementGenital = HediffMaker.MakeHediff(vaginaReplacement, pawn, correctBPR);
-
- if (IsAnus(existingGenital))
- {
- correctBPR = Genital_Helper.get_anusBPR(pawn);
- replacementGenital = HediffMaker.MakeHediff(anusReplacement, pawn, correctBPR);
- }
-
- if (replacementGenital != null)
- {
- CompHediff = replacementGenital.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.initComp(pawn);
- CompHediff.updatesize();
- }
- GenderHelper.ChangeSex(pawn, () =>
- {
- pawn.health.RemoveHediff(existingGenital);
- pawn.health.AddHediff(replacementGenital, correctBPR);
- });
- }
- }
- }
- else
- {
- Messages.Message("RJW_Genes_GenitalsNotAlterable".Translate(pawn), pawn, MessageTypeDefOf.SilentInput);
- return;
- }
-
- }
-
- public static bool IsAnus(Hediff candidate)
- {
- return candidate.def.defName.ToLower().Contains("anus"); }
-
- public static bool IsArtificial(Hediff candidate)
- {
- return candidate.def.defName.ToLower().Contains("bionic") || candidate.def.defName.ToLower().Contains("archo");
- }
-
- public static void RemoveAllGenitalia(Pawn pawn)
- {
- var parts = Genital_Helper.get_AllPartsHediffList(pawn);
- foreach (var part in parts)
- {
- pawn.health.RemoveHediff(part);
- }
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Genitalia/GenitaliaUtility.cs b/1.4/Source/Genes/Genitalia/GenitaliaUtility.cs
deleted file mode 100644
index c762071..0000000
--- a/1.4/Source/Genes/Genitalia/GenitaliaUtility.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-using RimWorld;
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
-{
- public class GenitaliaUtility
- {
-
- ///
- /// Returns the first (non) overwritten gene from the rjw_genes genitalia genes.
- /// In case the pawn has none, as default the human one is returned.
- ///
- /// the pawn whom to find genitaliagenes for
- /// The first GeneDef of the pawn related to GenitaliaTypes
- public static GeneDef GetGenitaliaTypeGeneForPawn(Pawn pawn)
- {
-
- foreach (var gene in pawn.genes.GenesListForReading)
- {
- if (gene.def.defName.Contains("rjw_genes") && gene.def.defName.EndsWith("_genitalia"))
- if (!gene.Overridden)
- return gene.def;
- }
- return null;
- }
-
-
- public static HediffDef GetPenisForGene(GeneDef gene)
- {
- if (gene == null)
- return Genital_Helper.average_penis;
-
- switch (gene.defName)
- {
- case "rjw_genes_equine_genitalia": return Genital_Helper.equine_penis;
- case "rjw_genes_canine_genitalia": return Genital_Helper.canine_penis;
- case "rjw_genes_feline_genitalia": return Genital_Helper.feline_penis;
- case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_penis;
- case "rjw_genes_dragon_genitalia": return Genital_Helper.dragon_penis;
- case "rjw_genes_slime_genitalia": return Genital_Helper.slime_penis;
- case "rjw_genes_ovipositor_genitalia": return Genital_Helper.ovipositorM;
-
- default: return Genital_Helper.average_penis;
- }
- }
-
-
- public static HediffDef GetVaginaForGene(GeneDef gene)
- {
- if (gene == null)
- return Genital_Helper.average_vagina;
-
- switch (gene.defName)
- {
- case "rjw_genes_equine_genitalia": return Genital_Helper.equine_vagina;
- case "rjw_genes_canine_genitalia": return Genital_Helper.canine_vagina;
- case "rjw_genes_feline_genitalia": return Genital_Helper.feline_vagina;
- case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_vagina;
- case "rjw_genes_dragon_genitalia": return Genital_Helper.dragon_vagina;
- case "rjw_genes_slime_genitalia": return Genital_Helper.slime_vagina;
- case "rjw_genes_ovipositor_genitalia": return Genital_Helper.ovipositorF;
-
- default: return Genital_Helper.average_vagina;
- }
- }
-
- public static HediffDef GetAnusForGene(GeneDef gene)
- {
- if (gene == null)
- return Genital_Helper.average_anus;
- switch (gene.defName)
- {
- //TODO: Do I want the default to be generic or average for feline,equine and canine?
- case "rjw_genes_equine_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_canine_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_feline_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_anus;
- case "rjw_genes_dragon_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_slime_genitalia": return Genital_Helper.slime_anus;
- case "rjw_genes_ovipositor_genitalia": return Genital_Helper.insect_anus;
-
- default: return Genital_Helper.generic_anus;
- }
- }
-
- public static HediffDef GetBreastsForGene(GeneDef gene)
- {
- if (gene == null)
- return Genital_Helper.average_breasts;
-
- switch (gene.defName)
- {
- //TODO: Do I want the default to be generic or average?
- case "rjw_genes_equine_genitalia": return Genital_Helper.average_breasts;
- case "rjw_genes_canine_genitalia": return Genital_Helper.average_breasts;
- case "rjw_genes_feline_genitalia": return Genital_Helper.average_breasts;
- case "rjw_genes_demonic_genitalia": return Genital_Helper.average_breasts;
- case "rjw_genes_dragon_genitalia": return Genital_Helper.average_breasts;
- case "rjw_genes_slime_genitalia": return Genital_Helper.slime_breasts;
- case "rjw_genes_udder_breasts": return Genital_Helper.udder_breasts;
- case "rjw_genes_ovipositor_genitalia": return Genital_Helper.average_breasts;
-
- default: return Genital_Helper.generic_breasts;
- }
- }
-
- public static bool PawnStillNeedsGenitalia(Pawn pawn)
- {
- // There is the issue that the genes fire in a pseudo-random order
- // Hence it can happen that the pawn still needs genitalia
- // I wanted to make a simple lookup, but I think the genes are applied for all humans encountered so it could be huge
- // So the heuristic is to check if the pawn has any of the 3 standard genitalia OR has all genes ticked that says "I don't want genitalia".
- if (pawn == null) return false;
-
- bool pawn_has_any_genitalia =
- Genital_Helper.has_genitals(pawn) || Genital_Helper.has_anus(pawn) || Genital_Helper.has_breasts(pawn);
-
- bool pawn_is_not_supposed_to_have_genitalia =
- pawn.genes.GenesListForReading.Any(x => x.def.defName == "rjw_genes_no_penis");
-
- if (pawn_is_not_supposed_to_have_genitalia)
- return false;
- else
- return !pawn_has_any_genitalia;
-
- }
-
- public static bool IsBreasts(Hediff candidate)
- {
- return candidate.def.defName.ToLower().Contains("breast");
- }
- }
-}
diff --git a/1.4/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs b/1.4/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs
deleted file mode 100644
index 4fa1904..0000000
--- a/1.4/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using HarmonyLib;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This Patch adds behavior to all resizing genes:
- /// At Age RESIZING_MIN_AGE the Pawns Resizing Genes will trigger again, if not already triggered somewhere else.
- /// This is meant to allow kids to grow up without resized genitals, and resize later (Fixing #11).
- ///
- /// See `Gene_GenitaliaResizingGene` for a short summary of Issue #34.
- ///
- [HarmonyPatch(typeof(Pawn_AgeTracker), "BirthdayBiological")]
- public class Patch_ResizingOnAdulthood
- {
-
- static void Postfix(Pawn ___pawn, int birthdayAge)
- {
- if (birthdayAge >= Gene_GenitaliaResizingGene.RESIZING_AGE)
- {
- foreach(Gene_GenitaliaResizingGene gene in GeneUtility.GetGenitaliaResizingGenes(___pawn))
- {
- if (!gene.ResizingWasApplied)
- {
- gene.Resize();
- gene.ResizingWasApplied = true;
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/1.4/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs b/1.4/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs
deleted file mode 100644
index af362aa..0000000
--- a/1.4/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- ///
- /// The CocoonWeaver Ability applies the RJW-Cocoon to a pawn.
- /// Friendly Pawns can always be cocooned, neutral and hostile pawns must be downed.
- ///
- public class CompAbilityEffect_CocoonWeaver : CompAbilityEffect
- {
- private new CompProperties_AbilityCocoonWeaver Props
- {
- get
- {
- return (CompProperties_AbilityCocoonWeaver)this.props;
- }
- }
-
-
- public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
- {
- base.Apply(target, dest);
-
- Pawn CocooningPawn = this.parent.pawn;
- Pawn PawnToCocoon = target.Pawn;
-
- // Error Case - Null Pawn
- if (PawnToCocoon == null)
- {
- return;
- }
-
- PawnToCocoon.health.AddHediff(HediffDef.Named("RJW_Cocoon"));
-
- }
-
- ///
- /// For validity, there are a few checks:
- /// 0. Target is not already cocooned
- /// 1. Target is either Colonist / Prisoner
- /// 2. If the Target is an enemy or neutral, it must be downed.
- ///
- public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
- {
- Pawn cocoonTarget = target.Pawn;
- if (cocoonTarget != null)
- {
- bool CocoonTargetIsColonistOrPrisoner = cocoonTarget.Faction == this.parent.pawn.Faction || cocoonTarget.IsPrisonerOfColony;
- bool CocoonTargetIsHostile = cocoonTarget.HostileTo(this.parent.pawn);
- bool CocoonTargetIsDowned = cocoonTarget.Downed;
-
- if (cocoonTarget.health.hediffSet.hediffs.Any(t => t.def.defName == "RJW_Cocoon"))
- {
- if (throwMessages)
- Messages.Message(cocoonTarget.Name + " is already cocooned.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
- return false;
- }
-
- if (!CocoonTargetIsColonistOrPrisoner && !(CocoonTargetIsHostile && CocoonTargetIsDowned))
- {
- if (throwMessages)
- {
- if(CocoonTargetIsHostile && !CocoonTargetIsDowned)
- {
- Messages.Message(cocoonTarget.Name + " is hostile, but not downed.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
- }
- else if (!CocoonTargetIsColonistOrPrisoner)
- {
- Messages.Message(cocoonTarget.Name + " is not a part of the colony or hostile.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
- }
- }
- return false;
- }
- }
- return base.Valid(target, throwMessages);
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Hive/Abilities/CompAbilityEffect_SpawnSpelopede.cs b/1.4/Source/Genes/Hive/Abilities/CompAbilityEffect_SpawnSpelopede.cs
deleted file mode 100644
index 4932949..0000000
--- a/1.4/Source/Genes/Hive/Abilities/CompAbilityEffect_SpawnSpelopede.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-using RimWorld.Planet;
-using System;
-
-namespace RJW_Genes
-{
- ///
- /// Spawns tame spelopedes at the caster.
- ///
- /// TODO: Play some sound? I think this can be done with some CompProperties.
- ///
- public class CompAbilityEffect_SpawnSpelopede : CompAbilityEffect
- {
- public CompProperties_AbilitySpawnSpelopede Props => (CompProperties_AbilitySpawnSpelopede) this.props;
-
- public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
- {
- base.Apply(target, dest);
-
-
- int spelopedesToSpawn = CalculateSpelopedeAmount();
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Using Spelopede Spawn, spawning {spelopedesToSpawn}");
-
- for (int i = 0; i < spelopedesToSpawn; i++) {
- var request = new PawnGenerationRequest(
- this.Props.pawnKindDef,
- faction: this.parent.pawn.Faction,
- forceGenerateNewPawn: true,
- fixedBiologicalAge: 0.0f,
- fixedChronologicalAge: 0.0f,
- canGeneratePawnRelations: false,
- colonistRelationChanceFactor: 0.0f
- );
-
-
- Pawn insect = PawnGenerator.GeneratePawn(request);
- PawnUtility.TrySpawnHatchedOrBornPawn(insect, this.parent.pawn);
-
- if (Props.tamed)
- {
- insect.training.Train(TrainableDefOf.Tameness, this.parent.pawn, true);
- insect.training.Train(TrainableDefOf.Obedience, this.parent.pawn, true);
- insect.training.Train(TrainableDefOf.Release, this.parent.pawn, true);
-
- // I could do bonding here, but I think it's nicer if the queen is not "bonded" to their offspring.
- }
- }
-
- MakeDirt(1);
-
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message("Finished Spelopede Spawn");
-
- }
-
- private int CalculateSpelopedeAmount()
- {
- Pawn caster = this.parent.pawn;
- float spelopedes = Props.sensitivityMultiplier * caster.psychicEntropy.PsychicSensitivity;
- return (spelopedes > 1.49f) ? (int)Math.Round(spelopedes) : 1;
- }
-
- private void MakeDirt(int multiplier = 1)
- {
- Pawn caster = this.parent.pawn;
-
- FilthMaker.TryMakeFilth(caster.Position, caster.Map, ThingDefOf.Filth_AmnioticFluid, caster.LabelIndefinite(), count: Rand.Range(5,5*multiplier));
- }
-
- public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
- {
- if (!target.Cell.Filled(this.parent.pawn.Map) && (target.Cell.GetEdifice(this.parent.pawn.Map) == null))
- return true;
- if (throwMessages)
- Messages.Message((string)("CannotUseAbility".Translate((NamedArgument)this.parent.def.label) + ": " + "AbilityOccupiedCells".Translate()), (LookTargets)target.ToTargetInfo(this.parent.pawn.Map), MessageTypeDefOf.RejectInput, false);
- return false;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.cs b/1.4/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.cs
deleted file mode 100644
index e73d22d..0000000
--- a/1.4/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.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;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class CompProperties_AbilityCocoonWeaver : CompProperties_AbilityEffect
- {
- public CompProperties_AbilityCocoonWeaver()
- {
- this.compClass = typeof(CompAbilityEffect_CocoonWeaver);
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Abilities/CompProperties_AbilitySpawnSpelopede.cs b/1.4/Source/Genes/Hive/Abilities/CompProperties_AbilitySpawnSpelopede.cs
deleted file mode 100644
index 1bf71df..0000000
--- a/1.4/Source/Genes/Hive/Abilities/CompProperties_AbilitySpawnSpelopede.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class CompProperties_AbilitySpawnSpelopede : CompProperties_AbilityEffect
- {
- public PawnKindDef pawnKindDef;
- public float sensitivityMultiplier;
- public bool tamed;
- public CompProperties_AbilitySpawnSpelopede()
- {
- this.compClass = typeof(CompAbilityEffect_SpawnSpelopede);
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Defs/HiveOffspringChanceDef.cs b/1.4/Source/Genes/Hive/Defs/HiveOffspringChanceDef.cs
deleted file mode 100644
index 77a4c28..0000000
--- a/1.4/Source/Genes/Hive/Defs/HiveOffspringChanceDef.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 HiveOffspringChanceDef : Def
- {
-
- public string queenXenotype;
-
- // Chance of the below should be 1 when summed up!
- // Otherwise the roll-logic fails.
-
- public double queenChance;
- public double droneChance;
- public double workerChance;
-
- }
-}
diff --git a/1.4/Source/Genes/Hive/Defs/QueenWorkerMappingDef.cs b/1.4/Source/Genes/Hive/Defs/QueenWorkerMappingDef.cs
deleted file mode 100644
index b825c7c..0000000
--- a/1.4/Source/Genes/Hive/Defs/QueenWorkerMappingDef.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This def covers the birth of workers for each queen-xenotype.
- ///
- /// It is used when a baby is born to a pawn with the queen-xenotype;
- /// There is a random check for the type of the baby, and if the baby is born to be a worker,
- /// additional genes are looked up here.
- ///
- public class QueenWorkerMappingDef : Def
- {
- public string queenXenotype;
- public List workerGenes;
- }
-}
diff --git a/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_MultipleQueens.cs b/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_MultipleQueens.cs
deleted file mode 100644
index 22f0ba1..0000000
--- a/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_MultipleQueens.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using RimWorld;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// Checks if there are multiple queens on the map.
- ///
- public class ConditionalStatAffecter_MultipleQueens : ConditionalStatAffecter
- {
- public override string Label => (string)"StatsReport_MultipleQueens".Translate();
-
- public override bool Applies(StatRequest req)
- {
- if (req.Pawn == null || !req.Pawn.Spawned)
- return false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(req.Pawn))
- return false;
-
- if (GeneUtility.HasGeneNullCheck(req.Pawn, GeneDefOf.rjw_genes_zealous_loyalty))
- {
- return HiveUtility.QueensOnMap() >= 2;
- }
-
- return false;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_QueenAbsent.cs b/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_QueenAbsent.cs
deleted file mode 100644
index 9a468df..0000000
--- a/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_QueenAbsent.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using RimWorld;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// Checks if there is no queen on the map.
- ///
- public class ConditionalStatAffecter_QueenAbsent : ConditionalStatAffecter
- {
- public override string Label => (string)"StatsReport_QueenAbsent".Translate();
-
- public override bool Applies(StatRequest req)
- {
- if (req.Pawn == null || !req.Pawn.Spawned)
- return false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(req.Pawn))
- return false;
-
- if (GeneUtility.HasGeneNullCheck(req.Pawn, GeneDefOf.rjw_genes_zealous_loyalty))
- {
- return HiveUtility.QueensOnMap() == 0;
- }
-
- return false;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_QueenCloseBy.cs b/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_QueenCloseBy.cs
deleted file mode 100644
index e604b54..0000000
--- a/1.4/Source/Genes/Hive/Genes/ConditionalStatAffecters/ConditionalStatAffecter_QueenCloseBy.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using RimWorld;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// Checks if there is (exactly) one queen nearby.
- /// If the pawn is a queen itself, it's checked if there are OTHER queens nearby.
- /// While this is used for mostly positive things for workers and drones, for queens it checks if there is a rival nearby.
- ///
- public class ConditionalStatAffecter_QueenCloseBy : ConditionalStatAffecter
- {
-
- const float EFFECT_DISTANCE = 10.0f;
-
- public override string Label => (string)"StatsReport_QueenCloseBy".Translate();
-
- public override bool Applies(StatRequest req)
- {
- if (req.Pawn == null || !req.Pawn.Spawned)
- return false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(req.Pawn))
- return false;
-
- // Case A: Check for Loyal Pawns if their One Queen is nearby
- if (GeneUtility.HasGeneNullCheck(req.Pawn, GeneDefOf.rjw_genes_zealous_loyalty) && HiveUtility.QueensOnMap() == 1)
- {
- Pawn queen = HiveUtility.GetQueensOnMap()[0];
-
- return req.Pawn.Position.DistanceTo(queen.Position) <= EFFECT_DISTANCE;
- }
-
- // Case A: Check for Queen if another Queen is nearby
- if (GeneUtility.HasGeneNullCheck(req.Pawn, GeneDefOf.rjw_genes_zealous_loyalty) && HiveUtility.QueensOnMap() >= 2)
- {
- foreach (Pawn queen in HiveUtility.GetQueensOnMap())
- {
- if (queen != req.Pawn && req.Pawn.Position.DistanceTo(queen.Position) <= EFFECT_DISTANCE)
- return true;
- }
- }
-
-
- return false;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs b/1.4/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs
deleted file mode 100644
index 5173dd0..0000000
--- a/1.4/Source/Genes/Hive/Genes/Gene_InsectIncubator.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 Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// This Gene checks for all parasitic Insect-Eggs in a Pawn:
- /// 1. Is it fertilized ? => tick it down "extra".
- /// 2. Is it not fertilized? => fertilize it with the Incubator as parent
- ///
- /// To save performance, this gene fires (default) every 0.5h, which also means a slight delay until fertilization happens.
- ///
- /// Important: The other half of the behavior for the gene (more egg-capacity) is in `Patch_InsectINcubator_PregnancyHelper`.
- ///
- public class Gene_InsectIncubator : Gene
- {
-
- const int TICK_INTERVAL = 60000 / 48; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day.
-
- public override void Tick()
- {
- base.Tick();
-
- // Don't check too often, only in the HashTickInterval to safe some computing power
- if (this.pawn.IsHashIntervalTick(TICK_INTERVAL) && this.pawn.Map != null)
- {
- List eggs = new List();
- pawn.health.hediffSet.GetHediffs(ref eggs);
- // This part works as intended and shows Non-Human Eggs too
- //if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Gene_InsectIncubator: Found {eggs.Count} Hediff_InsectEgg in {pawn}");
-
-
- foreach (Hediff_InsectEgg egg in eggs)
- {
- // The implanter check checks if the egg is still in an ovipositor.
- if (egg.implanter == null || egg.implanter == pawn)
- continue;
-
- if (!egg.fertilized && egg.implanter != null) {
- egg.Fertilize(pawn);
- // DevNote Issue 38: Sometimes Eggs are not fertilized here, because the normal Fertilize Function is called which has an upper Limit on Gestation.
- // I will not do anything about it here, maybe upstream, but I print here.
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- {
- if (egg.fertilized)
- ModLog.Message($"Gene_InsectIncubator: fertilized egg {egg} in {pawn}");
- else if (egg.GestationProgress > 0.5)
- ModLog.Message($"Gene_InsectIncubator: Failed to fertilize {egg} in {pawn} due to high gestation progress");
- else
- ModLog.Message($"Gene_InsectIncubator: failed to fertiliz egg {egg} in {pawn}");
- }
- }
- // DevNote: There is an issue with Eggs reaching too much gestation progress (>100%), which causes DownStream bugs. To avoid this, there are some extra checks in place.
- else if (egg.fertilized && egg.GestationProgress <= .93)
- {
- egg.lastTick += TICK_INTERVAL;
- }
- }
- }
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Helpers/HiveBirthLogic.cs b/1.4/Source/Genes/Hive/Helpers/HiveBirthLogic.cs
deleted file mode 100644
index a706ea7..0000000
--- a/1.4/Source/Genes/Hive/Helpers/HiveBirthLogic.cs
+++ /dev/null
@@ -1,202 +0,0 @@
-using RimWorld;
-using rjw;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection.Emit;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// DevNote: Issue #37 came along because I checked for getMother() and getFather(), but it can happen that a pawn has two mothers.
- /// They are called Mother if they have a ParentRelation and are female.
- /// New behaviour iterates over all parents and returns the first queen/drone or null.
- ///
- public class HiveBirthLogic
- {
- ///
- /// Central function for the Hive-Birth logic used in Patches.
- /// *Only* run this, if the pawn has a queen parent (either as mother/father, or as implanter in case of egg-logic).
- /// Covers the following behavior:
- /// 1. look up the Defs for the mother and HiveOffspringChances (or defaults)
- /// 2. If there is no drone involved, default to worker
- /// 3. Roll a random dice
- /// 3.1 Make a queen
- /// 3.2 Make a drone
- /// 3.3 Make a worker
- ///
- /// The pawn born, that maybe becomes a hive-xenotype.
- /// whether there was a drone parent involved
- public static void ManageHiveBirth(Pawn pawn, bool hasDroneParent = false, Either fallbackQueenDef = null, Either fallbackDroneDef = null)
- {
- Either queenDef = TryFindParentQueenXenotype(pawn);
- if (queenDef == null) queenDef = fallbackQueenDef;
- HiveOffspringChanceDef hiveOffspringChanceDef = HiveUtility.LookupHiveInheritanceChances(queenDef);
-
- // Case 1: Mother is Queen, Father is something else. Produce Worker.
- if (!hasDroneParent)
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} was born as a worker, as it did not have Drone Father ({100}% chance)");
- MakeWorker(pawn, queenDef);
- }
- // Case 2: Mother is Queen, Father is drone. Apply xenotype as per chance.
- else
- {
- double roll = (new Random()).NextDouble();
- // Case 2.a: New Queen born
- if (roll < hiveOffspringChanceDef.queenChance)
- {
- MakeQueen(pawn, queenDef);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Queen Chance: {hiveOffspringChanceDef.queenChance * 100}% chance,rolled { roll}");
- }
- // Case 2.b: New Drone born
- else if (roll < hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance)
- {
- var droneDef = TryFindParentDroneXenotype(pawn);
- MakeDrone(pawn,droneDef);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Drone Chance ({(hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance) * 100}% chance,rolled {roll}))");
- }
- // Case 2.c: Worker
- else
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a worker ({(hiveOffspringChanceDef.workerChance) * 100}% chance,rolled {roll}))");
- MakeWorker(pawn, queenDef);
- }
- }
- }
-
- private static void MakeQueen(Pawn pawnToBeQueen, Either queenDef) {
- if (queenDef == null && pawnToBeQueen == null)
- return;
- if (queenDef.isLeft) {
- var xenotype = queenDef.left;
- pawnToBeQueen.genes.SetXenotype(xenotype);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeQueen} born as a new queen with Xenotype {xenotype.defName}");
- } else {
- var customXenotype = queenDef.right;
-
- foreach (var gene in customXenotype.genes)
- pawnToBeQueen.genes.AddGene(gene, true);
-
- pawnToBeQueen.genes.xenotypeName = customXenotype.name;
- pawnToBeQueen.genes.iconDef = customXenotype.iconDef;
-
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeQueen} born as a new queen with custom Xenotype {customXenotype.name}");
- }
-
- MakeQueenBornLetter(pawnToBeQueen);
- }
-
-
- private static void MakeDrone(Pawn pawnToBeDrone, Either droneDef)
- {
- if (droneDef == null && pawnToBeDrone == null)
- return;
- if (droneDef.isLeft)
- {
- var xenotype = droneDef.left;
- pawnToBeDrone.genes.SetXenotype(xenotype);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeDrone} born as a new drone with Xenotype {xenotype.defName}");
- }
- else
- {
- var customXenotype = droneDef.right;
-
- foreach (var gene in customXenotype.genes)
- pawnToBeDrone.genes.AddGene(gene, true);
-
- pawnToBeDrone.genes.xenotypeName = customXenotype.name;
- pawnToBeDrone.genes.iconDef = customXenotype.iconDef;
-
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeDrone} born as a new drone with custom Xenotype {customXenotype.name}");
- }
- }
-
- ///
- /// Turns a given pawn into a worker, by looking up the relevant genes as per queen.
- ///
- /// If the queen xenotype has no mapping, the "rjw_genes_default_worker_xenotype" are used instead.
- /// The genes are added as endogenes, so the worker can still become a xenotype.
- ///
- /// The pawn for which the genes are added.
- /// The xenotype of the queen, used for lookup.
- private static void MakeWorker(Pawn pawnTobeWorker, Either queenDef)
- {
- if (pawnTobeWorker == null)
- return;
-
- var mappings = HiveUtility.GetQueenWorkerMappings();
- String queenDefName = HiveUtility.GetXenotypeDefName(queenDef);
- if (queenDef == null || mappings.NullOrEmpty())
- return;
-
- var genes = mappings.TryGetValue(queenDefName, HiveUtility.LookupDefaultWorkerGenes());
- if (genes == null)
- return;
-
- foreach (var gene in genes)
- pawnTobeWorker.genes.AddGene(gene, false);
-
- pawnTobeWorker.genes.xenotypeName = "Worker";
- }
-
- ///
- /// Looks up if there is a Xenotype with Drone-Gene for the pawns parents.
- /// This is to account that maybe father or mother are the drone (instead of hardcoding things for father).
- /// If both are drones, the mothers is returned.
- ///
- /// The pawn for whichs parent the xenotypes is looked up.
- /// The Drone-Xenotype of a parent or null. If both are drones, mothers are preferred.
- public static Either TryFindParentDroneXenotype(Pawn pawn)
- {
- if (pawn == null)
- return null;
-
- List parentRelations = pawn.relations.DirectRelations.FindAll(rel => rel.def.Equals(PawnRelationDefOf.Parent));
- foreach (DirectPawnRelation parent in parentRelations)
- {
- var xenotype = HiveUtility.TryGetDroneXenotype(parent.otherPawn);
- if (xenotype != null) return xenotype;
- }
-
- return null;
- }
-
- public static void MakeQueenBornLetter(Pawn bornQueen)
- {
- if (bornQueen == null) return;
-
- var letter = LetterMaker.MakeLetter(
- "rjw_genes_queenbirth_letter_label".Translate(),
- string.Format("rjw_genes_queenbirth_letter_description".Translate(), xxx.get_pawnname(bornQueen)),
- LetterDefOf.NeutralEvent, bornQueen);
- Find.LetterStack.ReceiveLetter(letter);
- }
-
- ///
- /// Looks up if there is a Xenotype with Queen-Gene for the pawns parents.
- /// This is to account that maybe father or mother are the queen (instead of hardcoding things for father).
- /// If both are queens, the first is returned.
- ///
- /// The pawn for whichs parent the xenotypes is looked up.
- /// The Queen-Xenotype of a parent or null. If both are queens, mothers are preferred.
- public static Either TryFindParentQueenXenotype(Pawn pawn)
- {
- if (pawn == null)
- return null;
-
- List parentRelations = pawn.relations.DirectRelations.FindAll(rel => rel.def.Equals(PawnRelationDefOf.Parent));
- foreach (var parent in parentRelations)
- {
- var xenotype = HiveUtility.TryGetQueenXenotype(parent.otherPawn);
- if (xenotype != null) return xenotype;
- }
-
- return null;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Helpers/HiveUtility.cs b/1.4/Source/Genes/Hive/Helpers/HiveUtility.cs
deleted file mode 100644
index 089be9c..0000000
--- a/1.4/Source/Genes/Hive/Helpers/HiveUtility.cs
+++ /dev/null
@@ -1,274 +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
-{
- internal class HiveUtility
- {
-
- ///
- /// Checks for existance of the RJW-Gene `queen`, if the pawn is spawned and if the pawn has reached adulthood.
- /// Despite the naming, a Queen can also be male.
- ///
- /// The pawn that could be an Adult Queen
- /// Whether the pawn is an adult queen.
- public static bool IsAdultQueen(Pawn pawn)
- {
-
- if (pawn == null || !pawn.Spawned)
- return false;
-
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_queen))
- {
- return pawn.ageTracker.Adult;
- }
-
- return false;
- }
-
- public static int QueensOnMap() => GetQueensOnMap().Count;
-
- ///
- /// Checks for all pawns on the Players Home Map if they are an adult queen.
- /// Adultness is determined by Base-Game Logic, Queen is determined by the rjw_genes_queen GeneDefOf (Not Xenotype).
- ///
- /// A list of queens on the players HomeMap
- public static List GetQueensOnMap()
- {
- Map map = Find.Maps.Where(mapCandidate => mapCandidate.IsPlayerHome).First();
-
- if (map != null)
- {
- List playersPawns = map.mapPawns.SpawnedPawnsInFaction(Faction.OfPlayer);
- return playersPawns.FindAll(pawn => pawn.Spawned && IsAdultQueen(pawn));
- }
- // Fallback: Something is wrong with Map
- return new List();
- }
-
- ///
- /// Checks if the pawn is on the players home map.
- ///
- /// Reason is that drones should only be punished for absence of queen if they are on the map and there is no queen.
- /// If they are on a mission, transport-pod etc. they should not get boni or mali.
- ///
- /// The pawn for which to check map-presence.
- /// True if the pawn is on the home-map, False otherwise.
- public static bool PawnIsOnHomeMap(Pawn pawn)
- {
- if (Find.Maps.NullOrEmpty() || !Find.Maps.Where(mapCandidate => mapCandidate.IsPlayerHome).Any()) {
- return false;
- }
- Map homeMap = Find.Maps.Where(mapCandidate => mapCandidate.IsPlayerHome).First();
- return
- homeMap != null && pawn != null
- && pawn.Spawned
- && pawn.Map == homeMap;
- }
-
- ///
- /// Returns the Xenotype of a pawn if the pawn has a xenotype with the queen gene.
- /// Null otherwise.
- ///
- ///
- /// A xenotype with a queen gene, or null.
- public static Either TryGetQueenXenotype(Pawn pawn)
- {
- if (pawn == null)
- return null;
-
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_queen))
- {
- var potentialXenotype = pawn.genes.Xenotype;
- if (potentialXenotype != null && potentialXenotype.genes.Contains(GeneDefOf.rjw_genes_queen))
- {
- return new Either(potentialXenotype);
- }
-
- var potentialCustomXenotype = pawn.genes.CustomXenotype;
- if (potentialCustomXenotype != null && potentialCustomXenotype.genes.Contains(GeneDefOf.rjw_genes_queen))
- {
- return new Either(potentialCustomXenotype);
- }
-
- }
-
- return null;
- }
-
-
- ///
- /// Returns the Xenotype of a pawn if the pawn has a xenotype with the drone gene.
- /// Null otherwise.
- ///
- ///
- /// A xenotype with a drone gene, or null.
- public static Either TryGetDroneXenotype(Pawn pawn)
- {
- if (pawn == null)
- return null;
-
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_drone))
- {
- var potentialXenotype = pawn.genes.Xenotype;
- if (potentialXenotype != null && potentialXenotype.genes.Contains(GeneDefOf.rjw_genes_drone))
- {
- return new Either(potentialXenotype);
- }
-
- var potentialCustomXenotype = pawn.genes.CustomXenotype;
- if (potentialCustomXenotype != null && potentialCustomXenotype.genes.Contains(GeneDefOf.rjw_genes_drone))
- {
- return new Either(potentialCustomXenotype);
- }
- }
-
- return null;
- }
-
- ///
- /// Looks up the Queen-WorkerMappings and returns a cleaned / updated dictionary.
- ///
- /// This method takes care of genes maybe not existing (from other mods) or misspellings etc.
- /// Prints a bigger piece of information when debug printing is enabled.
- ///
- /// A mapping which Queen-Xenotypes should produce which worker genes.
- public static Dictionary> GetQueenWorkerMappings()
- {
- IEnumerable mappingDefs = DefDatabase.AllDefs;
-
- Dictionary> results = new Dictionary>();
-
- // Dev-Note: I first a nice lambda here, but I used nesting in favour of logging.
- foreach (QueenWorkerMappingDef mappingDef in mappingDefs)
- {
- // Option A) This is the default worker genes, expected, just ignore.
- if (mappingDef.defName == "rjw_genes_default_worker_genes")
- {
- // Do nothing, there is no lookup but this entry is fine and should not log a warning.
- continue;
- }
- // Option B) The Xenotype is a "static" Xenotype, from a mod or something.
- XenotypeDef queenDef = DefDatabase.GetNamed(mappingDef.queenXenotype);
- string defName = null;
- if (queenDef != null)
- {
- defName = queenDef.defName;
- }
- else if (Current.Game != null && Current.Game.customXenotypeDatabase != null)
- {
- // Option C) The Xenotype is a Custom Xenotype, created by the player
- CustomXenotype customQueenDef = Current.Game.customXenotypeDatabase.customXenotypes.Find(f => f.name == mappingDef.defName);
- defName = customQueenDef?.name;
- }
- if (defName != null)
- {
- List workerGenes = new List();
- foreach (string geneName in mappingDef.workerGenes)
- {
- GeneDef workerGene = DefDatabase.GetNamed(geneName);
- if (workerGene != null)
- workerGenes.Add(workerGene);
- else if(RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Warning($"Could not look up Gene {geneName} for {mappingDef.queenXenotype}.");
- }
- results.Add(defName, workerGenes);
- continue;
- }
-
- // Option D) Fallback, unknown
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Warning($"Did not find a matching xenotype for {mappingDef.queenXenotype}! Defaulting to rjw_genes_default_worker_genes.");
-
- }
-
- return results;
- }
-
- ///
- /// Looks up the default genes for any queen offspring that has no other definition for it.
- /// This is done by looking for the mapping with *exactly* defName rjw_genes_default_worker_genes.
- ///
- /// The idea is that players can edit the default types, but that this is a protected keyword.
- ///
- /// A list of genes for workers that do not have specific mappings defined.
- public static List LookupDefaultWorkerGenes()
- {
- IEnumerable mappingDefs = DefDatabase.AllDefs;
-
- List workerGenes = new List();
-
- var defaultMapping = mappingDefs.First(m => m.defName == "rjw_genes_default_worker_genes");
- if (defaultMapping == null)
- {
- ModLog.Error("Did not find default worker genes for queen-offspring! Please make sure you did not rename the 'rjw_genes_default_worker_genes'.");
- return workerGenes;
- }
-
- foreach (string geneName in defaultMapping.workerGenes)
- {
- GeneDef workerGene = DefDatabase.GetNamed(geneName);
- if (workerGene != null)
- workerGenes.Add(workerGene);
- else if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Warning($"Could not look up gene {geneName} for rjw_genes_default_worker_genes.");
- }
-
- return workerGenes;
- }
-
- public static IEnumerable getQueenXenotypes()
- {
- return DefDatabase.AllDefs.Where(type => type.genes.Contains(GeneDefOf.rjw_genes_queen));
- }
-
- public static IEnumerable getDroneXenotypes()
- {
- return DefDatabase.AllDefs.Where(type => type.genes.Contains(GeneDefOf.rjw_genes_drone));
- }
-
-
- public static String GetXenotypeDefName(Either def)
- {
- if (def == null)
- return null;
- else if (def.isLeft)
- return def.left.defName;
- else
- return def.right.name;
- }
-
- public static HiveOffspringChanceDef LookupDefaultHiveInheritanceChances()
- {
- IEnumerable offspringChanceDefs = DefDatabase.AllDefs;
-
- List workerGenes = new List();
-
- var defaultChance = offspringChanceDefs.First(m => m.defName == "rjw_genes_default_hive_offspring_chances");
-
- if (defaultChance == null)
- ModLog.Warning("Did not find `rjw_genes_default_hive_offspring_chances`. Someone likely changed the defname!");
-
- return defaultChance;
- }
-
- public static HiveOffspringChanceDef LookupHiveInheritanceChances(Either queenDef)
- {
- if (queenDef == null)
- return LookupDefaultHiveInheritanceChances();
-
- String queenDefName = queenDef.isLeft ? queenDef.left.defName : queenDef.right.name;
-
- IEnumerable offspringChanceDefs = DefDatabase.AllDefs;
-
- return offspringChanceDefs.FirstOrFallback(t => t.queenXenotype == queenDefName, LookupDefaultHiveInheritanceChances());
- }
-
-
- }
-}
diff --git a/1.4/Source/Genes/Hive/Patches/Patch_BirthOutcome_SetHiveGenes.cs b/1.4/Source/Genes/Hive/Patches/Patch_BirthOutcome_SetHiveGenes.cs
deleted file mode 100644
index 7bdf206..0000000
--- a/1.4/Source/Genes/Hive/Patches/Patch_BirthOutcome_SetHiveGenes.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// Patches the method `ApplyBirthOutcome` from `PregnancyUtility`.
- ///
- /// The 'ApplyBirthOutcome' returns the finished baby, for which we alter the pawn according to our xenotypes.
- ///
-
- [HarmonyPatch(typeof(PregnancyUtility), nameof(PregnancyUtility.ApplyBirthOutcome))]
- public class Patch_BirthOutcome_SetHiveGenes
- {
-
-
- [HarmonyPostfix]
- static void HandleHiveBasedInheritance(ref Thing __result)
- {
-
- // Check: Was the born thing a pawn?
- if (__result == null || !(__result is Pawn))
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message("There was a birth of something non-human - not entering logic for queen-drone-xenotype inheritance.");
- return;
- }
-
- Pawn pawn = (Pawn)__result;
-
- // Important: Not all pawns have mother/father. Some Pawns are born in Growth-Vats or born from mod.
- bool hasQueenParent = HiveBirthLogic.TryFindParentQueenXenotype(pawn) != null;
- bool hasDroneParent = HiveBirthLogic.TryFindParentDroneXenotype(pawn) != null;
-
- if (hasQueenParent)
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"PostFix PregnancyUtility::ApplyBirthOutcome - Checking Hive Inheritance because {pawn} has a queen parent.");
-
- HiveBirthLogic.ManageHiveBirth(pawn, hasDroneParent);
- }
- else
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Ignoring Postfix PregnancyUtility::ApplyBirthOutcome - No Quene Parent - Doing Nothing");
- }
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Hive/Patches/Patch_InsectBreeder_EggFertilization.cs b/1.4/Source/Genes/Hive/Patches/Patch_InsectBreeder_EggFertilization.cs
deleted file mode 100644
index 6184b4a..0000000
--- a/1.4/Source/Genes/Hive/Patches/Patch_InsectBreeder_EggFertilization.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HarmonyLib;
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- ///
- /// This Class patches the AfterSexUtility to also fertilize eggs if Pawn A has "InsectBreeder" and Pawn B has Insect Eggs.
- /// Patched Class is https://gitgud.io/Ed86/rjw/-/blob/master/1.4/Source/Common/Helpers/SexUtility.cs
- ///
- /// Normal Egg-Pregnancy logic is in https://gitgud.io/Ed86/rjw/-/blob/master/1.4/Source/Modules/Pregnancy/Pregnancy_Helper.cs
- /// Gene: rjw_genes_insectbreeder
- ///
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- static class Patch_InsectBreeder_EggFertilization
- {
- public static void Postfix(SexProps props)
- {
- // Only Fertilize on vaginal / anal sex
- if (!(props.sexType == xxx.rjwSextype.Vaginal || props.sexType == xxx.rjwSextype.Anal))
- {
- return;
- }
-
-
- if (canDoEggFertilization(props.pawn, props.partner))
- {
- // Pawn has gene and Partner has eggs
- if (props.pawn.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(props.partner).NullOrEmpty())
- {
- Pawn eggHolder = props.partner;
- Pawn impregnator = props.pawn;
-
- foreach (Hediff_InsectEgg egg in getEggsforPawn(eggHolder))
- {
- if (!egg.fertilized)
- egg.Fertilize(impregnator);
- }
- }
-
- // Partner has gene and Pawn has eggs
- if (props.partner.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(props.pawn).NullOrEmpty())
- {
- Pawn eggHolder = props.pawn;
- Pawn impregnator = props.partner;
-
- foreach (Hediff_InsectEgg egg in getEggsforPawn(eggHolder))
- {
- if (!egg.fertilized)
- egg.Fertilize(impregnator);
- }
- }
-
-
- }
- }
-
-
- private static bool canDoEggFertilization(Pawn a, Pawn b)
- {
-
- // No Partner / Other Errors
- if (a != null || b != null)
- return false;
- // None of the pawns has the relevant gene
- if (!a.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !b.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder))
- return false;
- // None of the pawns has eggs
- if (getEggsforPawn(a).NullOrEmpty() && getEggsforPawn(b).NullOrEmpty())
- return false;
-
- // A has gene and B has eggs
- if (a.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(b).NullOrEmpty())
- {
- return true;
- }
- // B has gene and A has eggs
- if (b.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(a).NullOrEmpty())
- {
- return true;
- }
- // Any other case: Do nothing
- return false;
- }
-
- private static List getEggsforPawn(Pawn pawn)
- {
- List eggs = new List();
- pawn.health.hediffSet.GetHediffs(ref eggs);
- foreach (var egg in eggs)
- egg.Fertilize(pawn);
-
- return eggs;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Patches/Patch_InsectEggs_BirthBaby_SetHiveGenes.cs b/1.4/Source/Genes/Hive/Patches/Patch_InsectEggs_BirthBaby_SetHiveGenes.cs
deleted file mode 100644
index 5c5e98d..0000000
--- a/1.4/Source/Genes/Hive/Patches/Patch_InsectEggs_BirthBaby_SetHiveGenes.cs
+++ /dev/null
@@ -1,112 +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
-{
- ///
- /// Patches the method `ProcessHumanLikeInsectEgg` from `Hediff_InsectEgg`.
- ///
- /// The 'ProcessHumanLikeInsectEgg' returns the finished baby, for which we alter the pawn according to our xenotypes.
- /// Note: This covers Insect-Egg Pregnancies only, and there is a (very similar) class `Patch_BirthOutCome_SetHiveGenes.cs` that handles normal pregnancies
- ///
-
- [HarmonyPatch(typeof(Hediff_InsectEgg), "ProcessHumanLikeInsectEgg")]
- public class Patch_InsectEgg_BirthBaby_SetHiveGenes
- {
-
-
- [HarmonyPostfix]
- static void HandleHiveBasedInheritance(ref Thing __result, ref Hediff_InsectEgg __instance)
- {
- // Check: Was the born thing a pawn?
- if (__result == null || !(__result is Pawn))
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message("There was a birth of something non-human - not entering logic for queen-drone-xenotype inheritance.");
- return;
- }
-
- Pawn pawn = (Pawn)__result;
-
- Either queenDef = HiveBirthLogic.TryFindParentQueenXenotype(pawn) ?? TryFindParentQueenXenotypeFromEgg(__instance);
- Either droneDef = HiveBirthLogic.TryFindParentDroneXenotype(pawn) ?? TryFindParentDroneXenotypeFromEgg(__instance);
-
- bool hasQueenParent = queenDef != null;
- bool hasDroneParent = droneDef != null;
-
- if (hasQueenParent)
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"PostFix Hediff_InsectEgg::ProcessHumanLikeInsectEgg - Checking Hive Inheritance because {pawn} has a queen parent.");
- HiveBirthLogic.ManageHiveBirth(pawn, hasDroneParent, fallbackQueenDef: queenDef, fallbackDroneDef: droneDef);
- } else
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Ignoring Postfix Hediff_InsectEgg::ProcessHumanLikeInsectEgg - No Queen Parent - No Action.");
-
- // Extra Debug for #56
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- {
- ModLog.Message($"Implanter was: ({__instance.implanter.genes.xenotypeName}|{__instance.implanter.genes.Xenotype}), Fertilizer was: ({__instance.father.genes.xenotypeName}|{__instance.father.genes.Xenotype})");
- ModLog.Message($"Implanter Xenotype From helper: {HiveUtility.TryGetQueenXenotype(__instance.implanter)} and has Queen {__instance.implanter.genes.HasGene(GeneDefOf.rjw_genes_queen)}");
- ModLog.Message($"Father Xenotype From helper: {HiveUtility.TryGetDroneXenotype(__instance.implanter)} and has Drone {__instance.father.genes.HasGene(GeneDefOf.rjw_genes_drone)}");
- CustomXenotype custom = __instance.implanter.genes.CustomXenotype;
- }
- }
- }
-
- ///
- /// Tries to retrieve a queen-xenotype-def from a given egg.
- /// Checking priority goes: Implanter > Fertilizer > Null Otherwise.
- ///
- /// This is meant to be a fallback to the parent-relations which were not present in RJW 5.3.1.
- /// Some comments and thoughts are captured in Issue #37.
- ///
- /// An Egg for which queens are looked up for
- /// The relevant xenotypedef of a queen, or null.
- public static Either TryFindParentQueenXenotypeFromEgg(Hediff_InsectEgg egg)
- {
- Either queenDef = null;
- if (egg == null)
- return null;
-
- if (egg.implanter != null)
- queenDef = HiveUtility.TryGetQueenXenotype(egg.implanter);
-
- if (queenDef == null && egg.father != null)
- queenDef = HiveUtility.TryGetQueenXenotype(egg.implanter);
-
- return queenDef;
- }
-
-
-
- ///
- /// Tries to retrieve a drone-xenotype-def from a given egg.
- /// Checking priority goes: Implanter > Fertilizer > Null Otherwise.
- ///
- /// This is meant to be a fallback to the parent-relations which were not present in RJW 5.3.1.
- /// Some comments and thoughts are captured in Issue #37.
- ///
- /// An Egg for which drones are looked up for
- /// The relevant xenotypedef of a drone, or null.
- public static Either TryFindParentDroneXenotypeFromEgg(Hediff_InsectEgg egg)
- {
- Either droneDef = null;
- if (egg == null)
- return null;
-
- if (egg.implanter != null)
- droneDef = HiveUtility.TryGetQueenXenotype(egg.implanter);
-
- if (droneDef == null && egg.father != null)
- droneDef = HiveUtility.TryGetQueenXenotype(egg.implanter);
-
- return droneDef;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Patches/Patch_InsectIncubator_PregnancyHelper.cs b/1.4/Source/Genes/Hive/Patches/Patch_InsectIncubator_PregnancyHelper.cs
deleted file mode 100644
index fc3e530..0000000
--- a/1.4/Source/Genes/Hive/Patches/Patch_InsectIncubator_PregnancyHelper.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Reflection.Emit;
-using System.Reflection;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HarmonyLib;
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- ///
- /// This Class patches the RJW-DoEgg to allow up to MaxEggSizeMul times the original amount of eggs.
- /// This harmony patch was kindly provided by 'shabalox' https://github.com/Shabalox/RJW_Genes_Addons/
- ///
- /// For Gene: rjw_genes_insectincubator
- ///
- [HarmonyPatch(typeof(PregnancyHelper), "DoEgg")]
- static class Patch_InsectIncubator_PregnancyHelper
- {
- [HarmonyTranspiler]
- public static IEnumerable Transpiler(IEnumerable instructions, ILGenerator il)
- {
- //MethodInfo isinsectincubator = AccessTools.Method(typeof(GeneUtility), "IsInsectIncubator");
- MethodInfo maxeggsizemul = AccessTools.Method(typeof(GeneUtility), "MaxEggSizeMul");
- FieldInfo partner = AccessTools.Field(typeof(SexProps), "partner");
-
- Label skiplabel = il.DefineLabel();
- bool finished = false;
- foreach (CodeInstruction codeInstruction in instructions)
- {
- if (!finished)
- {
- if (codeInstruction.opcode == OpCodes.Ldc_R4 && codeInstruction.operand.ToString() == "0")
- {
- yield return new CodeInstruction(OpCodes.Ldarg_0, null);
- yield return new CodeInstruction(OpCodes.Ldfld, partner);
- //yield return new CodeInstruction(OpCodes.Call, isinsectincubator);
- yield return new CodeInstruction(OpCodes.Callvirt, maxeggsizemul);
- //yield return new CodeInstruction(OpCodes.Brfalse_S, skiplabel);
- yield return new CodeInstruction(OpCodes.Ldloc_0, null);
- //yield return new CodeInstruction(OpCodes.Ldc_R4, 2f);
- yield return new CodeInstruction(OpCodes.Mul, null);
- yield return new CodeInstruction(OpCodes.Stloc_0, null);
- //codeInstruction.labels.Add(skiplabel);
- finished = true;
- }
- }
- yield return codeInstruction;
- }
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_QueenPresent_Social.cs b/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_QueenPresent_Social.cs
deleted file mode 100644
index e4e7792..0000000
--- a/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_QueenPresent_Social.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
-{
- public class ThoughtWorker_QueenPresent_Social : ThoughtWorker
- {
- protected override ThoughtState CurrentSocialStateInternal(Pawn p, Pawn other)
- {
- // p is the pawn `thinking`, and other is the pawn being thought about.
- // here: p = loyal pawn, other = potential queen
-
- if (!p.RaceProps.Humanlike)
- return (ThoughtState) false;
-
- if (!other.RaceProps.Humanlike)
- return (ThoughtState) false;
-
- if (!RelationsUtility.PawnsKnowEachOther(p, other))
- return (ThoughtState) false;
-
- // Only check if they are spawned
- if (!p.Spawned || !other.Spawned)
- return (ThoughtState)false;
-
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(p))
- return (ThoughtState)false;
-
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_zealous_loyalty) && HiveUtility.QueensOnMap() == 1)
- {
- return (ThoughtState) HiveUtility.IsAdultQueen(other);
- }
-
- return (ThoughtState)false;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_RivalQueen_Social.cs b/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_RivalQueen_Social.cs
deleted file mode 100644
index 24b1b79..0000000
--- a/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_RivalQueen_Social.cs
+++ /dev/null
@@ -1,39 +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_RivalQueen_Social : ThoughtWorker
- {
- protected override ThoughtState CurrentSocialStateInternal(Pawn p, Pawn other)
- {
- if (!p.RaceProps.Humanlike)
- return (ThoughtState)false;
- if (!other.RaceProps.Humanlike)
- return (ThoughtState)false;
-
- if (!RelationsUtility.PawnsKnowEachOther(p, other))
- return (ThoughtState)false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(p))
- return (ThoughtState)false;
-
- // Only check if they are spawned
- if (!p.Spawned || !other.Spawned)
- {
- return (ThoughtState)false;
- }
-
- if(HiveUtility.IsAdultQueen(p) && HiveUtility.IsAdultQueen(other))
- {
- return (ThoughtState)true;
- }
- return (ThoughtState)false;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_WorkerDespised_Social.cs b/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_WorkerDespised_Social.cs
deleted file mode 100644
index 8a9ad53..0000000
--- a/1.4/Source/Genes/Hive/Thoughts/ThoughtWorker_WorkerDespised_Social.cs
+++ /dev/null
@@ -1,39 +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_WorkerDespised_Social : ThoughtWorker
- {
- protected override ThoughtState CurrentSocialStateInternal(Pawn p, Pawn other)
- {
- // p is the pawn `thinking`, and other is the pawn being thought about.
- // here: p = queen, other = potential worker
-
- if (!p.RaceProps.Humanlike)
- return (ThoughtState) false;
-
- if (!other.RaceProps.Humanlike)
- return (ThoughtState) false;
-
- if (!RelationsUtility.PawnsKnowEachOther(p, other))
- return (ThoughtState) false;
-
- // Only check if they are spawned
- if (!p.Spawned || !other.Spawned)
- return (ThoughtState)false;
-
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_queen) && GeneUtility.HasGeneNullCheck(other, GeneDefOf.rjw_genes_worker))
- {
- return (ThoughtState)true;
- }
-
- return (ThoughtState)false;
- }
- }
-}
diff --git a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_MultipleQueens_Mood.cs b/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_MultipleQueens_Mood.cs
deleted file mode 100644
index 3265a00..0000000
--- a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_MultipleQueens_Mood.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 Thoughtworker_MultipleQueens_Mood : ThoughtWorker
- {
-
- protected override ThoughtState CurrentStateInternal(Pawn p)
- {
- // Error Handling and Check for Pawn being on Map
- if (p == null || !p.Spawned)
- return (ThoughtState) false;
- // Queens cannot have loyalty thoughts
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_queen))
- return (ThoughtState)false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(p))
- return (ThoughtState)false;
-
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_zealous_loyalty) && HiveUtility.QueensOnMap() >= 2)
- {
- return (ThoughtState)true;
- }
-
- return (ThoughtState) false;
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_QueenAbsent_Mood.cs b/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_QueenAbsent_Mood.cs
deleted file mode 100644
index 502b013..0000000
--- a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_QueenAbsent_Mood.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 Thoughtworker_QueenAbsent_Mood : ThoughtWorker
- {
-
- protected override ThoughtState CurrentStateInternal(Pawn p)
- {
- // Error Handling and Check for Pawn being on Map
- if (p == null || !p.Spawned)
- return (ThoughtState) false;
- // Queens cannot have loyalty thoughts
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_queen))
- return (ThoughtState)false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(p))
- return (ThoughtState)false;
-
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_zealous_loyalty) && HiveUtility.QueensOnMap() == 0)
- {
- return (ThoughtState)true;
- }
-
- return (ThoughtState) false;
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_QueenPresent_Mood.cs b/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_QueenPresent_Mood.cs
deleted file mode 100644
index e6003be..0000000
--- a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_QueenPresent_Mood.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 Thoughtworker_QueenPresent_Mood : ThoughtWorker
- {
-
- protected override ThoughtState CurrentStateInternal(Pawn p)
- {
- // Error Handling and Check for Pawn being on Map
- if (p == null || !p.Spawned)
- return (ThoughtState) false;
- // Queens cannot have loyalty thoughts
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_queen))
- return (ThoughtState)false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(p))
- return (ThoughtState)false;
-
- if (GeneUtility.HasGeneNullCheck(p, GeneDefOf.rjw_genes_zealous_loyalty) && HiveUtility.QueensOnMap() == 1)
- {
- return (ThoughtState)true;
- }
-
- return (ThoughtState) false;
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_RivalQueen_Mood.cs b/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_RivalQueen_Mood.cs
deleted file mode 100644
index fbcdb2b..0000000
--- a/1.4/Source/Genes/Hive/Thoughts/Thoughtworker_RivalQueen_Mood.cs
+++ /dev/null
@@ -1,32 +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_RivalQueen_Mood : ThoughtWorker
- {
-
- protected override ThoughtState CurrentStateInternal(Pawn p)
- {
- if (p == null || !p.Spawned)
- return (ThoughtState) false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(p))
- return (ThoughtState)false;
-
- if (HiveUtility.IsAdultQueen(p) && HiveUtility.QueensOnMap() >= 2)
- {
- return (ThoughtState) true;
- }
-
- return (ThoughtState) false;
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusDreamVisit.cs b/1.4/Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusDreamVisit.cs
deleted file mode 100644
index 7948e37..0000000
--- a/1.4/Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusDreamVisit.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using Verse.AI;
-using Verse.AI.Group;
-using RimWorld;
-using rjw;
-namespace RJW_Genes
-{
- public class IncidentWorker_SuccubusDreamVisit : IncidentWorker
- {
- //This incidint will only fire if there is a pawn asleep and sexneed is lower than 0.25
- protected override bool CanFireNowSub(IncidentParms parms)
- {
- if (!base.CanFireNowSub(parms))
- {
- return false;
- }
- Map map = (Map)parms.target;
- if (!map.mapTemperature.SeasonAcceptableFor(ThingDefOf.Human))
- {
- return false;
- }
- if (!RJW_Genes_Settings.rjw_genes_sexdemon_visit_incubi && !RJW_Genes_Settings.rjw_genes_sexdemon_visit_succubi)
- {
- return false;
- }
-
- foreach (Pawn pawn in map.mapPawns.FreeColonistsAndPrisonersSpawned)
- {
- if (pawn.jobs.curDriver.asleep && xxx.need_some_sex(pawn) > 1f)
- {
- return true;
- }
- }
- return false;
-
- }
-
- protected override bool TryExecuteWorker(IncidentParms parms)
- {
- Map map = (Map)parms.target;
- List < Pawn > victims = ValidVictims(map).ToList();
- if(victims.NullOrEmpty())
- {
- return false;
- }
- Faction faction;
- if (!this.TryFindFormerFaction(out faction))
- {
- return false;
- }
- int pawn_amount = RJW_Genes_Settings.rjw_genes_sexdemon_visit_groups ? Rand.Range(1, victims.Count) : 1;
- List new_sexdemons = new List();
- for (int i = 0; i < pawn_amount; i++)
- {
- Pawn victim = victims.RandomElement();
- IntVec3 loc = victim.Position;
-
- PawnKindDef pawnKindDef;
- Gender gender;
- if (victim.gender == Gender.Male || !RJW_Genes_Settings.rjw_genes_sexdemon_visit_incubi)
- {
-
- }
- if ((Rand.Bool && RJW_Genes_Settings.rjw_genes_sexdemon_visit_succubi) || !RJW_Genes_Settings.rjw_genes_sexdemon_visit_incubi)
- {
- pawnKindDef = PawnKindDef.Named("rjw_genes_succubus");
- gender = Gender.Female;
- }
- else
- {
- pawnKindDef = PawnKindDef.Named("rjw_genes_incubus");
- gender = Gender.Male;
- }
-
- //Spawn succubus at pawn
- Pawn sexdemon = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKindDef, faction, PawnGenerationContext.NonPlayer, -1,
- false, false, false, true, false, 1f, false, true, false, true, true, false, false, false, false, 0f, 0f, null, 1f, null, null,
- null, null, null, null, null, gender, null, null, null, null, false, false, false, false, null, null, null, null, null, 0f,
- DevelopmentalStage.Adult, null, null, null, false));
- sexdemon.SetFaction(null, null);
- GenSpawn.Spawn(sexdemon, loc, map, WipeMode.Vanish);
- List sexdemons = new List { sexdemon };
- new_sexdemons.Add(sexdemon);
-
-
- LordMaker.MakeNewLord(Faction.OfPlayer, this.CreateLordJob(parms, sexdemon, victim), map, sexdemons);
-
- //Make succubus rape victim.
- if (RJWSettings.rape_enabled)
- {
- //follow rjw rules
- if (SexAppraiser.would_fuck(sexdemon,victim) > 0f)
- {
- sexdemon.pather.StopDead();
- sexdemon.jobs.StopAll();
- Job newJob = JobMaker.MakeJob(xxx.RapeRandom, victim);
- sexdemon.jobs.StartJob(newJob, JobCondition.InterruptForced, null, false, true, null, null, false, false, null, false, true);
- }
-
- }
- }
- Find.LetterStack.ReceiveLetter("rjw_genes_sexdemon_visit_incident_label".Translate(), "rjw_genes_sexdemon_visit_incident_description".Translate(), LetterDefOf.PositiveEvent, new_sexdemons, null, null, null, null);
- //base.SendStandardLetter(baseLetterLabel, baseLetterText, this.def.letterDef, parms, succubus, Array.Empty());
-
- return true;
- }
-
- private IEnumerable ValidVictims(Map map)
- {
- foreach (Pawn pawn in map.mapPawns.FreeColonistsAndPrisonersSpawned)
- {
- if (pawn.jobs.curDriver.asleep && xxx.need_some_sex(pawn) > 1f)
- {
- yield return pawn;
- }
- }
- yield break;
- }
-
- private bool TryFindFormerFaction(out Faction formerFaction)
- {
- return Find.FactionManager.TryGetRandomNonColonyHumanlikeFaction(out formerFaction, false, true, TechLevel.Undefined, false);
- }
-
- protected virtual LordJob_SuccubusVisit CreateLordJob(IncidentParms parms, Pawn succubus, Pawn target)
- {
- return new LordJob_SuccubusVisit(target);
- }
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/Events/SuccubusVisit/LordJob_SuccubusVisit.cs b/1.4/Source/Genes/Life_Force/Events/SuccubusVisit/LordJob_SuccubusVisit.cs
deleted file mode 100644
index 7f3c32b..0000000
--- a/1.4/Source/Genes/Life_Force/Events/SuccubusVisit/LordJob_SuccubusVisit.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Verse;
-using Verse.AI.Group;
-using RimWorld;
-using rjw;
-namespace RJW_Genes
-{
- //Based on LordJob_VisitColony
- public class LordJob_SuccubusVisit : LordJob
- {
- public LordJob_SuccubusVisit(){}
- public LordJob_SuccubusVisit(Pawn target)
- {
- this.target = target;
- }
-
- //
- //Stategraph has lordtoils which say what a pawn should be doing
- //Transitions say when active lordtoil for pawn should change
- //
- public override StateGraph CreateGraph()
- {
- StateGraph stateGraph = new StateGraph();
-
- //Flirt
- LordToil_Flirt lordToil_Flirt = new LordToil_Flirt(this.target, 7f);
- stateGraph.AddToil(lordToil_Flirt);
- stateGraph.StartingToil = lordToil_Flirt;
-
- //Leave
- LordToil_ExitMapRandom lordToil_ExitMapRandom = new LordToil_ExitMapRandom();
- stateGraph.AddToil(lordToil_ExitMapRandom);
- LordToil_ExitMapAndDefendSelf lordToil_ExitMapAndDefendSelf = new LordToil_ExitMapAndDefendSelf();
- stateGraph.AddToil(lordToil_ExitMapAndDefendSelf);
-
- //Leave after some time
- Transition transition1 = new Transition(lordToil_Flirt, lordToil_ExitMapRandom, false, true);
- int tickLimit;
- if (this.durationTicks != null)
- {
- tickLimit = this.durationTicks.Value;
- }
- else
- {
- tickLimit = Rand.Range(60000, 180000); //~1-3 days
- }
- transition1.AddTrigger(new Trigger_TicksPassed(tickLimit));
- transition1.AddPreAction(new TransitionAction_Custom(new Action(this.SuccubiLeave))); //Join or leave colony
- stateGraph.AddTransition(transition1);
-
- //If they become hostile
- Transition transition3 = new Transition(lordToil_Flirt, lordToil_ExitMapAndDefendSelf, false, true);
- transition3.AddSource(lordToil_ExitMapRandom); //Not sure what this does
- transition3.AddTrigger(new Trigger_BecamePlayerEnemy());
- transition3.AddTrigger(new Trigger_PawnKilled());
- transition3.AddPostAction(new TransitionAction_EndAllJobs());
- stateGraph.AddTransition(transition3, false);
-
- Transition transition4 = new Transition(lordToil_ExitMapRandom, lordToil_ExitMapAndDefendSelf, false, true);
- transition4.AddSource(lordToil_Flirt); //Not sure what this does
- transition4.AddTrigger(new Trigger_PawnHarmed(1f, true, Faction.OfPlayer));
- stateGraph.AddTransition(transition4, false);
-
- return stateGraph;
- }
-
- //add toggleable gizmo to allow playes to have colonists sex the succubus into joining your colony
- //comfort pawn? cooldown?
- public override IEnumerable GetPawnGizmos(Pawn p)
- {
- return base.GetPawnGizmos(p);
- }
-
- public override void ExposeData()
- {
- Scribe_Values.Look(ref this.durationTicks, "durationTicks", null, false);
- Scribe_References.Look(ref this.target, "target", false);
- }
-
- public void SuccubiLeave()
- {
- foreach (Pawn pawn in this.lord.ownedPawns)
- {
- if(colonyJoiners.Contains(pawn))
- {
- RecruitUtility.Recruit(pawn, Faction.OfPlayer);
- Find.LetterStack.ReceiveLetter("rjw_genes_succubus_joins_letter_label".Translate(), string.Format("rjw_genes_succubus_joins_letter_description".Translate(), xxx.get_pawnname(pawn)), LetterDefOf.PositiveEvent, pawn, null, null, null, null);
- }
- else
- {
- Messages.Message("SuccubusLeaving".Translate(xxx.get_pawnname(pawn)), pawn, MessageTypeDefOf.NeutralEvent, true);
- }
- }
-
- }
-
- public Pawn target;
- private int? durationTicks;
- public List colonyJoiners = new List();
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs b/1.4/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs
deleted file mode 100644
index 4b8b3a7..0000000
--- a/1.4/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-namespace RJW_Genes
-{
- public class HediffComp_SeverityFromFertilin : HediffComp
- {
- public HediffCompProperties_SeverityFromFertilin Props
- {
- get
- {
- return (HediffCompProperties_SeverityFromFertilin)this.props;
- }
- }
- public override bool CompShouldRemove
- {
- get
- {
- Pawn_GeneTracker genes = base.Pawn.genes;
- return ((genes != null) ? genes.GetFirstGeneOfType() : null) == null;
- }
- }
- private Gene_LifeForce LifeForce
- {
- get
- {
- if (this.cachedLifeForceGene == null)
- {
- this.cachedLifeForceGene = base.Pawn.genes.GetFirstGeneOfType();
- }
- return this.cachedLifeForceGene;
- }
- }
- public override void CompPostTick(ref float severityAdjustment)
- {
- base.CompPostTick(ref severityAdjustment);
- severityAdjustment += ((this.LifeForce.Value > 0f) ? this.Props.severityPerHourHemogen : this.Props.severityPerHourEmpty) / 2500f;
- this.MentalBreak();
- }
-
- public void MentalBreak()
- {
- if (cachedLifeForceGene.Resource.Value <= cachedLifeForceGene.Resource.MinLevelForAlert && this.Pawn.IsHashIntervalTick(2500) && Rand.Chance(0.03f)) //~50% chance each day for mental break
- {
- if (this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_cum_eater)
- || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_drainer))
- {
- //TODO: use mentalstatedef instead of mentalbreakdef
- MentalBreakDef randomrape = GeneDefOf.rjw_genes_lifeforce_randomrape;
- if (ModsConfig.BiotechActive &&
- this.Pawn.Spawned && !this.Pawn.InMentalState && !this.Pawn.Downed &&
- randomrape.Worker.BreakCanOccur(this.Pawn))
- {
- randomrape.Worker.TryStart(this.Pawn, "MentalBreakNoFertilin".Translate(), false);
- }
- }
- }
- }
-
- private Gene_LifeForce cachedLifeForceGene;
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/IngestionOutcomeDoer_LifeForceOffset.cs b/1.4/Source/Genes/Life_Force/IngestionOutcomeDoer_LifeForceOffset.cs
deleted file mode 100644
index a853abe..0000000
--- a/1.4/Source/Genes/Life_Force/IngestionOutcomeDoer_LifeForceOffset.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using RimWorld;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This class checks for pawns with LifeForce and Cumeater Gene to add Fertilin when eating cum (the Item from RJW-Sexperience).
- ///
- public class IngestionOutcomeDoer_LifeForceOffset : IngestionOutcomeDoer
- {
- public const float DEFAULT_FERTILIN_PER_UNIT = 1f;
- public float FertilinPerUnit = 1f;
-
- protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested)
- {
- if (GeneUtility.HasLifeForce(pawn) && GeneUtility.IsCumEater(pawn))
- {
- float num = ingested.stackCount * this.FertilinPerUnit / 100;
- GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(pawn), num);
- }
- }
-
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/JobDrivers/JobDriver_SexOnSpotReceiver.cs b/1.4/Source/Genes/Life_Force/JobDrivers/JobDriver_SexOnSpotReceiver.cs
deleted file mode 100644
index 135b231..0000000
--- a/1.4/Source/Genes/Life_Force/JobDrivers/JobDriver_SexOnSpotReceiver.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using RimWorld;
-using Verse;
-using Verse.AI;
-using rjw;
-using rjw.Modules.Interactions.Enums;
-using rjw.Modules.Interactions.Helpers;
-using rjw.Modules.Interactions.Objects;
-using rjw.Modules.Interactions.Contexts;
-using rjw.Modules.Interactions.Implementation;
-
-namespace RJW_Genes
-{
- //Modified JobDriver_SexBaseRecieverLoved from rjw
- public class JobDriver_SexOnSpotReciever : JobDriver_SexBaseReciever
- {
- protected override IEnumerable MakeNewToils()
- {
- base.setup_ticks();
- this.parteners.Add(base.Partner);
- if (this.pawn.relations.OpinionOf(base.Partner) < 0)
- {
- this.ticks_between_hearts += 50;
- }
- else if (this.pawn.relations.OpinionOf(base.Partner) > 60)
- {
- this.ticks_between_hearts -= 25;
- }
- this.FailOnDespawnedOrNull(this.iTarget);
- this.FailOn(() => !base.Partner.health.capacities.CanBeAwake);
- this.FailOn(() => this.pawn.Drafted);
- this.FailOn(() => base.Partner.Drafted);
- yield return Toils_Reserve.Reserve(this.iTarget, 1, 0, null);
- Toil toil2 = this.MakeSexToil();
- toil2.handlingFacing = false;
- yield return toil2;
- yield break;
- }
-
- private Toil MakeSexToil()
- {
- Toil toil = new Toil();
- toil.defaultCompleteMode = ToilCompleteMode.Never;
- toil.socialMode = RandomSocialMode.Off;
- toil.handlingFacing = true;
- toil.tickAction = delegate ()
- {
- if (this.pawn.IsHashIntervalTick(this.ticks_between_hearts))
- {
- base.ThrowMetaIconF(this.pawn.Position, this.pawn.Map, FleckDefOf.Heart);
- }
- };
- toil.AddEndCondition(delegate
- {
- if (this.parteners.Count <= 0)
- {
- return JobCondition.Succeeded;
- }
- return JobCondition.Ongoing;
- });
- toil.AddFinishAction(delegate
- {
- if (xxx.is_human(this.pawn))
- {
- this.pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
- }
- GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(this.pawn);
- Hediff submitting = this.pawn.health.hediffSet.GetFirstHediffOfDef(xxx.submitting);
- if (submitting != null)
- {
- this.pawn.health.RemoveHediff(submitting);
- this.pawn.stances.stunner.StunFor(60, this.pawn, true, true);
- }
- });
- toil.socialMode = RandomSocialMode.Off;
- return toil;
- }
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/JobGivers/JobGiver_TryQuickieWith.cs b/1.4/Source/Genes/Life_Force/JobGivers/JobGiver_TryQuickieWith.cs
deleted file mode 100644
index 22fcb01..0000000
--- a/1.4/Source/Genes/Life_Force/JobGivers/JobGiver_TryQuickieWith.cs
+++ /dev/null
@@ -1,188 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using rjw;
-using RJWSexperience;
-using RimWorld;
-using Verse;
-using Verse.AI;
-using Verse.AI.Group;
-using UnityEngine;
-namespace RJW_Genes
-{
- public class JobGiver_TryQuickieWith : ThinkNode_JobGiver
- {
- protected override Job TryGiveJob(Pawn pawn)
- {
- Pawn target = pawn.mindState.duty.focus.Pawn;
- Pawn_JobTracker jobs = target.jobs;
- string pawn_name = xxx.get_pawnname(pawn);
- string target_name = xxx.get_pawnname(target);
- //can reserve eachother
- if (pawn.CanReserveAndReach(target, PathEndMode.InteractionCell, Danger.Some) && target.CanReserve(pawn, 1, 0, null, false))
- {
- //Dont interrupt player
- if (!(((jobs != null) ? jobs.curJob : null) != null && jobs.curJob.playerForced))
- {
- float willingness = TargetWillingness(pawn, target);
- if (Rand.Chance(willingness))
- {
- Job newJob =JobMaker.MakeJob(xxx.quick_sex, target);
-
- //Pawn joins faction when lordJob ends instead of leaving
- //in the future determine the chance of this another way
- if (Rand.Chance(JoinChance(pawn, target)))
- {
- Lord lord = pawn.GetLord();
- LordJob_SuccubusVisit lordJob = lord == null? null : lord.LordJob as LordJob_SuccubusVisit;
- if (lordJob != null)
- {
- if (!lordJob.colonyJoiners.Contains(pawn))
- {
- lordJob.colonyJoiners.Add(pawn);
- }
- }
- }
- return newJob;
- }
- else
- {
- if (RJWSettings.DebugLogJoinInBed) //change this when we have our own settigns
- {
- ModLog.Message(string.Format("{0} was not interested in having sex with {1}: ({2} chance)", pawn_name, target_name, willingness));
- }
- }
- }
- else
- {
- if (RJWSettings.DebugLogJoinInBed) //change this when we have our own settigns
- {
- //ModLog.Message(string.Format(" find_pawn_to_fuck({0}): lover has important job ({1}), skipping", pawn_name, target.jobs.curJob.def));
- }
- }
- }
- else
- {
- if (RJWSettings.DebugLogJoinInBed) //change this when we have our own settigns
- {
- ModLog.Message(" (" + pawn_name + "): cannot reach or reserve " + target_name);
- }
- }
- return null;
- }
- public static float TargetWillingness(Pawn pawn, Pawn target)
- {
- string pawn_name = xxx.get_pawnname(pawn);
- float willingness = SexAppraiser.would_fuck(target,pawn);
- bool nymph = xxx.is_nympho(target);
- bool loverelation = LovePartnerRelationUtility.LovePartnerRelationExists(pawn, target);
- if (nymph || loverelation)
- {
- willingness *= 2;
- }
- if (xxx.HasNonPolyPartner(pawn, false) && !loverelation)
- {
- if (RJWHookupSettings.NymphosCanCheat && nymph && xxx.is_frustrated(pawn))
- {
- if (RJWSettings.DebugLogJoinInBed)
- {
- ModLog.Message(" find_partner(" + pawn_name + "): I'm a nympho and I'm so frustrated that I'm going to cheat");
- }
- }
- else
- {
- if (!pawn.health.hediffSet.HasHediff(HediffDef.Named("AlcoholHigh"), false))
- {
- if (RJWSettings.DebugLogJoinInBed)
- {
- ModLog.Message(" find_partner(" + pawn_name + "): I interested in banging but that's cheating");
- }
- //Succubus has a small chance to seduce even if target is in relationship
- willingness *= 0.1f;
- }
- else
- {
- if (RJWSettings.DebugLogJoinInBed)
- {
- ModLog.Message(" find_partner(" + pawn_name + "): I want to bang and im too drunk to care if its cheating");
- }
- //No change
- }
- }
- }
- return willingness;
- }
-
- public static float JoinChance(Pawn pawn ,Pawn target)
- {
-
- float chance = 0.1f;
-
- //Sex satisfaction, how good the target is at sex
- chance *= xxx.get_sex_satisfaction(target);
-
- //Succubus mood
- if (pawn.needs != null && pawn.needs.mood != null)
- {
- chance *= pawn.needs.mood.CurLevelPercentage + 0.5f;
- }
-
- //Size of genitals
- bool size_matters = true; //To be placed in modsettings
- if (size_matters)
- {
- //The larger the penis to greater the chance
- if (RelationsUtility.AttractedToGender(pawn, Gender.Male))
- {
- chance *= GetGenitalSize(target, true) + 0.5f;
- }
-
- //The tighter the vagine the greater the chance, a size above 1 is considered as 1
- if (RelationsUtility.AttractedToGender(pawn, Gender.Female))
- {
- chance *= 1f - Mathf.Min(GetGenitalSize(target, false),1f) + 0.5f;
- }
- }
-
- //Sex ability from sexperience
- if (ModsConfig.IsActive("rjw.sexperience"))
- {
- chance *= RJWSexperience.PawnExtensions.GetSexStat(pawn);
- }
- return Mathf.Max(chance,0f);
- }
-
- //Gets the size of the largest penis or the tightest vagina
- public static float GetGenitalSize(Pawn pawn, bool penis_else_vagina)
- {
- List genitals = rjw.PawnExtensions.GetGenitalsList(pawn);
- if(!genitals.NullOrEmpty())
- {
- if (penis_else_vagina)
- {
- List penises = genitals.Where(genital => Genital_Helper.is_penis(genital)).ToList();
- {
- if (!penises.NullOrEmpty())
- {
- return penises.Max(genital => genital.Severity);
- }
- }
- }
- else
- {
- List vaginas = genitals.Where(genital => Genital_Helper.is_vagina(genital)).ToList();
- {
- if (!vaginas.NullOrEmpty())
- {
- return vaginas.Min(genital => genital.Severity);
- }
- }
- }
- }
- return 0f;
-
- }
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs b/1.4/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs
deleted file mode 100644
index 6ea0a62..0000000
--- a/1.4/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs
+++ /dev/null
@@ -1,203 +0,0 @@
-using HarmonyLib;
-using rjw;
-using RimWorld;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This Patch hooks after "SatisfyPersonal"(i.E. when the pawn finished fucking) and covers LifeForceGain.
- /// If the pawn has LifeForce, all relevant Genes are checked and applied.
- ///
- [HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
- public static class Patch_SatisfyPersonal_LifeForceGain
- {
- public const float LIFEFORCE_GAINED_FROM_DRAINER_GENE = 0.25f;
-
- public static void Postfix(SexProps props)
- {
- // ShortCuts: Exit Early if Pawn or Partner are null (can happen with Animals or Masturbation)
- if (props.pawn == null || !props.hasPartner())
- return;
-
- // Exit if pawn has fertilin themself, it won't give any if it has lifeforce themself.
- if (GeneUtility.HasLifeForce(props.pawn))
- {
- return;
- }
-
- //Summary//
- //We use the positions of the pawn (dom or sub) and based on that which interactions will transfer fertilin
- //By checking isreceiver we know if the succubus is the dom or the sub and if the situation is reverse we also swap the function we use
- float absorb_factor = 0f;
- if (GeneUtility.HasLifeForce(props.partner))
- {
- Pawn PawnWithLifeForce = props.partner;
-
- if (!props.isRevese)
- {
- if (props.isReceiver)
- {
- // Scenario Dom Succubus, normal
- absorb_factor = BaseDom(props, PawnWithLifeForce);
- }
- else
- {
- // Scenario Sub Succubus, normal
- absorb_factor = BaseSub(props, PawnWithLifeForce);
- }
- }
- else
- {
- if (props.isReceiver)
- {
- // Scenario Dom Succubus, Reverse
- absorb_factor = BaseSub(props, PawnWithLifeForce);
- }
- else
- {
- // Scenario Sub Succubus, Reverse
- absorb_factor = BaseDom(props, PawnWithLifeForce);
- }
- }
-
- // If we remove this check fertilin is always lost, but the succubus doesn't always gain any
- if (absorb_factor != 0f)
- {
- TransferFertilin(props, absorb_factor);
- }
-
- // Handle Gene: Sexual_Drainer
- // to be drained, a pawn must not-be-drained-already and drainers cannot be drained either.
- if (GeneUtility.IsSexualDrainer(PawnWithLifeForce)
- && !props.pawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_succubus_drained)
- && !GeneUtility.IsSexualDrainer(props.pawn))
- {
- if (GeneUtility.IsGenerousDonor(props.pawn) && RJW_Genes_Settings.rjw_genes_generous_donor_cheatmode)
- {
- // Cheatmode is on, do not drain but give life
- GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(PawnWithLifeForce), LIFEFORCE_GAINED_FROM_DRAINER_GENE);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"{props.pawn.Name} was not (sexually) drained by {PawnWithLifeForce.Name}, because Cheatmode for Generous Donors is on");
- } else
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"{props.pawn.Name} has been (sexually) drained by {PawnWithLifeForce.Name}");
- props.pawn.health.AddHediff(HediffDefOf.rjw_genes_succubus_drained);
- GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(PawnWithLifeForce), LIFEFORCE_GAINED_FROM_DRAINER_GENE);
- }
- }
- }
- }
-
- public static void TransferFertilin(SexProps props, float absorb_percentage = 1f)
- {
- Pawn_GeneTracker genes = props.partner.genes;
- Gene_LifeForce gene = genes.GetFirstGeneOfType();
-
- Hediff fertilin_lost = props.pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_fertilin_lost);
- //Around quarter get ejected everytime pawn cums
- float multiplier = Rand.Range(0.10f, 0.40f);
-
- if (GeneUtility.IsGenerousDonor(props.pawn) && RJW_Genes_Settings.rjw_genes_generous_donor_cheatmode)
- {
- // Do nothing, Cheatmode is on
- multiplier = 1;
- }
- else
- {
- //Create a new ferilin_lost hediff or increase it
- if (fertilin_lost == null)
- {
- Hediff new_fertilin_lost = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_fertilin_lost, props.pawn);
- props.pawn.health.AddHediff(new_fertilin_lost);
- new_fertilin_lost.Severity = multiplier;
- } else
- {
- multiplier *= 1 - fertilin_lost.Severity;
- fertilin_lost.Severity += multiplier;
- }
- }
-
- multiplier *= absorb_percentage;
- //Currently taking the sum of all penises, maybe I should just consider one at random
- float valuechange = TotalFertilinAmount(props, multiplier);
-
- if (props.partner.IsAnimal())
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"Fertilin-Source of {props.pawn.Name} was an Animal, Fertilin-Gain is being adjusted by {RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor}%");
- valuechange *= RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor;
- }
-
- GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(props.partner), valuechange);
- }
-
- public static float TotalFertilinAmount(SexProps props, float multiplier)
- {
- float total_fluid = CumUtility.GetTotalFluidAmount(props.pawn) / 100;
-
- //More in the tank means more to give
- if (props.pawn.Has(Quirk.Messy))
- {
- total_fluid *= 2;
- }
- if (props.pawn.RaceProps.Animal)
- {
- total_fluid *= 0.1f; //Should make this settable in settings
- }
-
- return total_fluid;
- }
-
- ///
- /// Handles the Case that the Life-Force wielder initiated the Sex (They are "Dom").
- ///
- /// The summary of the sex act, used for checking conditions.
- /// The pawn that might gain LifeForce through this method.
- /// A factor between 0 and 1 how much of output-fertilin will be used for input-lifeforce
- public static float BaseDom(SexProps props, Pawn PawnWithLifeForce)
- {
- float absorb_factor = 0f;
- if (props.sexType == xxx.rjwSextype.Sixtynine && GeneUtility.IsCumEater(PawnWithLifeForce))
- {
- absorb_factor += 1f;
- }
- return absorb_factor;
- }
-
- ///
- /// Handles the Case that the Life-Force wielder got initiated into sex (They are "Sub").
- ///
- /// The summary of the sex act, used for checking conditions.
- /// The pawn that might gain LifeForce through this method.
- /// A factor between 0 and 1 how much of output-fertilin will be used for input-lifeforce
- public static float BaseSub(SexProps props, Pawn PawnWithLifeForce)
- {
- float absorb_factor = 0f;
- if ((props.sexType == xxx.rjwSextype.Oral || props.sexType == xxx.rjwSextype.Fellatio || props.sexType == xxx.rjwSextype.Sixtynine)
- && GeneUtility.IsCumEater(PawnWithLifeForce))
- {
- absorb_factor += 1f;
- }
- else if (props.sexType == xxx.rjwSextype.Vaginal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber))
- {
- absorb_factor += 1f;
- }
- else if (props.sexType == xxx.rjwSextype.Anal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber))
- {
- absorb_factor += 1f;
- }
- else if (props.sexType == xxx.rjwSextype.DoublePenetration && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber))
- {
- absorb_factor += 1f;
- }
- else if (props.sexType == xxx.rjwSextype.Scissoring || props.sexType == xxx.rjwSextype.Cunnilingus)
- {
- //with vaginal cum absorbtion
- //absorb_factor += 1f;
- }
- return absorb_factor;
- }
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs b/1.4/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs
deleted file mode 100644
index b4b327c..0000000
--- a/1.4/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HarmonyLib;
-using RimWorld;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This Patch is applied to add a absorption gene for fertilin if it has none, but it does have the fertilin gene
- /// First tries to get one from the parents else chooses one of them at random
- /// the genes are determined and "simply added".
- ///
- /// This fixes the potential problem that Pawns could inherit Fertilin, but no gene to gain Fertilin.
- ///
- [HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[]
- {
- typeof(Pawn),
- typeof(Pawn)
- }
- )]
- public static class Patch_Vanilla_Inheritance_Fertilin
- {
- [HarmonyPostfix]
- public static void InheritedGenes(Pawn father, Pawn mother, ref GeneSet __result)
- {
- //Also make a setting for this
- if (__result.GenesListForReading.Contains(GeneDefOf.rjw_genes_lifeforce))
- {
- List babies_genes = __result.GenesListForReading;
-
- //If there is no absorption gene get one from the parents, else a random one
- if(!Has_Fertilin_Source_Gene(babies_genes))
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"Child of ({father.Name};{mother.Name}) has Genes with LifeForce-Resource but no Source-Gene, adding one of parents random if possible or any random otherwise.");
- // Gather Parents Source-Genes
- List absorption_genes_parents = new List();
- foreach (GeneDef geneDef in FertilinSourceGenes)
- {
- if(mother.genes != null && mother.genes.HasGene(geneDef))
- absorption_genes_parents.Add(geneDef);
-
- if (father.genes != null && father.genes.HasGene(geneDef))
- absorption_genes_parents.Add(geneDef);
- }
- // Parents had Genes - Pick a random one of them
- if (!absorption_genes_parents.NullOrEmpty())
- __result.AddGene(absorption_genes_parents.RandomElement());
- // Create a fully random one for your little Cumfueled missbreed
- else
- __result.AddGene(FertilinSourceGenes.RandomElement());
- }
- }
- }
-
- private static List FertilinSourceGenes = new List() {
- GeneDefOf.rjw_genes_drainer,
- GeneDefOf.rjw_genes_cum_eater,
- GeneDefOf.rjw_genes_fertilin_absorber,
- GeneDefOf.rjw_genes_cockeater
- };
-
- private static bool Has_Fertilin_Source_Gene(List genes)
- {
- foreach (GeneDef gene in genes)
- {
- if (FertilinSourceGenes.Contains(gene))
- {
- return true;
- }
- }
- return false;
- }
-
-
- }
-}
diff --git a/1.4/Source/Genes/Life_Force/UI/GeneGizmo_ResourceLifeForce.cs b/1.4/Source/Genes/Life_Force/UI/GeneGizmo_ResourceLifeForce.cs
deleted file mode 100644
index f2b0055..0000000
--- a/1.4/Source/Genes/Life_Force/UI/GeneGizmo_ResourceLifeForce.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-using UnityEngine;
-namespace RJW_Genes
-{
- //Copied from GeneGizmo_ResourceHemogen, with small modifications
- public class GeneGizmo_ResourceLifeForce : GeneGizmo_Resource
- {
- public GeneGizmo_ResourceLifeForce(Gene_Resource gene, List drainGenes, Color barColor, Color barhighlightColor) : base(gene, drainGenes, barColor, barhighlightColor)
- {
- this.draggableBar = true;
- }
-
- public override GizmoResult GizmoOnGUI(Vector2 topLeft, float maxWidth, GizmoRenderParms parms)
- {
- return base.GizmoOnGUI(topLeft, maxWidth, parms);
- }
-
- protected override string GetTooltip()
- {
-
- this.tmpDrainGenes.Clear();
- string text = string.Format("{0}: {1} / {2}\n", this.gene.ResourceLabel.CapitalizeFirst().Colorize(ColoredText.TipSectionTitleColor), this.gene.ValueForDisplay, this.gene.MaxForDisplay);
- if (this.gene.pawn.IsColonistPlayerControlled || this.gene.pawn.IsPrisonerOfColony)
- {
- if (this.gene.targetValue <= 0f)
- {
- text += "NeverSeekFertilin";
- }
- else
- {
- text = text + ("SeekFertilinBelow" + ": ") + this.gene.PostProcessValue(this.gene.targetValue);
- }
- }
- if (!this.drainGenes.NullOrEmpty())
- {
- float num = 0f;
- foreach (IGeneResourceDrain geneResourceDrain in this.drainGenes)
- {
- if (geneResourceDrain.CanOffset)
- {
- this.tmpDrainGenes.Add(new Pair(geneResourceDrain, geneResourceDrain.ResourceLossPerDay));
- num += geneResourceDrain.ResourceLossPerDay;
- }
- }
- if (num != 0f)
- {
- string text2 = (num < 0f) ? "RegenerationRate".Translate() : "DrainRate".Translate();
- text = string.Concat(new string[]
- {
- text,
- "\n\n",
- text2,
- ": ",
- "PerDay".Translate(Mathf.Abs(this.gene.PostProcessValue(num))).Resolve()
- });
- foreach (Pair pair in this.tmpDrainGenes)
- {
- text = string.Concat(new string[]
- {
- text,
- "\n - ",
- pair.First.DisplayLabel.CapitalizeFirst(),
- ": ",
- "PerDay".Translate(this.gene.PostProcessValue(-pair.Second).ToStringWithSign()).Resolve()
- });
- }
- }
- }
- if (!this.gene.def.resourceDescription.NullOrEmpty())
- {
- text = text + "\n\n" + this.gene.def.resourceDescription.Formatted(this.gene.pawn.Named("PAWN")).Resolve();
- }
- return text;
- }
- private List> tmpDrainGenes = new List>();
- }
-}
diff --git a/1.4/Source/Genes/Special/Patches/Patch_AgeDrain.cs b/1.4/Source/Genes/Special/Patches/Patch_AgeDrain.cs
deleted file mode 100644
index 060c20d..0000000
--- a/1.4/Source/Genes/Special/Patches/Patch_AgeDrain.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using HarmonyLib;
-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.Genes.Special
-{
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public static class Patch_AgeDrain
- {
- /**
- * Update Issue #26:
- * There are options that a 16 yo pawn and a 16 yo pawn have sex,
- * or there are races that have a different age-limits.
- * I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
- */
-
- const long AGE_TRANSFERED_FALLBACK = 120000; // 120k == 2 days
- // 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
- const long MINIMUM_AGE_FALLBACK = 18 * 60 * 60000 + 1;
-
- 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 (GeneUtility.IsAgeDrainer(pawn) && !GeneUtility.IsAgeDrainer(partner))
- {
- TransferAge(pawn, partner);
- }
- else if (GeneUtility.IsAgeDrainer(partner) && !GeneUtility.IsAgeDrainer(pawn))
- {
- TransferAge(partner,pawn);
- }
- else if (GeneUtility.IsAgeDrainer(partner) && GeneUtility.IsAgeDrainer(pawn) && RJW_Genes_Settings.rjw_genes_detailed_debug)
- {
- ModLog.Message($"[Sexual Age Drainer] both {pawn} and {partner} are sexual-age-drainers - nothing happens.");
- }
- }
-
- ///
- /// Transfers age from the giver to the receiver.
- ///
- /// The pawn that will receive biological-Age-Ticks, and becomes younger if they are not already young.
- /// The pawn that will be giving biological-Age-Ticks. This pawn is always aged, even if the other pawn is too young.
- private static void TransferAge(Pawn receiver, Pawn giver)
- {
- AgeTransferExtension transferExt = GeneDefOf.rjw_genes_sex_age_drain.GetModExtension();
- long age_transfered = transferExt?.ageTickChange ?? AGE_TRANSFERED_FALLBACK;
- long minimum_age = transferExt?.minAgeInYears * 60 * 60000 + 1 ?? MINIMUM_AGE_FALLBACK;
-
- var pawnAge = receiver.ageTracker.AgeBiologicalTicks;
-
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"[Sexual Age Drainer] {receiver} is aging {giver} by {age_transfered} ({Math.Round(age_transfered / 60000.0, 2)} days)");
-
- // Giver ALWAYS ages
- giver.ageTracker.AgeBiologicalTicks += age_transfered;
-
- // Make Receiver younger if they are older than minimum age
- if (pawnAge - age_transfered > minimum_age)
- receiver.ageTracker.AgeBiologicalTicks = Math.Max(minimum_age, (pawnAge - age_transfered));
- else {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"[Sexual Age Drainer] {receiver} was too young ({receiver.ageTracker.AgeBiologicalYears}), and remains unchanged.");
- }
- }
- }
-}
diff --git a/1.4/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs b/1.4/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs
deleted file mode 100644
index 8c5b6e9..0000000
--- a/1.4/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs
+++ /dev/null
@@ -1,323 +0,0 @@
-using HarmonyLib;
-using RimWorld;
-using RimWorld.QuestGen;
-using rjw;
-using rjw.Modules.Shared.Extensions;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// There was a big change with RJW 5.3.6 and I got a new Issue #52 documenting it.
- /// Basically, the reroll and orgasm logic was changed.
- ///
-
- [HarmonyPatch(typeof(JobDriver_Sex), "SetupOrgasmTicks")]
- public static class Patch_OrgasmMytosis
- {
-
- private const float SEVERITY_INCREASE_PER_ORGASM = 0.075f;
-
- public static void Postfix(JobDriver_Sex __instance)
- {
- Pawn orgasmingPawn = __instance.pawn;
- if (orgasmingPawn != null && GeneUtility.HasGeneNullCheck(orgasmingPawn, GeneDefOf.rjw_genes_sexual_mytosis) && ! orgasmingPawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_mytosis_shock_hediff))
- {
- var mytosisHediff = GetOrgasmMytosisHediff(orgasmingPawn);
- mytosisHediff.Severity += SEVERITY_INCREASE_PER_ORGASM;
-
- if (mytosisHediff.Severity >= 1.0)
- {
- orgasmingPawn.health.RemoveHediff(mytosisHediff);
-
- var copy = Multiply(orgasmingPawn);
-
- ApplyMytosisShock(copy);
- ApplyMytosisShock(orgasmingPawn);
-
- orgasmingPawn.Strip();
-
- }
- else
- {
- float orgasm_time_reduction = Math.Max(1.0f - mytosisHediff.Severity, 0.1f);
- __instance.sex_ticks = (int) (__instance.sex_ticks * orgasm_time_reduction);
- }
-
- }
-
- }
-
- private static void ApplyMytosisShock(Pawn copy)
- {
- var stunA = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_mytosis_shock_hediff, copy);
- stunA.Severity = 1;
- copy.health.AddHediff(stunA);
- }
-
- ///
- /// Helps to get the Orgasm Mytosis Hediff of a Pawn. If it does not exist, one is added.
- ///
- /// The pawn that had the orgasm, for which a hediff is looked up or created.
- ///
- public static Hediff GetOrgasmMytosisHediff(Pawn orgasmed)
- {
- Hediff orgasmicMytosisHediff = orgasmed.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_orgasmic_mytosis_hediff);
- if (orgasmicMytosisHediff == null)
- {
- orgasmicMytosisHediff = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_orgasmic_mytosis_hediff, orgasmed);
- orgasmicMytosisHediff.Severity = 0;
- orgasmed.health.AddHediff(orgasmicMytosisHediff);
- }
- return orgasmicMytosisHediff;
- }
-
- public static Pawn Multiply(Pawn toMultiply)
- {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message("Hitting Multiply of Mytosis Pawn!");
-
- PawnGenerationRequest request = new PawnGenerationRequest(
- kind: toMultiply.kindDef,
- faction: toMultiply.Faction,
- forceGenerateNewPawn: true,
- developmentalStages: DevelopmentalStage.Adult,
- allowDowned: true,
- canGeneratePawnRelations: false,
- colonistRelationChanceFactor: 0,
- allowFood: false,
- allowAddictions: false,
- relationWithExtraPawnChanceFactor: 0,
- forbidAnyTitle: true,
- forceNoBackstory: true,
- fixedGender: toMultiply.gender
- );
-
- /*
- * Devnote: Adding these will lead to deadly issues!
- fixedBiologicalAge: toMultiply.ageTracker.AgeBiologicalTicks,
- fixedChronologicalAge: toMultiply.ageTracker.AgeChronologicalTicks,
- */
-
- Pawn copy = PawnGenerator.GeneratePawn(request);
-
-
- copy.gender = toMultiply.gender;
- copy.ageTracker = toMultiply.ageTracker;
- copy.Name = CreateCloneName(toMultiply,2);
-
- copy.health = CopyRelevantHediffs(copy, toMultiply);
- copy.genes = CopyGeneTracker(copy,toMultiply.genes);
-
- copy.ideo = toMultiply.ideo;
- copy.records = new Pawn_RecordsTracker(copy);
- copy.outfits = toMultiply.outfits;
-
- copy.relations = toMultiply.relations;
- copy.skills = CopySkillTracker(copy,toMultiply.skills);
-
- copy.equipment.DestroyAllEquipment();
- copy.apparel.DestroyAll();
-
- //TODO: Make a letter on birth!
-
-
- PawnUtility.TrySpawnHatchedOrBornPawn(copy, toMultiply);
- // Move the copy in front of the origin, rather than on top
- if (toMultiply.Spawned)
- if (toMultiply.CurrentBed() != null)
- {
- copy.Position = copy.Position + new IntVec3(0, 0, 1).RotatedBy(toMultiply.CurrentBed().Rotation);
- }
-
-
- // Birthmother doesn't show as relation (See log below)
- // copy.relations.AddDirectRelation(PawnRelationDefOf.ParentBirth, toMultiply);
-
-
- copy.style = CopyStyleTracker(copy, toMultiply.style);
- copy.story = CopyStoryTracker(copy, toMultiply.story);
-
- copy.Draw();
- return copy;
- }
-
- private static Name CreateCloneName(Pawn toCopyFrom, int additions=1)
- {
- if (toCopyFrom.Name is NameTriple)
- {
- NameTriple casted = (NameTriple)toCopyFrom.Name;
- String Postfix = " " + RandomNamePostFix(additions);
- Name newName = new NameTriple(first:casted.First + Postfix, nick: casted.Nick + Postfix, last: casted.Last);
- if (newName.UsedThisGame)
- return CreateCloneName(toCopyFrom, additions);
- return newName;
- }
- return toCopyFrom.Name;
- }
-
- private static Pawn_GeneTracker CopyGeneTracker(Pawn toCopyTo, Pawn_GeneTracker toCopyFrom)
- {
- var tracker = new Pawn_GeneTracker(toCopyTo);
-
- // Due to Overwrite logics, we first add Endogenes and then a second pass on xenogenes
-
- // Pass 1: Endogenes
- foreach (Gene gene in toCopyFrom.GenesListForReading) {
- GeneDef def = gene.def;
- if (!toCopyFrom.Xenogenes.Contains(gene))
- tracker.AddGene(def, false);
- }
-
- // Pass 2: Xenogenes
- foreach (Gene gene in toCopyFrom.GenesListForReading)
- {
- GeneDef def = gene.def;
- if (toCopyFrom.Xenogenes.Contains(gene))
- tracker.AddGene(def, true);
- }
-
- tracker.Reset();
- var skin = tracker.GetMelaninGene();
- var hair = tracker.GetHairColorGene();
-
- //ModLog.Message($"{toCopyTo} had Skin {skin.defName} and {hair.defName} as colour-genes");
-
-
- return tracker;
- }
-
- private static Pawn_StoryTracker CopyStoryTracker(Pawn toCopyTo, Pawn_StoryTracker toCopyFrom)
- {
- var tracker = new Pawn_StoryTracker(toCopyTo);
-
- tracker.Childhood = toCopyFrom.Childhood;
- tracker.Adulthood = toCopyFrom.Adulthood;
-
- tracker.headType = toCopyFrom.headType;
- tracker.bodyType = toCopyFrom.bodyType;
- tracker.hairDef = toCopyFrom.hairDef;
- tracker.furDef = toCopyFrom.furDef;
-
- tracker.traits = toCopyFrom.traits;
-
- tracker.skinColorOverride = toCopyFrom.skinColorOverride;
- tracker.HairColor = toCopyFrom.HairColor;
-
-
- return tracker;
- }
-
- private static Pawn_SkillTracker CopySkillTracker(Pawn toCopyTo, Pawn_SkillTracker toCopyFrom)
- {
- var tracker = new Pawn_SkillTracker(toCopyTo);
-
- tracker.skills = toCopyFrom.skills;
-
- return tracker;
- }
-
- private static Pawn_HealthTracker CopyRelevantHediffs(Pawn toCopyTo, Pawn copiedFrom)
- {
- var toCopyFrom = copiedFrom.health;
- var tracker = toCopyTo.health;
- // Step 0: Remove everything, Reset
- tracker.RemoveAllHediffs();
- tracker.Reset();
- // Step 1: Copy ALL Hediffs
- foreach (Hediff hed in toCopyFrom.hediffSet.hediffs)
- {
- // DevNote: There were a lot of issues around bodyparts:
- // Some Hediffs really need to know their bodypart, e.g. an implanted arm can either be left or right.
- // Ignoring this will lead to many errors, mostly around nullpointers.
-
- BodyPartRecord originalBPR = hed.Part;
- if (originalBPR != null) {
- BodyPartRecord copyBPR = toCopyTo.RaceProps?.body.AllParts.Find(bpr => bpr.def == originalBPR.def);
- if (copyBPR != null && !copyBPR.IsMissingForPawn(toCopyTo)) {
- Hediff copiedHediff = HediffMaker.MakeHediff(hed.def, toCopyTo, copyBPR);
- tracker.AddHediff(copiedHediff);
- }
- } else
- {
- Hediff copiedHediff = HediffMaker.MakeHediff(hed.def, toCopyTo);
- tracker.AddHediff(copiedHediff);
- }
- }
- // Step 2: Remove all Artifical Parts
- List hediffsToRemove = new List();
- foreach (Hediff hed in tracker.hediffSet.hediffs)
- {
- if (hed is Hediff_AddedPart && ((Hediff_AddedPart)hed).def.countsAsAddedPartOrImplant)
- {
- hediffsToRemove.Add(hed);
- }
- }
- tracker.hediffSet.hediffs.RemoveAll(x => hediffsToRemove.Contains(x));
-
- // Step 3: Tend issues from Removal
- foreach (Hediff copiedHediff in tracker.hediffSet.hediffs)
- {
- if (copiedHediff.Bleeding)
- copiedHediff.Tended(1.0f,1.0f);
- }
-
- return tracker;
- }
-
- private static Pawn_StyleTracker CopyStyleTracker(Pawn toCopyTo, Pawn_StyleTracker toCopyFrom)
- {
- var tracker = new Pawn_StyleTracker(toCopyTo);
-
- tracker.beardDef = toCopyFrom.beardDef;
- tracker.BodyTattoo = toCopyFrom.BodyTattoo;
- tracker.FaceTattoo = toCopyFrom.FaceTattoo;
-
- return tracker;
- }
-
- private static String RandomNamePostFix(int numberOfParts)
- {
- List additions = new List()
- {
- "A","B","C","D","E","F","X","Y","Z",
- "Two",
- "Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"
- };
-
- additions.Shuffle();
- return String.Join(" ",additions.Take(numberOfParts));
- }
- }
-
-
-}
-
-/*
-*
-*Warning:
-*Tried to add pawn relation ParentBirth with self, pawn=Henri
-UnityEngine.StackTraceUtility:ExtractStackTrace ()
-Verse.Log:Warning (string)
-RimWorld.Pawn_RelationsTracker:AddDirectRelation (RimWorld.PawnRelationDef,Verse.Pawn)
-RJW_Genes.Patch_OrgasmMytosis:Multiply (Verse.Pawn)
-RJW_Genes.Patch_OrgasmMytosis:Postfix (rjw.JobDriver_Sex,int&)
-(wrapper dynamic-method) rjw.JobDriver_Sex:rjw.JobDriver_Sex.Roll_Orgasm_Duration_Reset_Patch1 (rjw.JobDriver_Sex)
-(wrapper dynamic-method) rjw.JobDriver_Sex:rjw.JobDriver_Sex.Orgasm_Patch2 (rjw.JobDriver_Sex)
-(wrapper dynamic-method) rjw.JobDriver_Sex:rjw.JobDriver_Sex.SexTick_Patch1 (rjw.JobDriver_Sex,Verse.Pawn,Verse.Thing,bool,bool)
-rjw.JobDriver_Rape/<>c__DisplayClass1_0:b__6 ()
-(wrapper dynamic-method) Verse.AI.JobDriver:Verse.AI.JobDriver.DriverTick_Patch0 (Verse.AI.JobDriver)
-Verse.AI.Pawn_JobTracker:JobTrackerTick ()
-Verse.Pawn:Tick ()
-Verse.TickList:Tick ()
-(wrapper dynamic-method) Verse.TickManager:Verse.TickManager.DoSingleTick_Patch2 (Verse.TickManager)
-Verse.TickManager:TickManagerUpdate ()
-Verse.Game:UpdatePlay ()
-Verse.Root_Play:Update ()
-
- */
\ No newline at end of file
diff --git a/1.4/Source/Genes/Special/Patches/Patch_OrgasmRush.cs b/1.4/Source/Genes/Special/Patches/Patch_OrgasmRush.cs
deleted file mode 100644
index eaf6216..0000000
--- a/1.4/Source/Genes/Special/Patches/Patch_OrgasmRush.cs
+++ /dev/null
@@ -1,65 +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), nameof(SexUtility.SatisfyPersonal))]
- public static class Patch_OrgasmRush
- {
-
- private const float REST_INCREASE = 0.05f;
- private const float ORGASMS_NEEDED_FOR_SUPERCHARGE = 3.0f;
-
- public static void Postfix(SexProps props)
- {
- // ShortCuts: Exit Early if Pawn or Partner are null (can happen with Masturbation or other nieche-cases)
- if (props == null || props.pawn == null || !props.hasPartner())
- return;
-
- // Exit for Animals - Animals can't get or trigger Orgasm Rushes. Fixes #15
- if (props.pawn.IsAnimal() || props.partner.IsAnimal())
- return;
-
- if (props.pawn.genes != null && props.pawn.genes.HasGene(GeneDefOf.rjw_genes_orgasm_rush))
- {
-
- // Pump up Wake-Ness
- if (props.pawn.needs.rest != null)
- props.pawn.needs.rest.CurLevel += REST_INCREASE;
-
- // Add or Update Hediff for Orgasm Rush
- Hediff rush = GetOrgasmRushHediff(props.pawn);
- float added_severity = props.orgasms / ORGASMS_NEEDED_FOR_SUPERCHARGE;
- rush.Severity += added_severity;
- // Severity should be capped to 1 by the XML logic
- }
-
- }
-
- ///
- /// Helps to get the Orgasm Rush Hediff of a Pawn. If it does not exist, one is added.
- ///
- /// The pawn that had the orgasm, for which a hediff is looked up or created.
- ///
- public static Hediff GetOrgasmRushHediff(Pawn orgasmed)
- {
- Hediff orgasmRushHediff = orgasmed.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_orgasm_rush_hediff);
- if (orgasmRushHediff == null)
- {
- orgasmRushHediff = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_orgasm_rush_hediff, orgasmed);
- orgasmRushHediff.Severity = 0;
- orgasmed.health.AddHediff(orgasmRushHediff);
- }
- return orgasmRushHediff;
- }
- }
-
-
-}
diff --git a/1.4/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs b/1.4/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs
deleted file mode 100644
index b64ca83..0000000
--- a/1.4/Source/Genes/Special/Patches/Patch_Youth_Fountain.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;
-
-namespace RJW_Genes.Genes.Special
-{
- [HarmonyPatch(typeof(SexUtility), "Aftersex")]
- public static class Patch_Youth_Fountain
- {
- /**
- * Update Issue #26:
- * There are options that a 16 yo pawn and a 16 yo pawn have sex,
- * or there are races that have a different age-limits.
- * I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
- */
-
- const long AGE_REDUCTION_FALLBACK = 60000; // 60k == 1 day
- // 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
- const long MINIMUM_AGE_FALLBACK = 18 * 60 * 60000 + 1;
-
- public static void Postfix(SexProps props)
- {
- if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
- {
- return;
- }
-
- if (GeneUtility.IsYouthFountain(props.pawn))
- {
- ChangeAgeForPawn(props.partner, props.pawn);
- }
- if (GeneUtility.IsYouthFountain(props.partner))
- {
- ChangeAgeForPawn(props.pawn,props.partner);
- }
-
- }
-
- private static void ChangeAgeForPawn(Pawn ToYouth, Pawn YouthingPawn)
- {
- AgeTransferExtension transferExt = GeneDefOf.rjw_genes_youth_fountain.GetModExtension();
- long age_reduction = transferExt?.ageTickChange ?? AGE_REDUCTION_FALLBACK;
- long minimum_age = transferExt?.minAgeInYears * 60 * 60000 + 1 ?? MINIMUM_AGE_FALLBACK;
-
- var partnerAge = ToYouth.ageTracker.AgeBiologicalTicks;
-
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"Firing Youth Fountain - {YouthingPawn} is youthing {ToYouth} by {age_reduction} ({Math.Round(age_reduction / 60000.0, 2)} days)");
-
- if (partnerAge - age_reduction > minimum_age) {
- ToYouth.ageTracker.AgeBiologicalTicks = Math.Max(minimum_age, partnerAge - age_reduction);
- }
- else if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- ModLog.Message($"[Youth Fountain] {ToYouth} was too young ({ToYouth.ageTracker.AgeBiologicalYears}), and remains unchanged.");
- }
-
- }
-
-}
diff --git a/1.4/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs b/1.4/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs
deleted file mode 100644
index ee2c4f0..0000000
--- a/1.4/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using RimWorld;
-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_Aphrodisiac_Pheromones_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;
- // 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;
-
- if (!RelationsUtility.PawnsKnowEachOther(pawn, other))
- return (ThoughtState)false;
- // If the pawn is not on Map (e.g. caravan), no mali
- if (!HiveUtility.PawnIsOnHomeMap(pawn))
- return (ThoughtState)false;
-
-
- // Do nothing for pawns that also have pheromones
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
-
- return (ThoughtState)false;
-
- // Actual Logic:
- // Pawn qualifies in right distance and needs line of sight.
- var pos = other.Position;
- int effectDistance = ModExtensionHelper.GetDistanceFromModExtension(GeneDefOf.rjw_genes_aphrodisiac_pheromones, Gene_Aphrodisiac_Pheromones.APHRODISIAC_DISTANCE_FALLBACK);
- if (pos.DistanceTo(pawn.Position) < effectDistance && GenSight.LineOfSight(pos, pawn.Position, pawn.Map))
- {
- return (ThoughtState)true;
- }
-
- return (ThoughtState)false;
- }
- }
-}
diff --git a/1.4/Source/HarmonyInit.cs b/1.4/Source/HarmonyInit.cs
deleted file mode 100644
index b0f8295..0000000
--- a/1.4/Source/HarmonyInit.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Verse;
-using HarmonyLib;
-using System;
-
-namespace RJW_Genes
-{
- [StaticConstructorOnStartup]
- internal static class HarmonyInit
- {
- static HarmonyInit()
- {
- Harmony harmony = new Harmony("rjw_genes");
- harmony.PatchAll();
-
- // Patch Licentia, if Licentia exists
- // Logic & Explanation taken from https://rimworldwiki.com/wiki/Modding_Tutorials/Compatibility_with_DLLs
- // Adjusted to use ModsConfig (which makes it work, the example above does not run out of the box)
- try
- {
- ((Action)(() =>
- {
- if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
- {
- // Gene: Cumflation Immunity [Prefix Patch]
- harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)),
- prefix: new HarmonyMethod(typeof(Patch_Cumflation), nameof(Patch_Cumflation.Prefix)));
- // Gene: Generous Donor [Postfix Patch]
- harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.TransferNutrition)),
- postfix: new HarmonyMethod(typeof(Patch_TransferNutrition), nameof(Patch_TransferNutrition.Postfix)));
- // Gene: CumEater [Postfix Patch]
- harmony.Patch(AccessTools.Method(typeof(rjw.JobDriver_Sex), nameof(rjw.JobDriver_Sex.ChangePsyfocus)),
- postfix: new HarmonyMethod(typeof(Patch_SexTicks_ChangePsyfocus), nameof(Patch_SexTicks_ChangePsyfocus.Postfix)));
- }
- }))();
- }
- catch (TypeLoadException ex) {
- // To be expected for people without Licentia Labs
- }
- }
- }
-}
\ No newline at end of file
diff --git a/1.4/Source/HediffDefOf.cs b/1.4/Source/HediffDefOf.cs
deleted file mode 100644
index 30e34df..0000000
--- a/1.4/Source/HediffDefOf.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-
-namespace RJW_Genes
-{
- [DefOf]
- public static class HediffDefOf
- {
- public static readonly HediffDef rjw_genes_aphrodisiac_pheromone;
- public static readonly HediffDef rjw_genes_fertilin_lost;
- public static readonly HediffDef rjw_genes_succubus_drained;
- public static readonly HediffDef rjw_genes_orgasm_rush_hediff;
- public static readonly HediffDef rjw_genes_fertilin_craving;
-
- public static readonly HediffDef rjw_genes_evergrowth_sideeffect;
-
- public static readonly HediffDef rjw_genes_orgasmic_mytosis_hediff;
- public static readonly HediffDef rjw_genes_mytosis_shock_hediff;
- }
-}
diff --git a/1.4/Source/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs b/1.4/Source/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs
deleted file mode 100644
index cfa3ebf..0000000
--- a/1.4/Source/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-using rjw.Modules.Interactions;
-using rjw.Modules.Interactions.Internals.Implementation;
-using rjw.Modules.Interactions.Objects;
-using rjw;
-using rjw.Modules.Interactions.Enums;
-
-//Modefied code based of RJW-AI code at https://gitgud.io/Ed86/rjw-ia/-/tree/master/
-namespace RJW_Genes
-{
- [StaticConstructorOnStartup]
- public class DomSuccubusTailCustomRequirementHandler : ICustomRequirementHandler
- {
- public string HandlerKey
- {
- get
- {
- return "DomSuccubusTailCustomRequirementHandler";
- }
- }
-
-
- static DomSuccubusTailCustomRequirementHandler()
- {
- Register();
- }
- public static void Register()
- {
- InteractionRequirementService.CustomRequirementHandlers.Add(new DomSuccubusTailCustomRequirementHandler());
- if (Prefs.DevMode)
- {
- Log.Message("DomSuccubusTailCustomRequirementHandler registered: ");
- }
- }
-
- public bool FufillRequirements(InteractionWithExtension interaction, InteractionPawn dominant, InteractionPawn submissive)
- {
- if (GeneUtility.HasGeneNullCheck(dominant.Pawn, GeneDefOf.rjw_genes_succubus_tail))
- {
- return true;
- }
- return false;
- }
- //public static readonly StringListDef filter = DefDatabase.GetNamed("DomSuccubusTailFilter");
- }
-}
diff --git a/1.4/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs b/1.4/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs
deleted file mode 100644
index 8e993aa..0000000
--- a/1.4/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using System.Collections.Generic;
-using rjw;
-using rjw.Modules.Interactions.Contexts;
-using rjw.Modules.Interactions.Enums;
-using rjw.Modules.Interactions.Rules.PartKindUsageRules;
-using rjw.Modules.Shared;
-using Verse;
-
-namespace RJW_Genes.Interactions
-{
- //Summary//
- //Set custom preferences for pawn. Gets integrated into rjw by AddtoIPartPreferenceRule in First
- //Depending on the level of lifeforce increase the chance for using the mouth.
- public class GenesPartKindUsageRule : IPartPreferenceRule
- {
- public IEnumerable> ModifiersForDominant(InteractionContext context)
- {
- Pawn pawn = context.Internals.Dominant.Pawn;
- Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType();
- if (gene != null)
- {
- float weight = 2f;
- if (gene.Value < gene.MinLevelForAlert)
- {
- weight *= 10;
- }
- else if (gene.Value < gene.targetValue)
- {
- weight *= 2.5f;
- }
- if (pawn.genes.HasGene(GeneDefOf.rjw_genes_cum_eater))
- {
- yield return new Weighted(weight, LewdablePartKind.Mouth);
- yield return new Weighted(weight, LewdablePartKind.Beak);
- }
-
- if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber))
- {
- yield return new Weighted(weight, LewdablePartKind.Vagina);
- yield return new Weighted(weight, LewdablePartKind.Anus);
- }
- }
- yield break;
- }
-
- public IEnumerable> ModifiersForSubmissive(InteractionContext context)
- {
- Pawn pawn = context.Internals.Dominant.Pawn;
- Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType();
- if (gene != null)
- {
- float weight = 2f;
- if (gene.Value < gene.MinLevelForAlert)
- {
- weight *= 10;
- }
- else if (gene.Value < gene.targetValue)
- {
- weight *= 2.5f;
- }
- yield return new Weighted(weight, LewdablePartKind.Mouth);
- yield return new Weighted(weight, LewdablePartKind.Beak);
-
- if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber))
- {
- yield return new Weighted(weight, LewdablePartKind.Vagina);
- yield return new Weighted(weight, LewdablePartKind.Anus);
- }
- }
- yield break;
- }
- }
-}
diff --git a/1.4/Source/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs b/1.4/Source/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs
deleted file mode 100644
index 9bd8289..0000000
--- a/1.4/Source/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using Verse;
-using rjw.Modules.Interactions;
-using rjw.Modules.Interactions.Internals.Implementation;
-using rjw.Modules.Interactions.Objects;
-
-//Modified code based of RJW-AI code at https://gitgud.io/Ed86/rjw-ia/-/tree/master/
-namespace RJW_Genes
-{
- [StaticConstructorOnStartup]
- public class SubSuccubusTailCustomRequirementHandler : ICustomRequirementHandler
- {
- public string HandlerKey
- {
- get
- {
- return "SubSuccubusTailCustomRequirementHandler";
- }
- }
-
- static SubSuccubusTailCustomRequirementHandler()
- {
- Register();
- }
- public static void Register()
- {
- InteractionRequirementService.CustomRequirementHandlers.Add(new SubSuccubusTailCustomRequirementHandler());
- if (Prefs.DevMode)
- {
- Log.Message("SubSuccubusTailCustomRequirementHandler registered: ");
- }
- }
-
- public bool FufillRequirements(InteractionWithExtension interaction, InteractionPawn dominant, InteractionPawn submissive)
- {
- if (GeneUtility.HasGeneNullCheck(submissive.Pawn, GeneDefOf.rjw_genes_succubus_tail))
- {
- return true;
- }
- return false;
- }
- //public static readonly StringListDef filter = DefDatabase.GetNamed("SubSuccubusTailFilter");
- }
-}
-
diff --git a/1.4/Source/RJW_Genes.cs b/1.4/Source/RJW_Genes.cs
deleted file mode 100644
index 44cf60d..0000000
--- a/1.4/Source/RJW_Genes.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Verse;
-
-namespace RJW_Genes
-{
- [StaticConstructorOnStartup]
- public static class RJW_Genes
- {
- static RJW_Genes()
- {
- ModLog.Message("RJW-Genes loaded");
- if (RJW_Genes_Settings.rjw_genes_detailed_debug)
- {
- ModLog.Message($"{HiveUtility.getQueenXenotypes().EnumerableCount()} Queen-Xenotypes ({string.Join(",", HiveUtility.getQueenXenotypes().Select(t => t.defName))})");
- ModLog.Message($"{HiveUtility.getDroneXenotypes().EnumerableCount()} Drone-Xenotypes ({string.Join(",", HiveUtility.getDroneXenotypes().Select(t => t.defName))})");
-
- ModLog.Message($"Found {HiveUtility.GetQueenWorkerMappings().Count} Queen-Worker Mappings ({string.Join(",", HiveUtility.GetQueenWorkerMappings().Keys.Select(t => t))} + Default) ");
- IEnumerable offspringChanceDefs = DefDatabase.AllDefs;
- IEnumerable faultOffspringDefs = offspringChanceDefs.Where(t => t.queenChance + t.workerChance + t.workerChance > 1.02 || t.queenChance + t.workerChance + t.workerChance < 0.98 );
- ModLog.Message($"Found {offspringChanceDefs.Count()} OffspringChanceDefs, of which {faultOffspringDefs.Count()} had faulty chances ({string.Join(",", faultOffspringDefs.Select(t => t.defName))})");
- }
- }
- }
-}
diff --git a/1.4/Source/Rjw-Genes.csproj b/1.4/Source/Rjw-Genes.csproj
deleted file mode 100644
index 7dbbdb0..0000000
--- a/1.4/Source/Rjw-Genes.csproj
+++ /dev/null
@@ -1,236 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}
- Library
- Properties
- RJW_Genes
- Rjw-Genes
- v4.8
- 512
-
-
-
- none
- true
- ..\Common\Assemblies\
- prompt
- 4
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- ..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll
- False
-
-
- False
- ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
- False
-
-
- False
- ..\..\licentia-labs\Assemblies\LicentiaLabs.dll
- False
-
-
- False
- ..\..\rjw\1.4\Assemblies\RJW.dll
- False
-
-
- ..\..\RJW-Sexperience-1.1.4.0\1.4\Assemblies\RJWSexperience.dll
- False
-
-
-
- ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
- False
-
-
- False
- ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
- False
-
-
- False
- ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll
- False
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.4/Source/Settings/RJW_Genes_Settings.cs b/1.4/Source/Settings/RJW_Genes_Settings.cs
deleted file mode 100644
index f6e2f83..0000000
--- a/1.4/Source/Settings/RJW_Genes_Settings.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using Verse;
-using UnityEngine;
-
-namespace RJW_Genes
-{
- public class RJW_Genes_Settings : ModSettings
- {
- public static void DoWindowContents(Rect inRect)
- {
- //Copied from RJW settings mostly
- Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f);
- Rect rect = new Rect(0f, 0f, inRect.width - 16f, inRect.height + 300f);
- //Widgets.BeginScrollView(outRect, ref RJWSettings.scrollPosition, rect, true);
- Listing_Standard listing_Standard = new Listing_Standard();
- listing_Standard.maxOneColumn = true;
- listing_Standard.ColumnWidth = rect.width / 2.05f;
- listing_Standard.Begin(rect);
- listing_Standard.Gap(24f);
- listing_Standard.Label("Fertilin-Gain from Animals" + ": " +
- Math.Round((double)(RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor * 100f), 0).ToString() + "%", -1f, "of fertilin gained (compared to human-baseline).");
- RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor = listing_Standard.Slider(RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor, 0f, 3f);
-
- listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("Sexdemon Visits", ref rjw_genes_sexdemon_visit, "If enabled, incubi and succubi can spawn in through an event.", 0f, 1f);
- if (rjw_genes_sexdemon_visit)
- {
- listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Size matters", ref rjw_genes_sexdemon_join_size_matters, "Incubi and succubi will consider size/tightness of partners genital for deciding if they want to join", 0f, 1f);
- listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Sexdemon groups", ref rjw_genes_sexdemon_visit_groups, "Multiple sexdemons can spawn during a event", 0f, 1f);
- listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Succubi", ref rjw_genes_sexdemon_visit_succubi, "Allow incubi to spawn through this even", 0f, 1f);
- listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Incubi", ref rjw_genes_sexdemon_visit_incubi, "Allow incubi to spawn through this even", 0f, 1f);
-
- }
-
- listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("generous-donor cheatmode", ref rjw_genes_generous_donor_cheatmode, "When 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.", 0f, 1f);
-
- listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("detailed-debug", ref rjw_genes_detailed_debug, "Adds detailed information to the log about interactions and genes.", 0f, 1f);
- listing_Standard.End();
- }
-
- public override void ExposeData()
- {
- base.ExposeData();
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor, "rjw_genes_fertilin_from_animals_factor", RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor, true);
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_detailed_debug, "rjw_genes_detailed_debug", RJW_Genes_Settings.rjw_genes_detailed_debug, true);
-
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_sexdemon_visit, "rjw_genes_sexdemon_visit", RJW_Genes_Settings.rjw_genes_sexdemon_visit, true);
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_sexdemon_join_size_matters, "rjw_genes_sexdemon_join_size_matters", RJW_Genes_Settings.rjw_genes_sexdemon_join_size_matters, true);
- 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_generous_donor_cheatmode, "rjw_genes_generous_donor_cheatmode", RJW_Genes_Settings.rjw_genes_generous_donor_cheatmode, true);
- }
-
- public static bool rjw_genes_detailed_debug = false;
- public static float rjw_genes_fertilin_from_animals_factor = 0.1f;
-
-
- public static bool rjw_genes_sexdemon_visit = true;
- public static bool rjw_genes_sexdemon_join_size_matters = true;
- public static bool rjw_genes_sexdemon_visit_groups = true;
- public static bool rjw_genes_sexdemon_visit_succubi = true;
- public static bool rjw_genes_sexdemon_visit_incubi = true;
-
- public static bool rjw_genes_generous_donor_cheatmode = false;
- }
-}
diff --git a/1.4/Source/ThoughtDefOf.cs b/1.4/Source/ThoughtDefOf.cs
deleted file mode 100644
index 387aeca..0000000
--- a/1.4/Source/ThoughtDefOf.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using RimWorld;
-using Verse;
-namespace RJW_Genes
-{
- [DefOf]
- public static class ThoughtDefOf
- {
- public static readonly ThoughtDef rjw_genes_cock_eaten;
- public static readonly ThoughtDef rjw_genes_seduced;
-
- public static readonly ThoughtDef rjw_genes_pheromone_carrier_nearby;
-
- //Others with same names but other defs than in genedefof
- public static readonly InteractionDef rjw_genes_flirt;
- }
-}
diff --git a/1.5/Assemblies/Rjw-Genes.dll b/1.5/Assemblies/Rjw-Genes.dll
deleted file mode 100644
index 93235ae..0000000
Binary files a/1.5/Assemblies/Rjw-Genes.dll and /dev/null differ
diff --git a/1.5/Defs/AbilityDefs/Ability_Flight.xml b/1.5/Defs/AbilityDefs/Ability_Flight.xml
deleted file mode 100644
index d643940..0000000
--- a/1.5/Defs/AbilityDefs/Ability_Flight.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- rjw_genes_ability_flight
- fly
- Fly to a short location using your wings.
- Genes/Icons/Succubus_Wings
- 1250
- false
-
- Verb_CastAbilityJump
- fly
- false
- false
- 0.5
- 19.9
- true
- Longjump_Jump
- Longjump_Land
-
- true
- false
- false
-
-
- CastJump
-
-
\ No newline at end of file
diff --git a/1.5/Defs/AbilityDefs/Ability_NakedProwess.xml b/1.5/Defs/AbilityDefs/Ability_NakedProwess.xml
deleted file mode 100644
index 292af25..0000000
--- a/1.5/Defs/AbilityDefs/Ability_NakedProwess.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
- rjw_genes_ability_naked_prowess
- naked prowess
- Enhance the strength and resilience of your naked body with fertilin.
- Genes/Icons/rjw_naked_prowess
- Things/Mote/Heart
- CastAbilityOnThing
- False
- False
- True
-
- 126
- 0
-
-
- Verb_CastAbility
- 2
- 0
- False
- False
-
- true
- false
- false
- false
- false
- false
-
-
-
-
- CompAbilityEffect_GiveHediff
- rjw_genes_naked_prowess
- True
- true
-
-
-
- 0.15
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/AbilityDefs/Ability_ParalysingKiss.xml b/1.5/Defs/AbilityDefs/Ability_ParalysingKiss.xml
deleted file mode 100644
index 29e1588..0000000
--- a/1.5/Defs/AbilityDefs/Ability_ParalysingKiss.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
- rjw_genes_ability_paralysingkiss
- paralysing kiss
- Paralyse someone briefly with a kiss.
- Genes/Icons/rjw_genes_lips
- true
- true
- false
-
- 5
-
- Mote_CoagulateStencil
- Coagulate
- Coagulate_Cast
- 402
-
- Verb_CastAbilityTouch
- false
- -1
- 1
-
- true
- false
- false
- false
- true
-
-
-
-
- CompAbilityEffect_Stun
- -15
-
-
- rjw_genes_lips
-
-
- 0.1
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/DutyDefs/Duties_Succubus.xml b/1.5/Defs/DutyDefs/Duties_Succubus.xml
deleted file mode 100644
index bd67a24..0000000
--- a/1.5/Defs/DutyDefs/Duties_Succubus.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
- rjw_genes_flirt
-
-
-
-
- SatisfyingNeeds
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0.05
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/1.5/Defs/Effects/Fleck_Lifeforce.xml b/1.5/Defs/Effects/Fleck_Lifeforce.xml
deleted file mode 100644
index 53ac7b5..0000000
--- a/1.5/Defs/Effects/Fleck_Lifeforce.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- rjw_genes_lips
-
- Genes/Icons/rjw_genes_lips
-
- MetaOverlays
- 0.08
- 1.4
- 1.5
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/GeneDefs/GeneDefs_Fluids.xml b/1.5/Defs/GeneDefs/GeneDefs_Fluids.xml
deleted file mode 100644
index a44195d..0000000
--- a/1.5/Defs/GeneDefs/GeneDefs_Fluids.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
- rjw_genes_fluids
-
- FluidAmount
-
- false
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_no_fluid
- no fluid
- Carriers of this gene produce no sexual fluids.
- Genes/Icons/No_Cum
- RJW_Genes.Gene_ChangeFluidAmount
- 533
- 0
- 1
-
-
- 0.0
-
-
-
-
-
- rjw_genes_much_fluid
- much fluid
- Carriers of this gene produce a lot of sexual fluids.
- Genes/Icons/Much_Cum
- RJW_Genes.Gene_ChangeFluidAmount
- 534
- 1
- 0
-
-
- 3.0
-
-
-
-
-
- rjw_genes_very_much_fluid
- very much fluid
- Carriers of this gene produce an excessive amount of sexual fluids.
- Genes/Icons/Very_Much_Cum
- RJW_Genes.Gene_ChangeFluidAmount
- 535
- 1
- -1
-
-
- 15.0
-
-
-
-
-
-
- rjw_genes_fluids
- false
- RJW_Genes.Gene_ChangeFluidType
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_fluid_insect_spunk
- insect spunk
- Carriers of this gene produce insect spunk instead of cum.
- Genes/Icons/RoundC
- 311
-
-
- InsectSpunk
- InsectSpunk
-
-
-
-
-
-
-
- rjw_genes_fluid_cum_breasts
- cum milk
- Carriers of this gene produce cum from their breasts instead of milk.
- Genes/Icons/RoundC
- 312
-
-
- Cum
-
-
-
-
-
- rjw_genes_fluid_milk_penis
- milk cum
- Carriers of this gene produce milk from their penis instead of cum.
- Genes/Icons/RoundC
- 313
-
-
- Milk
-
-
-
-
-
- rjw_genes_generous_donor
- generous donor
- rjw_genes_fluids
- When this Xenotype transfers fluids during sex, the giver will not get hungry.
- Genes/Icons/Generous_Donor
- 538
-
- 2
- -1
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml b/1.5/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml
deleted file mode 100644
index 69db205..0000000
--- a/1.5/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-
-
-
- rjw_genes_genitalia_size
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
- rjw_genes_big_male_genitalia
- big male genitalia
- Carriers of this gene have larger penises.(Resizing takes place at 20th Birthday)
- Genes/Icons/Big_Male_Genitalia
- RJW_Genes.Gene_BigMaleGenitalia
- 751
-
- PenisSize
-
-
-
- 0.6
- 1.01
-
-
-
-
-
- rjw_genes_small_male_genitalia
- small male genitalia
- Carriers of this gene have smaller penises. (Resizing takes place at 20th Birthday)
- Genes/Icons/Small_Male_Genitalia
- RJW_Genes.Gene_SmallMaleGenitalia
- 753
-
- PenisSize
-
-
-
- 0.0
- 0.4
-
-
-
-
-
-
- rjw_genes_loose_female_genitalia
- loose female genitalia
- Carriers of this gene have spacious vaginas. (Resizing takes place at 20th Birthday)
- Genes/Icons/Loose_Vagina
- RJW_Genes.Gene_LooseFemaleGenitalia
- 754
-
- VaginaSize
-
-
-
- 0.6
- 1.01
-
-
-
-
-
- rjw_genes_tight_female_genitalia
- tight female genitalia
- Carriers of this gene have tight vaginas.(Resizing takes place at 20th Birthday)
- Genes/Icons/Tight_Vagina
- RJW_Genes.Gene_TightFemaleGenitalia
- 756
-
- VaginaSize
-
-
-
- 0.0
- 0.4
-
-
-
-
-
-
- rjw_genes_big_breasts
- big breasts
- Carriers of this gene have larger breasts.(Resizing takes place at 20th Birthday)
- Genes/Icons/Big_Breasts
- RJW_Genes.Gene_BigBreasts
- 757
-
- BreastSize
-
-
-
- 0.6
- 1.0
-
-
-
-
-
- rjw_genes_small_breasts
- small breasts
- Carriers of this gene have smaller breasts.(Resizing takes place at 20th Birthday)
- Genes/Icons/Small_Breasts
- RJW_Genes.Gene_SmallBreasts
- 759
-
- BreastSize
-
-
-
- 0.0
- 0.4
-
-
-
-
-
-
- rjw_genes_loose_anus
- loose anus
- Carriers of this gene have a spacious anus.(Resizing takes place at 20th Birthday)
- Genes/Icons/Loose_Anus
- RJW_Genes.Gene_LooseAnus
- 760
-
- AnusSize
-
-
-
- 0.6
- 1.0
-
-
-
-
-
- rjw_genes_tight_anus
- tight anus
- Carriers of this gene have a tight anus.(Resizing takes place at 20th Birthday)
- Genes/Icons/Tight_Anus
- RJW_Genes.Gene_TightAnus
- 762
-
- AnusSize
-
-
-
- 0.0
- 0.4
-
-
-
-
-
-
-
- rjw_genes_evergrowth
- evergrowth
- One of the most regretted gene-modifications in the Glitterworlds: The (primary) genitalia will continue growing forever. This affects size and fluid output. Excessive growth can also effect mental stability! (Resizing takes place at 20th Birthday)
- Genes/Icons/Big_Male_Genitalia
- RJW_Genes.Gene_EvergrowingGenitalia
- 767
-
-
-
- 60000
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/GeneDefs/Xenotype_Lifeforce.xml b/1.5/Defs/GeneDefs/Xenotype_Lifeforce.xml
deleted file mode 100644
index a4f5af1..0000000
--- a/1.5/Defs/GeneDefs/Xenotype_Lifeforce.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
-
- rjw_genes_succubus
- succubus
- Succubi are strongly enhanced xenohumans. These overnaturally beautiful creatures strive parasitically on the Fertilin found in semen.
- Succubi are beautiful and extremely hungry Xenohumans. They strive on having sex and extracting their victims life-force through this.
- Genes/Icons/Xenotypes/Xenotype-Succubus
- PawnBecameSanguophage
- 0.5
- 0.1~140
- 1
- -1000
- 0.005
- false
-
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
-
-
- rjw_genes_bisexual
- rjw_genes_hypersexual
- rjw_genes_female_only
- rjw_genes_lifeforce
- rjw_genes_lifeforce_drain
- rjw_genes_demonic_genitalia
- rjw_genes_cum_eater
- rjw_genes_fertilin_absorber
- rjw_genes_paralysingkiss
- rjw_genes_seduce
- AptitudeRemarkable_Sex
- DominantGene
- rjw_genes_elasticity
- rjw_genes_succubus_wings
- rjw_genes_succubus_tail
- rjw_genes_aphrodisiac_pheromones
- Beauty_Pretty
- MoveSpeed_Quick
- AptitudeStrong_Social
- Ears_Pointed
- Headbone_MiniHorns
- Skin_Purple
-
-
-
-
- rjw_genes_incubus
- incubus
- Incubi are strongly enhanced xenohumans. These overnaturally beautiful creatures strive parasitically on the Fertilin found in semen.
- Incubi are beautiful and extremely hungry Xenohumans. They strive on having sex and extracting their victims life-force through this.
- Genes/Icons/Xenotypes/Xenotype-Incubus
- PawnBecameSanguophage
- 0.5
- 0.1~140
- 1
- -1000
- 0.005
- false
-
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
- 0.02
-
-
- rjw_genes_hypersexual
- rjw_genes_bisexual
- rjw_genes_male_only
- rjw_genes_lifeforce
- rjw_genes_lifeforce_drain
- rjw_genes_drainer
- rjw_genes_demonic_genitalia
- AptitudeRemarkable_Sex
- DominantGene
- rjw_genes_seduce
- rjw_genes_succubus_wings
- rjw_genes_succubus_tail
- rjw_genes_aphrodisiac_pheromones
- Beauty_Pretty
- MoveSpeed_Quick
- Robust
- UVSensitivity_Intense
- AptitudeStrong_Intellectual
- Ears_Pointed
- Headbone_CenterHorn
- Skin_InkBlack
-
-
-
-
- rjw_genes_cumazone
- Cumazone
- Cumazone are a female only xenotype that excel at melee combat. Originally created as bodyguards for glitterworld amazon communities, they spred to other systems by mere strength and providing for some fetishes. They can use Fertilin to enhance their skin to overpower any combatant in melee. Their only source for Fertilin is biting off male genitalia - so be sure to have a steady supply of victim males or prepare to raid unsuspecting men of the rim.
- Female only, strong meele fighters, that use Fertilin from bitten-off cocks for powerful buffs.
- Genes/Icons/Xenotypes/Xenotype-Cumazon
- 0.5
- 0.1~140
- 2.5
- -1000
- 0.01
- false
-
- WoundHealing_Fast
- NakedSpeed
- Aggression_Aggressive
- MeleeDamage_Strong
- KillThirst
- Robust
- Pain_Reduced
- Beauty_Ugly
- Hair_BaldOnly
- Hair_ShortOnly
- Brow_Heavy
- Body_Hulk
- AptitudeStrong_Shooting
- AptitudeRemarkable_Melee
- AptitudePoor_Crafting
- AptitudePoor_Artistic
- Unstoppable
- rjw_genes_rapist
- rjw_genes_female_only
- rjw_genes_lifeforce
- rjw_genes_lifeforce_drain
- rjw_genes_pussyhealing
- rjw_genes_cockeater
- rjw_genes_naked_prowess
- rjw_genes_orgasm_rush
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/HediffDefs/Bioscaffold.xml b/1.5/Defs/HediffDefs/Bioscaffold.xml
deleted file mode 100644
index 8ddb8b4..0000000
--- a/1.5/Defs/HediffDefs/Bioscaffold.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
- Bioscaffold
- HediffWithComps
- bioscaffold
- This woman has an bioscaffold mesh within her womb, providing an enriching environment for an unborn baby to grow more quickly.
-
- Bioscaffold
-
- 0.001
- false
-
-
-
-
- Bioscaffold
- bioscaffold
- A single-use nanite-constructed lattice of organic mesh material meant to be installed inside a woman's womb prior to pregnancy. It provides an enriching environment for an unborn baby to grow more quickly.
-
- InstallBioscaffold
-
- Spacer
- Rare
- true
- 25
- false
-
- 30
- 350
- 0.15
- 1.3
- 6
- 800
-
-
-
- 5
- true
-
-
-
- 5
- 10
- 1
- 1
-
-
- DrugSynthesisSpeed
- Intellectual
-
- DrugLab
-
-
- 6
- 4
-
- FertilityProcedures
- 4
-
-
- ExoticMisc
-
-
-
-
- RemoveBioscaffold
- remove Bioscaffold
- Remove the bioscaffold.
-
- Bioscaffold
- Bioscaffold
-
- Removing bioscaffold.
- Bioscaffold
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/HediffDefs/Hediffs_Aphrodisiac.xml b/1.5/Defs/HediffDefs/Hediffs_Aphrodisiac.xml
deleted file mode 100644
index 3d1048c..0000000
--- a/1.5/Defs/HediffDefs/Hediffs_Aphrodisiac.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
- rjw_genes_aphrodisiac_pheromone
- HediffWithComps
- induced libido
- sex drive increasing due to smelling aphrodisiac pheromones.
- (1,0,0.5)
- 1.0
-
-
- -4.0
-
-
-
-
- wearing off
-
- 1.25
-
-
-
- 0.35
- moderate
-
-
- 1.8
-
-
-
- 0.9
- strong
-
-
- 2.5
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/HediffDefs/Hediffs_DiseaseCarrier.xml b/1.5/Defs/HediffDefs/Hediffs_DiseaseCarrier.xml
deleted file mode 100644
index 869d3aa..0000000
--- a/1.5/Defs/HediffDefs/Hediffs_DiseaseCarrier.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
- rjw_genes_disease_carrier_storage
- HediffWithComps
- stored genetic diseases
- This pawn is capable of carrying genetic diseases without being infected.
- (240,200,110)
- false
- false
- false
-
-
-
-
- 300000
-
-
-
-
- active
- false
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/HediffDefs/Hediffs_Evergrowth.xml b/1.5/Defs/HediffDefs/Hediffs_Evergrowth.xml
deleted file mode 100644
index c2fc098..0000000
--- a/1.5/Defs/HediffDefs/Hediffs_Evergrowth.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
- rjw_genes_evergrowth_sideeffect
- HediffWithComps
- genital hybris
- science has gone too far - a tool like this needs constant attention.
- (1,0,0.5)
- 1.0
-
-
- -0.025
-
-
-
-
- minor
-
- 3
-
-
-
- 0.5
- moderate
-
- 5
-
-
-
- Consciousness
- -0.05
-
-
-
-
- 0.9
- strong
-
- 7
-
-
-
- Consciousness
- -0.1
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/HediffDefs/Hediffs_OrgasmicMytosis.xml b/1.5/Defs/HediffDefs/Hediffs_OrgasmicMytosis.xml
deleted file mode 100644
index f26d1a9..0000000
--- a/1.5/Defs/HediffDefs/Hediffs_OrgasmicMytosis.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
- rjw_genes_orgasmic_mytosis_hediff
- HediffWithComps
- Orgasmic Instability
- Xenotypes with this Gene grow more unstable on orgasm - upon reaching critical level they will initate a process of mytosis.
- (240,200,110)
- false
- 1.0
- false
- false
-
-
- -0.9
-
-
-
-
- stable
-
-
- Moving
- 0.05
-
-
- Consciousness
- 0.08
-
-
-
-
- agitated
- 0.4
-
-
- Moving
- 0.15
-
-
- Consciousness
- 0.15
-
-
-
-
- unstable
- 0.7
-
-
- Moving
- -0.1
-
-
- Consciousness
- -0.1
-
-
- BloodPumping
- +0.2
-
-
-
-
-
- critical
- 0.9
-
-
- Moving
- -0.25
-
-
- Consciousness
- -0.25
-
-
- BloodPumping
- +0.5
-
-
-
-
-
-
-
- rjw_genes_mytosis_shock_hediff
- HediffWithComps
- Mytosis Shock
- Recently underwent (successful) mytosis. As this is a taxing process, some time for regeneration is required. While regenerating, no new mytosis can be started.
- (240,200,110)
- false
- 1.0
- true
- false
-
-
- -0.20
-
-
-
-
- wearing off
-
-
- Moving
- -0.25
-
-
- Consciousness
- -0.25
-
-
-
-
- fresh
- 0.6
-
-
- Moving
- -0.50
-
-
- Consciousness
- -0.7
-
-
-
-
-
-
-
-
-
-
diff --git a/1.5/Defs/HediffDefs/LimbicStimulator.xml b/1.5/Defs/HediffDefs/LimbicStimulator.xml
deleted file mode 100644
index 4df35ba..0000000
--- a/1.5/Defs/HediffDefs/LimbicStimulator.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
- LimbicStimulator
- HediffWithComps
- limbic stimulator
- limbic stimulator
- An installed limbic stimulator.
-
- (1.0, 0.6, 0.7)
-
-
- 0
-
- -1.0
- 6.0
-
-
-
-
-
-
- LimbicStimulator
- limbic stimulator
- A perpetual slow-release chemical stimulation implant that is embedded deep within the reward center of the brain, greatly increasing the need for lovin'. The need is said to become so strong that it can drive people to force themselves onto others, even if they wouldn't otherwise. Post-lovin' clarity will leave the implanted in a state of bliss, but they may also feel a sense of regret if they steal lovin' if they normally wouldn't - at least until they become used to doing it.
-
- InstallLimbicStimulator
-
-
- 30
- 4
- 1
-
-
- FertilityProcedures
-
-
-
-
- RemoveLimbicStimulator
- remove limbic stimulator
- Remove the limbic stimulator.
-
- LimbicStimulator
- LimbicStimulator
-
- Removing limbic stimulator.
- LimbicStimulator
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/IncidentsDefs/Incidents_LifeForce.xml b/1.5/Defs/IncidentsDefs/Incidents_LifeForce.xml
deleted file mode 100644
index 297aca5..0000000
--- a/1.5/Defs/IncidentsDefs/Incidents_LifeForce.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- SuccubusDreamVisit
- dirty dreams
- Misc
-
- Map_PlayerHome
-
- RJW_Genes.IncidentWorker_SuccubusDreamVisit
- 1.0
- 10
- false
-
-
\ No newline at end of file
diff --git a/1.5/Defs/InteractionDef/Interactions_Flirt.xml b/1.5/Defs/InteractionDef/Interactions_Flirt.xml
deleted file mode 100644
index 27c5408..0000000
--- a/1.5/Defs/InteractionDef/Interactions_Flirt.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
- rjw_genes_flirt
- flirt
- Things/Mote/SpeechSymbols/Chitchat
-
-
- r_logentry->[INITIATOR_nameDef] and [RECIPIENT_nameDef] [talkedabout] [TalkTopicLight].
- r_logentry->[INITIATOR_nameDef] [talkedabout] [TalkTopicLight] with [RECIPIENT_nameDef].
- r_logentry(p=0.8)->[INITIATOR_nameDef] [commentedabout] [TalkTopicLight] to [RECIPIENT_nameDef].
-
- talkedabout(p=4)->chatted about
- talkedabout->shared a word about
- talkedabout->spoke about
- talkedabout->gabbed about
- talkedabout->talked about
- talkedabout->joked about
- talkedabout->quipped about
-
- commentedabout->said something about
- commentedabout->said a word about
- commentedabout->made a comment about
- commentedabout->commented about
- commentedabout->told a joke about
-
-
-
-
-
diff --git a/1.5/Defs/InteractionDef/Rape/Rape_SuccubusTail.xml b/1.5/Defs/InteractionDef/Rape/Rape_SuccubusTail.xml
deleted file mode 100644
index 1fa8d91..0000000
--- a/1.5/Defs/InteractionDef/Rape/Rape_SuccubusTail.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-
-
- Rape_SuccubusTail_Tailjob
- succubustail tailjob
-
-
- r_logentry->Was given tailjob by [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Gave tailjob to [INITIATOR_nameDef].
-
-
-
-
- Tailjob
- Handjob
-
- DomSuccubusTail_Tailjob_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Rape
-
-
-
- CanPenetrate
-
-
-
-
-
-
-
-
-
-
- Rape_SuccubusTail_Vaginal
- succubustail vaginal
-
-
- r_logentry->Gave vaginal tailsex to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given vaginal tailsex by [INITIATOR_nameDef].
-
-
-
-
- Vaginal Tailsex
- Vaginal
-
- DomSuccubusTail_Vaginal_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Rape
-
-
-
-
-
- Vagina
-
-
-
-
-
-
-
- Rape_SuccubusTail_Anal
- succubustail anal
-
-
- r_logentry->Gave anal tailsex to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given anal tailsex by [INITIATOR_nameDef].
-
-
-
-
- Anal Tailsex
- Anal
-
- DomSuccubusTail_Anal_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Rape
-
-
-
-
-
- Anus
-
-
-
-
-
-
-
-
- Rape_SuccubusTail_Envelop
- succubustail envelop
-
-
- r_logentry->Was given special tailjob by [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Gave special tailjob to [INITIATOR_nameDef].
-
-
-
-
- Envelop
- Vaginal
-
- DomSuccubusTail_Envelop_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Rape
-
-
-
- CanPenetrate
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/InteractionDef/Rape/Reverse/Rape_Reverse_SuccubusTail.xml b/1.5/Defs/InteractionDef/Rape/Reverse/Rape_Reverse_SuccubusTail.xml
deleted file mode 100644
index a600908..0000000
--- a/1.5/Defs/InteractionDef/Rape/Reverse/Rape_Reverse_SuccubusTail.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
- Rape_SuccubusTail_Reverse_Tailjob
- succubustail tailjob
-
-
- r_logentry->Gave tailjob to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given tailjob by [INITIATOR_nameDef].
-
-
-
-
- Tailjob
- Handjob
-
- SubSuccubusTail_Tailjob_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Reverse
- Rape
-
-
-
-
-
-
- CanPenetrate
-
-
-
-
-
-
-
- Rape_SuccubusTail_Reverse_Vaginal
- succubustail vaginal
-
-
- r_logentry->Was given vaginal tailsex by [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Gave vaginal tailsex to [INITIATOR_nameDef].
-
-
-
-
- Vaginal Tailsex
- Vaginal
-
- DomSuccubusTail_Vaginal_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Reverse
- Rape
-
-
-
- Vagina
-
-
-
-
-
-
-
-
-
-
- Rape_SuccubusTail_Reverse_Anal
- succubustail anal
-
-
- r_logentry->Was given anal tailsex by [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Gave anal tailsex to [INITIATOR_nameDef].
-
-
-
-
- Anal Tailsex
- Anal
-
- DomSuccubusTail_Anal_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Reverse
- Rape
-
-
-
- Anus
-
-
-
-
-
-
-
-
-
-
-
- Rape_SuccubusTail_Reverse_Envelop
- succubustail envelop
-
-
- r_logentry->Gave special tailjob to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given special tailjob by [INITIATOR_nameDef].
-
-
-
-
- Envelop
- Vaginal
-
- DomSuccubusTail_Envelop_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Reverse
- Rape
-
-
-
-
-
- CanPenetrate
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/InteractionDef/Sex/Reverse/Sex_Reverse_SuccubusTail.xml b/1.5/Defs/InteractionDef/Sex/Reverse/Sex_Reverse_SuccubusTail.xml
deleted file mode 100644
index a6e98c5..0000000
--- a/1.5/Defs/InteractionDef/Sex/Reverse/Sex_Reverse_SuccubusTail.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
- Sex_SuccubusTail_Reverse_Tailjob
- succubustail tailjob
-
-
- r_logentry->Gave tailjob to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given tailjob by [INITIATOR_nameDef].
-
-
-
-
- Tailjob
- Handjob
-
- SubSuccubusTail_Tailjob_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Reverse
- Consensual
-
-
-
-
-
-
- CanPenetrate
-
-
-
-
-
-
-
- Sex_SuccubusTail_Reverse_Vaginal
- succubustail vaginal
-
-
- r_logentry->Was given vaginal tailsex by [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Gave vaginal tailsex to [INITIATOR_nameDef].
-
-
-
-
- Vaginal Tailsex
- Vaginal
-
- DomSuccubusTail_Vaginal_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Reverse
- Consensual
-
-
-
- Vagina
-
-
-
-
-
-
-
-
-
-
- Sex_SuccubusTail_Reverse_Anal
- succubustail anal
-
-
- r_logentry->Was given anal tailsex by [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Gave anal tailsex to [INITIATOR_nameDef].
-
-
-
-
- Anal Tailsex
- Anal
-
- DomSuccubusTail_Anal_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Reverse
- Consensual
-
-
-
- Anus
-
-
-
-
-
-
-
-
-
-
-
- Sex_SuccubusTail_Reverse_Envelop
- succubustail envelop
-
-
- r_logentry->Gave special tailjob to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given special tailjob by [INITIATOR_nameDef].
-
-
-
-
- Envelop
- Vaginal
-
- DomSuccubusTail_Envelop_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Reverse
- Consensual
-
-
-
-
-
- CanPenetrate
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/InteractionDef/Sex/Sex_SuccubusTail.xml b/1.5/Defs/InteractionDef/Sex/Sex_SuccubusTail.xml
deleted file mode 100644
index dda1ffe..0000000
--- a/1.5/Defs/InteractionDef/Sex/Sex_SuccubusTail.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
-
-
- Sex_SuccubusTail_Tailjob
- succubustail tailjob
-
-
- r_logentry->Was given tailjob by [RECIPIENT_nameDef].
-
-
-
-
-
- r_logentry->Gave tailjob to [INITIATOR_nameDef].
-
-
-
-
- Tailjob
- Handjob
-
- DomSuccubusTail_Tailjob_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Consensual
-
-
-
- CanPenetrate
-
-
-
-
-
-
-
-
-
-
- Sex_SuccubusTail_Vaginal
- succubustail vaginal
-
-
- r_logentry->Gave vaginal tailsex to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given vaginal tailsex by [INITIATOR_nameDef].
-
-
-
-
- Vaginal Tailsex
- Vaginal
-
- DomSuccubusTail_Vaginal_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Consensual
-
-
-
-
-
- Vagina
-
-
-
-
-
-
-
- Sex_SuccubusTail_Anal
- succubustail anal
-
-
- r_logentry->Gave anal tailsex to [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Was given anal tailsex by [INITIATOR_nameDef].
-
-
-
-
- Anal Tailsex
- Anal
-
- DomSuccubusTail_Anal_RP
-
-
-
- DomSuccubusTailCustomRequirementHandler
-
- Consensual
-
-
-
-
-
- Anus
-
-
-
-
-
-
-
-
- Sex_SuccubusTail_Envelop
- succubustail envelop
-
-
- r_logentry->Was given special tailjob by [RECIPIENT_nameDef].
-
-
-
-
- r_logentry->Gave special tailjob to [INITIATOR_nameDef].
-
-
-
-
- Envelop
- Vaginal
-
- DomSuccubusTail_Envelop_RP
-
-
-
- SubSuccubusTailCustomRequirementHandler
-
- Consensual
-
-
-
- CanPenetrate
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/MentalStateDefs/MentalState_Lifeforce.xml b/1.5/Defs/MentalStateDefs/MentalState_Lifeforce.xml
deleted file mode 100644
index 392407b..0000000
--- a/1.5/Defs/MentalStateDefs/MentalState_Lifeforce.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
- rjw_genes_lifeforce_randomrape
- rjw_genes_lifeforce_randomrape
- 1.5
- Extreme
- RJW_Genes.LifeForceMentalBreakWorker
-
-
-
- rjw_genes_lifeforce_randomrape
- RJW_Genes.LifeForceMentalState
- RJW_Genes.LifeForceMentalStateWorker
- random rape
- Malicious
- true
- false
- 30000
- 0.8
- 80000
- (0.5, 0.9, 0.5)
- random rape
- {0} has run out of lifeforce and is looking to obtain some.
- ThreatSmall
- {0} is no longer raping randomly.
- Mental state: Random Rape
- true
-
-
\ No newline at end of file
diff --git a/1.5/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml b/1.5/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml
deleted file mode 100644
index 2e03f2b..0000000
--- a/1.5/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- Insect_base
-
-
- AG_InsectBlood
- 0.5
-
-
- rjw_genes_ovipositor_genitalia
- 0.5
-
-
-
-
-
- Slime_base
-
-
- AG_SlimeBlood
- 0.5
-
-
- rjw_genes_slime_genitalia
- 0.5
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml b/1.5/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml
deleted file mode 100644
index ca732bf..0000000
--- a/1.5/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml
+++ /dev/null
@@ -1,285 +0,0 @@
-
-
-
- Canine
-
- Canine_Group
- CanineAnimal
- CanineSingleGenderAnimal
- CanineSkinAnimal
-
-
-
- Ears_Floppy
- 0.75
-
-
- Tail_Furry
- 0.2
-
-
- Furskin
- 0.5
-
-
- rjw_genes_canine_genitalia
- 0.4
-
-
- ViolenceDisabled
- 0.05
-
-
- PsychicBonding
- 0.05
-
-
- Mood_Sanguine
- 0.1
-
-
-
-
-
-
- Insect
-
- Insect_Group
- ArthropodOvipositorAnimal
- ArthropodOvipositorHornyAnimal
-
-
-
- Beauty_Ugly
- 0.5
-
-
- Immunity_Strong
- 0.6
-
-
- ToxicEnvironmentResistance_Partial
- 0.4
-
-
- rjw_genes_ovipositor_genitalia
- 0.15
-
-
- rjw_genes_insectincubator
- 0.1
-
-
- rjw_genes_insectbreeder
- 0.1
-
-
- Body_Thin
- 0.3
-
-
-
-
-
- Feline
-
- Feline_Group
- FelineAnimal
- FelineHornyAnimal
- FelineSingleGenderAnimal
- AA_SandProwlerAnimal
-
-
-
-
- Tail_Furry
- 0.2
-
-
- Furskin
- 0.5
-
-
- Ears_Cat
- 0.9
-
-
- PsychicBonding
- 0.05
-
-
- Sleepy
- 0.25
-
-
- DarkVision
- 0.25
-
-
- rjw_genes_feline_genitalia
- 0.25
-
-
-
-
-
- Equine
-
- Equine_Group
- HorseAnimal
-
-
-
- Furskin
- 0.2
-
-
- rjw_genes_equine_genitalia
- 0.25
-
-
- MoveSpeed_Quick
- 0.4
-
-
- MoveSpeed_VeryQuick
- 0.1
-
-
- rjw_genes_much_fluid
- 0.3
-
-
- rjw_genes_very_much_fluid
- 0.05
-
-
- Body_Hulk
- 0.4
-
-
-
-
-
- Dragon
-
- Dragon_Group
- ThrumboAnimal
- DragonAnimal
- DragonSingleGenderAnimal
-
-
-
- Unstoppable
- 0.25
-
-
- Headbone_CenterHorn
- 0.9
-
-
- VoiceRoar
- 0.6
-
-
- MaxTemp_SmallIncrease
- 0.7
-
-
- MaxTemp_LargeIncrease
- 0.1
-
-
- rjw_genes_dragon_genitalia
- 0.6
-
-
- FireResistant
- 0.15
-
-
- rjw_genes_much_fluid
- 0.3
-
-
- rjw_genes_very_much_fluid
- 0.05
-
-
- Body_Hulk
- 0.7
-
-
-
-
-
- Rodent
-
- Rodent_Group
- RodentAnimal
- RodentSingleGenderAnimal
- DragonSingleGenderAnimal
-
-
-
- Furskin
- 0.2
-
-
- Fertile
- 0.25
-
-
- FastRunner
- 0.6
-
-
- rjw_genes_small_genitalia
- 0.6
-
-
- Immunity_Strong
- 0.4
-
-
- ToxicEnvironmentResistance_Partial
- 0.1
-
-
- Body_Thin
- 0.45
-
-
-
-
-
- Racoon
-
- Raccon_Group
- RaccoonAnimal
-
-
-
- Furskin
- 0.25
-
-
- Tail_Furry
- 0.25
-
-
- StrongStomach
- 0.5
-
-
- Immunity_Strong
- 0.2
-
-
- ToxicEnvironmentResistance_Partial
- 0.1
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/RaceGeneDefs/RaceGeneDefs_template.xml b/1.5/Defs/RaceGeneDefs/RaceGeneDefs_template.xml
deleted file mode 100644
index b092257..0000000
--- a/1.5/Defs/RaceGeneDefs/RaceGeneDefs_template.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/RulePackDefs/Sex/RulePacks_SuccubTail.xml b/1.5/Defs/RulePackDefs/Sex/RulePacks_SuccubTail.xml
deleted file mode 100644
index 21e75a1..0000000
--- a/1.5/Defs/RulePackDefs/Sex/RulePacks_SuccubTail.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
- DomSuccubusTail_Tailjob_RP
-
-
- sent-> [INITIATOR_nameDef] gave [RECIPIENT_nameDef] a tailjob.
-
-
-
-
-
- DomSuccubusTail_Vaginal_RP
-
-
- sent-> [INITIATOR_nameDef] [INITIATOR_possessive] tail was vaginally inserted into [RECIPIENT_nameDef].
-
-
-
-
-
- DomSuccubusTail_Anal_RP
-
-
- sent-> [INITIATOR_nameDef] [INITIATOR_possessive] tail was anally inserted into [RECIPIENT_nameDef].
-
-
-
-
-
-
- DomSuccubusTail_Envelop_RP
-
-
- sent-> [RECIPIENT_nameDef] dick was enveloped by [INITIATOR_nameDef] [INITIATOR_possessive] tail.
-
-
-
-
-
- SubSuccubusTail_Tailjob_RP
-
-
- sent-> [RECIPIENT_nameDef] gave [INITIATOR_nameDef] a tailjob.
-
-
-
-
-
- SubSuccubusTail_Vaginal_RP
-
-
- sent-> [RECIPIENT_nameDef] [RECIPIENT_possessive] tail was vaginally inserted into [INITIATOR_nameDef].
-
-
-
-
-
- SubSuccubusTail_Anal_RP
-
-
- sent-> [RECIPIENT_nameDef] [RECIPIENT_possessive] tail was anally inserted into [INITIATOR_nameDef].
-
-
-
-
-
-
- SubSuccubusTail_Envelop_RP
-
-
- sent-> [INITIATOR_nameDef] dick was enveloped by [RECIPIENT_nameDef] [RECIPIENT_possessive] tail.
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/ThinkTreeDefs/ThinkTrees_LifeForce.xml b/1.5/Defs/ThinkTreeDefs/ThinkTrees_LifeForce.xml
deleted file mode 100644
index 574fe0f..0000000
--- a/1.5/Defs/ThinkTreeDefs/ThinkTrees_LifeForce.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
- SuccubusGetLifeForce
- Humanlike_PostMain
- 14
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Defs/ThoughtDefs/Thoughts_LifeForce.xml b/1.5/Defs/ThoughtDefs/Thoughts_LifeForce.xml
deleted file mode 100644
index c513491..0000000
--- a/1.5/Defs/ThoughtDefs/Thoughts_LifeForce.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
- rjw_genes_cock_eaten
- Thought_Memory
- 30.0
- 100
- 0.4
-
-
- cock eaten
- My cock was eaten directly off my body, I am devestated. This is not what good head feels like.
- -30
-
-
-
-
-
- rjw_genes_seduced
- Thought_Memory
- 10.0
- 100
- 0.4
-
-
- seduced
- I was seduced into having sex. I regret what happened.
- -10
-
-
-
-
-
- rjw_genes_critical_fertilin
- ThoughtWorker_Hediff
- rjw_genes_fertilin_craving
-
-
- fertilin craving
- My bones ache. I really need fertilin.
- -25
-
-
- fertilin craving
- This hurts bad and I can't stop thinking about sex. I would do anything for some cum.
- -40
-
-
- fertilin craving
- Can't think. Sex. Sex. Must. Have. Cum.
- -55
-
-
-
-
diff --git a/1.5/Languages/English/Keyed/Letters.xml b/1.5/Languages/English/Keyed/Letters.xml
deleted file mode 100644
index 4436829..0000000
--- a/1.5/Languages/English/Keyed/Letters.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Twins!
- is still in labor and is having twins! Be sure to gather your doctor and additional friends and family to ensure the other baby is also born healthy!
-
- Another baby!
- is still in labor and is having twins! Be sure to gather your doctor and additional friends and family to ensure the other baby is also born healthy!
-
diff --git a/1.5/Languages/English/Keyed/Lifeforce.xml b/1.5/Languages/English/Keyed/Lifeforce.xml
deleted file mode 100644
index 16ce67a..0000000
--- a/1.5/Languages/English/Keyed/Lifeforce.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
- Pawn doesn't have required fertilin gene.
- Not enough fertilin to cast.
- This happened because of low fertilin.
-
- Low fertilin
- A colonist has low fertilin. At this point they are becoming desperate enough to consider rape and bestiality to obtain fertilin (if they didn't already). At zero fertilin they will lose all sense and start raping randomly
-
-
-
- {0} has fed enough on your colonists and will now leave.
-
- Dirty dreams
- The dirty dreams of your colonists have attracted succubi.\n\nThey will hang around for a couple of days trying to seduce your colonists. They may decide to join your colony, if they are impressed by your colonists's sexual prowess.
-
- Guest Joins
- {0} enjoys it here and has decided to stay.
-
diff --git a/1.5/Mods/Cumpilation/Defs/GeneDefs/Cumpilation_Genes.xml b/1.5/Mods/Cumpilation/Defs/GeneDefs/Cumpilation_Genes.xml
deleted file mode 100644
index cace367..0000000
--- a/1.5/Mods/Cumpilation/Defs/GeneDefs/Cumpilation_Genes.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
- rjw_genes_inflatable
- inflatable
- rjw_genes_fluids
- This Xenotype loves being stuffed with fluids and does not suffer physical impediments from being inflated.
- Genes/Icons/Cumflation
- 536
- -1
- 2
-
-
- Cumpilation_LikesCumflation
-
-
-
- Cumpilation_NotCumflatable
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
- rjw_genes_un_inflatable
- inflation resistance
- rjw_genes_fluids
- This Xenotype cannot get inflated by fluids, neither vaginal, oral or anal.
- Genes/Icons/Cumflation_Immunity
- 537
-
- Cumpilation_NotCumflatable
-
-
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
- rjw_genes_living_cumbucket
- living cumbucket
- rjw_genes_fluids
- When this Xenotype partakes in sexual activity, they store cum and produce it as an item.
- Genes/Icons/living_cumbucket
- 559
- 3
- -2
-
-
- Genes/Icons/RJW_Genes_Endogene_Background
- Genes/Icons/RJW_Genes_Xenogene_Background
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Mods/Cumpilation/Defs/HediffDefs/Cumflation_Counter_Hediffs.xml b/1.5/Mods/Cumpilation/Defs/HediffDefs/Cumflation_Counter_Hediffs.xml
deleted file mode 100644
index 904c415..0000000
--- a/1.5/Mods/Cumpilation/Defs/HediffDefs/Cumflation_Counter_Hediffs.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
- RJW_Genes_Cumpilation_Cumflation_Counter
- HediffWithComps
- cumflation counter
- cumflation counter
- Apparently you can deal with it quite well.
- false
- 3.0
- false
- false
-
-
- -0.85
-
-
- Cumpilation_Cumflation
-
-
-
-
- counter a little
- false
-
-
- counter slight
- 0.2
- false
-
-
- Moving
- 0.1
-
-
-
-
- counter moderate
- 0.4
- false
-
-
- Moving
- 0.25
-
-
- -0.1
-
-
- counter intense
- 0.65
- false
-
-
- Moving
- 0.55
-
-
- -0.15
-
-
- counter extreme
- 0.9
- false
-
-
- Moving
- 0.85
-
-
- -0.25
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Mods/Cumpilation/Defs/HediffDefs/Living_Cumbucket_Hediff.xml b/1.5/Mods/Cumpilation/Defs/HediffDefs/Living_Cumbucket_Hediff.xml
deleted file mode 100644
index 6a72301..0000000
--- a/1.5/Mods/Cumpilation/Defs/HediffDefs/Living_Cumbucket_Hediff.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
- rjw_genes_filled_living_cumbucket
- HediffWithComps
- filled living cumbucket
- This pawn is a (filled) living cum bucket. Thanks to a generous donation, this pawn will slowly generate cum for pickup.
- 75.0
- (240,200,110)
- false
-
- false
- false
-
-
- -0.5
-
-
-
-
- 0
- 0.5
- 0.25
- 0.1
- 0.5
-
-
-
-
-
- slight
-
- -0.1
-
-
-
- moderate
- 0.4
- 0.8
-
- -0.25
-
-
-
- Moving
- -0.05
-
-
-
-
- full
- 0.65
- 0.75
-
- -0.25
-
-
-
- Moving
- -0.1
-
-
-
-
- over-full
- 1.1
- 0.6
-
- -0.5
-
-
-
- Moving
- -0.15
-
-
-
-
- living reservior
- 10.1
- 0.1
-
- -1.5
-
-
-
- Moving
- -0.55
-
-
-
-
-
-
-
-
diff --git a/1.5/Mods/Cumpilation/Defs/HediffDefs/Stuffing_Counter_Hediffs.xml b/1.5/Mods/Cumpilation/Defs/HediffDefs/Stuffing_Counter_Hediffs.xml
deleted file mode 100644
index c983074..0000000
--- a/1.5/Mods/Cumpilation/Defs/HediffDefs/Stuffing_Counter_Hediffs.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
- HediffWithComps
- (240,200,110)
- false
- 1.0
- false
- false
-
-
-
- RJW_Genes_Cumpilation_Cumstuffed_Counter
- cumstuffed counter
- cumstuffed countered
- Apparently you can deal with it quite well.
-
-
- Cumpilation_Cumstuffed
-
-
-
-
- counter slightly bloated
- false
-
-
- counter bloated
- false
- 0.2
-
-
- Moving
- 0.03
-
-
-
-
- counter full
- false
- 0.4
-
-
- Moving
- 0.1
-
-
-
-
- counter stuffed
- false
- 0.6
-
-
- Moving
- 0.2
-
-
- -0.1
-
-
- counter overstuffed
- 0.8
- false
-
-
- Moving
- 0.3
-
-
- -0.2
-
-
-
-
-
- RJW_Genes_Cumpilation_InsectSpunkStuffed_Counter
- insect-spunk stuffed counter
- insect-spunk stuffed counter
-
-
- Cumpilation_InsectSpunkStuffed
-
-
- Apparently you can deal with it quite well.
-
-
- counter slightly bloated
- false
-
-
- counter bloated
- false
- 0.2
-
- 0.05
- -0.1
-
-
-
- counter full
- false
- 0.4
-
- 0.25
- 5
- 5
- -0.1
- -0.1
- +0.15
-
-
-
- Talking
- -0.05
-
-
-
-
- counter over-stuffed
- false
- 0.7
-
- 10
- 10
- -0.2
- -0.2
- +0.25
-
-
-
- Manipulation
- +0.05
-
-
- Talking
- +0.15
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Mods/Cumpilation/Patches/Patch_Cum_Ingestion_Fertilin.xml b/1.5/Mods/Cumpilation/Patches/Patch_Cum_Ingestion_Fertilin.xml
deleted file mode 100644
index 4ab7391..0000000
--- a/1.5/Mods/Cumpilation/Patches/Patch_Cum_Ingestion_Fertilin.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- Defs/ThingDef[defName="Cumpilation_Cum"]/ingestible/outcomeDoers
-
- /Defs/ThingDef[defName="Cumpilation_Cum"]/ingestible
-
-
-
- 2
-
-
-
-
-
- Defs/ThingDef[defName="Cumpilation_Cum"]/ingestible/outcomeDoers
-
-
- 2
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Mods/NotRaceSupport/Defs/GeneDefs/GeneDefs_ExoticGenitaliaTypes.xml b/1.5/Mods/NotRaceSupport/Defs/GeneDefs/GeneDefs_ExoticGenitaliaTypes.xml
deleted file mode 100644
index 90ad197..0000000
--- a/1.5/Mods/NotRaceSupport/Defs/GeneDefs/GeneDefs_ExoticGenitaliaTypes.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
- rjw_genes_Necro_genitalia
- undead genitalia
- Carriers of this gene have necrotic undead genitalia.
- Genes/Icons/Genitalia_necro_icon
-
-
- NecroPenis
-
-
- TeratophileQuirk
-
-
- 807
-
-
-
- rjw_genes_Orc_genitalia
- orc genitalia
- Carriers of this gene have orc genitalia.
- Genes/Icons/Genitalia_orc_icon
-
-
- OrcPenis
-
-
- 807
-
-
-
- rjw_genes_Pig_genitalia
- screw genitalia
- Carriers of this gene have screw genitalia.
- Genes/Icons/Genitalia_screw_icon
-
-
- PigPenis
-
-
-
-
-
- rjw_genes_Tentacle_genitalia
- alien genitalia
- Carriers of this gene have alien genitalia.
- Genes/Icons/Genitalia_alien_icon
-
-
- TentaclePenis
-
-
- TeratophileQuirk
-
-
- 807
-
-
-
- rjw_genes_Golem_genitalia
- golem genitalia
- Carriers of this gene have rocky golem genitalia.
- Genes/Icons/penis_rock_icon
-
-
- GolemPenis
-
-
- TeratophileQuirk
-
-
- 807
-
-
-
- rjw_genes_Marine_genitalia
- marine genitalia
- Carriers of this gene have marine mammal like genitalia.
- Genes/Icons/Genitalia_marine_icon
-
-
- MarinePenis
-
-
- 807
-
-
-
- rjw_genes_Ghost_genitalia
- ghost genitalia
- Carriers of this gene have ghost genitalia.
- Genes/Icons/Genitalia_ghost_icon
-
-
- GhostPenis
- GhostVagina
-
-
- TeratophileQuirk
-
-
- 807
-
-
diff --git a/1.5/Mods/RaceSupport/Defs/GeneDefs/GeneDefs_GenitaliaTypesRace.xml b/1.5/Mods/RaceSupport/Defs/GeneDefs/GeneDefs_GenitaliaTypesRace.xml
deleted file mode 100644
index 17e5d3d..0000000
--- a/1.5/Mods/RaceSupport/Defs/GeneDefs/GeneDefs_GenitaliaTypesRace.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
- rjw_genes_Pig_genitalia
- Pig genitalia
- Carriers of this gene develop pig genitalia.
- Genes/Icons/Genitalia_screw_icon
-
-
- PigPenis
- PigVagina
-
-
- 807
-
-
-
- rjw_genes_Orc_genitalia
- Orc genitalia
- Carriers of this gene develop orc genitalia.
- Genes/Icons/Genitalia_orc_icon
-
-
- OrcPenis
- OrcVagina
-
-
- 807
-
-
-
diff --git a/1.5/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml b/1.5/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml
deleted file mode 100644
index b356155..0000000
--- a/1.5/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
-
- Bear_Group
-
-
- Bear_Grizzly
- Bear_Polar
-
-
- GR_Manbear
- GR_Bearman
-
-
-
-
- Boomalope_Group
-
- Boomalope
-
-
- GR_Manalope
- GR_Booman
-
-
-
-
- Poultry_Group
-
- Chicken
- Cassowary
- Emu
- Ostrich
- Goose
- Turkey
- Duck
-
-
- GR_Manchicken
- GR_Turkeyman
-
-
-
-
- Bovine_Group
-
- Muffalo
- Cow
- Bison
- Yak
-
-
-
- GR_Manffalo
- GR_Muffaloman
-
-
-
-
- Canine_Group
-
- Warg
- Wolf_Timber
- Wolf_Arctic
- Fox_Fennec
- Fox_Red
- Fox_Arctic
- Husky
- LabradorRetriever
- YorkshireTerrier
-
-
-
- GR_Manwolf
- GR_Dogman
-
-
-
-
- Feline_Group
-
- Cougar
- Panther
- Lynx
- Cat
-
-
-
- GR_Mancat
- GR_Catman
-
-
-
-
- Rabbit_Group
-
- GuineaPig
- Hare
- Snowhare
- Squirrel
- Rat
- Raccoon
-
-
-
- GR_Mansquirrel
- GR_Moleman
-
-
-
-
- Thrumbo_Group
-
- Thrumbo
-
-
-
- GR_Thrumboman
-
-
-
-
- Equine_Group
-
- Dromedary
- Elk
- Horse
- Caribou
- Donkey
-
-
-
- GR_Hurseman
-
-
-
-
- Insect_Group
-
- Megascarab
- Spelopede
- Megaspider
-
-
-
- GR_Manscarab
-
-
-
-
- Reptile_Group
-
- Iguana
- Cobra
- Tortoise
-
-
-
- GR_Lizardman
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Genes/Patch_Unbreakable.xml b/1.5/Patches/Genes/Patch_Unbreakable.xml
deleted file mode 100644
index a2d674a..0000000
--- a/1.5/Patches/Genes/Patch_Unbreakable.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
- Defs/ThoughtDef[defName="FeelingBroken"]
-
-
- rjw_genes_unbreakable
-
-
-
-
-
-
- Defs/ThoughtDef[defName="GotRaped"]
-
-
- rjw_genes_unbreakable
-
-
-
-
-
- Defs/ThoughtDef[defName="GotAnalRaped"]
-
-
- rjw_genes_unbreakable
-
-
-
-
-
- Defs/ThoughtDef[defName="GotAnalRapedByFemale"]
-
-
- rjw_genes_unbreakable
-
-
-
-
-
- Defs/ThoughtDef[defName="GotRapedUnconscious"]
-
-
- rjw_genes_unbreakable
-
-
-
-
-
- Defs/ThoughtDef[defName="HateMyRapist"]
-
-
- rjw_genes_unbreakable
-
-
-
-
-
- Defs/ThoughtDef[defName="AllowedMeToGetRaped"]
-
-
- rjw_genes_unbreakable
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/ThingDefs/RJW_Used_Condoms.xml b/1.5/Patches/ThingDefs/RJW_Used_Condoms.xml
deleted file mode 100644
index 56ae1d2..0000000
--- a/1.5/Patches/ThingDefs/RJW_Used_Condoms.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
- Defs/ThingDef[defName="UsedCondom"]/ingestible/outcomeDoers
-
- /Defs/ThingDef[defName="UsedCondom"]/ingestible
-
-
-
- 1
-
-
-
-
-
- Defs/ThingDef[defName="UsedCondom"]/ingestible/outcomeDoers
-
-
- 1
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/ThinkTree/MentalStateCritical_LifeForceRandomRape.xml b/1.5/Patches/ThinkTree/MentalStateCritical_LifeForceRandomRape.xml
deleted file mode 100644
index 9532df8..0000000
--- a/1.5/Patches/ThinkTree/MentalStateCritical_LifeForceRandomRape.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
- Defs/ThinkTreeDef[defName="MentalStateCritical"]/thinkRoot[@Class="ThinkNode_Tagger"]/subNodes
-
-
- rjw_genes_lifeforce_randomrape
-
-
- Rest
- 0.05
- true
-
-
-
-
-
- 0.5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/GenitaliaUpdate.xml b/1.5/Patches/Xenotypes/GenitaliaUpdate.xml
deleted file mode 100644
index e967f24..0000000
--- a/1.5/Patches/Xenotypes/GenitaliaUpdate.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
- Defs/XenotypeDef[defName="Neanderthal"]/genes
-
- rjw_genes_big_male_genitalia
- rjw_genes_loose_female_genitalia
-
-
-
-
- Defs/XenotypeDef[defName="Pigskin"]/genes
-
- rjw_genes_much_fluid
- rjw_genes_zoophile
-
- rjw_genes_human_genitalia
-
-
-
-
- Defs/XenotypeDef[defName="Yttakin"]/genes
-
- rjw_genes_big_male_genitalia
- rjw_genes_loose_female_genitalia
-
-
-
-
-
-
- LustLicentia.RJWLabs
-
-
- Defs/XenotypeDef[defName="Highmate"]/genes
-
- rjw_genes_likes_cumflation
-
-
-
-
-
- Defs/XenotypeDef[defName="Genie"]/genes
-
- rjw_genes_mechbreeder
-
-
-
-
- Defs/XenotypeDef[defName="Sanguophage"]/genes
-
- rjw_genes_demonic_genitalia
-
-
-
-
- Defs/XenotypeDef[defName="Impid"]/genes
-
- rjw_genes_demonic_genitalia
- rjw_genes_small_breasts
- rjw_genes_small_male_genitalia
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchBSRaces.xml b/1.5/Patches/Xenotypes/PatchBSRaces.xml
deleted file mode 100644
index bdd6981..0000000
--- a/1.5/Patches/Xenotypes/PatchBSRaces.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
- Big and Small - Races
-
-
-
-
- Defs/XenotypeDef[defName="BS_Ogre"]/genes
-
- rjw_genes_much_fluid
-
-
-
- Defs/XenotypeDef[defName="BS_GreatOgre"]/genes
-
- rjw_genes_very_much_fluid
- rjw_genes_big_male_genitalia
- rjw_genes_big_breasts
- rjw_genes_loose_female_genitalia
- rjw_genes_loose_anus
-
-
-
- Defs/XenotypeDef[defName="BS_Troll"]/genes
-
- rjw_genes_evergrowth
-
-
-
- Defs/XenotypeDef[defName="BS_Jotun"
- or defName="BS_FrostJotun"
- or defName="BS_FireJotun"
- or defName="BS_Surtr"
- or defName="BS_Ymir"
- or defName="BS_Half_Jotun"
- ]/genes
-
- rjw_genes_big_male_genitalia
- rjw_genes_big_breasts
- rjw_genes_orgasm_rush
-
-
-
-
- Alpha Genes
-
-
- Defs/XenotypeDef[defName="BS_Corrupterd_Titan"]/genes
-
- rjw_genes_rapist
-
-
-
-
- Defs/XenotypeDef[defName="BS_Gnome"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_very_much_fluid
- rjw_genes_inflatable
-
-
-
- Defs/XenotypeDef[defName="BS_Dwarf" or defName="BS_Svartalf"]/genes
-
- rjw_genes_big_male_genitalia
-
-
-
- Defs/XenotypeDef[defName="BS_Redcap"]/genes
-
- rjw_genes_littered_births
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_much_fluid
- rjw_genes_rapist
-
-
-
- Defs/XenotypeDef[defName = "BS_Hearthguard" or defName = "BS_Hearthdoll" or defName = "BS_PilotableFleshGolem" or defName="BS_FleshGolemServant"]/genes
-
- rjw_genes_no_sex_need
-
-
-
-
-
-
diff --git a/1.5/Patches/Xenotypes/PatchBiotechNyaron.xml b/1.5/Patches/Xenotypes/PatchBiotechNyaron.xml
deleted file mode 100644
index 9f32522..0000000
--- a/1.5/Patches/Xenotypes/PatchBiotechNyaron.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- Biotech Nyaron
-
-
- Defs/XenotypeDef[defName="Nyaron"]/genes
-
- rjw_genes_feline_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchErinsAuronya.xml b/1.5/Patches/Xenotypes/PatchErinsAuronya.xml
deleted file mode 100644
index 641b747..0000000
--- a/1.5/Patches/Xenotypes/PatchErinsAuronya.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- Erin's Auronya
-
-
- Defs/XenotypeDef[defName="ERN_Auronya"]/genes
-
- rjw_genes_feline_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchErinsShisune.xml b/1.5/Patches/Xenotypes/PatchErinsShisune.xml
deleted file mode 100644
index b4bf303..0000000
--- a/1.5/Patches/Xenotypes/PatchErinsShisune.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- Erin's Shisune
-
-
- Defs/XenotypeDef[defName="ERN_Shisune"]/genes
-
- rjw_genes_canine_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchKijinRace3.xml b/1.5/Patches/Xenotypes/PatchKijinRace3.xml
deleted file mode 100644
index 9fbd4c6..0000000
--- a/1.5/Patches/Xenotypes/PatchKijinRace3.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- Kijin Race 3.0
-
-
- Defs/XenotypeDef[defName="KijinXenotype"]/genes
-
- rjw_genes_demonic_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchMammalia.xml b/1.5/Patches/Xenotypes/PatchMammalia.xml
deleted file mode 100644
index 6bf2de5..0000000
--- a/1.5/Patches/Xenotypes/PatchMammalia.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Barkkin"]/genes
-
- rjw_genes_canine_genitalia
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Bonecrown"]/genes
-
- rjw_genes_equine_genitalia
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Wiretail"]/genes
-
- rjw_genes_small_breasts
- rjw_genes_small_male_genitalia
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Hidewing"]/genes
-
- rjw_genes_small_breasts
- rjw_genes_small_male_genitalia
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Seertusk"]/genes
-
- rjw_genes_big_breasts
- rjw_genes_big_male_genitalia
- rjw_genes_loose_female_genitalia
- rjw_genes_loose_anus
- rjw_genes_equine_genitalia
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Hindhopper"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
- rjw_genes_littered_births
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Haytankard"]/genes
-
- rjw_genes_big_breasts
- rjw_genes_big_male_genitalia
- rjw_genes_loose_female_genitalia
- rjw_genes_loose_anus
- rjw_genes_udder
- rjw_genes_equine_genitalia
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Cloudpuff"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Devilpuff"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_zoophile
-
-
-
-
-
- Biotech Expansion - Mammalia
-
-
- Defs/XenotypeDef[defName="Blastheart"]/genes
-
- rjw_genes_equine_genitalia
- rjw_genes_zoophile
-
-
-
-
diff --git a/1.5/Patches/Xenotypes/PatchMammaliaMythic.xml b/1.5/Patches/Xenotypes/PatchMammaliaMythic.xml
deleted file mode 100644
index e49761a..0000000
--- a/1.5/Patches/Xenotypes/PatchMammaliaMythic.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
- Biotech Expansion - Mythic
-
-
- Defs/XenotypeDef[defName="Glintscale"]/genes
-
- rjw_genes_much_fluid
- rjw_genes_dragon_genitalia
- rjw_genes_big_male_genitalia
-
-
-
-
-
- Biotech Expansion - Mythic
-
-
- Defs/XenotypeDef[defName="Ashfeather"]/genes
-
- rjw_genes_much_fluid
-
-
-
-
-
- Biotech Expansion - Mythic
-
-
- Defs/XenotypeDef[defName="Tailbinder"]/genes
-
- rjw_genes_much_fluid
- rjw_genes_canine_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchNarai.xml b/1.5/Patches/Xenotypes/PatchNarai.xml
deleted file mode 100644
index efcd3da..0000000
--- a/1.5/Patches/Xenotypes/PatchNarai.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- NaraiXenotype
-
-
- Defs/XenotypeDef[defName="Narai"]/genes
-
- rjw_genes_canine_genitalia
- rjw_genes_zoophile
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchNyaron.xml b/1.5/Patches/Xenotypes/PatchNyaron.xml
deleted file mode 100644
index 4ad40a5..0000000
--- a/1.5/Patches/Xenotypes/PatchNyaron.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- Biotech Nyaron
-
-
- Defs/XenotypeDef[defName="Nyaron"]/genes
-
- rjw_genes_tight_female_genitalia
- rjw_genes_feline_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchObsidia.xml b/1.5/Patches/Xenotypes/PatchObsidia.xml
deleted file mode 100644
index 4057e73..0000000
--- a/1.5/Patches/Xenotypes/PatchObsidia.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
- Obsidia Expansion - Arachnas Xenotype
-
-
- Defs/XenotypeDef[defName="OE_WidowArachna" or defName="OE_WolfArachna" or defName="OE_GoliathArachna"]/genes
-
- rjw_genes_ovipositor_genitalia
- rjw_genes_insectbreeder
- rjw_genes_fluid_insect_spunk
- rjw_genes_cocoonweaver
-
-
-
-
-
-
- Obsidia Expansion - Axotl Xenotype
-
-
- Defs/XenotypeDef[defName="OE_Axotl"]/genes
-
- rjw_genes_small_male_genitalia
- rjw_genes_living_cumbucket
-
-
-
-
-
-
- Obsidia Expansion - Ceratons Xenotype
-
-
- Defs/XenotypeDef[defName="OE_Protoceraton" or defName="OE_Styracodon" or defName="OE_Triceraton"]/genes
-
- rjw_genes_crocodilian_genitalia
- rjw_genes_big_male_genitalia
- rjw_genes_loose_female_genitalia
- rjw_genes_big_breasts
-
-
-
-
-
-
- Obsidia Expansion - Liches Xenotype
-
-
- Defs/XenotypeDef[defName="OE_Lich" or defName="OE_Archlich"]/genes
-
- rjw_genes_no_fluid
- rjw_genes_featureless_chest
- rjw_genes_no_sex_need
- rjw_genes_no_penis
- rjw_genes_no_vagina
-
-
-
-
-
-
- Obsidia Expansion - Mothoids Xenotype
-
-
- Defs/XenotypeDef[defName="OE_Mothoid" or defName="OE_MothoidPrime" or defName="OE_MothoidAtlant"]/genes
-
- rjw_genes_insectincubator
- rjw_genes_fluid_insect_spunk
-
-
-
-
-
-
- Obsidia Expansion - Slimes Xenotype
-
-
- Defs/XenotypeDef[defName="OE_Slime" or defName="OE_SlimeWaste" or defName="OE_SlimeBloody" or defName="OE_SlimePrime"]/genes
-
- rjw_genes_slime_genitalia
- rjw_genes_very_much_fluid
- rjw_genes_loose_anus
- rjw_genes_loose_female_genitalia
- rjw_genes_inflatable
- rjw_genes_elasticity
-
-
-
-
-
-
- Obsidia Expansion - Tortle Xenotype
-
-
- Defs/XenotypeDef[defName="OE_Tortle"]/genes
-
- rjw_genes_reptilian_genitalia
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchPapou.xml b/1.5/Patches/Xenotypes/PatchPapou.xml
deleted file mode 100644
index 39a6e81..0000000
--- a/1.5/Patches/Xenotypes/PatchPapou.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- Papou Race : emotional birds
-
-
- Defs/XenotypeDef[defName="papago"]/genes
-
- rjw_genes_orgasm_rush
- rjw_genes_tight_female_genitalia
- rjw_genes_tight_anus
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchRimsenal.xml b/1.5/Patches/Xenotypes/PatchRimsenal.xml
deleted file mode 100644
index b4b3405..0000000
--- a/1.5/Patches/Xenotypes/PatchRimsenal.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
- Rimsenal Xenotype Pack - Askbarn
-
-
-
-
- Defs/XenotypeDef[defName="Askbarn"]/genes
-
- rjw_genes_electric_satisfaction
- rjw_genes_pheromone_spit
- rjw_genes_loose_anus
- rjw_genes_bisexual
-
-
-
-
- Defs/XenotypeDef[defName="Uredd"]/genes
-
- rjw_genes_electric_satisfaction
- rjw_genes_dragon_genitalia
- rjw_genes_big_male_genitalia
- rjw_genes_big_breasts
-
-
-
-
-
-
-
-
- Rimsenal Xenotype Pack - Harana
-
-
- Defs/XenotypeDef[defName="Harana"]/genes
-
- rjw_genes_small_male_genitalia
- rjw_genes_tight_female_genitalia
- rjw_genes_unbreakable
-
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchRoosFaun.xml b/1.5/Patches/Xenotypes/PatchRoosFaun.xml
deleted file mode 100644
index fb5d803..0000000
--- a/1.5/Patches/Xenotypes/PatchRoosFaun.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- Roo's Faun Xenotype
-
-
- Defs/XenotypeDef[defName="RBSF_Faun"]/genes
-
- rjw_genes_equine_genitalia
- rjw_genes_zoophile
- rjw_genes_mating_call
- rjw_genes_tight_female_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchRoosMino.xml b/1.5/Patches/Xenotypes/PatchRoosMino.xml
deleted file mode 100644
index 8f3da93..0000000
--- a/1.5/Patches/Xenotypes/PatchRoosMino.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
- Roo's Minotaur Xenotype
-
-
- Defs/XenotypeDef[defName="RBM_Minotaur"]/genes
-
- rjw_genes_equine_genitalia
- rjw_genes_much_fluid
- rjw_genes_big_male_genitalia
- rjw_genes_loose_female_genitalia
- rjw_genes_big_breasts
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Patches/Xenotypes/PatchRoosSatyr.xml b/1.5/Patches/Xenotypes/PatchRoosSatyr.xml
deleted file mode 100644
index b82b1e1..0000000
--- a/1.5/Patches/Xenotypes/PatchRoosSatyr.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- Roo's Satyr Xenotype
-
-
- Defs/XenotypeDef[defName="RBSF_Satyr"]/genes
-
- rjw_genes_aphrodisiac_pheromones
- rjw_genes_much_fluid
-
-
-
-
diff --git a/1.5/Patches/Xenotypes/PatchSaurid.xml b/1.5/Patches/Xenotypes/PatchSaurid.xml
deleted file mode 100644
index 6a4b99b..0000000
--- a/1.5/Patches/Xenotypes/PatchSaurid.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- Vanilla Races Expanded - Saurid
-
-
- Defs/XenotypeDef[defName="VRESaurids_Saurid"]/genes
-
- rjw_genes_dragon_genitalia
-
-
-
-
\ No newline at end of file
diff --git a/1.5/Source/Animal_Inheritance/Defs/BestialityGeneInheritanceDef.cs b/1.5/Source/Animal_Inheritance/Defs/BestialityGeneInheritanceDef.cs
deleted file mode 100644
index ae0c51e..0000000
--- a/1.5/Source/Animal_Inheritance/Defs/BestialityGeneInheritanceDef.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace RJW_BGS
-{
- public class BestialityGeneInheritanceDef
- {
- public string defName;
- public float chance = 1f;
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/Defs/RaceGeneDef.cs b/1.5/Source/Animal_Inheritance/Defs/RaceGeneDef.cs
deleted file mode 100644
index 10a9149..0000000
--- a/1.5/Source/Animal_Inheritance/Defs/RaceGeneDef.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using rjw;
-
-namespace RJW_BGS
-{
- public class RaceGeneDef : Def
- {
- public int priority;
- public string raceGroup; //keeping this for backwards compatibility
- public List raceGroups; //racegroup, but in list form so multiple can be entered, preference to use this over racegroup
- public List raceNames;
- public List pawnKindNames;
- public List genes;
- public string hybridName;
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/Defs/RaceGeneDef_Helper.cs b/1.5/Source/Animal_Inheritance/Defs/RaceGeneDef_Helper.cs
deleted file mode 100644
index 4f2acc4..0000000
--- a/1.5/Source/Animal_Inheritance/Defs/RaceGeneDef_Helper.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Verse;
-
-namespace RJW_BGS
-{
- public class RaceGeneDef_Helper
- {
- //code based on racegroupdefinternal which has a similar function
- public static RaceGeneDef GetRaceGeneDefInternal(Pawn pawn)
- {
- List Valids = ValidRaceGeneDefs(pawn);
- if (Valids.Count > 0)
- {
- RaceGeneDef result = Valids.MaxBy(r => r.priority);
- return result;
- }
- return null;
- }
-
- public static List ValidRaceGeneDefs(Pawn pawn)
- {
- PawnKindDef kindDef = pawn.kindDef;
- if (kindDef == null)
- {
- ModLog.Warning($"Error looking up PawnKindDef for {pawn.Name} - Could not lookup Animal Inheritance Genes");
- return null;
- }
-
- string raceName = kindDef.race.defName;
- string pawnKindName = kindDef.defName;
- //Wild animals have no name, so we will use pawnkindname instead
- string pawnName = pawn.Name != null ? pawn.Name.ToStringFull : pawnKindName;
- PawnData pawnData = SaveStorage.DataStore.GetPawnData(pawn);
- RaceGroupDef raceGroupDef = pawnData.RaceSupportDef;
-
- RJW_Genes.ModLog.Debug($"Looking up Animal-Inheritable Genes for {pawnName} with KindDef {kindDef.defName},RaceName {raceName}, PawnKind {pawnKindName} and RaceGroup {raceGroupDef.defName}");
-
- IEnumerable allDefs = DefDatabase.AllDefs;
- List pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group)
- {
- List pawnKindNames = group.pawnKindNames;
- return pawnKindNames != null && pawnKindNames.Contains(pawnKindName);
- }).ToList();
- if (pawnKindDefs.Count() > 0)
- {
- DebugPrintRaceGeneDefs("PawnKindDefs", pawnName,pawnKindDefs);
- return pawnKindDefs;
- }
- RJW_Genes.ModLog.Debug($"Did not find PawnKindDefs for {pawnName}");
-
- List raceKindDefs = allDefs.Where(delegate (RaceGeneDef group)
- {
- List raceNames = group.raceNames;
- return raceNames != null && raceNames.Contains(raceName);
- }).ToList();
- if (raceKindDefs.Count() > 0)
- {
- DebugPrintRaceGeneDefs("PawnKindDefs", pawnName, raceKindDefs);
- return raceKindDefs;
- }
- RJW_Genes.ModLog.Debug($"Did not find RaceKindDefs for {pawnName}");
-
- List raceGroupDefs = new List();
- if (raceGroupDef != null)
- {
- raceGroupDefs = allDefs.Where(delegate (RaceGeneDef group)
- {
- string raceGroupDefName = group.raceGroup;
- List list_raceGroupDefName = group.raceGroups;
- return (raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName)
- || (list_raceGroupDefName != null && list_raceGroupDefName.Contains(raceGroupDef.defName));
- }).ToList();
- }
-
- if (raceGroupDefs.Count() > 0)
- {
- DebugPrintRaceGeneDefs("RaceKindDefs", pawnName, raceGroupDefs);
- return raceGroupDefs;
- }
- RJW_Genes.ModLog.Debug($"Did not find RaceGroupDefs for {pawnName}");
-
- ModLog.Message($"Did not find any Genes inheritable for {pawnName}");
- return new List();
- }
-
- private static void DebugPrintRaceGeneDefs(String header,String identifier,List defs)
- {
- if (RJW_Genes.RJW_Genes_Settings.rjw_genes_detailed_debug)
- {
- var defString = "[";
- foreach (RaceGeneDef raceGeneDef in defs)
- defString += $"({raceGeneDef.priority}:{raceGeneDef.defName} - {raceGeneDef.genes.Count} Genes)";
- defString += "]";
- ModLog.Message($"Found the following {header}-Genes for {identifier}: {defString}");
- }
- }
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/Defs/VGEHybridOffspringDefs.cs b/1.5/Source/Animal_Inheritance/Defs/VGEHybridOffspringDefs.cs
deleted file mode 100644
index 60421fb..0000000
--- a/1.5/Source/Animal_Inheritance/Defs/VGEHybridOffspringDefs.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace RJW_Genes
-{
- public class VGEHybridOffspringDefs : Verse.Def
- {
- public List SupportedParentKindDefs;
- public List PossibleHybridChildKindDefs;
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/InheritanceUtility.cs b/1.5/Source/Animal_Inheritance/InheritanceUtility.cs
deleted file mode 100644
index 957d988..0000000
--- a/1.5/Source/Animal_Inheritance/InheritanceUtility.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-using System.Collections.Generic;
-using Verse;
-using RimWorld;
-using rjw;
-using RJW_Genes;
-using System.Linq;
-
-namespace RJW_BGS
-{
- public class InheritanceUtility
- {
- public static List AnimalInheritedGenes(Pawn father, Pawn mother)
- {
- List genelist = new List();
- //If Both are Humans, or Both are animals, do nothing & return empty GeneList
- if (!mother.RaceProps.Humanlike && !father.RaceProps.Humanlike)
- return genelist;
- if (mother.RaceProps.Humanlike && father.RaceProps.Humanlike)
- return genelist;
-
- RJW_Genes.ModLog.Message($"Trigger an Animal-Gene-Inheritance for {father.Name} and {mother.Name}");
- //One parent must be an animal and the other must be human, so only one needs to return
- if (father != null && !father.RaceProps.Humanlike)
- {
- RJW_Genes.ModLog.Debug($"Father was found to be animal - looking up genes for {father.Name}");
- return SelectGenes(father);
- }
- if (mother != null && !mother.RaceProps.Humanlike)
- {
- RJW_Genes.ModLog.Debug($"Mother was found to be animal - looking up genes for {mother.Name}");
- return SelectGenes(mother);
- }
-
- return genelist;
- }
-
- ///
- /// Looks up potential genes for an animal,
- /// checks their chance and returns all 'triggered' genes.
- ///
- /// The animal for which to look up genes (Animals are Pawns in RW)
- /// The genes that will be inherited from this animal.
- public static List SelectGenes(Pawn pawn)
- {
- List genelist = new List();
- RaceGeneDef raceGeneDef = RaceGeneDef_Helper.GetRaceGeneDefInternal(pawn);
- if (raceGeneDef != null)
- {
- foreach (BestialityGeneInheritanceDef gene in raceGeneDef.genes)
- {
- if (gene.chance * RJW_BGSSettings.rjw_bgs_global_gene_chance >= Rand.Range(0.01f,1f))
- {
- genelist.Add(DefDatabase.GetNamed(gene.defName));
- }
- }
- }
- RJW_Genes.ModLog.Debug($"From {raceGeneDef.genes.Count} possible genes in {raceGeneDef.defName}, {genelist.Count} were added by chance ({RJW_BGSSettings.rjw_bgs_global_gene_chance} chance multiplier from Settings).");
- return genelist;
- }
-
-
- ///
- /// Adds a list of Genes to the pawns existing GeneSet.
- /// Whether it is added as a Xenogene or Endogene is configured in Mod-Settings.
- ///
- /// The pawn for which Genes will be added
- /// The Genes to add (Endogene by default, Xenogene with Mod Settings)
- public static void AddGenes(Pawn pawn, List genes)
- {
- foreach (GeneDef gene in genes)
- {
- pawn.genes.AddGene(gene, RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes);
- }
- }
-
- ///
- /// Initiates a bestiality baby with genes if the baby does not exist earlier.
- /// This is used to make rjw-egg-pregnancies work.
- /// Related file: PatchRJWHediffInsect_Egg.cs
- ///
- /// The mother of the baby.
- /// The father of the baby.
- /// The baby created in non-pregnancy-way (has 0 Genes yet)
- public static void NewGenes(Pawn mother, Pawn dad, Pawn baby)
- {
- if (!RJW_BGSSettings.rjw_bgs_enabled)
- {
- return;
- }
-
- RJW_Genes.ModLog.Message($"Triggering an New-Gene Animal-Gene-Inheritance for {baby.Name} ({dad.Name} + {mother.Name})");
- if (baby.RaceProps.Humanlike)
- {
- if (baby.genes == null)
- {
- baby.genes = new Pawn_GeneTracker(baby);
- }
-
- //Remove the hair and skin genes pawns always start with, should get correct ones from human parent anyway.
- for (int i = baby.genes.Endogenes.Count - 1; i >= 0; i--)
- {
- baby.genes.RemoveGene(baby.genes.Endogenes[i]);
- }
-
- List genes = PregnancyUtility.GetInheritedGenes(dad, mother);
- List beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
- InheritanceUtility.AddGenes(baby, beastgenes);
- InheritanceUtility.AddGenes(baby, genes);
- if(baby.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin) == null)
- {
- AddSkinColor(mother, dad, baby);
- }
- }
- }
-
- public static void AddSkinColor(Pawn mother, Pawn father, Pawn baby)
- {
- if (mother != null && mother.genes != null)
- {
- GeneDef gene = mother.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin);
- if (gene != null)
- {
- baby.genes.AddGene(gene, false);
- }
- }
- else if (father != null && father.genes != null)
- {
- GeneDef gene = father.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin);
- if (gene != null)
- {
- baby.genes.AddGene(gene, false);
- }
- }
- else
- {
- Log.Message("Could not find skincolor of " + baby.Name + "'s parents, giving random skincolor.");
- baby.genes.AddGene(PawnSkinColors.RandomSkinColorGene(baby), false);
- }
- }
-
- ///
- /// Used only for debugging, to see what you loaded and how it looks.
- ///
- private static void LogAllFoundRaceGroupGenes()
- {
- foreach (RaceGroupDef def in DefDatabase.AllDefs)
- {
- Log.Message("defName = " + def.defName);
- if (def.raceNames != null)
- {
- foreach (string race in def.raceNames)
- {
- Log.Message(race);
- }
- }
- }
- }
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_BasePregnancy_VanillaExpandedGenetics.cs b/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_BasePregnancy_VanillaExpandedGenetics.cs
deleted file mode 100644
index af9bab1..0000000
--- a/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_BasePregnancy_VanillaExpandedGenetics.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using UnityEngine;
-using HarmonyLib;
-using rjw;
-
-namespace RJW_BGS
-{
-
-
-[HarmonyPatch(typeof(Hediff_BasePregnancy))]
-public class Patch_RJW_BasePregnancy_VanillaExpandedGenetics
-{
- public static HediffDef controler = DefDatabase.GetNamed("rjw_genes_animal_control_hediff", false);
-
- ///
- /// This Patch (only) adds the "rjw_genes_animal_control_hediff" to newborn VE hybrid-animals.
- ///
- ///
- [HarmonyPostfix]
- [HarmonyPatch("GenerateBabies")]
- public static void AddHediff (Hediff_BasePregnancy __instance)
- {
-
- if (controler == null) return;
-
- if (!RJW_BGSSettings.rjw_bgs_VE_genetics)
- {
- return;
- }
-
- foreach (Pawn baby in __instance.babies)
- {
- if(baby != null && VGEHybridUtility.SupportedHybridRaces.Contains(baby.kindDef))
- baby.health.AddHediff(controler);
- }
-
- }
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_HediffInsect_Egg.cs b/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_HediffInsect_Egg.cs
deleted file mode 100644
index 9861537..0000000
--- a/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_HediffInsect_Egg.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Collections.Generic;
-using System.Reflection;
-using System.Reflection.Emit;
-using HarmonyLib;
-using rjw;
-
-namespace RJW_BGS
-{
- [HarmonyPatch(typeof(Hediff_InsectEgg), "GiveBirth")]
- public static class Patch_RJW_HediffInsect_Egg
- {
- [HarmonyTranspiler]
- public static IEnumerable Transpiler(IEnumerable instructions)
- {
- MethodInfo newgenes = AccessTools.Method(typeof(InheritanceUtility), "NewGenes", null, null);
- FieldInfo implanter = AccessTools.Field(typeof(Hediff_InsectEgg), "implanter");
- FieldInfo father = AccessTools.Field(typeof(Hediff_InsectEgg), "father");
-
- foreach (CodeInstruction instruction in instructions)
- {
- yield return instruction;
- if (instruction.opcode == OpCodes.Call && instruction.operand.ToString() == "Void BabyPostBirth(Verse.Pawn, Verse.Pawn, Verse.Pawn)")
- {
- yield return new CodeInstruction(OpCodes.Ldloc_0, null);
- yield return new CodeInstruction(OpCodes.Ldfld, implanter);
- yield return new CodeInstruction(OpCodes.Ldarg_0, null);
- yield return new CodeInstruction(OpCodes.Ldfld, father);
- yield return new CodeInstruction(OpCodes.Ldloc_1, null);
- yield return new CodeInstruction(OpCodes.Call, newgenes);
- }
-
- }
- }
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_PregnancyHelper_VanillaExpandedGenetics.cs b/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_PregnancyHelper_VanillaExpandedGenetics.cs
deleted file mode 100644
index 0beb98c..0000000
--- a/1.5/Source/Animal_Inheritance/Patches/Patch_RJW_PregnancyHelper_VanillaExpandedGenetics.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RJW_BGS;
-using HarmonyLib;
-using rjw;
-using static rjw.Hediff_BasePregnancy;
-using RJW_Genes;
-
-namespace RJW_BGS
-{
-
-[HarmonyPatch(typeof(PregnancyHelper))]
-public class Patch_RJW_PregnancyHelper_VanillaExpandedGenetics
-{
-
- ///
- /// This Patch changes the pregnancy logic to check for possible hybridization.
- /// Iff the hybridization applies, this prefix skips the normal AddPregnancyHediff (by returning false).
- ///
- /// Small Note: Below we use `Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Mother);`
- /// This completely creates the pregnancy, it does not need to be assigned to anything or added to some hediffs.
- ///
- /// There was an issue with Pawn Generation and this has been Reworked - Please see #116 for more documentation.
- /// The current state of affairs is that hybrids are generated using RJW-Pregnancy and "switching" the Fathers KindDef only for Child Generation, before switching it back.
- /// It's not easy to just change the Babies kindDef, because RJW-Preg runs a PawnGeneration Request.
- /// Thus, if you just change that from Husky to Dogman, most of the things are still Husky and you get a lot of red errors after birth.
- ///
- /// Relevant RJW Files:
- ///
- /// - Hediff_BestialPregnancy https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Modules/Pregnancy/Hediffs/Hediff_BestialPregnancy.cs?ref_type=heads
- /// - Hediff_BasePregnancy https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Modules/Pregnancy/Hediffs/Hediff_BasePregnancy.cs?ref_type=heads
- ///
- [HarmonyPrefix]
- [HarmonyPatch("AddPregnancyHediff")]
- public static bool AddPregnancyHediffPrefix(Pawn mother, Pawn father)
- {
-
- // Error & Setting HandlingHandling, "true" means the normal method is run (and nothing else from this patch).
- // Behaviour of Harmony Prefixes: https://harmony.pardeike.net/articles/patching-prefix.html
- if (!RJW_BGSSettings.rjw_bgs_VE_genetics) return true;
- if (mother == null || father == null) return true;
-
- RJW_Genes.ModLog.Debug("Trying to add RJW Pregnancy Hediff - Checking for potential VGE Animal-Hybridization");
-
- bool humanMotherAndSupportedAnimal = mother.IsHuman() && VGEHybridUtility.SupportedInitialAnimalRaces.Contains(father.kindDef);
- bool humanMotherAndSupportedHybrid = mother.IsHuman() && VGEHybridUtility.SupportedHybridRaces.Contains(father.kindDef);
- bool humanFatherAndSupportedAnimal = father.IsHuman() && VGEHybridUtility.SupportedInitialAnimalRaces.Contains(mother.kindDef);
- bool humanFatherAndSupportedHybrid = father.IsHuman() && VGEHybridUtility.SupportedHybridRaces.Contains(mother.kindDef);
-
- // Exit if there are no supported parents / nothing to do for my logic
- if (!(humanMotherAndSupportedAnimal || humanMotherAndSupportedHybrid || humanFatherAndSupportedAnimal || humanFatherAndSupportedHybrid))
- {
- RJW_Genes.ModLog.Debug("Aborting VGE-Hybdrization Pregnancy - Parents were unsupported RaceKinds");
- return true;
- }
- // Exit by chance
- if((new Random()).NextDouble() > RJW_BGSSettings.rjw_bgs_ve_genetics_chance)
- {
- RJW_Genes.ModLog.Debug($"VGE-Hybridization chance ({Math.Round(RJW_BGSSettings.rjw_bgs_ve_genetics_chance,3)*100}%) was not met - continuing with normal pregnancy behaviour.");
- return true;
- }
-
- if (humanMotherAndSupportedAnimal)
- {
- RJW_Genes.ModLog.Debug("Found a human mother and a supported animal resulting in an animal-child - starting VGE pregnancy (rjw.Hediff_BestialPregnancy)");
- Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Father);
-
- var kindDef = VGEHybridUtility.LookupPossiblyOffspringHybrid(father.kindDef);
- var stored = father.kindDef;
- father.kindDef = kindDef;
- Hediff_BasePregnancy preg = Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Father);
- father.kindDef = stored;
-
- // "false" means the normal method is not run
- return false;
- }
- else if (humanMotherAndSupportedHybrid)
- {
-
- RJW_Genes.ModLog.Debug("Found a human mother and a hybrid - this behaviour has been disabled from 2.2.1 onward - sorry :(");
- return true;
- }
- else if (humanFatherAndSupportedAnimal)
- {
- RJW_Genes.ModLog.Debug("Found a human father and a supported animal resulting in an animal-child - starting VGE pregnancy (rjw.Hediff_BestialPregnancy)");
-
- var kindDef = VGEHybridUtility.LookupPossiblyOffspringHybrid(mother.kindDef);
- var stored = mother.kindDef;
- mother.kindDef = kindDef;
- Hediff_BasePregnancy preg = Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Mother);
- mother.kindDef = stored;
-
- return false;
- }
- else if (humanFatherAndSupportedHybrid)
- {
- RJW_Genes.ModLog.Debug("Found a human father and a hybrid - this behaviour has been disabled from 2.2.1 onward - sorry :(");
- return true;
- }
-
- RJW_Genes.ModLog.Debug("Issues in applying the Patch for VGE hybdritization - doing nothing and continuing with normal pregnancy.");
- return true;
- }
- }
-
-}
diff --git a/1.5/Source/Animal_Inheritance/Patches/Patch_Vanilla_PregnancyUtility.cs b/1.5/Source/Animal_Inheritance/Patches/Patch_Vanilla_PregnancyUtility.cs
deleted file mode 100644
index 80c16bd..0000000
--- a/1.5/Source/Animal_Inheritance/Patches/Patch_Vanilla_PregnancyUtility.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HarmonyLib;
-using RimWorld;
-using Verse;
-
-namespace RJW_BGS
-{
- ///
- /// This Patch is applied to change the normal pregnancy to add animal-inheritance.
- /// If the settings allow animal gene inheritance,
- /// the genes are determined and "simply added".
- ///
- [HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[]
- {
- typeof(Pawn),
- typeof(Pawn),
- //typeof(bool)
- }
- )]
- public static class Patch_Vanilla_PregnancyUtility
- {
- [HarmonyPostfix]
- public static void AnimalInheritedGenes(Pawn father, Pawn mother, ref GeneSet __result)
- {
- if (!RJW_BGSSettings.rjw_bgs_enabled)
- {
- return;
- }
- List genes = InheritanceUtility.AnimalInheritedGenes(father, mother);
- if (genes.Any())
- {
- RJW_Genes.ModLog.Debug($"Adding {(genes.Count)} Genes from an Animal-Pregnancy between {father} and {mother}");
- foreach (GeneDef gene in genes)
- {
- __result.AddGene(gene);
- }
- } else
- {
- RJW_Genes.ModLog.Debug($"Tried to add Genes from Animal-Pregnancy between {father} and {mother} but didn't find any");
- }
- }
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/Settings/RJW_BGSSettingsController.cs b/1.5/Source/Animal_Inheritance/Settings/RJW_BGSSettingsController.cs
deleted file mode 100644
index 12ef107..0000000
--- a/1.5/Source/Animal_Inheritance/Settings/RJW_BGSSettingsController.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using UnityEngine;
-
-namespace RJW_BGS
-{
- public class RJW_BGSSettingsController : Mod
- {
- public RJW_BGSSettingsController(ModContentPack content) : base(content)
- {
- base.GetSettings();
- }
-
- public override string SettingsCategory()
- {
- return "RJW Genes Animal Gene Inheritance";
- }
- public override void DoSettingsWindowContents(Rect inRect)
- {
- RJW_BGSSettings.DoWindowContents(inRect);
- }
- }
-}
diff --git a/1.5/Source/Animal_Inheritance/VGEHybridUtility.cs b/1.5/Source/Animal_Inheritance/VGEHybridUtility.cs
deleted file mode 100644
index 3426f75..0000000
--- a/1.5/Source/Animal_Inheritance/VGEHybridUtility.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using RJW_Genes;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_BGS
-{
- public class VGEHybridUtility
- {
- ///
- /// All VGE-Hybrids that can result from Bestiality - these are drawn from the existing XML-Defs.
- ///
- public static List SupportedHybridRaces {
- get{return DefDatabase.AllDefs.SelectMany(def => def.PossibleHybridChildKindDefs).Distinct().ToList();}
- }
-
- ///
- /// All Animals that can produce VGE Hybrids - these are drawn from the existing XML-Defs.
- ///
- public static List SupportedInitialAnimalRaces {
- get { return DefDatabase.AllDefs.SelectMany(def => def.SupportedParentKindDefs).Distinct().ToList(); }
- }
-
- ///
- /// Returns a possible Hybrid KindDef for a given Animal.
- /// Null if there is none.
- /// Random one if there are multiple.
- ///
- /// The animal fathering the baby
- /// KindDef for Hybrid originated from Parent Animal. Null on None, Not-Supported or Error. Random one from multiple.
- public static PawnKindDef LookupPossiblyOffspringHybrid(PawnKindDef Parent)
- {
- if (Parent == null) return null;
- if (!SupportedInitialAnimalRaces.Contains(Parent)) return null;
- else
- {
- return DefDatabase.AllDefs
- .Where(def => def.SupportedParentKindDefs.Contains(Parent))
- .SelectMany(def => def.PossibleHybridChildKindDefs)
- .Distinct()
- .RandomElementWithFallback(null);
- // Man I am a true Java Developer
- }
- }
-
- ///
- /// Small Method for debugging - I used it mostly on game-startup to see if reading all Defs worked fine.
- /// Introduced after the VGE-Hybridization Rework from #116
- ///
- public static void LogAllFoundVGEHybridDefinitions()
- {
- IEnumerable defs = DefDatabase.AllDefs;
- var parents = defs.SelectMany(def => def.SupportedParentKindDefs).Distinct();
- var offsprings = defs.SelectMany(def => def.PossibleHybridChildKindDefs).Distinct();
- RJW_Genes.ModLog.Debug($"Found {defs.Count()} VGEHybridOffspringDefs, covering {parents.Count()} distinct possible parent-animals and {offsprings.Count()} distinct possible hybrid-children.");
- }
-
- }
-
-}
diff --git a/1.5/Source/Common/Defs/BoundedExtension.cs b/1.5/Source/Common/Defs/BoundedExtension.cs
deleted file mode 100644
index 08e150f..0000000
--- a/1.5/Source/Common/Defs/BoundedExtension.cs
+++ /dev/null
@@ -1,16 +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 BoundedExtension : DefModExtension
- {
- public float minimum = 0.0f;
- public float maximum = 1.0f;
- }
-
-}
diff --git a/1.5/Source/Common/Defs/DistanceExtension.cs b/1.5/Source/Common/Defs/DistanceExtension.cs
deleted file mode 100644
index 8bdd083..0000000
--- a/1.5/Source/Common/Defs/DistanceExtension.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// Small Extension that covers distances for Genes.
- /// This allows to set distance in the XMLs.
- /// The distance is measured in tiles, so a distance of ~25 means 25 tiles away from the pawn in any direction.
- ///
- public class DistanceExtension : DefModExtension
- {
- public int distance;
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Common/Defs/ModExtensionHelper.cs b/1.5/Source/Common/Defs/ModExtensionHelper.cs
deleted file mode 100644
index d75fc12..0000000
--- a/1.5/Source/Common/Defs/ModExtensionHelper.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- internal class ModExtensionHelper
- {
-
- public static int GetDistanceFromModExtension(GeneDef defOf, int fallback)
- {
- DistanceExtension distanceExt = defOf.GetModExtension();
-
- int potentialDistance = distanceExt?.distance ?? fallback;
-
- if (potentialDistance > 0)
- {
- return potentialDistance;
- } else {
- ModLog.Warning($"Retrieved a bad distance ({potentialDistance}) reading the RJW_Genes.DistanceExtension for {defOf.defName}");
- return 1;
- }
- }
-
-
- public static int GetTickIntervalFromModExtension(GeneDef defOf, int fallback)
- {
- TickIntervalExtension tickExt = defOf.GetModExtension();
-
- int potentialTickInterval = tickExt?.tickInterval ?? fallback;
-
- if (potentialTickInterval > 0)
- {
- return potentialTickInterval;
- }
- else
- {
- ModLog.Warning($"Retrieved a bad distance ({potentialTickInterval}) reading the RJW_Genes.DistanceExtension for {defOf.defName}");
- return 1;
- }
- }
-
-
- }
-}
diff --git a/1.5/Source/Common/Defs/TickIntervalExtension.cs b/1.5/Source/Common/Defs/TickIntervalExtension.cs
deleted file mode 100644
index 3e8184c..0000000
--- a/1.5/Source/Common/Defs/TickIntervalExtension.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
-{
- ///
- /// General DefModExtension to cover various genes that need to tick regularly.
- /// Defining it like this allows to adjust things in XML.
- ///
- public class TickIntervalExtension : DefModExtension
- {
- public int tickInterval;
- }
-}
diff --git a/1.5/Source/Common/Either.cs b/1.5/Source/Common/Either.cs
deleted file mode 100644
index dcd6dd8..0000000
--- a/1.5/Source/Common/Either.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace RJW_Genes
-{
- public class Either
- {
- public readonly TL left;
- public readonly TR right;
- public readonly bool isLeft;
-
- public Either(TL left)
- {
- this.left = left;
- this.isLeft = true;
- }
-
- public Either(TR right)
- {
- this.right = right;
- this.isLeft = false;
- }
- }
-
-}
diff --git a/1.5/Source/DefOfs/JobDefOf.cs b/1.5/Source/DefOfs/JobDefOf.cs
deleted file mode 100644
index b077aa3..0000000
--- a/1.5/Source/DefOfs/JobDefOf.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;
-using RimWorld;
-namespace RJW_Genes
-{
- [DefOf]
- public static class JobDefOf
- {
- public static readonly JobDef rjw_genes_lifeforce_randomrape;
- public static readonly JobDef rjw_genes_lifeforce_seduced;
- public static readonly JobDef sex_on_spot;
- public static readonly JobDef sex_on_spot_reciever;
- public static readonly JobDef rjw_genes_flirt;
- }
-}
diff --git a/1.5/Source/First.cs b/1.5/Source/First.cs
deleted file mode 100644
index 101d3cc..0000000
--- a/1.5/Source/First.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using rjw;
-using Verse;
-using RimWorld;
-using rjw.Modules.Interactions.Rules.PartKindUsageRules;
-using rjw.Modules.Interactions.Internals.Implementation;
-
-namespace RJW_Genes
-{
- [StaticConstructorOnStartup]
- internal static class First
- {
- static First()
- {
- AddtoIPartPreferenceRule();
- }
-
- //Modified code from https://gitgud.io/lutepickle/rjw_menstruation/-/tree/main/1.4/source/RJW_Menstruation/RJW_Menstruation
- //Summary//
- //Adds our own partpreferences to rjw's list. Our partpreferences are under Interactions.GenesPartKindUsageRule
- //
- private static void InjectIntoRjwInteractionServices()
- {
- List partPreferenceRules = Unprivater.GetProtectedValue>("_partKindUsageRules", typeof(PartPreferenceDetectorService));
- partPreferenceRules.Add(new Interactions.GenesPartKindUsageRule());
- }
- }
-}
diff --git a/1.5/Source/GeneDefs_GenitaliaTypeEndogenes.xml b/1.5/Source/GeneDefs_GenitaliaTypeEndogenes.xml
deleted file mode 100644
index ff90a9f..0000000
--- a/1.5/Source/GeneDefs_GenitaliaTypeEndogenes.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
- rjw_genes_genitalia
-
- GenitalType
-
- 0
-
-
-
-
- rjw_genes_human_genitalia
- human genitalia
- Carriers of this carry genitalia similar to humans.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_HumanGenitalia
- 1
-
-
-
- rjw_genes_equine_genitalia
- equine genitalia
- Carriers of this gene develop equine genitalia.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_EquineGenitalia
- 2
-
-
-
- rjw_genes_canine_genitalia
- canine genitalia
- Carriers of this gene develop canine genitalia.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_CanineGenitalia
- 3
-
-
-
- rjw_genes_feline_genitalia
- feline genitalia
- Carriers of this gene develop feline genitalia.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_FelineGenitalia
- 4
-
-
-
- rjw_genes_demonic_genitalia
- demonic genitalia
- Carriers of this gene have demonic genitalia.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_DemonicGenitalia
- 5
-
-
-
- rjw_genes_dragon_genitalia
- dragon genitalia
- Carriers of this gene develop dragon genitalia.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_DragonGenitalia
- 6
-
-
-
- rjw_genes_slime_genitalia
- slime genitalia
- Carriers of this gene have slime genitalia.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_SlimeGenitalia
- 7
-
-
-
- rjw_genes_ovipositor_genitalia
- insect genitalia
- Carriers of this gene have ovipositors similar to insects.
- Genes/Icons/Placeholder
- RJW_Genes.Gene_OvipositorGenitalia
- 8
-
-
-
\ No newline at end of file
diff --git a/1.5/Source/Genes/Breeding/Genes/Gene_FerventOvipositor.cs b/1.5/Source/Genes/Breeding/Genes/Gene_FerventOvipositor.cs
deleted file mode 100644
index 0b8536c..0000000
--- a/1.5/Source/Genes/Breeding/Genes/Gene_FerventOvipositor.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
-
- ///
- /// Manages the rjw_genes_fervent_ovipositor to grow eggs much faster.
- ///
- /// TODO: Move the Multiplier into XML
- /// TODO: This gene only works after the first egg, the first egg for two new pawns spawns at the same time (strange).
- ///
- public class Gene_FerventOvipositor : Gene
- {
-
- const int MULTIPLIER = 3; // Tick 3 times as much, making a pawn with this Gene Produce Eggs 4 times as fast as the normal.
-
- public override void Tick()
- {
- base.Tick();
-
- if (pawn == null) return;
-
- Hediff_NaturalSexPart OvipositorF = (Hediff_NaturalSexPart)pawn.health.hediffSet.GetFirstHediffOfDef(rjw.Genital_Helper.ovipositorF);
-
- if (OvipositorF == null) return;
-
- OvipositorF.AsHediff.TryGetComp().eggInterval.max = 10000 / MULTIPLIER;
-
- // DevNote: I first had a for-loop calling OviPositorF.tick(), but I fear that would be a performance sink.
- // Also, it would double other aspects as well, such as bleeding out through your insect-PP or dropping out the eggs.
- }
-
-
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/Breeding/Genes/Gene_MechBreeder.cs b/1.5/Source/Genes/Breeding/Genes/Gene_MechBreeder.cs
deleted file mode 100644
index 1ceaf67..0000000
--- a/1.5/Source/Genes/Breeding/Genes/Gene_MechBreeder.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Verse;
-
-namespace Genes.Breeding
-{
- public class Gene_MechBreeder : Gene
- {
- // This one does not do anything, the patch is some where else checking for the pawn to have this Gene!
- }
-}
diff --git a/1.5/Source/Genes/Breeding/Patches/PatchMechBirth.cs b/1.5/Source/Genes/Breeding/Patches/PatchMechBirth.cs
deleted file mode 100644
index 4067245..0000000
--- a/1.5/Source/Genes/Breeding/Patches/PatchMechBirth.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-using System.Collections.Generic;
-using System.Reflection;
-using System.Reflection.Emit;
-using HarmonyLib;
-using rjw;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This Class patches the RJW-Mechbirth to not deal damage when the pawn has the MechBreeder Gene.
- /// This harmony patch was kindly provided by 'shabalox' https://github.com/Shabalox/RJW_Genes_Addons/
- ///
- [HarmonyPatch(typeof(Hediff_MechanoidPregnancy), "GiveBirth")]
- public static class PatchMechBirth
- {
- [HarmonyTranspiler]
- public static IEnumerable Transpiler(IEnumerable instructions, ILGenerator il)
- {
- bool found_call = false;
- bool finished = false;
- Label skip_label = il.DefineLabel();
- MethodInfo removeHediff = AccessTools.Method(typeof(Pawn_HealthTracker), nameof(Pawn_HealthTracker.RemoveHediff));
- MethodInfo ismechbreeder = AccessTools.Method(typeof(GeneUtility), "IsMechbreeder");
- foreach (CodeInstruction codeInstruction in instructions)
- {
- yield return codeInstruction;
-
- if (finished)
- {
- continue;
- }
-
- if (!found_call && codeInstruction.Calls(removeHediff))
- {
- //Load pawn, call function to check if a mechbreeder, and skip past the part which does damage
- yield return new CodeInstruction(OpCodes.Ldloc_0);
- yield return new CodeInstruction(OpCodes.Call, ismechbreeder);
- yield return new CodeInstruction(OpCodes.Brfalse_S, skip_label);
- yield return new CodeInstruction(OpCodes.Ret);
- found_call = true;
- }
- else if (found_call)
- {
- // next instruction after the insert
- codeInstruction.labels.Add(skip_label);
- finished = true;
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation_ThinkNodeFappin.cs b/1.5/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation_ThinkNodeFappin.cs
deleted file mode 100644
index 3412755..0000000
--- a/1.5/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation_ThinkNodeFappin.cs
+++ /dev/null
@@ -1,34 +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 is a second Patch that blocks masturbation by making it "unthinkable".
- /// I kept the original Patch_BlockedMasturbation.cs because maybe someone else is checking the "xxx.canMasturbate(Pawn)"
- /// The behaviour was extracted from Sexperience by tinymechanoid333 in #147.
- /// Issue was tracked in #127.
- ///
- [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Fappin), "MtbHours")]
- public static class Patch_BlockedMasturbation_ThinkNodeFappin
- {
- public static void Postfix(Pawn p, ref float __result)
- {
- if (p != null && !p.IsAnimal() && p.genes != null)
- {
- if (p.genes.HasActiveGene(GeneDefOf.rjw_genes_blocked_masturbation) || p.genes.HasActiveGene(GeneDefOf.rjw_genes_infectious_blocked_masturbation))
- {
- __result = -2f;
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/Damage/Gene_Unbreakable.cs b/1.5/Source/Genes/Damage/Gene_Unbreakable.cs
deleted file mode 100644
index 578ed8a..0000000
--- a/1.5/Source/Genes/Damage/Gene_Unbreakable.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using rjw;
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// This Gene regularly removes the broken hediff of a pawn.
- /// Blocking / Removing thoughts are done in an XML Patch.
- ///
- public class Gene_Unbreakable : Gene
- {
- /// DevNote: I first tried to Harmony-Postfix the AfterSexUtility and never add it - but that failed?
-
- private const int RESET_INTERVAL = 30000; // 30k should be 0.5 day
- public override void PostAdd()
- {
- base.PostAdd();
- RemoveBrokenHediff();
- }
-
- public override void Tick()
- {
- base.Tick();
- if (pawn.IsHashIntervalTick(RESET_INTERVAL))
- RemoveBrokenHediff();
- }
-
-
-
- private void RemoveBrokenHediff()
- {
- // Clean-Up of existing feeling brokens
- var maybeBrokenHediff = pawn.health.hediffSet.GetFirstHediffOfDef(xxx.feelingBroken);
- if (maybeBrokenHediff != null)
- {
- pawn.health.RemoveHediff(maybeBrokenHediff);
- }
- }
- }
-}
diff --git a/1.5/Source/Genes/Diseases/Comps/HediffCompProperties_DiseaseStorage.cs b/1.5/Source/Genes/Diseases/Comps/HediffCompProperties_DiseaseStorage.cs
deleted file mode 100644
index c1ccbb4..0000000
--- a/1.5/Source/Genes/Diseases/Comps/HediffCompProperties_DiseaseStorage.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 HediffCompProperties_DiseaseStorage : HediffCompProperties
- {
- // 300k = 5 days.
- public int ticksThatDiseasesAreStored = 300000;
- public HediffCompProperties_DiseaseStorage() => this.compClass = typeof(HediffComp_DiseaseStorage);
- }
-
-}
diff --git a/1.5/Source/Genes/Diseases/Comps/HediffComp_DiseaseStorage.cs b/1.5/Source/Genes/Diseases/Comps/HediffComp_DiseaseStorage.cs
deleted file mode 100644
index 294afce..0000000
--- a/1.5/Source/Genes/Diseases/Comps/HediffComp_DiseaseStorage.cs
+++ /dev/null
@@ -1,39 +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 HediffComp_DiseaseStorage : HediffComp
- {
- public HediffCompProperties_DiseaseStorage Props => (HediffCompProperties_DiseaseStorage)this.props;
-
- List remainingTicks = new List();
- List storedDiseases = new List();
-
- public void StoreDisease(GeneDef disease)
- {
- if (storedDiseases.Contains(disease)) {
- remainingTicks[storedDiseases.IndexOf(disease)] = Props.ticksThatDiseasesAreStored;
- } else
- {
- storedDiseases.Add(disease);
- remainingTicks.Add(Props.ticksThatDiseasesAreStored);
- }
- }
- public List GetStoredDiseases() { return storedDiseases.ToList(); }
-
- public override void CompExposeData()
- {
- base.CompExposeData();
-
- Scribe_Collections.Look(ref remainingTicks, "remainingTicks");
- Scribe_Collections.Look(ref storedDiseases, "storedDiseases");
- }
-
- }
-
-}
diff --git a/1.5/Source/Genes/Diseases/DiseaseHelper.cs b/1.5/Source/Genes/Diseases/DiseaseHelper.cs
deleted file mode 100644
index c29b67b..0000000
--- a/1.5/Source/Genes/Diseases/DiseaseHelper.cs
+++ /dev/null
@@ -1,203 +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 2A: The pawn has general genetic immunity to diseases
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_genetic_disease_immunity))
- return true;
-
- // Case 2B: The pawn has the carrier gene
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_disease_carrier))
- 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`.
- /// Update v2.3.0: Returns also possible options if the Pawn is a Genetic Disease Carrier.
- ///
- ///
- /// List of all active Genes with the `GeneticDiseaseExtension` in pawn
- public static List GetGeneticDiseaseGenes(Pawn pawn)
- {
- var diseases = new List() { };
- if (pawn != null && pawn.genes != null)
- {
- diseases = pawn.genes
- .GenesListForReading
- .ConvertAll(gene => gene.def)
- .Where(genedef => pawn.genes.HasActiveGene(genedef))
- .Where(IsGeneticDiseaseGene)
- .ToList();
- }
-
- List carrierResults = GetGeneticDiseasesGenesFromDiseaseCarrier(pawn);
- diseases.AddRange(carrierResults);
-
- return diseases;
- }
-
- public static List GetGeneticDiseasesGenesFromDiseaseCarrier(Pawn pawn) {
- if (pawn == null) return new List() { };
- Hediff storage = null;
- pawn.health.hediffSet.TryGetHediff(HediffDefOf.rjw_genes_disease_carrier_storage, out storage);
- if (storage == null) return new List() { };
- var comp = storage.TryGetComp();
- if (comp == null) return new List() { };
- return comp.GetStoredDiseases();
- }
-
- 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;
- }
-
- ///
- /// Manages storing a genetic disease in a pawn.
- /// If the pawn is not a carrier, nothing will happen.
- ///
- /// Disease to store
- /// Pawn that might be a carrier.
- /// True if all goes well and disease is stored - false on unapplicable and errors.
- public static bool TryStoreGeneticDiseaseInCarrier(GeneDef disease, Pawn pawn)
- {
- if (disease == null || pawn == null) return false;
-
- if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_disease_carrier))
- return false;
- var store = GetOrCreateDiseaseStorageHediff(pawn).TryGetComp();
- if (store == null) return false;
-
- store.StoreDisease(disease);
- ModLog.Debug($"DiseaseCarrier: Stored {disease} in {pawn}");
- return true;
- }
-
-
- ///
- /// Gets (or creates) a Disease Storage Hediff for the `carrier`-pawn,
- ///
- ///
- /// A Cumflation Hediff of the inflated pawn.
- public static Hediff GetOrCreateDiseaseStorageHediff(Pawn carrier)
- {
- Hediff diseaseCarrierHediff = carrier.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_disease_carrier_storage);
- if (diseaseCarrierHediff == null)
- {
- diseaseCarrierHediff = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_disease_carrier_storage, carrier);
- carrier.health.AddHediff(diseaseCarrierHediff);
- }
- diseaseCarrierHediff.Severity = 1;
- return diseaseCarrierHediff;
- }
-
- 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/1.5/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs b/1.5/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs
deleted file mode 100644
index f284217..0000000
--- a/1.5/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs
+++ /dev/null
@@ -1,65 +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))
- {
- DiseaseHelper.TryStoreGeneticDiseaseInCarrier(diseaseGeneDef, partner);
- 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/1.5/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
deleted file mode 100644
index 03f1c01..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-using System.Linq;
-
-namespace RJW_Genes
-{
- public class Gene_ExtraPenis : RJW_Gene
- {
-
- internal Hediff additional_penis;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoPenis())
- {
- return;
- }
-
- // Penis are only added for male pawns!
- if (GenderUtility.IsMale(pawn) && additional_penis == null)
- {
- CreateAndAddPenis();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoPenis())
- {
- return;
- }
-
- // Penis are only added for male pawns!
- if (GenderUtility.IsMale(pawn) && additional_penis == null)
- {
- CreateAndAddPenis();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(additional_penis != null)
- pawn.health.RemoveHediff(additional_penis);
- }
-
- internal void CreateAndAddPenis()
- {
- var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
- HediffDef penisDef = GenitaliaUtility.GetPenisForGene(correctGene);
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- additional_penis = HediffMaker.MakeHediff(penisDef, pawn);
-
- var CompHediff = additional_penis.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.Init(pawn);
- CompHediff.UpdateSeverity();
- }
-
- pawn.health.AddHediff(additional_penis, partBPR);
- }
-
-
- internal bool HasAlreadyTwoPenis()
- {
- if (pawn == null)
- return false;
-
- var possible_breasts =
- Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_penis(t));
-
- return possible_breasts.Count() >= 2;
- }
-
- }
-}
diff --git a/1.5/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
deleted file mode 100644
index 7e43d64..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-using System.Linq;
-
-namespace RJW_Genes
-{
- public class Gene_ExtraVagina : RJW_Gene
- {
-
- internal Hediff additional_vagina;
-
- //TODO: This works ingame when genes are added, but if there is
- //a gene (e.g. ovipositor) in creation it does not work as expected (only has one genital)
- //Penis works as expected
-
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoVaginas())
- {
- return;
- }
-
- // Vaginas are only added for female pawns!
- if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
- {
- CreateAndAddVagina();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Some sources add Genes before they fire, e.g. Character Editor
- // This should harden the gene, to solve #19
- if (HasAlreadyTwoVaginas())
- {
- return;
- }
-
- // Vaginas are only added for female pawns!
- if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
- {
- CreateAndAddVagina();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(additional_vagina != null)
- pawn.health.RemoveHediff(additional_vagina);
- }
-
- internal void CreateAndAddVagina()
- {
- var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
- HediffDef vaginaDef = GenitaliaUtility.GetVaginaForGene(correctGene);
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- additional_vagina = HediffMaker.MakeHediff(vaginaDef, pawn);
-
- var CompHediff = additional_vagina.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.Init(pawn);
- CompHediff.UpdateSeverity();
- }
-
- pawn.health.AddHediff(additional_vagina, partBPR);
- }
-
- internal bool HasAlreadyTwoVaginas()
- {
- if (pawn == null)
- return false;
-
- var possible_breasts =
- Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_vagina(t));
-
- return possible_breasts.Count() >= 2;
- }
- }
-}
diff --git a/1.5/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs
deleted file mode 100644
index 00b4c82..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_FeaturelessChest : RJW_Gene
- {
- internal Hediff removed_breasts;
- internal Hediff added_nipples;
- public override void PostMake()
- {
- base.PostMake();
-
- if (removed_breasts == null)
- {
- RemoveButStoreBreasts();
- AddFeaturelessBreast();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- if (removed_breasts == null)
- {
- RemoveButStoreBreasts();
- AddFeaturelessBreast();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if (added_nipples != null)
- pawn.health.RemoveHediff(added_nipples);
- if (removed_breasts != null)
- pawn.health.AddHediff(removed_breasts);
- }
-
- internal void RemoveButStoreBreasts()
- {
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
-
- if (breastsToRemove != null)
- {
- removed_breasts = breastsToRemove;
- pawn.health.RemoveHediff(breastsToRemove);
- }
- }
-
- internal void AddFeaturelessBreast()
- {
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR);
- }
-
- }
-}
diff --git a/1.5/Source/Genes/ExtraGenitalia/Gene_Futa.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_Futa.cs
deleted file mode 100644
index 4fe8f53..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_Futa.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class Gene_Futa : RJW_Gene
- {
-
- internal Hediff additional_genital;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // If the Pawn is already a Futa, do not do anything. Can Happen by Base-RJW Spawn Chance or potentially races / other mods.
- if (IsAlreadyFuta(pawn))
- {
- return;
- }
-
- if (GenderUtility.IsFemale(pawn) && additional_genital == null)
- {
- createAndAddPenis();
- }
- if (GenderUtility.IsMale(pawn) && additional_genital == null)
- {
- CreateAndAddVagina();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // If the Pawn is already a Futa, do not do anything. Can Happen by Base-RJW Spawn Chance or potentially races / other mods.
- if (IsAlreadyFuta(pawn))
- {
- return;
- }
-
- if (pawn.gender == Gender.Female && additional_genital == null)
- {
- createAndAddPenis();
- }
- if (pawn.gender == Gender.Male && additional_genital == null)
- {
- CreateAndAddVagina();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(additional_genital != null)
- pawn.health.RemoveHediff(additional_genital);
- }
-
- //TODO: Extract createAndAddXXX to extra class
- internal void createAndAddPenis()
- {
- var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
- HediffDef penisDef = GenitaliaUtility.GetPenisForGene(correctGene);
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- additional_genital = HediffMaker.MakeHediff(penisDef, pawn);
-
- var CompHediff = additional_genital.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.Init(pawn);
- CompHediff.UpdateSeverity();
- }
-
- pawn.health.AddHediff(additional_genital, partBPR);
- }
-
- internal void CreateAndAddVagina()
- {
- var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
- HediffDef vaginaDef = GenitaliaUtility.GetVaginaForGene(correctGene);
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- additional_genital = HediffMaker.MakeHediff(vaginaDef, pawn);
-
- var CompHediff = additional_genital.TryGetComp();
- if (CompHediff != null)
- {
- CompHediff.Init(pawn);
- CompHediff.UpdateSeverity();
- }
-
- pawn.health.AddHediff(additional_genital, partBPR);
- }
-
- private static bool IsAlreadyFuta(Pawn pawn)
- {
- if (pawn == null)
- return false;
- if (!Genital_Helper.has_genitals(pawn))
- return false;
- return
- (Genital_Helper.has_penis_fertile(pawn) || Genital_Helper.has_penis_infertile(pawn))
- && Genital_Helper.has_vagina(pawn) ;
- }
- }
-}
diff --git a/1.5/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs
deleted file mode 100644
index 8aad9ab..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class Gene_NoAnus : RJW_Gene
- {
-
- internal Hediff removed_anus;
-
- public override void PostMake()
- {
- base.PostMake();
-
- if (removed_anus == null)
- {
- RemoveButStoreAnus();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- if (removed_anus == null)
- {
- RemoveButStoreAnus();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(removed_anus != null)
- pawn.health.AddHediff(removed_anus);
- }
-
- internal void RemoveButStoreAnus()
- {
- var partBPR = Genital_Helper.get_anusBPR(pawn);
- Hediff anusToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaChanger.IsAnus(x));
-
- if(anusToRemove != null)
- {
- removed_anus = anusToRemove;
- pawn.health.RemoveHediff(anusToRemove);
- }
- }
-
- }
-}
diff --git a/1.5/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
deleted file mode 100644
index caa0a5c..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class Gene_NoBreasts : RJW_Gene
- {
- Hediff breastsToShrink;
- internal float oldSize = -1f;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Breasts are removed for female pawns!
- if (GenderUtility.IsFemale(pawn) && oldSize < 0)
- {
- RemoveButStoreBreasts();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Breasts are removed for female pawns!
- if (GenderUtility.IsFemale(pawn) && oldSize < 0)
- {
- RemoveButStoreBreasts();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- // Re-Add the old breasts
- if (oldSize != null)
- breastsToShrink.Severity = oldSize;
- }
-
- internal void RemoveButStoreBreasts()
- {
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- breastsToShrink = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
-
- if(breastsToShrink != null)
- {
- oldSize = breastsToShrink.Severity;
- //pawn.health.RemoveHediff(breastsToRemove);
- breastsToShrink.Severity = 0f;
- }
- }
-
- }
-}
diff --git a/1.5/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs
deleted file mode 100644
index b107a5a..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class Gene_NoPenis : RJW_Gene
- {
-
- internal Hediff removed_penis;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Penis are only removed for male pawns!
- if (GenderUtility.IsMale(pawn) && removed_penis == null)
- {
- RemoveButStorePenis();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Penis are only removed for male pawns!
- if (GenderUtility.IsMale(pawn) && removed_penis == null)
- {
- RemoveButStorePenis();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(removed_penis != null)
- pawn.health.AddHediff(removed_penis);
- }
-
- internal void RemoveButStorePenis()
- {
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- Hediff penisToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => Genital_Helper.is_penis(x));
-
- if(penisToRemove != null)
- {
- removed_penis = penisToRemove;
- pawn.health.RemoveHediff(penisToRemove);
- }
- }
-
- }
-}
diff --git a/1.5/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs b/1.5/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs
deleted file mode 100644
index 438d76e..0000000
--- a/1.5/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class Gene_NoVagina : RJW_Gene
- {
-
- internal Hediff removed_vagina;
-
- public override void PostMake()
- {
- base.PostMake();
-
- // Vaginas are only removed for female pawns!
- if (GenderUtility.IsFemale(pawn) && removed_vagina == null)
- {
- RemoveButStoreVagina();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- // Vaginas are only removed for female pawns!
- if (GenderUtility.IsFemale(pawn) && removed_vagina == null)
- {
- RemoveButStoreVagina();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if(removed_vagina != null)
- pawn.health.AddHediff(removed_vagina);
- }
-
- internal void RemoveButStoreVagina()
- {
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- Hediff vaginaToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => Genital_Helper.is_vagina(x));
-
- if(vaginaToRemove != null)
- {
- removed_vagina = vaginaToRemove;
- pawn.health.RemoveHediff(vaginaToRemove);
- }
- }
-
- }
-}
diff --git a/1.5/Source/Genes/Fluid/Defs/GenitaliaFluidChangeExtension.cs b/1.5/Source/Genes/Fluid/Defs/GenitaliaFluidChangeExtension.cs
deleted file mode 100644
index 713af2b..0000000
--- a/1.5/Source/Genes/Fluid/Defs/GenitaliaFluidChangeExtension.cs
+++ /dev/null
@@ -1,19 +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 class GenitaliaFluidChangeExtension : DefModExtension
- {
- public SexFluidDef penisFluidReplacement; // Everything for which "isPenis" is true
- public SexFluidDef vaginaFluidReplacement; // Everything for which "isVagina" is true
- public SexFluidDef breastFluidReplacement; // Everything for which "isBreasts" is true
- public SexFluidDef otherFluidReplacement; // Everything not the above.
- }
-
-}
diff --git a/1.5/Source/Genes/Fluid/FluidUtility.cs b/1.5/Source/Genes/Fluid/FluidUtility.cs
deleted file mode 100644
index 226845f..0000000
--- a/1.5/Source/Genes/Fluid/FluidUtility.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class FluidUtility
- {
-
- public static void MultiplyFluidAmountBy(Pawn pawn, float multiplier)
- {
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- var parts = Genital_Helper.get_PartsHediffList(pawn, partBPR);
-
- foreach (Hediff part in parts)
- {
- // Right now: Ignore Breasts, only do
- if (part is ISexPartHediff sexPart && (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part)))
- sexPart.GetPartComp().partFluidMultiplier *= multiplier;
- }
- }
-
- ///
- /// 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 LookupFluidMultiplier(Gene gene, float FALLBACK = 3.0f) => LookupFluidMultiplier(gene.def, FALLBACK);
- public static float LookupFluidMultiplier(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)
- {
- var partBPR = Genital_Helper.get_genitalsBPR(pawn);
- var parts = Genital_Helper.get_PartsHediffList(pawn, partBPR);
- float total_fluid = 0;
- if (!parts.NullOrEmpty())
- {
- foreach (Hediff part in parts)
- {
- if (GenitaliaChanger.IsArtificial(part))
- continue;
-
- if (part is ISexPartHediff sexPart)
- {
- total_fluid += sexPart.GetPartComp().FluidAmount;
- }
- }
- }
- return total_fluid;
- }
-
- public static void ChangeFluids(Pawn pawn, SexFluidDef penisFluidDefs = null, SexFluidDef vaginaFluidDefs = null, SexFluidDef breastFluidDefs = null, SexFluidDef otherFluidDefs = null)
- {
- if (pawn == null) return;
-
- var parts = Genital_Helper.get_AllPartsHediffList(pawn);
- foreach (Hediff part in parts)
- {
- if (part is ISexPartHediff sexPart)
- {
- var comp = sexPart.GetPartComp();
- if (penisFluidDefs != null && Genital_Helper.is_penis(part))
- comp.Fluid = penisFluidDefs;
- else if (vaginaFluidDefs != null && Genital_Helper.is_vagina(part))
- comp.Fluid = vaginaFluidDefs;
- else if (breastFluidDefs != null && GenitaliaUtility.IsBreasts(part))
- comp.Fluid = breastFluidDefs;
- else
- comp.Fluid = otherFluidDefs;
- }
- }
- }
- }
-}
diff --git a/1.5/Source/Genes/Fluid/Genes/Gene_ChangeFluidType.cs b/1.5/Source/Genes/Fluid/Genes/Gene_ChangeFluidType.cs
deleted file mode 100644
index 0466c49..0000000
--- a/1.5/Source/Genes/Fluid/Genes/Gene_ChangeFluidType.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace RJW_Genes
-{
- public class Gene_ChangeFluidType : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- Apply();
- }
-
- public virtual void Apply()
- {
- if (this.Active)
- {
- GenitaliaFluidChangeExtension fluidReplacements = def.GetModExtension();
- if (fluidReplacements == null && RJW_Genes_Settings.rjw_genes_detailed_debug)
- {
- ModLog.Error($"Gene {def} failed to change genitals - Need a modExtension with Class=\"{typeof(GenitaliaFluidChangeExtension).FullName}\".");
- return;
- }
-
- FluidUtility.ChangeFluids(pawn, fluidReplacements.penisFluidReplacement, fluidReplacements.vaginaFluidReplacement, fluidReplacements.breastFluidReplacement, fluidReplacements.otherFluidReplacement);
- }
- }
- }
-}
diff --git a/1.5/Source/Genes/Fluid/HediffComps/HediffCompProperties_MatchSeverityOfHediff.cs b/1.5/Source/Genes/Fluid/HediffComps/HediffCompProperties_MatchSeverityOfHediff.cs
deleted file mode 100644
index ed1c9f3..0000000
--- a/1.5/Source/Genes/Fluid/HediffComps/HediffCompProperties_MatchSeverityOfHediff.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Cumpilation.Oscillation;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class HediffCompProperties_MatchSeverityOfHediff : HediffCompProperties
- {
- public HediffDef hediffToMatch;
-
- public HediffCompProperties_MatchSeverityOfHediff() => this.compClass = typeof(HediffComp_MatchSeverityOfHediff);
- }
-}
diff --git a/1.5/Source/Genes/Fluid/HediffComps/HediffComp_MatchSeverityOfHediff.cs b/1.5/Source/Genes/Fluid/HediffComps/HediffComp_MatchSeverityOfHediff.cs
deleted file mode 100644
index 44ab52c..0000000
--- a/1.5/Source/Genes/Fluid/HediffComps/HediffComp_MatchSeverityOfHediff.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using Verse;
-
-namespace RJW_Genes
-{
- public class HediffComp_MatchSeverityOfHediff : HediffComp
- {
- public HediffCompProperties_MatchSeverityOfHediff Props => (HediffCompProperties_MatchSeverityOfHediff)this.props;
-
- public override void CompPostTick(ref float severityAdjustment)
- {
- base.CompPostTick(ref severityAdjustment);
-
- bool hasMatchingHediff = parent.pawn.health.hediffSet.HasHediff(Props.hediffToMatch);
-
- if (!hasMatchingHediff) {
- parent.Severity = 0.0f;
- }
- else
- {
- Hediff match = parent.pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffToMatch);
- if (match == null) parent.Severity = 0.0f;
- parent.Severity = match.Severity;
- }
- }
- }
-}
diff --git a/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_BlockCumflation.cs b/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_BlockCumflation.cs
deleted file mode 100644
index fdac0c3..0000000
--- a/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_BlockCumflation.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 Patch_Cumpilation_BlockCumflation
- {
- public static bool Prepare() => ModsConfig.IsActive("vegapnk.cumpilation");
- public static void PostFix(Pawn pawn,ref bool __result) {
- if (pawn != null && pawn.genes != null && pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_un_inflatable))
- __result = false;
- }
-
- }
-}
diff --git a/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_BlockStuffing.cs b/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_BlockStuffing.cs
deleted file mode 100644
index d791fc4..0000000
--- a/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_BlockStuffing.cs
+++ /dev/null
@@ -1,20 +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 Patch_Cumpilation_BlockStuffing
- {
-
- public static bool Prepare() => ModsConfig.IsActive("vegapnk.cumpilation");
- public static void PostFix(Pawn pawn,ref bool __result) {
- if (pawn != null && pawn.genes != null && pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_un_inflatable))
- __result = false;
- }
-
- }
-}
diff --git a/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_Inflatable.cs b/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_Inflatable.cs
deleted file mode 100644
index aaedf58..0000000
--- a/1.5/Source/Genes/Fluid/Patches/Patch_Cumpilation_Inflatable.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HarmonyLib;
-using rjw;
-using RimWorld;
-using Verse;
-
-namespace RJW_Genes
-{
- class Patch_Cumpilation_Inflatable
- {
-
- public static bool Prepare() => ModsConfig.IsActive("vegapnk.cumpilation");
-
- // This patch does not need the normal Harmony Targetting,
- // as it needs to be added only on demand (See HarmonyInit.cs)
- public static void PostFix(SexProps props)
- {
-
- if (props == null || props.pawn == null || props.partner == null) return;
-
-
- if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_inflatable) )
- {
- AddOrIncreaseCumflationCounterHediffs(props.pawn);
- }
-
- if (props.partner.genes != null && props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_inflatable))
- {
- AddOrIncreaseCumflationCounterHediffs(props.partner);
- }
- }
-
- public static void AddOrIncreaseCumflationCounterHediffs(Pawn inflated)
- {
-
- List<(Hediff,HediffDef)> expectedCounterHediffs = inflated.health.hediffSet.hediffs
- .Where(hediff => FindMatchingCounterHediff(hediff.def) != null)
- .Select(hediff => (hediff,FindMatchingCounterHediff(hediff.def)))
- .ToList();
-
- ModLog.Debug($"Adding or Increasing {expectedCounterHediffs.Count()} expected CounterHediffs for Pawn {inflated}");
-
- foreach ((Hediff,HediffDef) matchedHediffs in expectedCounterHediffs) {
- if (inflated.health.hediffSet.HasHediff(matchedHediffs.Item2)) {
- Hediff counter = inflated.health.GetOrAddHediff(matchedHediffs.Item2);
- counter.Severity = matchedHediffs.Item1.Severity;
- } else
- {
- Hediff counter = HediffMaker.MakeHediff(matchedHediffs.Item2, inflated, matchedHediffs.Item1.Part);
- counter.Severity = matchedHediffs.Item1.Severity;
- inflated.health.AddHediff(counter);
- }
- }
- }
-
- public static HediffDef FindMatchingCounterHediff(HediffDef hediffDef)
- {
- if (hediffDef == null) return null;
-
- var result = DefDatabase.AllDefsListForReading
- .Where(def => {
- if (def.comps == null || def.comps.Count == 0) return false;
- var Matcher = def.comps.FirstOrFallback(comp => comp is HediffCompProperties_MatchSeverityOfHediff,null);
- if (Matcher == null) return false;
- HediffCompProperties_MatchSeverityOfHediff MatcherCasted = (HediffCompProperties_MatchSeverityOfHediff)Matcher;
- return MatcherCasted.hediffToMatch == hediffDef;
- })
- .FirstOrFallback(null);
- if (result != null) ModLog.Debug($"Found CounterHediff {result} as counter for {hediffDef}");
-
- return result;
- }
-
- public static Hediff CreateOrGetCumflationCounterHediff(Pawn inflated, HediffDef counterCumflationDef, BodyPartRecord bodyPartRecord)
- {
- Hediff cumflationHediff = inflated.health.hediffSet.GetFirstHediffOfDef(counterCumflationDef);
- if (cumflationHediff == null)
- {
- cumflationHediff = HediffMaker.MakeHediff(counterCumflationDef, inflated, bodyPartRecord);
- cumflationHediff.Severity = 0;
- inflated.health.AddHediff(cumflationHediff, bodyPartRecord);
- }
- return cumflationHediff;
-
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/Fluid/Patches/Patch_TransferNutrition_Generous_Donor_PawnToPartner.cs b/1.5/Source/Genes/Fluid/Patches/Patch_TransferNutrition_Generous_Donor_PawnToPartner.cs
deleted file mode 100644
index fbc08c7..0000000
--- a/1.5/Source/Genes/Fluid/Patches/Patch_TransferNutrition_Generous_Donor_PawnToPartner.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using HarmonyLib;
-using rjw;
-using Verse;
-
-
-namespace RJW_Genes
-{
-
- ///
- /// Upon Transfer Fluids, the pawns store their current Food need (if applicable).
- /// When running the postfix, all generous donours get their old food need restored if the current one is lower.
- /// If there is any issue, the need is just set to -10 as an error value.
- ///
- /// Patched Method: https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Common/Helpers/SexUtility.cs?ref_type=heads#L992
- ///
- [HarmonyPatch(typeof(rjw.SexUtility), nameof(rjw.SexUtility.TransferFluids))]
- class Patch_TransferNutrition_Generous_Donor_PawnToPartner
- {
-
- static void Prefix(SexProps props, out float __state)
- {
- __state = -10.0f;
- if (props.pawn != null && props.pawn.needs != null && props.pawn.needs.food != null)
- __state = props.pawn.needs.food.CurLevel;
-
- }
-
- static void Postfix(SexProps props,float __state )
- {
-
- if (props.pawn != null && props.pawn.needs != null && props.pawn.needs.food != null && props.pawn.genes != null)
- {
- if (props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_generous_donor) && props.pawn.needs.food.CurLevel < __state)
- {
- ModLog.Debug($"Found Generous Donor {props.pawn} Transferring Fluids - Resetting Food Need from {props.pawn.needs.food.CurLevel} to {__state}");
- props.pawn.needs.food.CurLevel = __state;
- }
- }
- }
- }
-
- ///
- /// Harmony Patches only allow for one out-variable as state.
- /// Thus I have simply a clone with the same behaviour. Why not have it easy sometimes.
- ///
- [HarmonyPatch(typeof(rjw.SexUtility), nameof(rjw.SexUtility.TransferFluids))]
- class Patch_TransferNutrition_Generous_Donor_PartnerToPawn
- {
-
- static void Prefix(SexProps props,out float __state)
- {
- __state = -10.0f;
- if (props.partner != null && props.partner.needs != null && props.partner.needs.food != null)
- __state = props.partner.needs.food.CurLevel;
- }
-
- static void Postfix(SexProps props, float __state)
- {
-
- if (props.partner != null && props.partner.needs != null && props.partner.needs.food != null && props.partner.genes != null)
- {
- if (props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_generous_donor) && props.partner.needs.food.CurLevel < __state)
- {
- ModLog.Debug($"Found Generous Donor {props.partner} Transferring Fluids - Resetting Food Need from {props.partner.needs.food.CurLevel} to {__state}");
- props.partner.needs.food.CurLevel = __state;
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs b/1.5/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs
deleted file mode 100644
index d92e9d1..0000000
--- a/1.5/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- public class GenitaliaTypeExtension : DefModExtension
- {
- public HediffDef_SexPart penis;
-
- public HediffDef_SexPart vagina;
-
- public HediffDef_SexPart anus;
-
- public HediffDef_SexPart breasts;
-
- }
-}
diff --git a/1.5/Source/Genes/Genitalia/GenitaliaUtility.cs b/1.5/Source/Genes/Genitalia/GenitaliaUtility.cs
deleted file mode 100644
index 19942a8..0000000
--- a/1.5/Source/Genes/Genitalia/GenitaliaUtility.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-using RimWorld;
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
-{
- public class GenitaliaUtility
- {
-
- ///
- /// Returns the first (non) overwritten gene from the rjw_genes genitalia genes.
- /// In case the pawn has none, as default the human one is returned.
- ///
- /// the pawn whom to find genitaliagenes for
- /// The first GeneDef of the pawn related to GenitaliaTypes
- public static GeneDef GetGenitaliaTypeGeneForPawn(Pawn pawn)
- {
- foreach (var gene in pawn.genes.GenesListForReading)
- {
- if (gene is Gene_GenitaliaType)
- if (!gene.Overridden)
- return gene.def;
- }
- return null;
- }
-
-
- public static HediffDef GetPenisForGene(GeneDef gene)
- {
- return gene?.GetModExtension()?.penis ?? Genital_Helper.average_penis;
- }
-
-
- public static HediffDef GetVaginaForGene(GeneDef gene)
- {
- return gene?.GetModExtension()?.vagina ?? Genital_Helper.average_vagina;
- }
-
- public static HediffDef GetAnusForGene(GeneDef gene)
- {
- //TODO: Do I want the default to be generic or average for feline,equine and canine?
- return gene?.GetModExtension()?.anus ?? Genital_Helper.average_anus;
- }
-
- public static HediffDef GetBreastsForGene(GeneDef gene)
- {
- return gene?.GetModExtension()?.breasts ?? Genital_Helper.average_breasts;
- }
-
- public static bool PawnStillNeedsGenitalia(Pawn pawn)
- {
- // There is the issue that the genes fire in a pseudo-random order
- // Hence it can happen that the pawn still needs genitalia
- // I wanted to make a simple lookup, but I think the genes are applied for all humans encountered so it could be huge
- // So the heuristic is to check if the pawn has any of the 3 standard genitalia OR has all genes ticked that says "I don't want genitalia".
- if (pawn == null) return false;
-
- bool pawn_has_any_genitalia =
- Genital_Helper.has_genitals(pawn) || Genital_Helper.has_anus(pawn) || Genital_Helper.has_breasts(pawn);
-
- bool pawn_is_not_supposed_to_have_genitalia =
- pawn.genes.GenesListForReading.Any(x => x.def.defName == "rjw_genes_no_penis");
-
- if (pawn_is_not_supposed_to_have_genitalia)
- return false;
- else
- return !pawn_has_any_genitalia;
-
- }
-
- public static bool IsBreasts(Hediff candidate)
- {
- return candidate.def.defName.ToLower().Contains("breast") || candidate.def.defName.ToLower().Contains("udder");
- }
-
- ///
- /// 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.originalOwnerSize > bestSize.originalOwnerSize ? 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().originalOwnerSize;
- }
-
- ///
- /// Checks whether a pawn needs to have breasts, for genes that add or change breast sizes and numbers.
- /// This was a little oversight noticed in #138.
- ///
- ///
- /// True if the Pawn with his current gender and genes should have breasts. False otherwise.
- public static bool ShouldHaveBreasts(Pawn pawn)
- {
- // if anything is missing, just return True for Women and False for anyone else.
- if (pawn == null || pawn.genes == null)
- return pawn.gender == Gender.Female;
-
- if (pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_featureless_chest))
- return false;
- if (pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_no_breasts))
- return false;
-
- if (pawn.gender == Gender.Female)
- {
- if (pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_femboy))
- return false;
-
- // Default Case: Women do have breasts.
- return true;
- }
- if (pawn.gender == Gender.Male)
- {
- // Default Case: Men do not have Breasts.
- return false;
- }
-
- return false;
- }
- }
-
-}
diff --git a/1.5/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs b/1.5/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
deleted file mode 100644
index aa2826a..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using Verse;
-
-namespace RJW_Genes
-{
- ///
- /// Parent Gene for Genitalia Resizing. All Resizing genes should inherit for this class.
- /// There is a companion-patch `Patch_ResizingOnAdulthood`.
- ///
- /// This helps with some functions (e.g. "hasGenitaliaResizingGenes(pawn)") but also to fire genitalia resizing later in life for Pawns.
- /// (No Children with huge ding dongs, and I don't want kids with tight anuses I am not that degenerate)
- ///
- ///
- /// There was an Issue (#34) that re-sized the genitalia over multiple birthdays.
- /// Before the addition of `ExposeData`, it lost track whether the resizing was already run,
- /// leading to a change with every birthday over multiple game starts.
- ///
- /// Issue #138 lead to male pawns having breasts, fixed by a "should have breasts" check in the relevant genes.
- ///
- /// There is an ongoing issue with Resizing resitting after the first day (#151) which is likely from up-stream.
- ///
- 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.
- ///
- private bool resizingWasApplied = false;
- public bool ResizingWasApplied { get => resizingWasApplied; set => resizingWasApplied = value; }
-
-
- public override void PostMake()
- {
- base.PostMake();
- if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
- {
- Resize();
- ResizingWasApplied = true;
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
- {
- Resize();
- ResizingWasApplied = true;
- }
- }
-
- public override void ExposeData()
- {
- base.ExposeData();
- Scribe_Values.Look(ref resizingWasApplied, "wasApplied");
- }
-
- ///
- /// Used to resize the pawns genitalia.
- /// All Logic should be put here:
- /// 1. Filters for Gender
- /// 2. Filters for Genitalia Existence
- /// 3. Selection of right Genitalia
- /// 4. Adjustment of Size
- ///
- /// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and or futas,
- /// while the breast-gene is female only.
- ///
- public abstract void Resize();
-
- public (float,float) GetResizingBounds()
- {
-
- BoundedExtension bounds = def.GetModExtension();
- if (bounds != null )
- return (bounds.minimum,bounds.maximum);
- else
- {
- ModLog.Warning($"Tried to read BoundedExtension for {this.def} but failed - going default values.");
- }
- return (0.0f, 1.0f);
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_BigBreasts.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_BigBreasts.cs
deleted file mode 100644
index e28c2b9..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_BigBreasts.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using Verse;
-namespace RJW_Genes
-{
- public class Gene_BigBreasts : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- if (GenitaliaUtility.ShouldHaveBreasts(this.pawn))
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllBreastSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_BigMaleGenitalia.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_BigMaleGenitalia.cs
deleted file mode 100644
index 431fe0b..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_BigMaleGenitalia.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace RJW_Genes
-{
- public class Gene_BigMaleGenitalia : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllPenisSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_EvergrowingGenitalia.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_EvergrowingGenitalia.cs
deleted file mode 100644
index 02d5ffb..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_EvergrowingGenitalia.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-using System.Collections.Generic;
-
-namespace RJW_Genes
-{
- public class Gene_EvergrowingGenitalia : RJW_Gene
- {
- const int BASE_TICKS = 60000;
-
- public override void Tick()
- {
- base.Tick();
-
- int interval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_evergrowth, ModExtensionHelper.GetTickIntervalFromModExtension(this.def, BASE_TICKS));
- if (pawn.IsHashIntervalTick(interval)
- && this.pawn.Map != null
- && pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
- {
- GrowPenisses();
- GrowVaginas();
- }
- }
-
- private void GrowPenisses()
- {
- List AllPenisses = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_penis(x));
- float bodySizeOverride = -1f; //this is just hackjob to temporary fix an issue. It need to be remade
- foreach (Hediff penis in AllPenisses)
- {
- HediffComp_SexPart CompHediff = penis.TryGetComp();
- if (CompHediff.baseSize <= 1.00f)
- CompHediff.baseSize += 0.10f;
- else
- {
- if (bodySizeOverride <= 1.0) bodySizeOverride = 1.0f;
- bodySizeOverride += 0.05f;
- }
- CompHediff.UpdateSeverity();
-
- if (bodySizeOverride > 3.0f)
- {
- // Add Mental Hediff
- HandleGenitaliaSizeThoughts(pawn);
- }
-
- // Increase Fluid
- if (CompHediff != null)
- CompHediff.partFluidMultiplier *= 1.05f;
- }
- }
-
- private void GrowVaginas()
- {
- List AllVaginas = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_vagina(x));
- float bodySizeOverride = -1f; //this is just hackjob to temporary fix an issue. It need to be remade
- foreach (Hediff vagina in AllVaginas)
- {
- HediffComp_SexPart CompHediff = vagina.TryGetComp();
- if (CompHediff.baseSize <= 1.00f)
- CompHediff.baseSize += 0.10f;
- else
- {
- if (bodySizeOverride <= 1.0) bodySizeOverride = 1.0f;
- bodySizeOverride += 0.05f;
- }
- //CompHediff.ForceSize(CompHediff.Size + 0.05f);
- //CompHediff.originalOwnerSize += 0.05f;
- CompHediff.UpdateSeverity();
-
- if (bodySizeOverride > 3.0f)
- {
- // Add Mental Hediff
- HandleGenitaliaSizeThoughts(pawn);
- }
- // Increase Fluid
- if (CompHediff != null)
- CompHediff.partFluidMultiplier *= 1.025f;
- }
- }
-
- private void HandleGenitaliaSizeThoughts(Pawn pawn)
- {
- Hediff sizeThought = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_evergrowth_sideeffect);
-
- if (sizeThought != null)
- {
- sizeThought.Severity += 0.025f;
- }
- else
- {
- sizeThought = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_evergrowth_sideeffect, pawn);
- sizeThought.Severity = 0.1f;
- pawn.health.AddHediff(sizeThought);
-
- if (!xxx.is_nympho(pawn))
- {
- pawn.story.traits.GainTrait(new Trait(xxx.nymphomaniac));
- }
- }
- }
-
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_LooseAnus.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_LooseAnus.cs
deleted file mode 100644
index ce5fc72..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_LooseAnus.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Verse;
-
-namespace RJW_Genes
-{
- public class Gene_LooseAnus : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllAnusSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
-}
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_LooseFemaleGenitalia.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_LooseFemaleGenitalia.cs
deleted file mode 100644
index da14708..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_LooseFemaleGenitalia.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Verse;
-
-namespace RJW_Genes
-{
- public class Gene_LooseFemaleGenitalia : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllVaginaSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
-}
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_SmallBreasts.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_SmallBreasts.cs
deleted file mode 100644
index 1b8087e..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_SmallBreasts.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Verse;
-
-namespace RJW_Genes
-{
- public class Gene_SmallBreasts : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- if (GenitaliaUtility.ShouldHaveBreasts(this.pawn))
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllBreastSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
- }
-}
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_SmallMaleGenitalia.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_SmallMaleGenitalia.cs
deleted file mode 100644
index 12ecb0e..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_SmallMaleGenitalia.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace RJW_Genes
-{
- public class Gene_SmallMaleGenitalia : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllPenisSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_TightAnus.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_TightAnus.cs
deleted file mode 100644
index 16e4fad..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_TightAnus.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace RJW_Genes
-{
- public class Gene_TightAnus : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllAnusSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_TightFemaleGenitalia.cs b/1.5/Source/Genes/GenitaliaSize/Genes/Gene_TightFemaleGenitalia.cs
deleted file mode 100644
index b2775bf..0000000
--- a/1.5/Source/Genes/GenitaliaSize/Genes/Gene_TightFemaleGenitalia.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace RJW_Genes
-{
- public class Gene_TightFemaleGenitalia : Gene_GenitaliaResizingGene
- {
- public override void Resize()
- {
- var bounds = this.GetResizingBounds();
- SizeAdjuster.AdjustAllVaginaSizes(pawn, bounds.Item1, bounds.Item2);
- }
- }
-}
\ No newline at end of file
diff --git a/1.5/Source/Genes/GenitaliaSize/SizeAdjuster.cs b/1.5/Source/Genes/GenitaliaSize/SizeAdjuster.cs
deleted file mode 100644
index 3b259f3..0000000
--- a/1.5/Source/Genes/GenitaliaSize/SizeAdjuster.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using Verse;
-using rjw;
-using System;
-using System.Collections.Generic;
-
-namespace RJW_Genes
-{
- public class SizeAdjuster
- {
-
- ///
- /// Re-Rolls the sizes for all vaginas of the pawn to be between lower and upper limit.
- ///
- /// The pawn whos vaginas are rerolled
- /// The minimum severity for the vagina
- /// The maximum severity for the vagina
- public static void AdjustAllVaginaSizes(Pawn pawn, float lowerLimit = 0.0f, float upperLimit = 1.0f){
- List AllVaginas = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_vagina(x));
- ResizeAll(AllVaginas, lowerLimit, upperLimit);
- }
-
-
-
- ///
- /// Re-Rolls the sizes for all anus of the pawn to be between lower and upper limit.
- ///
- /// The pawn whos anus are rerolled
- /// The minimum severity for the anus
- /// The maximum severity for the anus
- public static void AdjustAllAnusSizes(Pawn pawn, float lowerLimit = 0.0f, float upperLimit = 1.0f)
- {
- List AllAnus = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => GenitaliaChanger.IsAnus(x));
- ResizeAll(AllAnus, lowerLimit, upperLimit);
- }
-
-
-
- ///
- /// Re-Rolls the sizes for all penis of the pawn to be between lower and upper limit.
- ///
- /// The pawn whos penisses are rerolled
- /// The minimum severity for the vagina
- /// The maximum severity for the vagina
- public static void AdjustAllPenisSizes(Pawn pawn, float lowerLimit = 0.0f, float upperLimit = 1.0f)
- {
- List AllPenisses = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_penis(x));
- ResizeAll(AllPenisses, lowerLimit, upperLimit);
- }
-
-
-
- ///
- /// Re-Rolls the sizes for all breasts of the pawn to be between lower and upper limit.
- ///
- /// The pawn whos breasts are rerolled
- /// The minimum severity for the vagina
- /// The maximum severity for the vagina
- public static void AdjustAllBreastSizes(Pawn pawn, float lowerLimit = 0.0f, float upperLimit = 1.0f)
- {
- List AllBreasts = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => x.def.defName.ToLower().Contains("breasts"));
- ResizeAll(AllBreasts,lowerLimit,upperLimit);
- }
-
-
- private static void ResizeAll(IEnumerable