diff --git a/.gitignore b/.gitignore index 971fc41..bd55167 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ -*.user - ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. + # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs @@ -254,4 +253,4 @@ paket-files/ # Python Tools for Visual Studio (PTVS) __pycache__/ -*.pyc +*.pyc \ No newline at end of file diff --git a/About/About.xml b/About/About.xml index f1f2296..a2eca98 100644 --- a/About/About.xml +++ b/About/About.xml @@ -1,30 +1,13 @@ RJW Genes Vegapnk - Vegapnk.rjw.genes + Vegapnk.rjw.genes -
  • 1.5
  • +
  • 1.4
  • - -Adds Genes for RJW Content. -Adds: -- Genes for Genitalia Types and Sizes -- Fertilin, a resource similiar to Hemogen, and accompanying sex-vampires -- Mechanics for Breeding and being Breed by Animals and Insects -- Inherit genes from bestiality or produce VGE-Hybrids -- Male / Female Only, MPreg, Genderfluid Pawns -- Orgasmic Mytosis, Orgasmic Supercharging, Age-Transfer on Sex, Pheromones -- Cum-Amount changes, Cumflation Immunity -- Horny Pheromones, Animal Mating Call -- Patches for some popular Xenotypes from the Workshop -- Sexual Taming of Animals - - https://github.com/vegapnk/RJW-Genes + Adds Genes for RJW Content + https://steamcommunity.com/id/Vegapnk/myworkshopfiles/?appid=294100 -
  • - Ludeon.RimWorld.Biotech - Biotech -
  • rim.job.world RimJobWorld @@ -44,17 +27,11 @@ Adds:
  • -
  • Ludeon.RimWorld
  • -
  • Ludeon.RimWorld.Royalty
  • -
  • Ludeon.RimWorld.Ideology
  • -
  • Ludeon.RimWorld.Biotech
  • rim.job.world
  • brrainz.harmony
  • -
  • OskarPotocki.VanillaFactionsExpanded.Core
  • -
  • sarg.alphaanimals
  • - -
  • Sl4vP0weR.DominantGene
  • -
  • rjw.sexperience.cumgenes
  • +
    \ No newline at end of file diff --git a/About/Manifest.xml b/About/Manifest.xml index 2589c5d..b99a84a 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,18 +1,15 @@ RJW-Genes - 2.0.0 + 1.1.0
  • RimJobWorld
  • HugsLib
  • - -
  • Male- and Female- Only Genes
  • -
    +
  • RimJobWorld
  • HugsLib
  • -
  • RJWSexperience_CumGenes
  • RJW-LicentiaLabs
  • diff --git a/About/Preview.png b/About/Preview.png index f1b61c0..315ad3c 100644 Binary files a/About/Preview.png and b/About/Preview.png differ diff --git a/CHANGELOG.md b/CHANGELOG.md index c6b9f65..69f9b81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,462 +1,12 @@ -# 2.2.0 (23-07-2024) +# 1.1.1 -## Explanations - -**Genetic Diseases**: - -This update introduces genetic diseases that are shared on sex. -Infection is handled when sex finishes, so a coitus-interruptus will not result in infections. - -Infections can be - -- Turned off entirely -- Spread only on penetrative sex -- Chances are adjustable per XML per Gene - -By turning their spread off, you effectively have a set of normal negative genes. -Dead pawns can spread diseases, but cannot receive them. For all you necros out there. - -*Why???* - -Most of the genes so far were positive or neutral, -so I got some fair requests to introduce negative genes to keep xenotypes balanced. -I know that this is some overlap with the STD mod, but well ... you are free to turn things off? - -In theory, you can specify and gene of any kind to be spreadable by sex, not only ones written by this mod. - -**Genetic Infectors**: - -These Genes can apply a genetic disease, but are not genetic diseases themselves. -A single infector gene can have multiple resulting diseases, see this extension example: - -```xml -
  • - 0.05 - -
  • rjw_genes_size_blinded
  • -
  • rjw_genes_infectious_bisexuality
  • - - -``` - -The infection-chance is applied per gene - for the example above there would be a 5% chance to apply `size_blinded` and 5% chance to apply `infectious_bisexuality`. -Multiple infections can happen on a single sex. -The `infectionGenes` can be any gene, this is not limited to genetic diseases (e.g. ugly or something). - -*Infectors* are always applied even if the genetic disease spread is turned off. -The created genetic diseases will follow the logic outlined above. - -**Disease Immunity**: - -Pawns can be immune to genetic diseases. - -This is either done with a specialised gene (`rjw_genes_genetic_disease_immunity`) -or by genes giving specific immunities. - -Any gene can give immunity against any genetic disease using an extension: - -```xml -
  • - -
  • rjw_genes_size_blinded
  • - - -``` - -These extensions can be slapped on any gene, -but they are meant mostly to have infectors immune against their own diseases. - -**Twinkification / Feminization**: - -Both approaches follow the same general logic. - -- Pawn `A` has Twinkifier Gene and fucks Pawn `B` -- `B` receives a `twinkification progress` hediff with some effects -- Upon having ANY sex, `B` can gain genes from a relevant genepool. -- Genes can be minor or major, depending on the progress of twinkification. - -Pawn `B` might be immune against twinkifier as normal immunity logic against diseases. -But once the hediff is there, the twinkification can happen unless you wait for it to cool down. -Gene additions are subject to an application chance (25% for minor, 10% for major) -and might try to add a gene that already exists - then nothing happens. - -*Twink Genepool*: -- (Minor) Body_Thin -- (Minor) Homosexual -- (Minor) Beard_NoBeardOnly -- (Minor) Small male genitalia -- (Major) Minor Vulnerability -- (Major) Infectious Homosexuality -- (Major) Delicate -- (Major) Beauty Pretty -- (Major) Fertile Anus - -*Feminization Genepool*: -- (Minor) Long Hair -- (Minor) No-Beard -- (Minor) Small Male Genitals -- (Minor) No Cum -- (Minor) Big Breasts (will only show later) -- (Major) Female Only -- (Major) No Penis -- (Major) Minor Vulnerability - -You can configure all genes, as well as their application chance, in the Genes` XML. - -*Why are these changes Genetic?* -Because this is the genes mod, and I find things here quite robust. - -## Changelog - -**Additions:** - -- Gene: Genetic Disease Immunity. cannot get infected by any genetic diseases, and won't be affected by some other genes (see relevant genes) -- Disease Gene: Vulnerability. Pawn is likelier to be raped -- Disease Gene: Infectious Hypersexuality -- Disease Gene: Infectious Homosexuality & Bisexuality -- Disease Gene: Infectious lower fertility -- Disease Gene: Infectious higher sex need -- Disease Gene: Fluctual Sexual Need. (Configurable) Chance to reset sex-need to near-zero and gain a bit of rest-need. -- Disease Gene: Size Blinded. Pawns have a higher chance for hooking up with pawns with a big cock, lower chance for small cocks. -- Infector Gene: Genetic Stretcher. Pawns can infect other pawns with *Size Blinded* -- Gene: Hardwired Progenity. Pawns with this get a malus on having no-children, and bonus on having a lot. -- Gene: Sexual Genetic Swap. Pawns have a chance to switch a random gene with their sexpartner. -- (Archite) Gene: Sexual Genetic Thief. Pawns have a chance to steal a gene from their sexpartner. Genetic Disease Immunity shields against this. -- Gene: Sperm Displacement. Pawns might overwrite an existing pregnancy, becoming the new father. The pregnancy will stay in its gestation progress. -- Gene: Twinkification. Pawns turn their (male) sexual partners into breedable twinks. -- Gene: Feminization. Pawns turn their (male) sexual partners into women. -- Gene: Blocked Masturbation. Pawns cannot masturbate. -- {Sexperience} Gene: Living Cumbucket. Pawns with this Gene get "filled" upon sex, and slowly disperse usable gathered cum. -- Disease Gene: Infectious Blocked Masturbation -- Gene: Rut. Pawns have a chance to go into heat and need more sex for a day. (Default: 5% chance per day, to go 1 day in heat). -- Disease Gene: Infectious Rut. -- Pawns will have negative thoughts about pawns with more genetic diseases than themselves. -- Faction Penalties for spreading diseases, stealing genes and aging pawns with age transfer -- Patch for [Imphilee Xeno](https://steamcommunity.com/sharedfiles/filedetails/?id=2990674516) by @Bunuffin - -**Changes**:: - -- Cum-Amount-Changing genes now are XML Adjustable and share a single `.cs`-class -- Incubi are now Bisexual too, as they should be. - -**Fixes:** - -- Fixed an Issue where pawns would always get the Pheromone social boost, unless they had the pheromone (#113) -- Fixed two hidden dependencies on Ideology and Royalty (#115) -- Fixed some more hidden dependencies on Ideology Icons (#118) -- Fixed a hidden dependency on Licentialabs (#119) - -**Internal:** - -- GenderFluid-Gene now uses a generalized `TickBasedChanceExtension` over its unique special `GenderFluidExtension` -- Introduced a `ModLog.Debug` Function that checks for the settings before printing - trying to spread it over the whole project. -- Removed TODO File. I have enough to do. - -**Notes:** - -*One Time Error Load* - -The changes to the cum-gene will give a 1-time warning on loading the save. The warning looks like this: -``` -Could not find class RJW_Genes.Gene_MuchCum while resolving node li. Trying to use Verse.Gene instead. Full node:
  • rjw_genes_much_cumThing_Human697null82
  • -UnityEngine.StackTraceUtility:ExtractStackTrace () -Verse.Log:Error (string) -... -``` - -This is not dangerous. - -*Blocked Masturbation* - -Might not be fully working - for testing, I run things in DevMode, and I can just order people to masturbate. -Please playtest this a bit for me, as I want to make it work nicely. - -*Supporting* - -You can now support me with [buying me a coffee](https://buymeacoffee.com/vegapnk). -The mod will remain free, open source and I will not hide or lock any features. -Its just meant if you want to drop me a tip. - -**Since Beta-1** (11-07-2024) - -- Made the Feminizer and Twinkifier configurable with XML. -- Typos in the Hediff Defs, tweaking of some values. -- Living Cum-Bucket & Rut Genes -- Great icons by @Alpenglow - -**Since Beta-2** (17-07-2024) - -- Changed behaviour of living cumbucket. Now, once "really full" the output happens more rarely but is much more at once. -- More Icons by @Alpenglow <3 this time attributed correct. -- Adjusted some of the metabolic values - likes cumflation, generous donor and living cumbucket have small costs. - -# 2.1.0 (27-06-2024) - -**Additions**: - -- New Ability Gene *Mating-Call*: Get bred by all nearby animals. -- New Ability Gene *Pheromone Spit*: Mark a target to be bred by nearby animals -- New Passive Gene *Sexual Tamer*: Chance to tame or train animals on bestiality. -- Human + Animal Pregnancy can (if enabled in settings) produce Vanilla Expanded Genetics Hybrids. Thanks to @Jaaldabaoth (#88) -- Xenogenes for "Big and Small" Xenotypes thanks to @Flock-of-birds (#83) -- Xenogenes for "Biotech Expansion Mammalia" and "Biotech Expansion - Mythic" thanks to @Ohreallyow (#86) -- Xenogenes update for (many?) "Vanilla Races Expanded (VRE)" Mods - Thanks to @Jaaldabaoth (#84 / #88 ) -- Genes can now fulfill RJW Quirks, configurable in XML. Thanks to @Jaaldabaoth (#84 / #88) -- "Genes" to support VRE Androids having Mechanical Genitalia. Thanks to @Jaaldabaoth (#88) -- "Curiosity Genes" alongside other Curiosities from VRE. Thanks to @Jaaldabaoth (#88) -- Support for many VE-Genetics Animals into the Animal-Framework. Thanks to @Jaaldabaoth (#88) -- "Likes Cumflation"-Gene now also makes pawns immune against the effects of cumflations. They are still cumflated. -- Gasmasks make immune against Aphrodisiac Pheromones (#108) - -**Fixes**: - -- Licentia Genes are back in and should work again. I used the [updated for by Jaaldabaoth](https://gitgud.io/Jaaldabaoth/licentia-labs) for my testing. -- Lower-casing most labels to fit rimworld standards, thanks to @Flock-of-birds (#83) -- X-Gender-Only Genes leave / re-add artificial genitalia. Thanks to @Jaaldabaoth (#84 / #88) -- Issues with Elasticity References (#87) -- Null Pointer for LoveFeeding when finding Mechs. Thanks to @Jaaldabaoth (Fixes #90) -- Changes to the Implants introduced in 2.0.0 - they imposed a hidden dependency on Royalty (Fixes #89) -- Issues when generating relations (#98, fixed in #106 thanks @Jaaldabaoth) -- Hardening of Licentia Dependencies (#105) -- Littered Birth and Chest-Burst Pregnancy are now mutually exclusive (#96) -- Youth Fountain cannot youth on masturbation anymore (#99) -- Documented the HasActiveGene Error Message (#104) -- Pawns with "rjw_genes_no_sexneed" wont go raping (or atleast way less, #100) -- Extra Nullcheck for Genes in Orgasmic Mytosis (#95) -- Orgasmic Mytosis Pawns *should* inherit the Xenotypename and favorite colour now -- Babies should not have "SexChangeThoughts" anymore when they had a (fe)male-only gene (#103) - -**Changes**: - -- Minified some Race-Patches, thanks to @Flock-of-birds (#83) -- XML-Genitalia-Genes can now also provide Breasts. Thanks to @Jaaldabaoth (#84 / #88) -- Many patches and files went into a `Mods`Folder and use an `LoadFolders.xml`. Thanks to @Jaaldabaoth (#84 / #88) -- Translate-Keys for Settings -- Translate-Key for Animal Hybrid Race-Names -- "Tick-Speed" for Evergrowth moved from Mod-Settings to XML -- Some new Icons thanks to Kira-Bad-Artist -- Some new Icons thanks to Archer - -# 2.0.0 (30-05-2024) - -**Summary**: - -- 1.5 Support -- Femboys, MPReg -- Couple Implants around Fertility / Sex / Pregnancy -- Hive Removal (to be reintroduced somewhere else) -- Licentia Genes became placeholders, no functions until Licentia is on 1.5 - -**Additions**: - -- initial Rimworld 1.5 thanks to @jaaldabaoth -- Fertile Anus Gene, thanks to @jaaldabaoth -- Femboy Genes, for male pawns with Vaginas @jaaldabaoth -- Udder Gene @jaaldabaoth , Fixes #57 -- Some other Genitalia Sets (Crocodilian, Racoon, ...) thanks to @jaaldabaoth, Closes #57 -- LitteredBirthsGene thanks to @jaaldabaoth -- OvaryAgitator that allows for a cyclic fertility. Thanks @jaaldabaoth. See [its description](./Common/Defs/ThingDefs/OvaryAgitator.xml) -- LimbicStimulator / Scrambler thanks to @jaaldabaoth. See [Scrambler Description](Common/Defs/ThingDefs/Scrambler.xml) and [Limbic Stimulator](./Common/Defs/ThingDefs/LimbicStimulator.xml) -- Bioscaffold that allows for faster pregnancies. thanks to @jaaldabaoth. See [its description](./Common/Defs/ThingDefs/Bioscaffold.xml) -- Multi-Pregnancy Gene thanks to @jaaldabaoth -- Many genes have settings configurable in their xml - tick speeds and distances. - -**Changes**: - -- Modularised many "change gentialia sets"-genes into a XML configurations. Thanks to @flock-of-birds -- **Removed** Hive Logic for now! This might break some of your save-games. -- Highmates "Initiate Loving" uses Succubus "Seduce" ability, thanks to @jaaldabaoth -- Slider for Evergrowth Tick-Speed, thanks to @jaaldabaoth -- Resizing Age for resizing Genes can be set in Settings @jaaldabaoth -- **Licentia related genes are only placeholders**, as Licentia is not 1.5 yet -- InsectIncubator only does self-fertilization now, but does not increase storage capacities for eggs anymore -- Some Genes (GenitaliaTypes, Cum, some others) cannot be in quest-rewards anymore. Special, Size, Breeding and Lifeforce genes still can be quest rewards. - -**Fixes:** - -- Small changes to drawing Succubus Wings -- Minor Format changes to lots of XML files -- Pawns with ONLY an Archotech penis will not give Fertilin, and will not receive debuffs (Fixes #71) - -**Hidden Changes:** - -- Patches for "Same Mother" / "Same Father" to account for Male-Pregs. This should only extend behaviour but be warned a bit. -- Patches to RJW-Pregnancy Helper to account for Male Pregs. -- Some replacements from `hasGene` to `hasActiveGene` - -# 1.3.3 (02-11-2023) - -**Fixes:** - -- Added another check to the AG Malachai Xenotype (Fixes #68) -- Fixed the `GatheredCum`Fertilin Ingestion Patch throwing an Error for people without Sexperience (Fixes #69 (nice)) - -# 1.3.2 (24-10-2023) - -**Fixes:** - -- Removed patch for Malachai, needs a different patching operator but I don't want to have broken fixes for now (Tracked in a new Issue) - -# 1.3.1 (22-10-2023) - -**Changes** - -- Added patches for Alpha-Genes Animusen, Drakonori and Malachai (Closes #65, thanks @Stars22223) -- Little Social Boost for Pawns affected by pheromones (Closes #50) - -**Fixes:** - -- XML Missmatch for Succubus Letter (Fixed in #64, thanks @mwcrow) -- Made constructor for Empathetic Lifeforce explicitly `public` to not hang up in character creation (Fixes #66) - -# 1.3.0 (19-09-2023) - -**Changes:** - -- New Gene for Evergrowing Cocks. Be careful. -- New Gene for Genderfluid Pawns - daily chance to change sex. Futas just change "display" and keep genitalia, other pawns switch genitalia. XML configurable times & chances. -- New Drawings for the Succubi Wings & Tail, thanks to @Monti (donated via Discord) -- Simple Gene that removes Sex need (called asexual, `rjw_genes_no_sex_need`) -- New Gene that grows Penisses on Oral sex. Configurable in XML. -- New Gene Lifeforce Empath: Gain Lifeforce for sexually satisfied pawns, loose for frustrated pawns. -- More genes are configurable with XML, e.g. tick speed, distances or multipliers. I am getting the hang of it. -- Halfed Succubus Fertilin-Need, increased cost of abilities. -- Translation Keys for some letters - -**Fixes:** - -- New attempt at fixing condom consumption for Fertilin, adressing #41 & #48 provided by Infi -- Copy of Infis patch for eating cum from sexperience, #41 and #48 -- Updated some Icons to have better backgrounds (thanks @WasmachenDennSachenSo #53) -- Custom Queen- and Drone-Xenotypes should work now. -- Some more checks if Queen is on Map or not (fixing #60) - -*Notes*: -The pawns that are gender fluid can get pregnant. -However, with RJW 5.3.7 these pregnancies disappear. -This is a change needed upstream, but I will have a look. - -# 1.2.1 (18-06-2023) - -**Fixes**: - -- Issue with RJW Changes for Orgasms, #52. Methods were renamed. -- Notes on the Gene Inheritance #51 - -# 1.2 (11-06-2023) - -**Changes:** - -- Cocoon Weaver Gene -- Spawn Spelopede Gene (Can be changed to spawn megascarabs or other insects via xml) -- Queens & Caste logic (see below) -- Addition to InsectIncubator: Now fertilizes eggs once placed inside a host, and breeds out eggs roughly twice as fast. -- Many new icons -- Custom background icons when Vanilla-Expanded-Framework is loaded -- Sexual Age Drainer & Youth Fountain now change age as configured in XML -- Draft for a Hive-Start Scenario -- Added Orgasmic Mytosis Gene: On Multiple Orgasms, spawn an identical copy of a pawn. Items and Implants are not copied. -- Patches for Alpha Genes Xenotypes and LTS Xenotech -- New Simple Genitalia Patches for other popular Xenotypes (Thanks @Pali42K) - -**Internal:** - -- Renamed abilities to have _ability_ in their name, to not exactly match the gene-defnames. -- Moved Insect-Incubator & Insect-Breeder to hive category and folders (from breeding) -- Some exclusion-tags for Alpha Genes -- Removed Patches for conditional Genes, and moved them to `mayRequire` in the XenotypeDefs - -**Fixes:** - -- Cockeater Ability has now Icon of Cockeater Gene -- Cockeater now leaves a bite wound! -- Pythokin-Patch checks for Licentialabs (#30) -- Removed Sex-Change thoughts for pawns born or spawned with a gender-altering gene (Issue #32, PR #33 by @callavico) -- More consistent behavior for genitalia resizing over multiple game-starts (Issue #34) - -**Queen & Caste Logic** - -There are 3 genes revolting around a new, hopefully flexible insect-caste system. Queens, Drones and Workers. These reproduce either through normal sex, or can utilize the insect birth once [this PR](https://gitgud.io/Ed86/rjw/-/merge_requests/266) has been merged in. -Update: It has been merged into [RJW 5.3.5](https://gitgud.io/Ed86/rjw/-/tags/5.3.5), make sure you update! - -In general, the logic is the following: - -- A queen can have sex with anyone. If the partner was a drone, there is chance for the baby to become a queen, drone or worker. -- If the partner of the queen was not a drone, the baby will be a worker. -- If the drone didn't mate with a queen but someone else, normal inheritance happens -- The assignment is done by xenotypes for queen and drones. The baby will get all xenogenes of their parents chosen xenotypes. -- For workers, every queen can have a set of genes for their workers defined in [a special def](./Common/Defs/QueenWorkerMappingDefs/QueenWorkerMappingDefs_base.xml). These will be added as endogenes, so that pawns can still become xenotypes. -- There is a default gene-set for workers, making dumb, sterile and servile pawns. -- Chances for Offsprings (Drone, Queen, Worker) is defined in an [XML-Def](./Common/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml). They are set per Queen. -- Birthlogic should apply for normal pregnancies, and for RJW-Insect Eggs. Other Pregnancies (from mods) are not supported. - -I am not sure if I want to have a specific mapping defining that queen can only mate with certain drones, let me know how you feel about it. -*Queens can be male*. I just used the female-term, but implementation is gender-neutral. - -**On Alpha Genes** - -Alpha genes might have colliding features, but I need some reports to find out about it. -I disabled the specific gender and the oviparious reproduction (when you have rjw-ovipos). -I recommend using alpha genes for the Hive-Playthroughs, as otherwise the Halamyr look a bit ... boring? -But i don't want to add a bunch of cosmetic genes on top of things. - -*And what the fuck is a halamyr?* Well I had to name my little ants somehow. But I didn't want to call them `myr` as I maybe want to make some [TiTs](https://www.fenoxo.com/play-games/) xenotypes separately. -And I am aware that the TiTs-Myr work different than the things I made now. - - -**Changes Since beta-1**: - -- Fix of icon-names (#36) -- Changes to the scenario (more building items, throne for start). Wealth is now at 12k, which is the same as crashlanded and lost tribe. -- Added the Orgasmic Mytosis Draft -- Many touches on the Halamyr Hive Logic and Fertilizitation (#37,#38) - -**Changes Since beta-2**: - -- Mostly Patches and Changes to the Halamyr Defs -- Some re-arranging and mayRequires for other mods - -# 1.1.4 (06-04-2023) - -**Fixes:** - -- Youth Fountain and Age Drainer **really** "stop" at 18 (#26, #28) and never age pawns -- Drastically reduced vomiting time due to an missunderstanding (#29). `0.4` instead of `0.01` - -Sometimes life is like that, and you have to fix the fixes. -It was never really broken, life is just very long. - -# 1.1.3 (28-03-2023) - -**Changes:** - -- Youth Fountain and Age Drainer "stop" at 18 (#26) -- Youth Fountain and Age Drainer activate only for pawns at 18 (#26) -- Drained Pawns vomit less (from mtb 0.05 to 0.01)(#29) - -**Fixes:** - -- InsectBreeder would mess with normal Pawn-Animal pregancy for egg laying animals (#23) - -# 1.1.2 (19-03-2023) - -**Changes:** - -- Added more cool images from WasMachenDennSachen (#22) - -**Fixes:** - -- Aphrodisiac Pheromones checks for children and other conditions (#25) - -# 1.1.1 (10-03-2023) - -**Changes:** +Changes: - Drastically increased mood-penalty for Fertilin-Loss (if the pawn is still too happy, there will never be a breakdown for missing fertilin) - No-Breast Genes add Nipples - Featureless Chest Gene (No Nipples at all, adds the RJW Featureless Chest as requested per some Kobold fetishists) -**Fixes:** +Fixes: - Small and Big Male Genitalia had images wrong way round - Fertilin should activate at a MinAge of 18 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d905c20..486a3b9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,8 +17,6 @@ But please consider also the following: - Shabalox (MechBreeding, InsectBreeding, Animal Gene Inheritance) - WasMachenDennSachen (Various Icons) -- Jaaldabaoth (1.5 Migration, MPreg, Femboys) -- Flock-of-Birds (Cosmetic Genitalia per XML) ## Other Credits @@ -28,8 +26,4 @@ But please consider also the following: - Placeholder, Rapist, Necrophile come from [RJW-Sexperience Ideology](https://gitgud.io/amevarashi/rjw-sexperience-ideology/) - Hypersexual & Zoophile comes from [RJW](https://gitgud.io/Ed86/rjw) - Cockeater & Naked Prowess come from *WasMachenDennSachen* but I copied it from Discord Chat. -- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur -- Littered Birth, Many of the Penis Types are from Jaaldabaoth -- Feline Genitalia, Animal Mating Call and Udder are from Kira-Bad-Artist -- Sexual Tamer, Pheromone Spit and Mating call are from Archer -- The Preview was started with [Yodayo](https://yodayo.com/) \ No newline at end of file +- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur \ No newline at end of file diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index bb1f065..bcf809b 100644 Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ diff --git a/Common/Defs/AbilityDefs/Ability_CockEater.xml b/Common/Defs/AbilityDefs/Ability_CockEater.xml index f5cc8ad..d333c1d 100644 --- a/Common/Defs/AbilityDefs/Ability_CockEater.xml +++ b/Common/Defs/AbilityDefs/Ability_CockEater.xml @@ -1,10 +1,10 @@ - rjw_genes_ability_cockeater - + rjw_genes_cockeater + Eat the cock of another pawn, restoring fertilin based on the size of the cock. - Genes/Icons/cockeater + Things/Mote/Heart true true false @@ -27,7 +27,8 @@ -
  • +
  • +
  • \ No newline at end of file diff --git a/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml b/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml deleted file mode 100644 index 434df04..0000000 --- a/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - rjw_genes_ability_cocoonweaver - - 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/Common/Defs/AbilityDefs/Ability_Flight.xml b/Common/Defs/AbilityDefs/Ability_Flight.xml index d643940..82e6537 100644 --- a/Common/Defs/AbilityDefs/Ability_Flight.xml +++ b/Common/Defs/AbilityDefs/Ability_Flight.xml @@ -1,7 +1,7 @@ - rjw_genes_ability_flight + rjw_genes_flight Fly to a short location using your wings. Genes/Icons/Succubus_Wings diff --git a/Common/Defs/AbilityDefs/Ability_MatingCall.xml b/Common/Defs/AbilityDefs/Ability_MatingCall.xml deleted file mode 100644 index 383895f..0000000 --- a/Common/Defs/AbilityDefs/Ability_MatingCall.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - rjw_genes_ability_mating_call - - Calls nearby animals to breed me. - Genes/Icons/Mating_Call_2 - - true - false - - false - - 50 - 0 - - - 410 - - 30000 - - 5 - Verb_CastAbility - - False - False - True - True - - - - -
  • - PsycastPsychicEffect -
  • -
  • - 40 -
  • -
  • - CompAbilityEffect_GiveHediff - Hediff_Submitting - True -
  • -
    - Being Bred is not an easy business.\nThis might lead to a broken pawn, torn genitalia and hybrid-pregnancies.\nMaybe this is what you want.\nThe pawn will `submit` and e.g. Insects might cocoon him.\n\nAre you sure to proceed? - -
    - -
    \ No newline at end of file diff --git a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml index 292af25..82d5bd8 100644 --- a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml +++ b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml @@ -1,12 +1,12 @@ - rjw_genes_ability_naked_prowess + rjw_genes_naked_prowess Enhance the strength and resilience of your naked body with fertilin. Genes/Icons/rjw_naked_prowess Things/Mote/Heart - CastAbilityOnThing + CastAbilityOnThing False False True @@ -38,7 +38,7 @@
  • - 0.15 + 0.1
  • diff --git a/Common/Defs/AbilityDefs/Ability_ParalysingKiss.xml b/Common/Defs/AbilityDefs/Ability_ParalysingKiss.xml index 29e1588..8fd3eec 100644 --- a/Common/Defs/AbilityDefs/Ability_ParalysingKiss.xml +++ b/Common/Defs/AbilityDefs/Ability_ParalysingKiss.xml @@ -1,14 +1,14 @@ - rjw_genes_ability_paralysingkiss + rjw_genes_paralysingkiss Paralyse someone briefly with a kiss. Genes/Icons/rjw_genes_lips true true false - + 5 Mote_CoagulateStencil @@ -37,7 +37,7 @@ rjw_genes_lips
  • - 0.1 + 0.05
  • diff --git a/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml b/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml deleted file mode 100644 index 853a192..0000000 --- a/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - rjw_genes_ability_pheromone_spit - - Spit a condensed ball of animal pheromones to mark a target. Nearby Animals will try to breed the target. This means all animals - hostile, friendly and wild. - Genes/Icons/RJW_Genes_PheromoneSpit - - 3000 - 201 - true - - Verb_CastAbility - 11 - 1.2 - PiercingSpine_Launch - - True - False - False - False - - - -
  • - 25 -
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/AbilityDefs/Ability_PussyHeal.xml b/Common/Defs/AbilityDefs/Ability_PussyHeal.xml index e9fb85b..8f97b60 100644 --- a/Common/Defs/AbilityDefs/Ability_PussyHeal.xml +++ b/Common/Defs/AbilityDefs/Ability_PussyHeal.xml @@ -1,8 +1,8 @@ - rjw_genes_ability_pussyheal - + rjw_genes_pussyheal + Rape another pawn, so you can heal them with your vagina's special healing power. Things/Mote/Heart false @@ -28,7 +28,7 @@
  • - 0.3 + 0.2
  • 0.4~0.8 diff --git a/Common/Defs/AbilityDefs/Ability_Seduce.xml b/Common/Defs/AbilityDefs/Ability_Seduce.xml index 60d5d10..3310595 100644 --- a/Common/Defs/AbilityDefs/Ability_Seduce.xml +++ b/Common/Defs/AbilityDefs/Ability_Seduce.xml @@ -1,7 +1,7 @@ - rjw_genes_ability_seduce + rjw_genes_seduce Seduce the target to approach the caster. Genes/Icons/seduce @@ -9,13 +9,13 @@ true true false - + 10 Mote_CoagulateStencil Coagulate Coagulate_Cast - + Verb_CastAbility 10 1 @@ -35,10 +35,9 @@
  • Heart
  • -
  • - 0.20 +
  • + 0.1
  • -
    \ No newline at end of file diff --git a/Common/Defs/Effects/cocoonweave.xml b/Common/Defs/Effects/cocoonweave.xml deleted file mode 100644 index 573ccd2..0000000 --- a/Common/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/Common/Defs/GeneDefs/GeneCategories.xml b/Common/Defs/GeneDefs/GeneCategories.xml index e799489..06b31cc 100644 --- a/Common/Defs/GeneDefs/GeneCategories.xml +++ b/Common/Defs/GeneDefs/GeneCategories.xml @@ -15,63 +15,58 @@ rjw_genes_gender - + 21 rjw_genes_genitalia_type - + 19 rjw_genes_genitalia_extras - + 17 rjw_genes_genitalia_size - + 15 rjw_genes_fertilin - + 14 rjw_genes_breeding - + 13 rjw_genes_cum - + 12 rjw_genes_damage - + 11 rjw_genes_special - + 8 - - rjw_genes_diseases - - 22 -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml index 1b946c2..bd201cc 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml @@ -1,174 +1,52 @@ - + - + - - rjw_genes_breeding - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - + rjw_genes_mechbreeder - + Pawns with this gene are able to birth mechanoids unharmed. World/WorldObjects/Expanding/Mechanoids 51 + rjw_genes_breeding 1 -1 - - - rjw_genes_zoophile - - Xenotypes with this Gene are Zoophile. - Genes/Icons/Zoophile - 54 - -
  • - Zoophile -
  • -
    -
    - - - rjw_genes_fertile_anus - - Xenotypes with this gene have a functional uterus if they do not possess one by - means of their vagina. - For males, it is connected to the anal cavity and leads to a normal pregnancy. - Genes/Icons/Fertile_anus - 54 - - - + + rjw_genes_insectincubator - - RJW_Genes.Gene_InsectIncubator - Pawns with this gene fertilize insect eggs that are placed inside them. - Genes/Icons/Egg + + Pawns with this gene are able to hold more insect eggs. + Genes/Icons/More_Egg_Space 52 + rjw_genes_breeding 1 -1 - + rjw_genes_insectbreeder - + Pawns with this gene are able to fertilize eggs with any fertile penis. - Genes/Icons/Insect_Breeder + World/WorldObjects/Expanding/Insects 53 + rjw_genes_breeding 1 -1 - - - rjw_genes_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 - - - - rjw_genes_mating_call - - This gene allows to call nearby animals and invite them for mating. - Genes/Icons/RJW_Genes_Mating_Call - 65 - -
  • rjw_genes_ability_mating_call
  • -
    - - rjw_genes_ability_mating_call - - 2 - -1 -
    - - - rjw_genes_pheromone_spit - - This gene allows to mark targets for breeding, enticing nearby animals for a ride. - Genes/Icons/RJW_Genes_PheromoneSpit - 66 - -
  • rjw_genes_ability_pheromone_spit
  • -
    - - rjw_genes_ability_pheromone_spit - - 2 - -1 -
    - - - rjw_genes_hardwired_progenity - - Carriers of this gene need to procreate. They suffer negative effects if they are - childless, and have increased capabilities if they reach a high amount of offsprings. - Genes/Icons/hardwired_progenity - 70 - - -
  • - - -0.1 - 1.2 - 1.2 - +0.15 - -0.1 - -
  • -
  • - - 0.05 - 0.1 - 0.1 - 0.4 - -
  • -
  • - - 0.15 - 0.25 - -0.25 - -
  • -
    - - 1 - 0 -
    - - - rjw_genes_basic_rut - - Carriers of this gene can enter a state of heat, resulting in drastically higher - sexual activity. - Genes/Icons/rut - 1 - 1 - 11 - RJW_Genes.Gene_Rut - -
  • - - 60000 - 0.05 -
  • -
    -
    + + + rjw_genes_zoophile + + rjw_genes_breeding + Xenotypes with this Gene are Zoophile. + Genes/Icons/Zoophile_2 + 54 + +
  • + Zoophile +
  • +
    +
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml b/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml index f578e99..a5cd0ca 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Cosmetic.xml @@ -1,117 +1,69 @@ - + - - Miscellaneous - true - -
  • Wing
  • -
    -
    + + Miscellaneous + true + +
  • Wing
  • +
    + + Tailbone + +
    - - rjw_genes_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 - 0 - -
  • - PawnRenderNodeWorker_AttachmentBody - Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings - 1.5 - Body - Skin - - - -2 - - true - - 90 - - -
  • -
    - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
  • - DemonLoverQuirk -
  • -
    -
    - - - rjw_genes_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 - 0 - -
  • - PawnRenderNodeWorker_AttachmentBody - Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail - (1.5, 1.5) - Body - Skin - Fresh, Rotting - - true - - -2 - - - (0, 0, -0.15) - 90 - - - (-0, 0, -0.15) - - - (-0.2, 0, -0.15) - - - (0.2, 0, -0.15) - - -
  • -
    - true - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
  • - DemonLoverQuirk -
  • -
    -
    + + rjw_genes_succubus_wings + + Carriers of this gene grow succubus wings. + Genes/Icons/Succubus_Wings + (0.75, 0.75, 0.75) + 1000 + +
  • rjw_genes_flight
  • +
    + + rjw_genes_flight + + 1 + -1 + + Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings + Skin + 2 + (0.0, 0.01, -0.1) + (0.0, 0.0, -0.1) + (0.1, 0.0, 0.0) + +
    + + + rjw_genes_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/Succubus_Tail_L1
  • +
  • Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1
  • +
  • Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2
  • +
  • Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2
  • +
    + Skin + 2 + (0, 0.2, -0.1) + (0, -0.1, 0.1) + (0.2, 0.2, 0.1) +
    + true +
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_Cum.xml b/Common/Defs/GeneDefs/GeneDefs_Cum.xml index 95580a8..d410319 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Cum.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Cum.xml @@ -1,68 +1,83 @@ - + - - rjw_genes_cum - -
  • CumAmount
  • -
    - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    + + rjw_genes_cum + +
  • CumAmount
  • +
    +
    rjw_genes_no_cum - + Males of these species have no fluid. Genes/Icons/No_Cum - RJW_Genes.Gene_ChangeCumAmount + RJW_Genes.Gene_NoCum 533 0 1 - -
  • - 0.0 -
  • -
    rjw_genes_much_cum - + Males of this species produce a lot of fluid. - Genes/Icons/Much_Cum - RJW_Genes.Gene_ChangeCumAmount + Genes/Icons/Bonus_Cum + RJW_Genes.Gene_MuchCum 534 1 - 0 - -
  • - 3.0 -
  • -
    + -1
    rjw_genes_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_ChangeCumAmount + + Males of this species produce a whole lot of fluid. They are like fountains basically. + Genes/Icons/Much_Bonus_Cum + RJW_Genes.Gene_VeryMuchCum 535 1 - -1 - -
  • - 15.0 + -2 + + + + rjw_genes_likes_cumflation + + rjw_genes_cum + This Xenotype loves being cumflated. + Genes/Icons/Cumflation + 536 + +
  • + LikesCumflation
  • -
    + + +
  • NotCumflatable
  • +
    +
    + + + rjw_genes_cumflation_immunity + + rjw_genes_cum + This Xenotype cannot get cumflated. + Genes/Icons/Cumflation_Immunity + 537 + +
  • NotCumflatable
  • +
    +
    + + + + rjw_genes_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
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_Damage.xml b/Common/Defs/GeneDefs/GeneDefs_Damage.xml index 2e7f941..f2b0e07 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Damage.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Damage.xml @@ -1,13 +1,24 @@ - + - - rjw_genes_unbreakable - + + rjw_genes_elasticity + 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. - Genes/Icons/TrialDefend + This Xenotype cannot get stretched by huge penetrators. + Genes/Icons/Elasticity + RJW_Genes.Gene_Elasticity + -1 + 1 + 1 + + + + rjw_genes_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 @@ -16,14 +27,6 @@
  • FeelingBroken
  • - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml deleted file mode 100644 index 017c1c4..0000000 --- a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml +++ /dev/null @@ -1,336 +0,0 @@ - - - - - rjw_genes_diseases - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Disease_Background - Genes/Icons/RJW_Genes_Endogene_Disease_Background -
  • -
    -
    - - - rjw_genes_diseases - rjw_genes_genetic_disease_immunity - 1 - 0.95 - - This gene makes the pawn immune against genetic STDs and some other genes that - imply negative side-effects. - 1 - -1 - Genes/Icons/disease_immunity - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - - - rjw_genes_minor_vulnerability - - This gene makes the pawn a bit more vulnerable, and a slightly more attractive - target for rape. - 1 - 1 - 0.85 - Genes/Icons/minor_vulnerability - 5 - - - 0.15 - - - -
  • RJW_Genes_Vulnerability
  • -
    - - -
  • - 0.05 -
  • -
    -
    - - - rjw_genes_major_vulnerability - - This gene makes the pawn more vulnerable, and a more attractive target for - rape. - 2 - 1 - Genes/Icons/major_vulnerability - 6 - - -
  • RJW_Genes_Vulnerability
  • -
    - - - 0.3 - - - -
  • - 0.03 -
  • -
    -
    - - - - rjw_genes_infectious_blocked_masturbation - - Carriers of this gene are unable to masturbate - they need a partner or - equipment. - Genes/Icons/blocked_masturbation - 55 - 1 - 2 - -
  • - 0.05 -
  • -
    -
    - - - rjw_genes_infectious_low_fertility - - Carriers of this genetic disease have lower fertility. - 1 - 1 - 0.9 - UI/Icons/ColonistBar/Idle - 5 - - - -0.15 - - - -
  • - 0.05 -
  • -
    -
    - - - rjw_genes_infectious_increased_sex_need - - Carriers of this genetic disease need more sex. - 0 - 1 - 0.9 - UI/Icons/ColonistBar/Idle - 5 - - - 0.15 - - - -
  • - 0.08 -
  • -
    -
    - - - rjw_genes_infectious_major_increased_sex_need - - Carriers of this genetic disease need a lot more sex. - 1 - 2 - 0.85 - UI/Icons/ColonistBar/Idle - 5 - - - 1.0 - - - -
  • - 0.03 -
  • -
    -
    - - - rjw_genes_infectious_hypersexuality - - This gene makes the pawn hypersexual, and has a chance to spread on - intercourse. - Genes/Icons/Hypersexual - 2 - 2 - 7 - -
  • rjw_genes_hypersexuality_trait_giver
  • -
    - - -
  • - Nymphomaniac -
  • -
    - - -
  • - 0.05 -
  • -
    -
    - - - rjw_genes_infectious_bisexuality - - This gene makes the pawn bisexual, and has a chance to spread on intercourse. - Genes/Icons/bisexuality - 1 - 0 - 8 - - -
  • rjw_genes_bisexuality_trait_giver
  • -
  • rjw_genes_sexual_orientation
  • -
    - - -
  • - Bisexual -
  • -
    - - -
  • - 0.1 -
  • -
    -
    - - - rjw_genes_infectious_homosexuality - - This gene makes the pawn homosexual, and has a chance to spread on intercourse. - Genes/Icons/homosexuality - 1 - 0 - 9 - - -
  • rjw_genes_homosexuality_trait_giver
  • -
  • rjw_genes_sexual_orientation
  • -
    - - -
  • - Gay -
  • -
    - - -
  • - 0.1 -
  • -
    -
    - - - rjw_genes_fluctual_sexual_needs - - Carriers of this genetic disease have a chance to suddenly require sex, gaining - a bit of energy to find quick relief. - UI/Icons/ColonistBar/Idle - 1 - 2 - 11 - RJW_Genes.Gene_FluctualSexualNeed - -
  • - 0.1 -
  • -
  • - - 30000 - 0.15 -
  • -
    -
    - - - - rjw_genes_size_blinded - - This genetic disease makes the carrier dramatically more drawn to pawns with - huge cocks. - Genes/Icons/size_blinded - 1 - 1 - 11 - -
  • - 0.1 -
  • -
    -
    - - - rjw_genes_stretcher - - Pawns with this gene have a chance to alter the genes of their sexual partners - to prefer large cocks. - Genes/Icons/stretcher - 1 - 0 - 12 - -
  • - -
  • rjw_genes_size_blinded
  • - - -
  • - 0.05 - -
  • rjw_genes_size_blinded
  • - - -
    -
    - - - - rjw_genes_infectious_rut - - Carriers of this gene can enter a state of heat, resulting in drastically - higher - sexual activity. - Genes/Icons/rut - 1 - 2 - 11 - RJW_Genes.Gene_Rut - -
  • - - 60000 - 0.05 -
  • -
  • - 0.1 -
  • -
    -
    - - -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml index 2a82c73..22764ea 100644 --- a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml +++ b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml @@ -1,22 +1,13 @@ - + - - - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    + + rjw_genes_genitalia_extras + rjw_genes_extra_penis - rjw_genes_genitalia_extras - Males of this species grow an additional penis . Genes/Icons/extra_male RJW_Genes.Gene_ExtraPenis @@ -29,7 +20,6 @@ rjw_genes_no_penis - rjw_genes_genitalia_extras Males of this do not have a penis. Genes/Icons/No_Male_Genitalia RJW_Genes.Gene_NoPenis @@ -43,9 +33,8 @@ rjw_genes_extra_vagina - rjw_genes_genitalia_extras Females of this species grow an additional vagina . - Genes/Icons/Extra_Vagina + Genes/Icons/extra_female RJW_Genes.Gene_ExtraVagina 703 @@ -56,9 +45,8 @@ rjw_genes_no_vagina - rjw_genes_genitalia_extras Females of this do not have a vagina. - Genes/Icons/No_Vagina + Genes/Icons/No_Female_Genitalia RJW_Genes.Gene_NoVagina 704 @@ -70,7 +58,6 @@ rjw_genes_extra_breasts - rjw_genes_genitalia_extras Females of this species grow an additional pair of breasts . Genes/Icons/Extra_Breasts RJW_Genes.Gene_ExtraBreasts @@ -83,7 +70,6 @@ rjw_genes_no_breasts - rjw_genes_genitalia_extras Females of this do not have a pair of breasts, but only nipples. Genes/Icons/No_Breasts RJW_Genes.Gene_NoBreasts @@ -96,7 +82,6 @@ rjw_genes_extra_anus - rjw_genes_genitalia_extras This specias has an extra anus. Genes/Icons/Extra_Anus RJW_Genes.Gene_ExtraAnus @@ -109,7 +94,6 @@ rjw_genes_no_anus - rjw_genes_genitalia_extras This specias has no anus. Genes/Icons/No_Anus RJW_Genes.Gene_NoAnus @@ -119,39 +103,22 @@ - - rjw_genes_futa - - rjw_genes_gender - 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_femboy - - rjw_genes_gender - Males with this gene are considered female despite having a penis - Genes/Icons/Futa - RJW_Genes.Gene_Femboy - 709 - -
  • PenisAmount
  • -
  • VaginaAmount
  • -
    -
    - + + rjw_genes_futa + + 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 - rjw_genes_genitalia_extras - + Carriers of this gene do not have breasts or nipples. Genes/Icons/No_Breasts RJW_Genes.Gene_FeaturelessChest @@ -161,17 +128,4 @@
    - - rjw_genes_udder - - rjw_genes_genitalia_extras - Carriers of this gene have udders and breasts. - Genes/Icons/RJW_Genes_Udder - RJW_Genes.Gene_UdderBreasts - 711 - -
  • BreastAmount
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml b/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml index 4c93001..c5d8826 100644 --- a/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml +++ b/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml @@ -2,20 +2,13 @@ rjw_genes_genitalia_size - - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    +
    rjw_genes_big_male_genitalia - + Penises of this Xenotype are bigger.(Resizing takes place at 20th Birthday) Genes/Icons/Big_Male_Genitalia RJW_Genes.Gene_BigMaleGenitalia @@ -27,7 +20,7 @@ rjw_genes_small_male_genitalia - + Penises of this Xenotype are smaller. (Resizing takes place at 20th Birthday) Genes/Icons/Small_Male_Genitalia RJW_Genes.Gene_SmallMaleGenitalia @@ -40,9 +33,9 @@ rjw_genes_loose_female_genitalia - + Vaginas of this Xenotype are quite spacy. (Resizing takes place at 20th Birthday) - Genes/Icons/Loose_Vagina + Genes/Icons/Loose_Female_Genitalia RJW_Genes.Gene_LooseFemaleGenitalia 754 @@ -52,9 +45,9 @@ rjw_genes_tight_female_genitalia - + Vaginas of this Xenotype are pretty tight.(Resizing takes place at 20th Birthday) - Genes/Icons/Tight_Vagina + Genes/Icons/Tight_Female_Genitalia RJW_Genes.Gene_TightFemaleGenitalia 756 @@ -65,7 +58,7 @@ rjw_genes_big_breasts - + Females of this Xenotype have big honkers.(Resizing takes place at 20th Birthday) Genes/Icons/Big_Breasts RJW_Genes.Gene_BigBreasts @@ -77,7 +70,7 @@ rjw_genes_small_breasts - + Females of this Xenotype have smaller breasts.(Resizing takes place at 20th Birthday) Genes/Icons/Small_Breasts RJW_Genes.Gene_SmallBreasts @@ -90,7 +83,7 @@ rjw_genes_loose_anus - + The Anus of this Xenotype is roomy.(Resizing takes place at 20th Birthday) Genes/Icons/Loose_Anus RJW_Genes.Gene_LooseAnus @@ -102,7 +95,7 @@ rjw_genes_tight_anus - + The anus of this Xenotype is small.(Resizing takes place at 20th Birthday) Genes/Icons/Tight_Anus RJW_Genes.Gene_TightAnus @@ -111,26 +104,4 @@
  • AnusSize
  • - - - - - rjw_genes_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 - -
  • PenisSize
  • -
  • VaginaSize
  • -
    - -
  • - - 60000 -
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml index 757ee1e..7333a5e 100644 --- a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml +++ b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml @@ -1,67 +1,29 @@ - + rjw_genes_genitalia_type - RJW_Genes.Gene_GenitaliaType
  • GenitalType
  • - true 0 - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    - - + rjw_genes_equine_genitalia Carriers of this gene develop equine genitalia. Genes/Icons/Genitalia_Equine - -
  • - HorsePenis - HorseVagina - GenericAnus -
  • -
    + RJW_Genes.Gene_EquineGenitalia 802
    - - - rjw_genes_human_genitalia - - Carriers of this gene develop human genitalia. - Genes/Icons/Genitalia_human - -
  • - Penis - Vagina - Anus - Breasts -
  • -
    - 802 -
    - + rjw_genes_canine_genitalia Carriers of this gene develop canine genitalia. Genes/Icons/Genitalia_Canine - -
  • - DogPenis - DogVagina - GenericAnus -
  • -
    + RJW_Genes.Gene_CanineGenitalia 803
    @@ -69,14 +31,8 @@ rjw_genes_feline_genitalia Carriers of this gene develop feline genitalia. - Genes/Icons/RJW_Genes_Feline_Genitalia - -
  • - CatPenis - CatVagina - GenericAnus -
  • -
    + Genes/Icons/Genitalia_Feline + RJW_Genes.Gene_FelineGenitalia 804 @@ -85,16 +41,7 @@ Carriers of this gene have demonic genitalia. Genes/Icons/Genitalia_Demon - -
  • - DemonPenis - DemonVagina - DemonAnus -
  • -
  • - DemonLoverQuirk -
  • -
    + RJW_Genes.Gene_DemonicGenitalia 805 @@ -103,16 +50,7 @@ Carriers of this gene develop dragon genitalia. Genes/Icons/Genitalia_Draconic - -
  • - DragonPenis - DragonVagina - GenericAnus -
  • -
  • - ScaleLoverQuirk -
  • -
    + RJW_Genes.Gene_DragonGenitalia 806 @@ -120,198 +58,8 @@ rjw_genes_slime_genitalia Carriers of this gene have slime genitalia. - Genes/Icons/Slime_Genitalia - -
  • - SlimeTentacles - SlimeVagina - SlimeAnus - SlimeBreasts -
  • -
  • - SlimeLoverQuirk -
  • -
    - 807 - - - - rjw_genes_demonicT_genitalia - - Carriers of this gene have demonic tentacle genitalia. - Genes/Icons/Genitalia_tentacle_icon - -
  • - DemonTentaclePenis - DemonVagina - DemonAnus -
  • -
  • - DemonLoverQuirk -
  • -
    - 807 -
    - - - rjw_genes_crocodilian_genitalia - - Carriers of this gene have crocodilian genitalia. - Genes/Icons/Genitalia_croc_icon - -
  • - CrocodilianPenis -
  • -
  • - ScaleLoverQuirk -
  • -
    - 807 -
    - - - rjw_genes_racoon_genitalia - - Carriers of this gene have racoon genitalia. - Genes/Icons/Genitalia_racoon_icon - -
  • - RaccoonPenis -
  • -
    - 807 -
    - - - rjw_genes_reptilian_genitalia - - Carriers of this gene have reptilian genitalia. - Genes/Icons/Genitalia_hemi_icon - -
  • - HemiPenis -
  • -
  • - ScaleLoverQuirk -
  • -
    - 807 -
    - - - rjw_genes_Ghost_genitalia - - Carriers of this gene have ghost genitalia. - Genes/Icons/Genitalia_ghost_icon - -
  • - GhostPenis - GhostVagina -
  • -
  • - TeratophileQuirk -
  • -
    - 807 -
    - - - rjw_genes_Golem_genitalia - - Carriers of this gene have rocky golem genitalia. - Genes/Icons/penis_rock_icon - -
  • - GolemPenis -
  • -
  • - TeratophileQuirk -
  • -
    - 807 -
    - - - rjw_genes_Marine_genitalia - - Carriers of this gene have marine mammal like genitalia. - Genes/Icons/Genitalia_marine_icon - -
  • - MarinePenis -
  • -
    - 807 -
    - - - rjw_genes_Necro_genitalia - - Carriers of this gene have necrotic undead genitalia. - Genes/Icons/Genitalia_necro_icon - -
  • - NecroPenis -
  • -
  • - TeratophileQuirk -
  • -
    - 807 -
    - - - rjw_genes_Needle_genitalia - - Carriers of this gene have very thin genitalia. - Genes/Icons/Genitalia_thin_icon - -
  • - NeedlePenis - NarrowVagina -
  • -
    - 807 -
    - - - rjw_genes_Orc_genitalia - - Carriers of this gene have orc genitalia. - Genes/Icons/Genitalia_orc_icon - -
  • - OrcPenis -
  • -
    - 807 -
    - - - rjw_genes_Pig_genitalia - - Carriers of this gene have screw genitalia. - Genes/Icons/Genitalia_screw_icon - -
  • - PigPenis -
  • -
    -
    - - - rjw_genes_Tentacle_genitalia - - Carriers of this gene have alien genitalia. - Genes/Icons/Genitalia_alien_icon - -
  • - TentaclePenis -
  • -
  • - TeratophileQuirk -
  • -
    + Genes/Icons/Genitalia_Slime + RJW_Genes.Gene_SlimeGenitalia 807
    @@ -319,22 +67,9 @@ rjw_genes_ovipositor_genitalia Carriers of this gene have ovipositors similar to insects. - Genes/Icons/Ovipositor_Genitalia - -
  • - OvipositorM - OvipositorF - InsectAnus -
  • -
  • - ChitinLoverQuirk -
  • -
    + Genes/Icons/Genitalia_Insect + RJW_Genes.Gene_OvipositorGenitalia 808 - -
  • Egglaying
  • -
  • AG_Egglaying
  • -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml index 46de9d0..e8987d0 100644 --- a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml +++ b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml @@ -1,166 +1,133 @@ - + - - - rjw_genes_fertilin - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - + rjw_genes_lifeforce - 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. + 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
  • +
  • 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. + 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 + rjw_genes_fertilin -2 - 18 + 18 -
  • Gives fertilin supply.
  • +
  • Gives fertilin supply.
  • - -
  • - fert -
  • -
    + +
  • fert
  • +
    - 0.025 + 0.05 1 1
    - - + + rjw_genes_lifeforce_drain draining - Carriers lose an additional 7.5 fertilin per day from biological entropy. + Carriers lose an additional 15 fertilin per day from biological entropy. fertilin RJW_Genes.Gene_LifeForceDrain Genes/Icons/FertilinDrainAlt rjw_genes_lifeforce - 0.075 - 18 + 0.15 + rjw_genes_fertilin + 18 -1 1 6 - - + + rjw_genes_pussyhealing - + 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_fertilin -
  • rjw_genes_ability_pussyheal
  • +
  • rjw_genes_pussyheal
  • - rjw_genes_ability_pussyheal + rjw_genes_pussyheal 1 -1 -
  • - life -
  • -
  • - pussy -
  • -
  • - heal -
  • +
  • life
  • +
  • pussy
  • +
  • heal
  • - - + + rjw_genes_cockeater - + cockeater - Carriers of this gene are able eat cocks to restore their fertilin supply. - Cocks are consumed during that process. + 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_fertilin -
  • rjw_genes_ability_cockeater
  • +
  • rjw_genes_cockeater
  • - rjw_genes_ability_cockeater + rjw_genes_cockeater 1 -1 -
  • - life -
  • -
  • - cock -
  • -
  • - eat -
  • +
  • life
  • +
  • cock
  • +
  • eat
  • - - + + rjw_genes_paralysingkiss paralysing kiss Carriers of this gene are able to briefly stun an enemy with a kiss. - Genes/Icons/Paralysing_Kiss + Genes/Icons/rjw_genes_lips rjw_genes_lifeforce 12 + rjw_genes_fertilin -
  • rjw_genes_ability_paralysingkiss
  • +
  • rjw_genes_paralysingkiss
  • - rjw_genes_ability_paralysingkiss + rjw_genes_paralysingkiss 1 -1 -
  • - stun -
  • -
  • - kiss -
  • +
  • stun
  • +
  • kiss
  • - - + + rjw_genes_seduce seduction @@ -168,105 +135,72 @@ Genes/Icons/seduce rjw_genes_lifeforce 13 + rjw_genes_fertilin -
  • rjw_genes_ability_seduce
  • +
  • rjw_genes_seduce
  • - rjw_genes_ability_seduce + rjw_genes_seduce 1 -1 - + -
  • - stun -
  • -
  • - kiss -
  • +
  • stun
  • +
  • kiss
  • - - + + rjw_genes_naked_prowess - Carriers of this gene are able to temporarily increase their strength and - resilience, while they are naked. + 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 + 13 + rjw_genes_fertilin -
  • rjw_genes_ability_naked_prowess
  • +
  • rjw_genes_naked_prowess
  • - rjw_genes_ability_naked_prowess + rjw_genes_naked_prowess 1 -1
    - - + + rjw_genes_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. + + 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 + rjw_genes_fertilin 1 - - + + rjw_genes_fertilin_absorber - - Carriers of this gene are able to absorb the fertilin inside sperm through - their vagina and anus. + + 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 + rjw_genes_fertilin 1 - - - rjw_genes_lifeforce_empath - - 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 - 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 + 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. + Things/Mote/Heart rjw_genes_lifeforce 4 + rjw_genes_fertilin 1 -1 diff --git a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml index a01e245..97fb937 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml @@ -1,117 +1,61 @@ - + rjw_genes_hypersexual - + Reproduction Xenotypes with this Gene are Hypersexual (Nymphs). Genes/Icons/Hypersexual - 1 + 1
  • Nymphomaniac
  • - - -
  • rjw_genes_hypersexuality_trait_giver
  • -
    - - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    - + rjw_genes_rapist - + Reproduction Xenotypes with this Gene are Rapists. Genes/Icons/Rape 1 - 2 + 2
  • Rapist
  • - - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - - rjw_genes_masochist - - Reproduction - Xenotypes with this Gene are Masochists. - Genes/Icons/Rape - 1 - 2 - -
  • - Masochist -
  • -
    - - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    rjw_genes_homosexual - + Reproduction This Gene makes you gay. - Genes/Icons/RoundC + UI\Ideoligions\Universal\RoundC 0 - 3 + 3
  • Gay
  • -
  • rjw_genes_homosexuality_trait_giver
  • rjw_genes_sexual_orientation
  • - - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    rjw_genes_bisexual - + Reproduction Carriers of this Gene are Bisexual. - Genes/Icons/RoundC + UI\Ideoligions\Universal\RoundC 0 - 4 + 4
  • Bisexual @@ -119,108 +63,7 @@
  • rjw_genes_sexual_orientation
  • -
  • rjw_genes_bisexuality_trait_giver
  • - - - false - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - - - rjw_genes_no_sex_need - - Carriers of this gene do not have a sex-need. They can still participate in - sex, - Genes/Icons/Empty - 5 - -
  • Sex
  • -
    - -1 - 2 - - false - -
  • rjw_genes_sexual_orientation
  • -
    - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - - LitteredBirths - - Reproduction - Female carriers of this gene birth litters instead of just one baby, with a - chance of having two to four babies per pregnancy. - Genes/Icons/Gene_LitteredBirths - 110 - 1.10 - -2 - 1 - -
  • - ImpregnationFetishQuirk -
  • -
    - -
  • rjw_genes_littered_birth_vs_chestburst
  • - - rjw_genes_pregnancy_overwrite - - Reproduction - Carriers of this gene can 'overwrite' an existing pregnancy, keeping the - progress but effectively replacing the father. - Genes/Icons/pregnancy_overwrite - 120 - - 4 - -2 - - -
  • - 0.5 -
  • -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - - rjw_genes_blocked_masturbation - - Reproduction - Carriers of this gene are unable to masturbate - they need a partner or equipment. - Genes/Icons/blocked_masturbation - 60 - 0 - 1 - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml index 1d44fe7..1e0e8c9 100644 --- a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml +++ b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml @@ -1,267 +1,48 @@ - + - - - rjw_genes_special - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - + rjw_genes_orgasm_rush - - On orgasm, carriers of this gene get a boost in activity. (rest-need is - partially filled) + + rjw_genes_special + On Orgasm, carriers of this gene get a boost in activity. (rest-need is partially filled) 1 -2 - Genes/Icons/FleshPurity + UI/Memes/FleshPurity 1 - - + + rjw_genes_youth_fountain - - Having sex with a carrier of this gene makes the partner slightly younger. - (Partner stays adult) + + rjw_genes_special + Having sex with a carrier of this gene makes the partner slightly younger. (Partner stays adult) 2 -2 - Genes/Icons/FireLeaves + UI/Ideoligions/FireLeaves 2 - -
  • - - 60000 - 18 -
  • -
    - - + + rjw_genes_sex_age_drain - - Having sex transfers some of the partners life-time to themselves. (Pawn stays - adult) + + rjw_genes_special + 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 - - RJW_Genes.Gene_Aphrodisiac_Pheromones + + rjw_genes_special + RJW_Genes.Gene_Aphrodisiac_Pheromones Pheremones of this pawn induce an incressed sexdrive to others nearby. - Genes/Icons/Pheromones + UI/Memes/FleshPurity 4 1 1 - -
  • - - 1250 -
  • -
  • - - 25 -
  • -
    -
    - - - rjw_genes_sexual_mytosis - - - Carriers have malfunctioning regenerative archites that grow more unstable with - ongoing multiple orgasms - climaxing in a process of mytosis. This will result in an - (biologically) identical pawn and both twins are set in a regenerative state. Also, the - pawn can have multiple orgasms: In a state of higher unstableness, they come quicker. - UI/Icons/Genes/Gene_PsychicBonding - 5 - 5 - -5 - 1 - - - - rjw_genes_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 -
  • -
    -
    - - - rjw_genes_cocoonweaver - - 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 - -
  • - BreederQuirk -
  • -
    -
    - - - rjw_genes_sex_tamer - - sextamer - Bestiality has a chance to tame animals or advance their training. - Genes/Icons/RJW_Genes_SexualTamer - 14 - 2 - -1 - - - - rjw_genes_sexual_genetic_swap - - Carriers with this gene may switch a gene with their sex-partner. Switched Genes are always endogenes. - Genes/Icons/sexual_genetic_swap - 20 - 3 - 0 - -
  • - 0.1 -
  • -
    -
    - - - rjw_genes_sexual_genetic_thief - - Carriers with this gene may steal a gene from their sex-partner. Stolen genes are always xenogenes. - Genes/Icons/sexual_genetic_thief - 21 - 5 - -2 - 1 - -
  • - 0.2 -
  • -
    -
    - - - rjw_genes_feminizer - - Carriers with this gene slowly turn male sexual partners into females. - Genes/Icons/feminizer - 31 - 4 - -1 - -
  • - -
  • rjw_genes_feminizer
  • - - -
  • - rjw_genes_feminization_progress - true - 0.01 - 1.00 - false - true - false -
  • -
  • - -
  • rjw_genes_female_only
  • -
  • rjw_genes_no_penis
  • -
  • rjw_genes_minor_vulnerability
  • - - -
  • rjw_genes_small_male_genitalia
  • -
  • rjw_genes_big_breasts
  • -
  • Beard_NoBeardOnly
  • -
  • Hair_LongOnly
  • -
    - 0.25 - 0.1 - -
    - - rjw_genes_twinkifier - - Carriers with this gene slowly turn male sexual partners into breedabel cute twinks. - Genes/Icons/twinkifier - 50 - 4 - -1 - -
  • - -
  • rjw_genes_twinkifier
  • - - -
  • - rjw_genes_twinkification_progress - true - 0.01 - 1.00 - false - true - false -
  • -
  • - -
  • rjw_genes_fertile_anus
  • -
  • Beauty_Pretty
  • -
  • Delicate
  • -
  • rjw_genes_minor_vulnerability
  • -
  • rjw_genes_infectious_homosexuality
  • - - -
  • rjw_genes_small_male_genitalia
  • -
  • Beard_NoBeardOnly
  • -
  • Body_Thin
  • -
  • rjw_genes_homosexual
  • -
    - 0.25 - 0.1 - -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml b/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml index 82a302c..e168411 100644 --- a/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml +++ b/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml @@ -1,76 +1,25 @@ - + - - rjw_genes_female_only - - 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 - - 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 - - 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 -
  • -
    -
    + + rjw_genes_female_only + + rjw_genes_gender + This Xenotype only has females. + 0 + Genes/Icons/Female_Only + RJW_Genes.Gene_FemaleOnly + 1 + + + rjw_genes_male_only + rjw_genes_gender + + This Xenotype only has males. + 0 + Genes/Icons/Male_Only + RJW_Genes.Gene_MaleOnly + 2 + +
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml b/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml index f28f160..38dfa28 100644 --- a/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml +++ b/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml @@ -1,21 +1,19 @@ - + rjw_genes_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 + + 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. + UI/Icons/Xenotypes/Sanguophage PawnBecameSanguophage 0.5 0.1~140 1 -1000 0.005 - false + false 0.02 0.02 @@ -24,47 +22,45 @@ 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_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
  • + +
  • 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 - - 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 + + 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. + UI/Icons/Xenotypes/Sanguophage PawnBecameSanguophage 0.5 0.1~140 1 -1000 0.005 - false + false 0.02 0.02 @@ -73,76 +69,69 @@ 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_hypersexual
  • +
  • rjw_genes_male_only
  • +
  • rjw_genes_lifeforce
  • +
  • rjw_genes_lifeforce_drain
  • +
  • rjw_genes_drainer
  • +
  • rjw_genes_demonic_genitalia
  • + +
  • 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 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 + 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. + UI/Icons/Xenotypes/Neanderthal 0.5 0.1~140 2.5 -1000 0.01 - false + false -
  • WoundHealing_Fast
  • -
  • NakedSpeed
  • -
  • Aggression_Aggressive
  • -
  • MeleeDamage_Strong
  • -
  • KillThirst
  • +
  • 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
  • +
  • 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
  • -
    +
  • 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/Common/Defs/HediffDefs/Bioscaffold.xml b/Common/Defs/HediffDefs/Bioscaffold.xml deleted file mode 100644 index c6bed88..0000000 --- a/Common/Defs/HediffDefs/Bioscaffold.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Bioscaffold - HediffWithComps - - 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 - - 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
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Hediffs_Evergrowth.xml b/Common/Defs/HediffDefs/Hediffs_Evergrowth.xml deleted file mode 100644 index c2fc098..0000000 --- a/Common/Defs/HediffDefs/Hediffs_Evergrowth.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - rjw_genes_evergrowth_sideeffect - HediffWithComps - - science has gone too far - a tool like this needs constant attention. - (1,0,0.5) - 1.0 - -
  • - -0.025 -
  • -
    - -
  • - - - 3 - -
  • -
  • - 0.5 - - - 5 - - -
  • - Consciousness - -0.05 -
  • - - -
  • - 0.9 - - - 7 - - -
  • - Consciousness - -0.1 -
  • - - -
    -
    - -
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml index 5b56717..d8ee3db 100644 --- a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml +++ b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml @@ -1,6 +1,6 @@ - + - + rjw_genes_fertilin_lost Hediff_HemogenCraving @@ -19,13 +19,12 @@ - + rjw_genes_succubus_drained HediffWithComps - The vitality of this pawn has been drained. Cannot be drained again until fully - recovered. + The vitality of this pawn has been drained. Cannot be drained again until fully recovered. (1,0,0.5) 1.0 1.0 @@ -75,13 +74,13 @@ -0.2 - 0.4 + 0.05 0.1 0.35 - + rjw_genes_fertilin_craving @@ -91,78 +90,77 @@ 1.0 0.01 -
  • - - 0.05 - -
  • - Consciousness - 0.9 -
  • - - -
  • - - 0.35 - 0.1 - -
  • - Consciousness - 0.8 -
  • - - -
  • - - 0.7 - 0.15 - -
  • - Consciousness - 0.5 -
  • - - +
  • + + 0.05 + +
  • + Consciousness + 0.9 +
  • + + +
  • + + 0.35 + 0.1 + +
  • + Consciousness + 0.8 +
  • + + +
  • + + 0.7 + 0.15 + +
  • + Consciousness + 0.5 +
  • + +
    -
  • - 0.05 - -0.1 -
  • +
  • + 0.05 + -0.1 +
  • - - rjw_genes_naked_prowess - (0.52, 1, 0.95) - - Driven by fertilin, this person has greatly increased strength and resilience. - HediffWithComps - -
  • - - - 0.5 - 0.5 - 0.5 - - - 0.5 - 1.5 - -
  • -
    - -
  • - True - 5000 -
  • -
  • - - - false - + + rjw_genes_naked_prowess + + Driven by fertilin, this person has greatly increased strength and resilience. + HediffWithComps + +
  • + + + 0.5 + 0.5 + 0.5 + + + + 0.5 + 1.5 + +
  • + + +
  • + True + 5000 +
  • +
  • + + + false + \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml deleted file mode 100644 index 45537fd..0000000 --- a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - rjw_genes_feminization_progress - HediffWithComps - - Something is changing this pawn - there is a chance to develop female features - upon sex. - false - 1.0 - false - false - -
  • - -0.01 -
  • -
    - - -
  • - - false -
  • - -
  • - - 0.6 - true - -
  • - Consciousness - -0.5 -
  • - - - 0.25 - - - -
  • - - 0.8 - -
  • - Consciousness - -0.05 -
  • - - true - - 0.5 - 0.25 - - - -
  • - - 0.9 - -
  • - Consciousness - -0.1 -
  • - - true - - 1.0 - 0.5 - - -
    -
    - - - - rjw_genes_twinkification_progress - HediffWithComps - - Something is changing this pawn - there is a chance to turn into a cute, - breedable twink upon sex. - false - 1.0 - false - false - -
  • - -0.01 -
  • -
    - - -
  • - - false -
  • - -
  • - - 0.6 - true - -
  • - Consciousness - -0.05 -
  • - - - 0.25 - - - -
  • - - 0.8 - -
  • - Consciousness - -0.05 -
  • - - true - - 0.5 - 0.25 - - - -
  • - - 0.9 - -
  • - Consciousness - -0.1 -
  • - - true - - 1.5 - 0.5 - - -
    -
    - -
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Hediffs_OrgasmRush.xml b/Common/Defs/HediffDefs/Hediffs_OrgasmRush.xml index 255b3e9..f68663f 100644 --- a/Common/Defs/HediffDefs/Hediffs_OrgasmRush.xml +++ b/Common/Defs/HediffDefs/Hediffs_OrgasmRush.xml @@ -4,7 +4,7 @@ rjw_genes_orgasm_rush_hediff HediffWithComps - + Xenotypes with this Gene are pushed beyond normal limits when they have an orgasm. (240,200,110) false @@ -75,3 +75,4 @@
    + diff --git a/Common/Defs/HediffDefs/Hediffs_OrgasmicMytosis.xml b/Common/Defs/HediffDefs/Hediffs_OrgasmicMytosis.xml deleted file mode 100644 index f26d1a9..0000000 --- a/Common/Defs/HediffDefs/Hediffs_OrgasmicMytosis.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - rjw_genes_orgasmic_mytosis_hediff - HediffWithComps - - 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 -
  • -
    - -
  • - - -
  • - Moving - 0.05 -
  • -
  • - Consciousness - 0.08 -
  • - - -
  • - - 0.4 - -
  • - Moving - 0.15 -
  • -
  • - Consciousness - 0.15 -
  • - - -
  • - - 0.7 - -
  • - Moving - -0.1 -
  • -
  • - Consciousness - -0.1 -
  • -
  • - BloodPumping - +0.2 -
  • - - - -
  • - - 0.9 - -
  • - Moving - -0.25 -
  • -
  • - Consciousness - -0.25 -
  • -
  • - BloodPumping - +0.5 -
  • - - -
    -
    - - - rjw_genes_mytosis_shock_hediff - HediffWithComps - - 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 -
  • -
    - -
  • - - -
  • - Moving - -0.25 -
  • -
  • - Consciousness - -0.25 -
  • - - -
  • - - 0.6 - -
  • - Moving - -0.50 -
  • -
  • - Consciousness - -0.7 -
  • - - -
    -
    - - - -
    - diff --git a/Common/Defs/HediffDefs/Hediffs_Rut.xml b/Common/Defs/HediffDefs/Hediffs_Rut.xml deleted file mode 100644 index 6c6ac10..0000000 --- a/Common/Defs/HediffDefs/Hediffs_Rut.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - rjw_genes_genetic_rut - HediffWithComps - - Based on genetics, this pawn is in heat. - (240,200,110) - false - 1.0 - false - false - -
  • - -1.00 -
  • -
    - -
  • - - - 0.50 - - -
  • - BloodPumping - 0.1 -
  • - - -
  • - - 0.4 - - 2.00 - - -
  • - Moving - 0.1 -
  • -
  • - BloodPumping - 0.15 -
  • - - -
    -
    - -
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/LimbicStimulator.xml b/Common/Defs/HediffDefs/LimbicStimulator.xml deleted file mode 100644 index 8a7f8a6..0000000 --- a/Common/Defs/HediffDefs/LimbicStimulator.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - LimbicStimulator - HediffWithComps - - limbic stimulator - An installed limbic stimulator. - - (1.0, 0.6, 0.7) - -
  • - 0 - - -1.0 - 6.0 - -
  • -
    -
    - - - LimbicStimulator - - 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 - - -
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/OvaryAgitator.xml b/Common/Defs/HediffDefs/OvaryAgitator.xml deleted file mode 100644 index 45d69c9..0000000 --- a/Common/Defs/HediffDefs/OvaryAgitator.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - OvaryAgitator - - An installed ovary agitator. - - OvaryAgitator - - HediffWithComps - 0.0001 - -
  • - -
  • - RJW_Fertility - 0.50 -
  • - - -
  • - 0.1 - -
  • - RJW_Fertility - 0.22 -
  • - - -
  • - 0.2 - -
  • - RJW_Fertility - 0 -
  • - - -
  • - 0.3 - -
  • - RJW_Fertility - -0.17 -
  • - - -
  • - 0.4 - -
  • - RJW_Fertility - -0.32 -
  • - - -
  • - 0.5 - -
  • - RJW_Fertility - -0.48 -
  • - - -
  • - 0.6 - -
  • - RJW_Fertility - -0.54 -
  • - - -
  • - 0.7 - -
  • - RJW_Fertility - -0.63 -
  • - - -
  • - 0.8 - -
  • - RJW_Fertility - -0.69 -
  • - - -
  • - 0.9 - -
  • - RJW_Fertility - -0.75 -
  • - - -
  • - 1 - -
  • - RJW_Fertility - -100 -
  • - - -
    - -
  • - 0.0045 -
  • -
    -
    - - - OvaryAgitator - - A crude slaver implant used to increase the number of eggs released during ovulation, increasing the likelihood of having multiple children per pregnancy. Their use is largely limited to rimworlds lacking in cloning infrastructure as most civilized and unified worlds have outlawed them.\n\nWhile it provides an initial boost in fertility, the implant will slowly deplete the victims's ovaries over several years until they're infertile. Allies of implanted victims will be angered. - - InstallOvaryAgitator - - - 10 - 1 - 6 - - - FertilityProcedures - - -
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Scrambler.xml b/Common/Defs/HediffDefs/Scrambler.xml deleted file mode 100644 index 4ab6071..0000000 --- a/Common/Defs/HediffDefs/Scrambler.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - Scrambler - - scrambler - An installed scrambler. - - Scrambler - - (0.9, 0.5, 1.0) - -
  • - 0 - - 0.40 - 3.0 - - -
  • - Consciousness - 0.6 -
  • -
  • - Talking - 0.2 -
  • - - -
    -
    - - - Scrambler - - A slaver implant, similar to the mindscrew, that can inject disorienting mind imagery directly into the visual cortex of the brain through a complex network of nanoelectrodes. Victims of scrambler implantation tend to socially withdraw to minimize additional stimulation. As a consequence of their confusion, they also become physically meek, making them easy to impose upon. Allies of implanted victims will be angered. - - - 50 - - - 8 - 1 - - - FertilityProcedures - - -
    \ No newline at end of file diff --git a/Common/Defs/HistoryEventDefs/DiseaseHistoryEventDefs.xml b/Common/Defs/HistoryEventDefs/DiseaseHistoryEventDefs.xml deleted file mode 100644 index 488fa5f..0000000 --- a/Common/Defs/HistoryEventDefs/DiseaseHistoryEventDefs.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - rjw_genes_GoodwillChangedReason_StoleGene - - - - - rjw_genes_GoodwillChangedReason_infected_with_disease - - - - - rjw_genes_GoodwillChangedReason_spread_genetic_disease - - - - \ No newline at end of file diff --git a/Common/Defs/HistoryEventDefs/SpecialHistoryEventDefs.xml b/Common/Defs/HistoryEventDefs/SpecialHistoryEventDefs.xml deleted file mode 100644 index ded422c..0000000 --- a/Common/Defs/HistoryEventDefs/SpecialHistoryEventDefs.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - rjw_genes_GoodwillChangedReason_aged_pawn_with_sex_gene - - - - - rjw_genes_GoodwillChangedReason_youthed_pawn_with_sex_gene - - - - - rjw_genes_GoodwillChangedReason_OverwritePregnancy - - - - \ No newline at end of file diff --git a/Common/Defs/JobDefs/Jobs_LifeForce.xml b/Common/Defs/JobDefs/Jobs_LifeForce.xml index c05bf61..13dd1e3 100644 --- a/Common/Defs/JobDefs/Jobs_LifeForce.xml +++ b/Common/Defs/JobDefs/Jobs_LifeForce.xml @@ -4,21 +4,21 @@ rjw_genes_lifeforce_randomrape rjw.JobDriver_RandomRape - raping + Raping false rjw_genes_lifeforce_healpussy RJW_Genes.JobDriver_CastAbilityAfterSex - tending wounds with sex. + Tending someones wounds with sex. false rjw_genes_lifeforce_seduced RJW_Genes.JobDriver_Seduced - seduced. + Seduced. false false @@ -26,7 +26,7 @@ rjw_genes_flirt RJW_Genes.JobDriver_Flirt - seduced. + Seduced. false
    \ No newline at end of file diff --git a/Common/Defs/JobDefs/Jobs_SexOnSpot.xml b/Common/Defs/JobDefs/Jobs_SexOnSpot.xml index 842f676..e904f3e 100644 --- a/Common/Defs/JobDefs/Jobs_SexOnSpot.xml +++ b/Common/Defs/JobDefs/Jobs_SexOnSpot.xml @@ -4,7 +4,7 @@ sex_on_spot RJW_Genes.JobDriver_SexOnSpot - making love on the spot. + Making love on the spot. false diff --git a/Common/Defs/LetterDefs/AnotherBaby.xml b/Common/Defs/LetterDefs/AnotherBaby.xml deleted file mode 100644 index d8f7c17..0000000 --- a/Common/Defs/LetterDefs/AnotherBaby.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - AnotherBaby - (120, 176, 216) - (106, 179, 231) - 40 - LetterArrive_Good - MajorThreat - - \ No newline at end of file diff --git a/Common/Defs/PawnKindDefs/PawnKind_LifeForce.xml b/Common/Defs/PawnKindDefs/PawnKind_LifeForce.xml index ed6001a..9d48cdc 100644 --- a/Common/Defs/PawnKindDefs/PawnKind_LifeForce.xml +++ b/Common/Defs/PawnKindDefs/PawnKind_LifeForce.xml @@ -45,7 +45,7 @@ rjw_genes_incubus - + 50 Human diff --git a/Common/Defs/RecipeDefs/Bioscaffold.xml b/Common/Defs/RecipeDefs/Bioscaffold.xml deleted file mode 100644 index 624f0cb..0000000 --- a/Common/Defs/RecipeDefs/Bioscaffold.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - InstallBioscaffold - - Install a bioscaffold. - - Bioscaffold - Bioscaffold - - Installing bioscaffold. - -
  • - - -
  • Bioscaffold
  • - - - 1 - -
    - - -
  • Bioscaffold
  • -
    -
    - -
  • Torso
  • -
    - Bioscaffold -
    -
    \ No newline at end of file diff --git a/Common/Defs/RecipeDefs/LimbicStimulator.xml b/Common/Defs/RecipeDefs/LimbicStimulator.xml deleted file mode 100644 index b824041..0000000 --- a/Common/Defs/RecipeDefs/LimbicStimulator.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - InstallLimbicStimulator - - Install a limbic stimulator. - - LimbicStimulator - LimbicStimulator - - Installing limbic stimulator. - -
  • - - -
  • LimbicStimulator
  • - - - 1 - -
    - - -
  • LimbicStimulator
  • -
    -
    - -
  • Brain
  • -
    - LimbicStimulator -
    -
    \ No newline at end of file diff --git a/Common/Defs/RecipeDefs/OvaryAgitator.xml b/Common/Defs/RecipeDefs/OvaryAgitator.xml deleted file mode 100644 index 2d2523f..0000000 --- a/Common/Defs/RecipeDefs/OvaryAgitator.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - InstallOvaryAgitator - - Install an ovary agitator. - - OvaryAgitator - OvaryAgitator - - Recipe_InstallImplant - Installing ovary agitator. - true - -
  • - - -
  • OvaryAgitator
  • - - - 1 - -
    - - -
  • OvaryAgitator
  • -
    -
    - -
  • Torso
  • -
    - OvaryAgitator -
    -
    \ No newline at end of file diff --git a/Common/Defs/RecipeDefs/Scrambler.xml b/Common/Defs/RecipeDefs/Scrambler.xml deleted file mode 100644 index 5479d91..0000000 --- a/Common/Defs/RecipeDefs/Scrambler.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - InstallScrambler - - Install a scrambler. - - Scrambler - Scrambler - - Recipe_InstallImplant - Installing scrambler. - true - -
  • - - -
  • Scrambler
  • - - - 1 - -
    - - -
  • Scrambler
  • -
    -
    - -
  • Brain
  • -
    - Scrambler -
    -
    \ No newline at end of file diff --git a/Common/Defs/ThoughtDefs/Thoughts_Disease.xml b/Common/Defs/ThoughtDefs/Thoughts_Disease.xml deleted file mode 100644 index 8997a52..0000000 --- a/Common/Defs/ThoughtDefs/Thoughts_Disease.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - rjw_genes_appealing_cock - Thought_SituationalSocial - RJW_Genes.ThoughtWorker_SizeBlinded_Social - true - - -
  • - - -10 -
  • -
  • - - 10 -
  • -
  • - - 20 -
  • -
    -
    - - - rjw_genes_has_more_diseases - Thought_SituationalSocial - RJW_Genes.ThoughtWorker_HasMoreDiseasesThanMe_Social - true - - -
  • - - -3 -
  • -
  • - - -8 -
  • -
  • - - -18 -
  • -
    -
    - -
    diff --git a/Common/Defs/ThoughtDefs/Thoughts_Memories.xml b/Common/Defs/ThoughtDefs/Thoughts_Memories.xml deleted file mode 100644 index 5b9bc5c..0000000 --- a/Common/Defs/ThoughtDefs/Thoughts_Memories.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - RegretsStealingLovin - Thought_Memory - 1.5 - 3 - 0.4 - -
  • - - I don't remember how or why, but I violated someone. It felt good in the moment, but it felt so wrong afterward. My cravings from my implant are just too strong! - -5 -
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/ThoughtDefs/Thoughts_Special.xml b/Common/Defs/ThoughtDefs/Thoughts_Special.xml deleted file mode 100644 index 5620ca9..0000000 --- a/Common/Defs/ThoughtDefs/Thoughts_Special.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - rjw_genes_pheromone_carrier_nearby - Thought_SituationalSocial - RJW_Genes.ThoughtWorker_Aphrodisiac_Pheromones_Social - -
  • - - {0} has a special vibe, we should hang out more often. - +3 -
  • -
    -
    - -
    diff --git a/Common/Defs/TipSetDefs/Tips.xml b/Common/Defs/TipSetDefs/Tips.xml index bc7aca3..7147147 100644 --- a/Common/Defs/TipSetDefs/Tips.xml +++ b/Common/Defs/TipSetDefs/Tips.xml @@ -23,8 +23,6 @@
  • The Settings for Animal-Gene Inheritance are distributed between RJW-Pregnancy-Settings and their own Mod-Options.
  • -
  • Children born by pawns with the `Fertile Anus` gene might be bullied at school, but they can still live a fulfilling and happy life.
  • - diff --git a/Common/Languages/English/Keyed/Bestiality.xml b/Common/Languages/English/Keyed/Bestiality.xml deleted file mode 100644 index e6edf59..0000000 --- a/Common/Languages/English/Keyed/Bestiality.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - animal-hybrid - diff --git a/Common/Languages/English/Keyed/Lifeforce.xml b/Common/Languages/English/Keyed/Lifeforce.xml index 16ce67a..5b0520d 100644 --- a/Common/Languages/English/Keyed/Lifeforce.xml +++ b/Common/Languages/English/Keyed/Lifeforce.xml @@ -14,7 +14,4 @@ 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. - + \ No newline at end of file diff --git a/Common/Languages/English/Keyed/Mod_Settings.xml b/Common/Languages/English/Keyed/Mod_Settings.xml deleted file mode 100644 index cf320c9..0000000 --- a/Common/Languages/English/Keyed/Mod_Settings.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - Genitalia resizing age: - years - At this age (in biological years) any resizing gene will be applied. This is done to prevent changes and issues related to genitalia changing in the pawns growth, but also for 'ethics'. - - Fertilin-Gain from Animals: - % of fertilin gained (compared to human-baseline). - - Sexdemon Visits - If enabled, incubi and succubi can spawn in through an event. - Size matters - Incubi and succubi will consider size/tightness of partners genital for deciding if they want to join - Sexdemon groups - Multiple sexdemons can spawn during a event - Succubi - Allow Succubi to spawn through this event - Incubi - Allow Incubi to spawn through this event - - Regret Stealing Love - If off, pawns will not get bad thoughts for seduction. - - Animal-Mating GenitalCheck - If on, only animals that 'can rape' will be engaging in bestiality after being hit by a animal mating pulse. This usually means that only male animals will start breeding. - - Genetic STDS - Genetic STD Spread - If checked, certain Genes will spread on sex. - Genetic STDs as Endogenes - If checked, genetic diseases will be added as Endogenes. Otherwise they are added as Xenogenes. - Genetic STDs on penetrative-sex only - If checked, genetic STDs are only spread on penetrative sex. Otherwise, any sextype is considered for spread. - - generous-donor 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. - - detailed-debug - Adds detailed information to the log about interactions and genes. - diff --git a/Common/Languages/English/Keyed/Mod_Settings_AnimalGeneInheritance.xml b/Common/Languages/English/Keyed/Mod_Settings_AnimalGeneInheritance.xml deleted file mode 100644 index bb7012d..0000000 --- a/Common/Languages/English/Keyed/Mod_Settings_AnimalGeneInheritance.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - enabled - If toggled, Animal Pregnancies will try inherit genes. - - - - - genes as xenogenes - If toggled on, animal genes will be added as xenogenes. - - enable VE genetics hybridation - If enabled and if you have VE genetics it will enable the hybridation system. - - - - diff --git a/Common/Languages/English/Keyed/StatsReports.xml b/Common/Languages/English/Keyed/StatsReports.xml deleted file mode 100644 index 715bccb..0000000 --- a/Common/Languages/English/Keyed/StatsReports.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - Pawn doesn't have any children. - Pawn has a decent amount of children. - Pawn has a lot of children. - - diff --git a/Common/Patches/Genes/Patch_Highmates.xml b/Common/Patches/Genes/Patch_Highmates.xml deleted file mode 100644 index 47cd747..0000000 --- a/Common/Patches/Genes/Patch_Highmates.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - -
  • Vanilla Races Expanded - Highmate
  • -
    - - /Defs/AbilityDef[defName="VRE_InitiateLovin"]/comps - - -
  • - RJW_Genes.CompAbilityEffect_Seduce - Caster -
  • -
    -
    -
    -
    -
    - diff --git a/Common/Patches/Genes/Patch_Insector_ChestEggs.xml b/Common/Patches/Genes/Patch_Insector_ChestEggs.xml deleted file mode 100644 index 8d01d52..0000000 --- a/Common/Patches/Genes/Patch_Insector_ChestEggs.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - -
  • Vanilla Races Expanded - Insector
  • -
    - - Defs/GeneDef[defName = "VRE_ChestburstPregnancy"]/exclusionTags - -
  • rjw_genes_littered_birth_vs_chestburst
  • -
    -
    -
    - -
    \ No newline at end of file diff --git a/Common/Patches/Genes/Vanilla_Quirk_Patch.xml b/Common/Patches/Genes/Vanilla_Quirk_Patch.xml deleted file mode 100644 index 40458da..0000000 --- a/Common/Patches/Genes/Vanilla_Quirk_Patch.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - /Defs/GeneDef[defName="Furskin"] - - -
  • - FurLoverQuirk -
  • -
    -
    -
    - - /Defs/GeneDef[defName="Head_Gaunt"] - - -
  • - TeratophileQuirk -
  • -
    -
    -
    -
    - diff --git a/Common/Patches/ThingDefs/RJW_Used_Condoms.xml b/Common/Patches/ThingDefs/RJW_Used_Condoms.xml index 56ae1d2..d04bcb1 100644 --- a/Common/Patches/ThingDefs/RJW_Used_Condoms.xml +++ b/Common/Patches/ThingDefs/RJW_Used_Condoms.xml @@ -1,19 +1,11 @@ - - - - Defs/ThingDef[defName="UsedCondom"]/ingestible/outcomeDoers - + + + +
  • RimJobWorld
  • +
    + /Defs/ThingDef[defName="UsedCondom"]/ingestible @@ -22,15 +14,6 @@ -
    - - Defs/ThingDef[defName="UsedCondom"]/ingestible/outcomeDoers - -
  • - 1 -
  • -
    -
    \ No newline at end of file diff --git a/Common/Patches/ThingDefs/Sexperience_Cum.xml b/Common/Patches/ThingDefs/Sexperience_Cum.xml index f7387bf..b905d4b 100644 --- a/Common/Patches/ThingDefs/Sexperience_Cum.xml +++ b/Common/Patches/ThingDefs/Sexperience_Cum.xml @@ -1,42 +1,17 @@ - + - - +
  • RJW Sexperience
  • - - Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers - - /Defs/ThingDef[defName="GatheredCum"]/ingestible - - -
  • - 1 -
  • -
    -
    -
    - - Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers - -
  • - 1 -
  • -
    -
    + + /Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers + +
  • + 1 +
  • +
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/GenitaliaUpdate.xml b/Common/Patches/Xenotypes/FromOtherMods/GenitaliaUpdate.xml similarity index 91% rename from Common/Patches/Xenotypes/GenitaliaUpdate.xml rename to Common/Patches/Xenotypes/FromOtherMods/GenitaliaUpdate.xml index 1451a13..fd6e360 100644 --- a/Common/Patches/Xenotypes/GenitaliaUpdate.xml +++ b/Common/Patches/Xenotypes/FromOtherMods/GenitaliaUpdate.xml @@ -14,11 +14,16 @@
  • rjw_genes_much_cum
  • rjw_genes_zoophile
  • -
  • rjw_genes_Pig_genitalia
  • -
  • rjw_genes_human_genitalia
  • + + Defs/XenotypeDef[defName="Waster"]/genes + +
  • rjw_genes_insectbreeder
  • +
    +
    + Defs/XenotypeDef[defName="Yttakin"]/genes diff --git a/Common/Patches/Xenotypes/PatchRoosSatyr.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchBiotechNyaron.xml similarity index 50% rename from Common/Patches/Xenotypes/PatchRoosSatyr.xml rename to Common/Patches/Xenotypes/FromOtherMods/PatchBiotechNyaron.xml index bfada1f..50ad15f 100644 --- a/Common/Patches/Xenotypes/PatchRoosSatyr.xml +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchBiotechNyaron.xml @@ -2,14 +2,13 @@ -
  • Roo's Satyr Xenotype
  • +
  • Biotech Nyaron
  • - Defs/XenotypeDef[defName="RBSF_Satyr"]/genes + Defs/XenotypeDef[defName="Nyaron"]/genes -
  • rjw_genes_aphrodisiac_pheromones
  • -
  • rjw_genes_much_cum
  • +
  • rjw_genes_feline_genitalia
  • -
    + \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromOtherMods/PatchKijinRace3.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchKijinRace3.xml new file mode 100644 index 0000000..de2b840 --- /dev/null +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchKijinRace3.xml @@ -0,0 +1,14 @@ + + + + +
  • Kijin Race 3.0
  • +
    + + Defs/XenotypeDef[defName="KijinXenotype"]/genes + +
  • rjw_genes_demonic_genitalia
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromOtherMods/PatchNarai.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchNarai.xml new file mode 100644 index 0000000..51ee9d8 --- /dev/null +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchNarai.xml @@ -0,0 +1,15 @@ + + + + +
  • NaraiXenotype
  • +
    + + Defs/XenotypeDef[defName="Narai"]/genes + +
  • rjw_genes_canine_genitalia
  • +
  • rjw_genes_zoophile
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromOtherMods/PatchNyaron.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchNyaron.xml new file mode 100644 index 0000000..9145200 --- /dev/null +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchNyaron.xml @@ -0,0 +1,15 @@ + + + + +
  • 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/Common/Patches/Xenotypes/FromOtherMods/PatchPapou.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchPapou.xml new file mode 100644 index 0000000..e46b8e8 --- /dev/null +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchPapou.xml @@ -0,0 +1,16 @@ + + + + +
  • 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/Common/Patches/Xenotypes/FromOtherMods/PatchRoosMinotaur.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchRoosMinotaur.xml new file mode 100644 index 0000000..f59bcc2 --- /dev/null +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchRoosMinotaur.xml @@ -0,0 +1,18 @@ + + + + +
  • Roo's Minotaur Xenotype
  • +
    + + Defs/XenotypeDef[defName="RBM_Minotaur"]/genes + +
  • rjw_genes_much_cum
  • +
  • rjw_genes_cumflation_immunity
  • +
  • rjw_genes_loose_female_genitalia
  • +
  • rjw_genes_big_male_genitalia
  • +
  • rjw_genes_equine_genitalia
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromOtherMods/PatchSaurid.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchSaurid.xml new file mode 100644 index 0000000..c1fd626 --- /dev/null +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchSaurid.xml @@ -0,0 +1,14 @@ + + + + +
  • Vanilla Races Expanded - Saurid
  • +
    + + Defs/XenotypeDef[defName="VRESaurids_Saurid"]/genes + +
  • rjw_genes_dragon_genitalia
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromOtherMods/PatchVREPhytokin.xml b/Common/Patches/Xenotypes/FromOtherMods/PatchVREPhytokin.xml new file mode 100644 index 0000000..af7d43c --- /dev/null +++ b/Common/Patches/Xenotypes/FromOtherMods/PatchVREPhytokin.xml @@ -0,0 +1,50 @@ + + + + +
  • + +
  • 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/Common/Patches/Xenotypes/FromRJWGenes/PatchLicentiaLabs.xml b/Common/Patches/Xenotypes/FromRJWGenes/PatchLicentiaLabs.xml new file mode 100644 index 0000000..5c85681 --- /dev/null +++ b/Common/Patches/Xenotypes/FromRJWGenes/PatchLicentiaLabs.xml @@ -0,0 +1,14 @@ + + + + +
  • LustLicentia.RJWLabs
  • +
    + + Defs/XenotypeDef[defName="rjw_genes_succubus"]/genes + +
  • rjw_genes_elasticity
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromRJWGenes/Patch_Dominant_Gene.xml b/Common/Patches/Xenotypes/FromRJWGenes/Patch_Dominant_Gene.xml new file mode 100644 index 0000000..15b6f3f --- /dev/null +++ b/Common/Patches/Xenotypes/FromRJWGenes/Patch_Dominant_Gene.xml @@ -0,0 +1,41 @@ + + + + +
  • + +
  • Dominant Gene
  • + + + Defs/XenotypeDef[defName="rjw_genes_succubus"]/genes + +
  • DominantGene
  • +
    +
    + +
  • + +
  • Dominant Gene
  • + + + Defs/XenotypeDef[defName="rjw_genes_incubus"]/genes + +
  • DominantGene
  • +
    +
    + + +
  • + +
  • Dominant Gene
  • + + + Defs/XenotypeDef[defName="rjw_genes_cumazone"]/genes + +
  • DominantGene
  • +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromRJWGenes/Patch_Sexperience_SexSkill.xml b/Common/Patches/Xenotypes/FromRJWGenes/Patch_Sexperience_SexSkill.xml new file mode 100644 index 0000000..419eeb2 --- /dev/null +++ b/Common/Patches/Xenotypes/FromRJWGenes/Patch_Sexperience_SexSkill.xml @@ -0,0 +1,30 @@ + + + + +
  • + +
  • RJW Sexperience
  • + + + Defs/XenotypeDef[defName="rjw_genes_succubus"]/genes + +
  • AptitudeRemarkable_Sex
  • +
    +
    + +
  • + +
  • RJW Sexperience
  • + + + Defs/XenotypeDef[defName="rjw_genes_incubus"]/genes + +
  • AptitudeRemarkable_Sex
  • +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchAlphaGenes.xml b/Common/Patches/Xenotypes/PatchAlphaGenes.xml deleted file mode 100644 index fd5aa82..0000000 --- a/Common/Patches/Xenotypes/PatchAlphaGenes.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - -
  • Alpha Genes
  • -
    - - -
  • - Defs/XenotypeDef[defName="AG_Fleetkind"]/genes - -
  • rjw_genes_slime_genitalia
  • -
  • rjw_genes_elasticity
  • -
    - - -
  • - Defs/XenotypeDef[defName="AG_Helixien"]/genes - -
  • rjw_genes_slime_genitalia
  • -
  • rjw_genes_elasticity
  • - - - -
  • - Defs/XenotypeDef[defName="AG_Taukai"]/genes - -
  • rjw_genes_sexual_mytosis
  • - - - -
  • - Defs/XenotypeDef[defName="AG_MindDevourer"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_sex_age_drain
  • - - - -
  • - Defs/XenotypeDef[defName="AG_Lapis"]/genes - -
  • rjw_genes_big_breasts
  • -
  • rjw_genes_no_cum
  • -
  • rjw_genes_big_male_genitalia
  • - - - -
  • - Defs/XenotypeDef[defName="AG_Efreet"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_small_breasts
  • -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_tight_anus
  • - - - -
  • - Defs/XenotypeDef[defName="AG_Drakonori"]/genes - -
  • rjw_genes_dragon_genitalia
  • -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_aphrodisiac_pheromones
  • -
  • rjw_genes_big_breasts
  • - - - -
  • - Defs/XenotypeDef[defName="AG_Animusen"]/genes - -
  • rjw_genes_canine_genitalia
  • - - - -
  • - -
  • Vanilla Races Expanded - Sanguophage
  • - - - Defs/XenotypeDef[defName="AG_Malachai"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
    -
    - - - - -
    - \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSHeavHell.xml b/Common/Patches/Xenotypes/PatchBSHeavHell.xml deleted file mode 100644 index 8550b79..0000000 --- a/Common/Patches/Xenotypes/PatchBSHeavHell.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - -
  • Big and Small - Heaven and Hell
  • -
    - - -
  • - Defs/XenotypeDef[defName="BS_Authority"]/genes - -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_big_breasts
  • -
  • rjw_genes_no_sex_need
  • -
  • rjw_genes_generous_donor
  • -
  • AptitudePoor_Sex
  • - - -
  • - Defs/XenotypeDef[defName="BS_Malakim"]/genes - -
  • rjw_genes_small_breasts
  • -
  • rjw_genes_generous_donor
  • -
  • AptitudeTerrible_Sex
  • - - -
  • - Defs/XenotypeDef[defName="BS_Satan"]/genes - -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_big_breasts
  • -
  • rjw_genes_human_genitalia
  • -
  • rjw_genes_equine_genitalia
  • -
  • rjw_genes_reptilian_genitalia
  • -
  • rjw_genes_crocodilian_genitalia
  • -
  • AptitudeStrong_Sex
  • - - -
  • - Defs/XenotypeDef[defName="BS_Grigori"]/genes - -
  • rjw_genes_generous_donor
  • -
  • AptitudeStrong_Sex
  • - - -
  • - Defs/XenotypeDef[defName="BS_Nephilim"]/genes - -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_big_breasts
  • - - -
  • - Defs/XenotypeDef[defName="BS_Lilim"]/genes - -
  • rjw_genes_hypersexual
  • -
  • AptitudeStrong_Sex
  • - - -
  • - Defs/XenotypeDef[defName="BS_Glutton"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_loose_female_genitalia
  • -
  • rjw_genes_loose_anus
  • -
  • rjw_genes_extra_vagina
  • -
  • rjw_genes_extra_anus
  • -
  • rjw_genes_cumflation_immunity
  • -
  • AptitudeStrong_Sex
  • - - -
  • - Defs/XenotypeDef[defName="BS_LilGlutton"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_small_male_genitalia
  • -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_tight_anus
  • -
  • rjw_genes_extra_vagina
  • -
  • rjw_genes_extra_anus
  • -
  • rjw_genes_likes_cumflation
  • -
  • rjw_genes_elastic
  • -
  • AptitudeStrong_Sex
  • - - - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSMore.xml b/Common/Patches/Xenotypes/PatchBSMore.xml deleted file mode 100644 index 533b2db..0000000 --- a/Common/Patches/Xenotypes/PatchBSMore.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - -
  • Big and Small - More Xenotypes
  • -
    - - -
  • - Defs/XenotypeDef[defName="BS_Weaver" or defName="BS_Devilspider"]/genes - -
  • rjw_genes_ovipositor_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="BS_Abomination"]/genes - -
  • rjw_genes_Tentacle_genitalia
  • -
  • rjw_genes_reptilian_genitalia
  • -
  • rjw_genes_human_genitalia
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSRaces.xml b/Common/Patches/Xenotypes/PatchBSRaces.xml deleted file mode 100644 index 31f8002..0000000 --- a/Common/Patches/Xenotypes/PatchBSRaces.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - -
  • Big and Small - Races
  • -
    - - -
  • - Defs/XenotypeDef[defName="BS_Ogre"]/genes - -
  • rjw_genes_Orc_genitalia
  • -
  • rjw_genes_much_cum
  • - - -
  • - Defs/XenotypeDef[defName="BS_GreatOgre"]/genes - -
  • rjw_genes_Orc_genitalia
  • -
  • rjw_genes_very_much_cum
  • -
  • 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_Orc_genitalia
  • -
  • 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
  • -
  • rjw_genes_Tentacle_genitalia
  • -
    -
    - -
  • - Defs/XenotypeDef[defName="BS_Gnome"]/genes - -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_tight_anus
  • -
  • rjw_genes_very_much_cum
  • -
  • rjw_genes_likes_cumflation
  • - - -
  • - Defs/XenotypeDef[defName="BS_Dwarf" or defName="BS_Svartalf"]/genes - -
  • rjw_genes_big_male_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="BS_Redcap"]/genes - -
  • LitteredBirths
  • -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_tight_anus
  • -
  • rjw_genes_much_cum
  • -
  • 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
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSShared.xml b/Common/Patches/Xenotypes/PatchBSShared.xml deleted file mode 100644 index 227e663..0000000 --- a/Common/Patches/Xenotypes/PatchBSShared.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - -
  • Big and Small - Genes & More
  • -
    - - -
  • - Defs/XenotypeDef[@Name="BS_Succubus_A"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_aphrodisiac_pheromones
  • -
  • rjw_genes_hypersexual
  • -
  • rjw_genes_bisexual
  • -
  • AptitudeRemarkable_Sex
  • -
  • rjw_genes_elasticity
  • - - -
  • - Defs/XenotypeDef[@Name="BS_Hellguard_A"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_equine_genitalia
  • -
  • AptitudePoor_Sex
  • - - -
  • - Defs/XenotypeDef[@Name="BS_GateKeeper_A"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_equine_genitalia
  • -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_much_cum
  • -
  • AptitudeTerrible_Sex
  • - - -
  • - Defs/XenotypeDef[@Name="BS_Imp_A"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_much_cum
  • -
  • rjw_genes_small_male_genitalia
  • -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_small_breasts
  • -
  • rjw_genes_tight_anus
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSSlimes.xml b/Common/Patches/Xenotypes/PatchBSSlimes.xml deleted file mode 100644 index fea02c8..0000000 --- a/Common/Patches/Xenotypes/PatchBSSlimes.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - -
  • Big and Small - Slimes
  • -
    - - -
  • - Defs/XenotypeDef[defName="BS_GreenSlime" - or defName="BS_PinkSlime" - or defName="BS_FrostSlime" - or defName="BS_LavaSlime" - or defName="BS_EmperorSlime" - or defName="BS_ElixirSlime" - or defName="BS_ToxicSludge" - or defName="BS_BananaSplitSlime" - ]/genes - -
  • rjw_genes_slime_genitalia
  • -
  • rjw_genes_much_cum
  • -
  • rjw_genes_elasticity
  • - - -
  • - Defs/XenotypeDef[defName="BS_BananaSplitSlime"]/genes - -
  • rjw_genes_hypersexual
  • -
  • rjw_genes_bisexual
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSSneks.xml b/Common/Patches/Xenotypes/PatchBSSneks.xml deleted file mode 100644 index 8624f82..0000000 --- a/Common/Patches/Xenotypes/PatchBSSneks.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - -
  • Big and Small - Lamias and other Snake-People [HOLDHORSES]
  • -
    - - -
  • - Defs/XenotypeDef[defName = "LoS_Lamia" - or defName = "LoS_TrueLamia" - or defName = "LoS_Siren" - or defName = "LoS_Gorgon" - or defName = "Naga" - or defName = "Los_Adderman" - or defName = "Los_Anacondaman" - or defName = "Los_Snakeman"]/genes - -
  • rjw_genes_reptilian_genitalia
  • - - -
  • - Defs/XenotypeDef[defName = "Nagaraj" or defName = "Los_Silver"]/genes - -
  • rjw_genes_reptilian_genitalia
  • -
  • rjw_genes_unbreakable
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSUndead.xml b/Common/Patches/Xenotypes/PatchBSUndead.xml deleted file mode 100644 index 0c2e592..0000000 --- a/Common/Patches/Xenotypes/PatchBSUndead.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - -
  • Big and Small - Vampires and the Undead
  • -
    - - -
  • - Defs/XenotypeDef[defName="VU_Returned" or defName="VU_Ghoul" or defName="VU_Frankenstein"]/genes - -
  • rjw_genes_Necro_genitalia
  • -
  • rjw_genes_no_sex_need
  • - - -
  • - Defs/XenotypeDef[defName="VU_Revenant"]/genes - -
  • rjw_genes_Necro_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="VU_Lycantrope"]/genes - -
  • rjw_genes_canine_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="VU_Nosferatu" or defName="VU_Dracul_Feral"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_no_sex_need
  • - - -
  • - Defs/XenotypeDef[defName="VU_Dracul_Spawn" - or defName="VU_Dracul" - or defName="VU_Dracul_Mature" - or defName="VU_Dracul_Progenitor" - ]/genes - -
  • rjw_genes_demonic_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="VU_WhiteRose"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_aphrodisiac_pheromones
  • -
  • rjw_genes_bisexual
  • -
  • AptitudeRemarkable_Sex
  • -
  • rjw_genes_elasticity
  • - - - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBSYokai.xml b/Common/Patches/Xenotypes/PatchBSYokai.xml deleted file mode 100644 index eb1c2ac..0000000 --- a/Common/Patches/Xenotypes/PatchBSYokai.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - -
  • Big and Small - Yokai
  • -
    - - -
  • - Defs/XenotypeDef[defName = "BS_Kitsune"]/genes - -
  • rjw_genes_canine_genitalia
  • -
  • LitteredBirths
  • - - - -
  • - Defs/XenotypeDef[defName = "BS_Nekomata"]/genes - -
  • rjw_genes_feline_genitalia
  • -
  • rjw_genes_extra_vagina
  • -
  • rjw_genes_extra_penis
  • -
  • rjw_genes_small_breasts
  • -
  • LitteredBirths
  • - - - -
  • - Defs/XenotypeDef[defName = "BS_RedOni" or defName = "BS_BlueOni" or defName = "BS_LesserOni"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_much_cum
  • - - - -
  • - Defs/XenotypeDef[defName = "BS_GreatBlueOni" or defName = "BS_GreatRedOni"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_loose_female_genitalia
  • -
  • rjw_genes_very_much_cum
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchBiotechNyaron.xml b/Common/Patches/Xenotypes/PatchBiotechNyaron.xml deleted file mode 100644 index 9f32522..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchErinsAuronya.xml b/Common/Patches/Xenotypes/PatchErinsAuronya.xml deleted file mode 100644 index 641b747..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchErinsShisune.xml b/Common/Patches/Xenotypes/PatchErinsShisune.xml deleted file mode 100644 index b4bf303..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchImphileeXeno.xml b/Common/Patches/Xenotypes/PatchImphileeXeno.xml deleted file mode 100644 index 4a8655f..0000000 --- a/Common/Patches/Xenotypes/PatchImphileeXeno.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - -
  • - -
  • Imphilee Xeno
  • - - - Defs/XenotypeDef[defName="LD_Imphilee"]/genes - -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_small_breasts
  • -
  • rjw_genes_elasticity
  • -
  • rjw_genes_demonic_genitalia
  • -
    -
    - -
  • - -
  • Imphilee Xeno
  • - - - Defs/XenotypeDef[defName="LD_Imphilee_Overlord"]/genes - -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_small_breasts
  • -
  • rjw_genes_elasticity
  • -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_rapist
  • -
    -
    - -
    -
    -
    diff --git a/Common/Patches/Xenotypes/PatchKijinRace3.xml b/Common/Patches/Xenotypes/PatchKijinRace3.xml deleted file mode 100644 index 9fbd4c6..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchMammalia.xml b/Common/Patches/Xenotypes/PatchMammalia.xml deleted file mode 100644 index 409bdb5..0000000 --- a/Common/Patches/Xenotypes/PatchMammalia.xml +++ /dev/null @@ -1,145 +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_Needle_genitalia
  • -
  • 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_Needle_genitalia
  • -
  • 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_Needle_genitalia
  • -
  • LitteredBirths
  • -
  • 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_Needle_genitalia
  • -
  • rjw_genes_zoophile
  • -
    -
    -
    - - -
  • Biotech Expansion - Mammalia
  • -
    - - Defs/XenotypeDef[defName="Devilpuff"]/genes - -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_Needle_genitalia
  • -
  • rjw_genes_zoophile
  • -
    -
    -
    - - -
  • Biotech Expansion - Mammalia
  • -
    - - Defs/XenotypeDef[defName="Blastheart"]/genes - -
  • rjw_genes_equine_genitalia
  • -
  • rjw_genes_zoophile
  • -
    -
    -
    -
    diff --git a/Common/Patches/Xenotypes/PatchMammaliaMythic.xml b/Common/Patches/Xenotypes/PatchMammaliaMythic.xml deleted file mode 100644 index f106536..0000000 --- a/Common/Patches/Xenotypes/PatchMammaliaMythic.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - -
  • Biotech Expansion - Mythic
  • -
    - - Defs/XenotypeDef[defName="Glintscale"]/genes - -
  • rjw_genes_much_cum
  • -
  • rjw_genes_dragon_genitalia
  • -
  • rjw_genes_big_male_genitalia
  • -
    -
    -
    - - -
  • Biotech Expansion - Mythic
  • -
    - - Defs/XenotypeDef[defName="Ashfeather"]/genes - -
  • rjw_genes_much_cum
  • -
  • rjw_genes_Needle_genitalia
  • -
    -
    -
    - - -
  • Biotech Expansion - Mythic
  • -
    - - Defs/XenotypeDef[defName="Tailbinder"]/genes - -
  • rjw_genes_much_cum
  • -
  • rjw_genes_canine_genitalia
  • -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchNarai.xml b/Common/Patches/Xenotypes/PatchNarai.xml deleted file mode 100644 index efcd3da..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchNyaron.xml b/Common/Patches/Xenotypes/PatchNyaron.xml deleted file mode 100644 index 4ad40a5..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchPapou.xml b/Common/Patches/Xenotypes/PatchPapou.xml deleted file mode 100644 index 39a6e81..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchPigskins.xml b/Common/Patches/Xenotypes/PatchPigskins.xml deleted file mode 100644 index c49c4ac..0000000 --- a/Common/Patches/Xenotypes/PatchPigskins.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -
  • Vanilla Races Expanded - Pigskin
  • -
    - - Defs/XenotypeDef[defName="VRE_Boarskin"]/genes - -
  • rjw_genes_Pig_genitalia
  • -
  • rjw_genes_human_genitalia
  • -
  • rjw_genes_much_cum
  • -
  • rjw_genes_zoophile
  • -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchRoosFaun.xml b/Common/Patches/Xenotypes/PatchRoosFaun.xml deleted file mode 100644 index bac922a..0000000 --- a/Common/Patches/Xenotypes/PatchRoosFaun.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -
  • Roo's Faun Xenotype
  • -
    - - Defs/XenotypeDef[defName="RBSF_Faun"]/genes - -
  • rjw_genes_tight_female_genitalia
  • -
  • rjw_genes_small_male_genitalia
  • -
  • rjw_genes_small_breasts
  • -
  • rjw_genes_tight_anus
  • -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchRoosMinotaur.xml b/Common/Patches/Xenotypes/PatchRoosMinotaur.xml deleted file mode 100644 index 673bfd3..0000000 --- a/Common/Patches/Xenotypes/PatchRoosMinotaur.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - -
  • Roo's Minotaur Xenotype
  • -
    - - Defs/XenotypeDef[defName="RBM_Minotaur"]/genes - -
  • rjw_genes_much_cum
  • -
  • rjw_genes_cumflation_immunity
  • -
  • rjw_genes_loose_female_genitalia
  • -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_equine_genitalia
  • -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchSaurid.xml b/Common/Patches/Xenotypes/PatchSaurid.xml deleted file mode 100644 index 6a4b99b..0000000 --- a/Common/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/Common/Patches/Xenotypes/PatchVRELycanthrope.xml b/Common/Patches/Xenotypes/PatchVRELycanthrope.xml deleted file mode 100644 index 6896e98..0000000 --- a/Common/Patches/Xenotypes/PatchVRELycanthrope.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - -
  • Vanilla Races Expanded - Lycanthrope
  • -
    - - Defs/XenotypeDef[defName="VRE_Wolfman"]/genes - -
  • rjw_genes_human_genitalia
  • -
  • rjw_genes_zoophile
  • -
    -
    -
    - - -
  • Vanilla Races Expanded - Lycanthrope
  • -
    - - Defs/XenotypeDef[defName="VRE_Lycan"]/genes - -
  • rjw_genes_canine_genitalia
  • -
  • rjw_genes_zoophile
  • -
  • rjw_genes_rapist
  • -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchVREPhytokin.xml b/Common/Patches/Xenotypes/PatchVREPhytokin.xml deleted file mode 100644 index 055f695..0000000 --- a/Common/Patches/Xenotypes/PatchVREPhytokin.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - -
  • Vanilla Races Expanded - Phytokin
  • -
    - - Defs/XenotypeDef[defName="VRE_Poluxkin" or defName="VRE_Gauranlenkin" or 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/Common/Patches/Xenotypes/PatchVRESanguophage.xml b/Common/Patches/Xenotypes/PatchVRESanguophage.xml deleted file mode 100644 index 706852c..0000000 --- a/Common/Patches/Xenotypes/PatchVRESanguophage.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - -
  • Vanilla Races Expanded - Sanguophage
  • -
    - - Defs/XenotypeDef[defName="VRE_Bruxa" or defName="VRE_Ekkimian" or defName="VRE_Strigoi"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
    -
    - -
    -
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/PatchXenotech.xml b/Common/Patches/Xenotypes/PatchXenotech.xml deleted file mode 100644 index 1959c08..0000000 --- a/Common/Patches/Xenotypes/PatchXenotech.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - -
  • [LTS]Xenotech
  • -
    - - -
  • - Defs/XenotypeDef[defName="LTS_Nyankind"]/genes - -
  • rjw_genes_feline_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="LTS_Growler"]/genes - -
  • rjw_genes_canine_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="LTS_Elfin"]/genes - -
  • rjw_genes_small_male_genitalia
  • -
  • rjw_genes_tight_female_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="LTS_Ork"]/genes - -
  • rjw_genes_Orc_genitalia
  • -
  • rjw_genes_big_male_genitalia
  • -
  • rjw_genes_loose_female_genitalia
  • - - -
  • - Defs/XenotypeDef[defName="LTS_Lilime"]/genes - -
  • rjw_genes_demonic_genitalia
  • -
  • rjw_genes_elasticity
  • -
  • AptitudeRemarkable_Sex
  • - - -
  • - Defs/XenotypeDef[defName="LTS_Anthrae"]/genes - -
  • rjw_genes_ovipositor_genitalia
  • -
  • rjw_genes_bisexual
  • -
  • rjw_genes_insectincubator
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Common/Textures/Genes/Icons/Animal_Mating_Call.png b/Common/Textures/Genes/Icons/Animal_Mating_Call.png deleted file mode 100644 index c8ff964..0000000 Binary files a/Common/Textures/Genes/Icons/Animal_Mating_Call.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Big_Breasts.dds b/Common/Textures/Genes/Icons/Big_Breasts.dds deleted file mode 100644 index 8f1c0f1..0000000 Binary files a/Common/Textures/Genes/Icons/Big_Breasts.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Big_Breasts.png b/Common/Textures/Genes/Icons/Big_Breasts.png index a9d1786..5061ee5 100644 Binary files a/Common/Textures/Genes/Icons/Big_Breasts.png and b/Common/Textures/Genes/Icons/Big_Breasts.png differ diff --git a/Common/Textures/Genes/Icons/Big_Male_Genitalia.dds b/Common/Textures/Genes/Icons/Big_Male_Genitalia.dds deleted file mode 100644 index 30b1cbc..0000000 Binary files a/Common/Textures/Genes/Icons/Big_Male_Genitalia.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Big_Male_Genitalia.png b/Common/Textures/Genes/Icons/Big_Male_Genitalia.png index 68396ba..fe6d86e 100644 Binary files a/Common/Textures/Genes/Icons/Big_Male_Genitalia.png and b/Common/Textures/Genes/Icons/Big_Male_Genitalia.png differ diff --git a/Common/Textures/Genes/Icons/Bonus_Cum.png b/Common/Textures/Genes/Icons/Bonus_Cum.png new file mode 100644 index 0000000..e6c51a4 Binary files /dev/null and b/Common/Textures/Genes/Icons/Bonus_Cum.png differ diff --git a/Common/Textures/Genes/Icons/Cocoon.dds b/Common/Textures/Genes/Icons/Cocoon.dds deleted file mode 100644 index 23d11dc..0000000 Binary files a/Common/Textures/Genes/Icons/Cocoon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Cocoon.png b/Common/Textures/Genes/Icons/Cocoon.png deleted file mode 100644 index 4e62420..0000000 Binary files a/Common/Textures/Genes/Icons/Cocoon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Cum-Base.dds b/Common/Textures/Genes/Icons/Cum-Base.dds deleted file mode 100644 index bf47dab..0000000 Binary files a/Common/Textures/Genes/Icons/Cum-Base.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Cum-Base.png b/Common/Textures/Genes/Icons/Cum-Base.png deleted file mode 100644 index 05ec22a..0000000 Binary files a/Common/Textures/Genes/Icons/Cum-Base.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Cumflation.dds b/Common/Textures/Genes/Icons/Cumflation.dds deleted file mode 100644 index 01c2ff3..0000000 Binary files a/Common/Textures/Genes/Icons/Cumflation.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Cumflation_Immunity.dds b/Common/Textures/Genes/Icons/Cumflation_Immunity.dds deleted file mode 100644 index c587855..0000000 Binary files a/Common/Textures/Genes/Icons/Cumflation_Immunity.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Cumflation_Immunity.png b/Common/Textures/Genes/Icons/Cumflation_Immunity.png index 40b40ad..643e0bf 100644 Binary files a/Common/Textures/Genes/Icons/Cumflation_Immunity.png and b/Common/Textures/Genes/Icons/Cumflation_Immunity.png differ diff --git a/Common/Textures/Genes/Icons/Drone.dds b/Common/Textures/Genes/Icons/Drone.dds deleted file mode 100644 index ee130a6..0000000 Binary files a/Common/Textures/Genes/Icons/Drone.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Drone.png b/Common/Textures/Genes/Icons/Drone.png deleted file mode 100644 index a631565..0000000 Binary files a/Common/Textures/Genes/Icons/Drone.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Egg.dds b/Common/Textures/Genes/Icons/Egg.dds deleted file mode 100644 index 0b2b723..0000000 Binary files a/Common/Textures/Genes/Icons/Egg.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Egg.png b/Common/Textures/Genes/Icons/Egg.png deleted file mode 100644 index 81b16bd..0000000 Binary files a/Common/Textures/Genes/Icons/Egg.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Elasticity.dds b/Common/Textures/Genes/Icons/Elasticity.dds deleted file mode 100644 index e0f35a1..0000000 Binary files a/Common/Textures/Genes/Icons/Elasticity.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Empty.dds b/Common/Textures/Genes/Icons/Empty.dds deleted file mode 100644 index 7f12134..0000000 Binary files a/Common/Textures/Genes/Icons/Empty.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Extra_Anus.dds b/Common/Textures/Genes/Icons/Extra_Anus.dds deleted file mode 100644 index c5cb1ac..0000000 Binary files a/Common/Textures/Genes/Icons/Extra_Anus.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Extra_Anus.png b/Common/Textures/Genes/Icons/Extra_Anus.png index 6097374..1075bbd 100644 Binary files a/Common/Textures/Genes/Icons/Extra_Anus.png and b/Common/Textures/Genes/Icons/Extra_Anus.png differ diff --git a/Common/Textures/Genes/Icons/Extra_Breasts.dds b/Common/Textures/Genes/Icons/Extra_Breasts.dds deleted file mode 100644 index dc51d0f..0000000 Binary files a/Common/Textures/Genes/Icons/Extra_Breasts.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Extra_Breasts.png b/Common/Textures/Genes/Icons/Extra_Breasts.png index 3247920..f2c470e 100644 Binary files a/Common/Textures/Genes/Icons/Extra_Breasts.png and b/Common/Textures/Genes/Icons/Extra_Breasts.png differ diff --git a/Common/Textures/Genes/Icons/Extra_Vagina.dds b/Common/Textures/Genes/Icons/Extra_Vagina.dds deleted file mode 100644 index 846c8f5..0000000 Binary files a/Common/Textures/Genes/Icons/Extra_Vagina.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Extra_Vagina.png b/Common/Textures/Genes/Icons/Extra_Vagina.png deleted file mode 100644 index 12bb91a..0000000 Binary files a/Common/Textures/Genes/Icons/Extra_Vagina.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Female_Only.dds b/Common/Textures/Genes/Icons/Female_Only.dds deleted file mode 100644 index c1d1fd1..0000000 Binary files a/Common/Textures/Genes/Icons/Female_Only.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Fertile_anus.dds b/Common/Textures/Genes/Icons/Fertile_anus.dds deleted file mode 100644 index bd3dccc..0000000 Binary files a/Common/Textures/Genes/Icons/Fertile_anus.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Fertile_anus.png b/Common/Textures/Genes/Icons/Fertile_anus.png deleted file mode 100644 index 6a62da8..0000000 Binary files a/Common/Textures/Genes/Icons/Fertile_anus.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/FertilinAlt.dds b/Common/Textures/Genes/Icons/FertilinAlt.dds deleted file mode 100644 index acb64e0..0000000 Binary files a/Common/Textures/Genes/Icons/FertilinAlt.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/FertilinDrainAlt.dds b/Common/Textures/Genes/Icons/FertilinDrainAlt.dds deleted file mode 100644 index b078bb5..0000000 Binary files a/Common/Textures/Genes/Icons/FertilinDrainAlt.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Fervent_Ovipositor.dds b/Common/Textures/Genes/Icons/Fervent_Ovipositor.dds deleted file mode 100644 index 784801e..0000000 Binary files a/Common/Textures/Genes/Icons/Fervent_Ovipositor.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Fervent_Ovipositor.png b/Common/Textures/Genes/Icons/Fervent_Ovipositor.png deleted file mode 100644 index b9cc33e..0000000 Binary files a/Common/Textures/Genes/Icons/Fervent_Ovipositor.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/FireLeaves.png b/Common/Textures/Genes/Icons/FireLeaves.png deleted file mode 100644 index 4f1b247..0000000 Binary files a/Common/Textures/Genes/Icons/FireLeaves.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/FleshPurity.png b/Common/Textures/Genes/Icons/FleshPurity.png deleted file mode 100644 index 0843812..0000000 Binary files a/Common/Textures/Genes/Icons/FleshPurity.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Futa.dds b/Common/Textures/Genes/Icons/Futa.dds deleted file mode 100644 index dfd7fcb..0000000 Binary files a/Common/Textures/Genes/Icons/Futa.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Gene_LitteredBirths.dds b/Common/Textures/Genes/Icons/Gene_LitteredBirths.dds deleted file mode 100644 index ebf7069..0000000 Binary files a/Common/Textures/Genes/Icons/Gene_LitteredBirths.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Gene_LitteredBirths.png b/Common/Textures/Genes/Icons/Gene_LitteredBirths.png deleted file mode 100644 index 5b5a09e..0000000 Binary files a/Common/Textures/Genes/Icons/Gene_LitteredBirths.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Generous_Donor.dds b/Common/Textures/Genes/Icons/Generous_Donor.dds deleted file mode 100644 index b6a8cde..0000000 Binary files a/Common/Textures/Genes/Icons/Generous_Donor.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Canine.dds b/Common/Textures/Genes/Icons/Genitalia_Canine.dds deleted file mode 100644 index deef5dd..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_Canine.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Canine.png b/Common/Textures/Genes/Icons/Genitalia_Canine.png index 24283b6..7631681 100644 Binary files a/Common/Textures/Genes/Icons/Genitalia_Canine.png and b/Common/Textures/Genes/Icons/Genitalia_Canine.png differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Demon.dds b/Common/Textures/Genes/Icons/Genitalia_Demon.dds deleted file mode 100644 index 1745c32..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_Demon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Demon.png b/Common/Textures/Genes/Icons/Genitalia_Demon.png index e3400e8..7831b4d 100644 Binary files a/Common/Textures/Genes/Icons/Genitalia_Demon.png and b/Common/Textures/Genes/Icons/Genitalia_Demon.png differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Draconic.dds b/Common/Textures/Genes/Icons/Genitalia_Draconic.dds deleted file mode 100644 index abefb5e..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_Draconic.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Draconic.png b/Common/Textures/Genes/Icons/Genitalia_Draconic.png index 7717d23..cb763d6 100644 Binary files a/Common/Textures/Genes/Icons/Genitalia_Draconic.png and b/Common/Textures/Genes/Icons/Genitalia_Draconic.png differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Equine.dds b/Common/Textures/Genes/Icons/Genitalia_Equine.dds deleted file mode 100644 index a41f863..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_Equine.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Equine.png b/Common/Textures/Genes/Icons/Genitalia_Equine.png index 9577293..efb9bab 100644 Binary files a/Common/Textures/Genes/Icons/Genitalia_Equine.png and b/Common/Textures/Genes/Icons/Genitalia_Equine.png differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Feline.dds b/Common/Textures/Genes/Icons/Genitalia_Feline.dds deleted file mode 100644 index b2bf6e8..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_Feline.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Feline.png b/Common/Textures/Genes/Icons/Genitalia_Feline.png index 8f5b4d7..c03cc27 100644 Binary files a/Common/Textures/Genes/Icons/Genitalia_Feline.png and b/Common/Textures/Genes/Icons/Genitalia_Feline.png differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Insect.png b/Common/Textures/Genes/Icons/Genitalia_Insect.png new file mode 100644 index 0000000..e71cabe Binary files /dev/null and b/Common/Textures/Genes/Icons/Genitalia_Insect.png differ diff --git a/Common/Textures/Genes/Icons/Genitalia_Slime.png b/Common/Textures/Genes/Icons/Genitalia_Slime.png new file mode 100644 index 0000000..ee7ae69 Binary files /dev/null and b/Common/Textures/Genes/Icons/Genitalia_Slime.png differ diff --git a/Common/Textures/Genes/Icons/Genitalia_alien_icon.dds b/Common/Textures/Genes/Icons/Genitalia_alien_icon.dds deleted file mode 100644 index c04c5a0..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_alien_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_alien_icon.png b/Common/Textures/Genes/Icons/Genitalia_alien_icon.png deleted file mode 100644 index 633ed83..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_alien_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_croc_icon.dds b/Common/Textures/Genes/Icons/Genitalia_croc_icon.dds deleted file mode 100644 index feb17c9..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_croc_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_croc_icon.png b/Common/Textures/Genes/Icons/Genitalia_croc_icon.png deleted file mode 100644 index 569c1e7..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_croc_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_ghost_icon.dds b/Common/Textures/Genes/Icons/Genitalia_ghost_icon.dds deleted file mode 100644 index 2f95e85..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_ghost_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_ghost_icon.png b/Common/Textures/Genes/Icons/Genitalia_ghost_icon.png deleted file mode 100644 index 7c7ca9d..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_ghost_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_hemi_icon.dds b/Common/Textures/Genes/Icons/Genitalia_hemi_icon.dds deleted file mode 100644 index 3ac1a44..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_hemi_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_hemi_icon.png b/Common/Textures/Genes/Icons/Genitalia_hemi_icon.png deleted file mode 100644 index e59cfec..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_hemi_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_human.dds b/Common/Textures/Genes/Icons/Genitalia_human.dds deleted file mode 100644 index f0a502c..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_human.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_human.png b/Common/Textures/Genes/Icons/Genitalia_human.png deleted file mode 100644 index c16c4ea..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_human.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_marine_icon.dds b/Common/Textures/Genes/Icons/Genitalia_marine_icon.dds deleted file mode 100644 index a0ecbba..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_marine_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_marine_icon.png b/Common/Textures/Genes/Icons/Genitalia_marine_icon.png deleted file mode 100644 index 28dc8a3..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_marine_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_necro_icon.dds b/Common/Textures/Genes/Icons/Genitalia_necro_icon.dds deleted file mode 100644 index f9709d8..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_necro_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_necro_icon.png b/Common/Textures/Genes/Icons/Genitalia_necro_icon.png deleted file mode 100644 index 378d181..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_necro_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_orc_icon.dds b/Common/Textures/Genes/Icons/Genitalia_orc_icon.dds deleted file mode 100644 index 4c6f3ab..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_orc_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_orc_icon.png b/Common/Textures/Genes/Icons/Genitalia_orc_icon.png deleted file mode 100644 index c615f70..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_orc_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_racoon_icon.dds b/Common/Textures/Genes/Icons/Genitalia_racoon_icon.dds deleted file mode 100644 index 2ea8f28..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_racoon_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_racoon_icon.png b/Common/Textures/Genes/Icons/Genitalia_racoon_icon.png deleted file mode 100644 index 13c0a5a..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_racoon_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_screw_icon.dds b/Common/Textures/Genes/Icons/Genitalia_screw_icon.dds deleted file mode 100644 index d9c0e92..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_screw_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_screw_icon.png b/Common/Textures/Genes/Icons/Genitalia_screw_icon.png deleted file mode 100644 index c50c114..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_screw_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_tentacle_icon.dds b/Common/Textures/Genes/Icons/Genitalia_tentacle_icon.dds deleted file mode 100644 index 1840c61..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_tentacle_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_tentacle_icon.png b/Common/Textures/Genes/Icons/Genitalia_tentacle_icon.png deleted file mode 100644 index 41e8331..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_tentacle_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_thin_icon.dds b/Common/Textures/Genes/Icons/Genitalia_thin_icon.dds deleted file mode 100644 index a45f899..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_thin_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Genitalia_thin_icon.png b/Common/Textures/Genes/Icons/Genitalia_thin_icon.png deleted file mode 100644 index 2517a47..0000000 Binary files a/Common/Textures/Genes/Icons/Genitalia_thin_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Healpussy.dds b/Common/Textures/Genes/Icons/Healpussy.dds deleted file mode 100644 index aa1ec00..0000000 Binary files a/Common/Textures/Genes/Icons/Healpussy.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Hypersexual.dds b/Common/Textures/Genes/Icons/Hypersexual.dds deleted file mode 100644 index b36397a..0000000 Binary files a/Common/Textures/Genes/Icons/Hypersexual.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Insect_Breeder.dds b/Common/Textures/Genes/Icons/Insect_Breeder.dds deleted file mode 100644 index 85c94eb..0000000 Binary files a/Common/Textures/Genes/Icons/Insect_Breeder.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Insect_Breeder.png b/Common/Textures/Genes/Icons/Insect_Breeder.png deleted file mode 100644 index 5315179..0000000 Binary files a/Common/Textures/Genes/Icons/Insect_Breeder.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Loose_Anus.dds b/Common/Textures/Genes/Icons/Loose_Anus.dds deleted file mode 100644 index d078f04..0000000 Binary files a/Common/Textures/Genes/Icons/Loose_Anus.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Loose_Anus.png b/Common/Textures/Genes/Icons/Loose_Anus.png index ada02ee..c96dec3 100644 Binary files a/Common/Textures/Genes/Icons/Loose_Anus.png and b/Common/Textures/Genes/Icons/Loose_Anus.png differ diff --git a/Common/Textures/Genes/Icons/Loose_Female_Genitalia.png b/Common/Textures/Genes/Icons/Loose_Female_Genitalia.png new file mode 100644 index 0000000..63b6a9c Binary files /dev/null and b/Common/Textures/Genes/Icons/Loose_Female_Genitalia.png differ diff --git a/Common/Textures/Genes/Icons/Loose_Vagina.dds b/Common/Textures/Genes/Icons/Loose_Vagina.dds deleted file mode 100644 index 714af26..0000000 Binary files a/Common/Textures/Genes/Icons/Loose_Vagina.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Loose_Vagina.png b/Common/Textures/Genes/Icons/Loose_Vagina.png deleted file mode 100644 index 57a4706..0000000 Binary files a/Common/Textures/Genes/Icons/Loose_Vagina.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Loyalty.dds b/Common/Textures/Genes/Icons/Loyalty.dds deleted file mode 100644 index 1ef4268..0000000 Binary files a/Common/Textures/Genes/Icons/Loyalty.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Loyalty.png b/Common/Textures/Genes/Icons/Loyalty.png deleted file mode 100644 index 8ac3c4c..0000000 Binary files a/Common/Textures/Genes/Icons/Loyalty.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Male_Only.dds b/Common/Textures/Genes/Icons/Male_Only.dds deleted file mode 100644 index 8387f22..0000000 Binary files a/Common/Textures/Genes/Icons/Male_Only.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Mating_Call_2.png b/Common/Textures/Genes/Icons/Mating_Call_2.png deleted file mode 100644 index 275e6dc..0000000 Binary files a/Common/Textures/Genes/Icons/Mating_Call_2.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/More_Egg_Space.png b/Common/Textures/Genes/Icons/More_Egg_Space.png new file mode 100644 index 0000000..35fbcb3 Binary files /dev/null and b/Common/Textures/Genes/Icons/More_Egg_Space.png differ diff --git a/Common/Textures/Genes/Icons/Much_Bonus_Cum.png b/Common/Textures/Genes/Icons/Much_Bonus_Cum.png new file mode 100644 index 0000000..d512725 Binary files /dev/null and b/Common/Textures/Genes/Icons/Much_Bonus_Cum.png differ diff --git a/Common/Textures/Genes/Icons/Much_Cum.dds b/Common/Textures/Genes/Icons/Much_Cum.dds deleted file mode 100644 index c7974f4..0000000 Binary files a/Common/Textures/Genes/Icons/Much_Cum.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Much_Cum.png b/Common/Textures/Genes/Icons/Much_Cum.png deleted file mode 100644 index 21a9a17..0000000 Binary files a/Common/Textures/Genes/Icons/Much_Cum.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Necrophile.dds b/Common/Textures/Genes/Icons/Necrophile.dds deleted file mode 100644 index 0239a1e..0000000 Binary files a/Common/Textures/Genes/Icons/Necrophile.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/No_Anus.dds b/Common/Textures/Genes/Icons/No_Anus.dds deleted file mode 100644 index c829f90..0000000 Binary files a/Common/Textures/Genes/Icons/No_Anus.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/No_Anus.png b/Common/Textures/Genes/Icons/No_Anus.png index 7cfb774..f5a9a03 100644 Binary files a/Common/Textures/Genes/Icons/No_Anus.png and b/Common/Textures/Genes/Icons/No_Anus.png differ diff --git a/Common/Textures/Genes/Icons/No_Breasts.dds b/Common/Textures/Genes/Icons/No_Breasts.dds deleted file mode 100644 index c4b6ad7..0000000 Binary files a/Common/Textures/Genes/Icons/No_Breasts.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/No_Breasts.png b/Common/Textures/Genes/Icons/No_Breasts.png index fd17996..5566734 100644 Binary files a/Common/Textures/Genes/Icons/No_Breasts.png and b/Common/Textures/Genes/Icons/No_Breasts.png differ diff --git a/Common/Textures/Genes/Icons/No_Cum.dds b/Common/Textures/Genes/Icons/No_Cum.dds deleted file mode 100644 index f21f6bb..0000000 Binary files a/Common/Textures/Genes/Icons/No_Cum.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/No_Cum.png b/Common/Textures/Genes/Icons/No_Cum.png index a7964f0..2084b5e 100644 Binary files a/Common/Textures/Genes/Icons/No_Cum.png and b/Common/Textures/Genes/Icons/No_Cum.png differ diff --git a/Common/Textures/Genes/Icons/No_Female_Genitalia.png b/Common/Textures/Genes/Icons/No_Female_Genitalia.png new file mode 100644 index 0000000..9405ce7 Binary files /dev/null and b/Common/Textures/Genes/Icons/No_Female_Genitalia.png differ diff --git a/Common/Textures/Genes/Icons/No_Male_Genitalia.dds b/Common/Textures/Genes/Icons/No_Male_Genitalia.dds deleted file mode 100644 index 8beee67..0000000 Binary files a/Common/Textures/Genes/Icons/No_Male_Genitalia.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/No_Male_Genitalia.png b/Common/Textures/Genes/Icons/No_Male_Genitalia.png index bad56cf..ce1fa4e 100644 Binary files a/Common/Textures/Genes/Icons/No_Male_Genitalia.png and b/Common/Textures/Genes/Icons/No_Male_Genitalia.png differ diff --git a/Common/Textures/Genes/Icons/No_Vagina.dds b/Common/Textures/Genes/Icons/No_Vagina.dds deleted file mode 100644 index 4ff0383..0000000 Binary files a/Common/Textures/Genes/Icons/No_Vagina.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/No_Vagina.png b/Common/Textures/Genes/Icons/No_Vagina.png deleted file mode 100644 index a4f47ee..0000000 Binary files a/Common/Textures/Genes/Icons/No_Vagina.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Ovipositor_Genitalia.dds b/Common/Textures/Genes/Icons/Ovipositor_Genitalia.dds deleted file mode 100644 index 7e3a1af..0000000 Binary files a/Common/Textures/Genes/Icons/Ovipositor_Genitalia.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Ovipositor_Genitalia.png b/Common/Textures/Genes/Icons/Ovipositor_Genitalia.png deleted file mode 100644 index 97421e1..0000000 Binary files a/Common/Textures/Genes/Icons/Ovipositor_Genitalia.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Paralysing_Kiss.dds b/Common/Textures/Genes/Icons/Paralysing_Kiss.dds deleted file mode 100644 index 7ec2664..0000000 Binary files a/Common/Textures/Genes/Icons/Paralysing_Kiss.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Paralysing_Kiss.png b/Common/Textures/Genes/Icons/Paralysing_Kiss.png deleted file mode 100644 index 20c4fd5..0000000 Binary files a/Common/Textures/Genes/Icons/Paralysing_Kiss.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Pheromone.dds b/Common/Textures/Genes/Icons/Pheromone.dds deleted file mode 100644 index 06738ed..0000000 Binary files a/Common/Textures/Genes/Icons/Pheromone.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Pheromone.png b/Common/Textures/Genes/Icons/Pheromone.png deleted file mode 100644 index 342f695..0000000 Binary files a/Common/Textures/Genes/Icons/Pheromone.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Pheromone_Spit.png b/Common/Textures/Genes/Icons/Pheromone_Spit.png deleted file mode 100644 index 743d0a3..0000000 Binary files a/Common/Textures/Genes/Icons/Pheromone_Spit.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Pheromones.dds b/Common/Textures/Genes/Icons/Pheromones.dds deleted file mode 100644 index a2f0394..0000000 Binary files a/Common/Textures/Genes/Icons/Pheromones.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Pheromones.png b/Common/Textures/Genes/Icons/Pheromones.png deleted file mode 100644 index 88a6c53..0000000 Binary files a/Common/Textures/Genes/Icons/Pheromones.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Placeholder.dds b/Common/Textures/Genes/Icons/Placeholder.dds deleted file mode 100644 index ce2c267..0000000 Binary files a/Common/Textures/Genes/Icons/Placeholder.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Queen.dds b/Common/Textures/Genes/Icons/Queen.dds deleted file mode 100644 index ee24210..0000000 Binary files a/Common/Textures/Genes/Icons/Queen.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Queen.png b/Common/Textures/Genes/Icons/Queen.png deleted file mode 100644 index b087f03..0000000 Binary files a/Common/Textures/Genes/Icons/Queen.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW-Genes_Endogene_Background (Not in use now).png b/Common/Textures/Genes/Icons/RJW-Genes_Endogene_Background (Not in use now).png new file mode 100644 index 0000000..9973e24 Binary files /dev/null and b/Common/Textures/Genes/Icons/RJW-Genes_Endogene_Background (Not in use now).png differ diff --git a/Common/Textures/Genes/Icons/RJW-Genes_Rodent_Genitalia (Not in use now).dds b/Common/Textures/Genes/Icons/RJW-Genes_Rodent_Genitalia (Not in use now).dds deleted file mode 100644 index d554df2..0000000 Binary files a/Common/Textures/Genes/Icons/RJW-Genes_Rodent_Genitalia (Not in use now).dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW-Genes_Rodent_Genitalia (Not in use now).png b/Common/Textures/Genes/Icons/RJW-Genes_Rodent_Genitalia (Not in use now).png index a15e618..507684a 100644 Binary files a/Common/Textures/Genes/Icons/RJW-Genes_Rodent_Genitalia (Not in use now).png and b/Common/Textures/Genes/Icons/RJW-Genes_Rodent_Genitalia (Not in use now).png differ diff --git a/Common/Textures/Genes/Icons/RJW-Genes_Xenogene_Background (Not in use now).png b/Common/Textures/Genes/Icons/RJW-Genes_Xenogene_Background (Not in use now).png new file mode 100644 index 0000000..f902c39 Binary files /dev/null and b/Common/Textures/Genes/Icons/RJW-Genes_Xenogene_Background (Not in use now).png differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Background.dds b/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Background.dds deleted file mode 100644 index 833af52..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Background.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Background.png b/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Background.png deleted file mode 100644 index 5d8b0e0..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Background.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Disease_Background.png b/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Disease_Background.png deleted file mode 100644 index c614dc9..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Endogene_Disease_Background.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Feline_Genitalia.png b/Common/Textures/Genes/Icons/RJW_Genes_Feline_Genitalia.png deleted file mode 100644 index 7b0dc9f..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Feline_Genitalia.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Mating_Call.png b/Common/Textures/Genes/Icons/RJW_Genes_Mating_Call.png deleted file mode 100644 index 1079d89..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Mating_Call.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_PheromoneSpit.png b/Common/Textures/Genes/Icons/RJW_Genes_PheromoneSpit.png deleted file mode 100644 index fc8f699..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_PheromoneSpit.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_SexualTamer.png b/Common/Textures/Genes/Icons/RJW_Genes_SexualTamer.png deleted file mode 100644 index 6a848c6..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_SexualTamer.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Udder.png b/Common/Textures/Genes/Icons/RJW_Genes_Udder.png deleted file mode 100644 index 9a641e1..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Udder.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Xenogene_Background.dds b/Common/Textures/Genes/Icons/RJW_Genes_Xenogene_Background.dds deleted file mode 100644 index 091b63a..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Xenogene_Background.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Xenogene_Background.png b/Common/Textures/Genes/Icons/RJW_Genes_Xenogene_Background.png deleted file mode 100644 index b3b359e..0000000 Binary files a/Common/Textures/Genes/Icons/RJW_Genes_Xenogene_Background.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Rape.dds b/Common/Textures/Genes/Icons/Rape.dds deleted file mode 100644 index fca75d7..0000000 Binary files a/Common/Textures/Genes/Icons/Rape.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/RoundC.png b/Common/Textures/Genes/Icons/RoundC.png deleted file mode 100644 index e2288f5..0000000 Binary files a/Common/Textures/Genes/Icons/RoundC.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/AnimalMatingcall.psd b/Common/Textures/Genes/Icons/Samples/AnimalMatingcall.psd deleted file mode 100644 index 16c084b..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/AnimalMatingcall.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Cumflation_Immunity.psd b/Common/Textures/Genes/Icons/Samples/Cumflation_Immunity.psd deleted file mode 100644 index 06e07e4..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Cumflation_Immunity.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_Fertile.png b/Common/Textures/Genes/Icons/Samples/Gene_Fertile.png deleted file mode 100644 index 46abbae..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_Fertile.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_Inbred.png b/Common/Textures/Genes/Icons/Samples/Gene_Inbred.png deleted file mode 100644 index 3d8d705..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_Inbred.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureLargeIncrease.png b/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureLargeIncrease.png deleted file mode 100644 index b07b305..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureLargeIncrease.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureSmallIncrease копия.png b/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureSmallIncrease копия.png deleted file mode 100644 index 25ad570..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_MaxTemperatureSmallIncrease копия.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_PsychicBonding.png b/Common/Textures/Genes/Icons/Samples/Gene_PsychicBonding.png deleted file mode 100644 index a558928..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_PsychicBonding.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_PsychicallyDeaf.png b/Common/Textures/Genes/Icons/Samples/Gene_PsychicallyDeaf.png deleted file mode 100644 index 9a9eb8c..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_PsychicallyDeaf.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.png b/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.png deleted file mode 100644 index dda02fd..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.psd b/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.psd deleted file mode 100644 index 35dadab..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Gene_TotalHealing.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Pheromone_Spit.psd b/Common/Textures/Genes/Icons/Samples/Pheromone_Spit.psd deleted file mode 100644 index c977538..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Pheromone_Spit.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/RJW_Genes_MatingCall.psd b/Common/Textures/Genes/Icons/Samples/RJW_Genes_MatingCall.psd deleted file mode 100644 index 0ac04b9..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/RJW_Genes_MatingCall.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Sexual_Tamer.psd b/Common/Textures/Genes/Icons/Samples/Sexual_Tamer.psd deleted file mode 100644 index e85ca52..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Sexual_Tamer.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Skill_Pheromone_Spit.psd b/Common/Textures/Genes/Icons/Samples/Skill_Pheromone_Spit.psd deleted file mode 100644 index 72e02a0..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Skill_Pheromone_Spit.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/Time.png b/Common/Textures/Genes/Icons/Samples/Time.png deleted file mode 100644 index 84cc532..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/Time.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/blocked_masturbation.psd b/Common/Textures/Genes/Icons/Samples/blocked_masturbation.psd deleted file mode 100644 index 79ca75b..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/blocked_masturbation.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/disease_immunity.psd b/Common/Textures/Genes/Icons/Samples/disease_immunity.psd deleted file mode 100644 index f6a0ac3..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/disease_immunity.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/feminizer&twinkifier.psd b/Common/Textures/Genes/Icons/Samples/feminizer&twinkifier.psd deleted file mode 100644 index cfda363..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/feminizer&twinkifier.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/hardwired_progenity.psd b/Common/Textures/Genes/Icons/Samples/hardwired_progenity.psd deleted file mode 100644 index 25721ce..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/hardwired_progenity.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/la-copa-menstrual-04.png b/Common/Textures/Genes/Icons/Samples/la-copa-menstrual-04.png deleted file mode 100644 index fdb0ccd..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/la-copa-menstrual-04.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/living_cumbucket.psd b/Common/Textures/Genes/Icons/Samples/living_cumbucket.psd deleted file mode 100644 index 85796b3..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/living_cumbucket.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/low_fertility.psd b/Common/Textures/Genes/Icons/Samples/low_fertility.psd deleted file mode 100644 index 5f6af24..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/low_fertility.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/pregnancy_overwrite.psd b/Common/Textures/Genes/Icons/Samples/pregnancy_overwrite.psd deleted file mode 100644 index eaf1210..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/pregnancy_overwrite.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/rut.psd b/Common/Textures/Genes/Icons/Samples/rut.psd deleted file mode 100644 index b15bcc6..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/rut.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/sexual_genetic_swap.psd b/Common/Textures/Genes/Icons/Samples/sexual_genetic_swap.psd deleted file mode 100644 index 354b409..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/sexual_genetic_swap.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/sexual_genetic_thief.psd b/Common/Textures/Genes/Icons/Samples/sexual_genetic_thief.psd deleted file mode 100644 index a2b92b2..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/sexual_genetic_thief.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/size_blinded&stretcher.psd b/Common/Textures/Genes/Icons/Samples/size_blinded&stretcher.psd deleted file mode 100644 index 41faa92..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/size_blinded&stretcher.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Samples/vulnerability.psd b/Common/Textures/Genes/Icons/Samples/vulnerability.psd deleted file mode 100644 index 5fdc6aa..0000000 Binary files a/Common/Textures/Genes/Icons/Samples/vulnerability.psd and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Sexual_Tamer.png b/Common/Textures/Genes/Icons/Sexual_Tamer.png deleted file mode 100644 index ce35369..0000000 Binary files a/Common/Textures/Genes/Icons/Sexual_Tamer.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Slime_Genitalia.dds b/Common/Textures/Genes/Icons/Slime_Genitalia.dds deleted file mode 100644 index e473210..0000000 Binary files a/Common/Textures/Genes/Icons/Slime_Genitalia.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Slime_Genitalia.png b/Common/Textures/Genes/Icons/Slime_Genitalia.png deleted file mode 100644 index 91e6cd0..0000000 Binary files a/Common/Textures/Genes/Icons/Slime_Genitalia.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Small_Breasts.dds b/Common/Textures/Genes/Icons/Small_Breasts.dds deleted file mode 100644 index fdbf4ed..0000000 Binary files a/Common/Textures/Genes/Icons/Small_Breasts.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Small_Breasts.png b/Common/Textures/Genes/Icons/Small_Breasts.png index e2005b7..b32f1d3 100644 Binary files a/Common/Textures/Genes/Icons/Small_Breasts.png and b/Common/Textures/Genes/Icons/Small_Breasts.png differ diff --git a/Common/Textures/Genes/Icons/Small_Male_Genitalia.dds b/Common/Textures/Genes/Icons/Small_Male_Genitalia.dds deleted file mode 100644 index a9f85fe..0000000 Binary files a/Common/Textures/Genes/Icons/Small_Male_Genitalia.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Small_Male_Genitalia.png b/Common/Textures/Genes/Icons/Small_Male_Genitalia.png index 19924d2..b4d7194 100644 Binary files a/Common/Textures/Genes/Icons/Small_Male_Genitalia.png and b/Common/Textures/Genes/Icons/Small_Male_Genitalia.png differ diff --git a/Common/Textures/Genes/Icons/Spelopede_Dispenser.dds b/Common/Textures/Genes/Icons/Spelopede_Dispenser.dds deleted file mode 100644 index 68d12db..0000000 Binary files a/Common/Textures/Genes/Icons/Spelopede_Dispenser.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Spelopede_Dispenser.png b/Common/Textures/Genes/Icons/Spelopede_Dispenser.png deleted file mode 100644 index 4308892..0000000 Binary files a/Common/Textures/Genes/Icons/Spelopede_Dispenser.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Succubus_Tail.dds b/Common/Textures/Genes/Icons/Succubus_Tail.dds deleted file mode 100644 index 068be01..0000000 Binary files a/Common/Textures/Genes/Icons/Succubus_Tail.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Succubus_Tail.png b/Common/Textures/Genes/Icons/Succubus_Tail.png index afe26f7..cc86056 100644 Binary files a/Common/Textures/Genes/Icons/Succubus_Tail.png and b/Common/Textures/Genes/Icons/Succubus_Tail.png differ diff --git a/Common/Textures/Genes/Icons/Succubus_Wings.dds b/Common/Textures/Genes/Icons/Succubus_Wings.dds deleted file mode 100644 index 94bbe7e..0000000 Binary files a/Common/Textures/Genes/Icons/Succubus_Wings.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Succubus_Wings.png b/Common/Textures/Genes/Icons/Succubus_Wings.png index 62453b0..0665f1a 100644 Binary files a/Common/Textures/Genes/Icons/Succubus_Wings.png and b/Common/Textures/Genes/Icons/Succubus_Wings.png differ diff --git a/Common/Textures/Genes/Icons/Tight_Anus.dds b/Common/Textures/Genes/Icons/Tight_Anus.dds deleted file mode 100644 index ae0f265..0000000 Binary files a/Common/Textures/Genes/Icons/Tight_Anus.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Tight_Anus.png b/Common/Textures/Genes/Icons/Tight_Anus.png index dd57b1d..dd355fb 100644 Binary files a/Common/Textures/Genes/Icons/Tight_Anus.png and b/Common/Textures/Genes/Icons/Tight_Anus.png differ diff --git a/Common/Textures/Genes/Icons/Tight_Female_Genitalia.png b/Common/Textures/Genes/Icons/Tight_Female_Genitalia.png new file mode 100644 index 0000000..d0931fa Binary files /dev/null and b/Common/Textures/Genes/Icons/Tight_Female_Genitalia.png differ diff --git a/Common/Textures/Genes/Icons/Tight_Vagina.dds b/Common/Textures/Genes/Icons/Tight_Vagina.dds deleted file mode 100644 index b94f43b..0000000 Binary files a/Common/Textures/Genes/Icons/Tight_Vagina.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Tight_Vagina.png b/Common/Textures/Genes/Icons/Tight_Vagina.png deleted file mode 100644 index eab0606..0000000 Binary files a/Common/Textures/Genes/Icons/Tight_Vagina.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/TrialDefend.png b/Common/Textures/Genes/Icons/TrialDefend.png deleted file mode 100644 index 1275bf2..0000000 Binary files a/Common/Textures/Genes/Icons/TrialDefend.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Vaginal_cum_absorption.dds b/Common/Textures/Genes/Icons/Vaginal_cum_absorption.dds deleted file mode 100644 index 2cff048..0000000 Binary files a/Common/Textures/Genes/Icons/Vaginal_cum_absorption.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Very_Much_Cum.dds b/Common/Textures/Genes/Icons/Very_Much_Cum.dds deleted file mode 100644 index 76694ce..0000000 Binary files a/Common/Textures/Genes/Icons/Very_Much_Cum.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Very_Much_Cum.png b/Common/Textures/Genes/Icons/Very_Much_Cum.png deleted file mode 100644 index f2fedc1..0000000 Binary files a/Common/Textures/Genes/Icons/Very_Much_Cum.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Vitality_Drainer.dds b/Common/Textures/Genes/Icons/Vitality_Drainer.dds deleted file mode 100644 index 9f4c08f..0000000 Binary files a/Common/Textures/Genes/Icons/Vitality_Drainer.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Vitality_Drainer.png b/Common/Textures/Genes/Icons/Vitality_Drainer.png deleted file mode 100644 index 1de65a9..0000000 Binary files a/Common/Textures/Genes/Icons/Vitality_Drainer.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Worker.dds b/Common/Textures/Genes/Icons/Worker.dds deleted file mode 100644 index 3bcf5b0..0000000 Binary files a/Common/Textures/Genes/Icons/Worker.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Worker.png b/Common/Textures/Genes/Icons/Worker.png deleted file mode 100644 index 1f4e0c8..0000000 Binary files a/Common/Textures/Genes/Icons/Worker.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Breeder.dds b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Breeder.dds deleted file mode 100644 index f993b7e..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Breeder.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Breeder.png b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Breeder.png deleted file mode 100644 index 9ffab2c..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Breeder.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Cumazon.dds b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Cumazon.dds deleted file mode 100644 index 49bb674..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Cumazon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Cumazon.png b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Cumazon.png deleted file mode 100644 index 8d285e5..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Cumazon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Guard.dds b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Guard.dds deleted file mode 100644 index f0136b2..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Guard.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Guard.png b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Guard.png deleted file mode 100644 index e831799..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Guard.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Incubus.dds b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Incubus.dds deleted file mode 100644 index 29f22ed..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Incubus.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Incubus.png b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Incubus.png deleted file mode 100644 index 14d6685..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Incubus.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Queen.dds b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Queen.dds deleted file mode 100644 index d02af1d..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Queen.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Queen.png b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Queen.png deleted file mode 100644 index 9b0f425..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Queen.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Succubus.dds b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Succubus.dds deleted file mode 100644 index abb08a2..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Succubus.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Succubus.png b/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Succubus.png deleted file mode 100644 index dddb34d..0000000 Binary files a/Common/Textures/Genes/Icons/Xenotypes/Xenotype-Succubus.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Zoophile.dds b/Common/Textures/Genes/Icons/Zoophile.dds deleted file mode 100644 index e7baa19..0000000 Binary files a/Common/Textures/Genes/Icons/Zoophile.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Zoophile.png b/Common/Textures/Genes/Icons/Zoophile.png index a31c470..ed45040 100644 Binary files a/Common/Textures/Genes/Icons/Zoophile.png and b/Common/Textures/Genes/Icons/Zoophile.png differ diff --git a/Common/Textures/Genes/Icons/Zoophile_2.png b/Common/Textures/Genes/Icons/Zoophile_2.png new file mode 100644 index 0000000..d313bcb Binary files /dev/null and b/Common/Textures/Genes/Icons/Zoophile_2.png differ diff --git a/Common/Textures/Genes/Icons/bisexuality.png b/Common/Textures/Genes/Icons/bisexuality.png deleted file mode 100644 index e9356e8..0000000 Binary files a/Common/Textures/Genes/Icons/bisexuality.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/blocked_masturbation.png b/Common/Textures/Genes/Icons/blocked_masturbation.png deleted file mode 100644 index f696996..0000000 Binary files a/Common/Textures/Genes/Icons/blocked_masturbation.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/cockeater.dds b/Common/Textures/Genes/Icons/cockeater.dds deleted file mode 100644 index 31ca306..0000000 Binary files a/Common/Textures/Genes/Icons/cockeater.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/cockeater.png b/Common/Textures/Genes/Icons/cockeater.png index 0b60a46..fa9577b 100644 Binary files a/Common/Textures/Genes/Icons/cockeater.png and b/Common/Textures/Genes/Icons/cockeater.png differ diff --git a/Common/Textures/Genes/Icons/cumeater.dds b/Common/Textures/Genes/Icons/cumeater.dds deleted file mode 100644 index d7f870e..0000000 Binary files a/Common/Textures/Genes/Icons/cumeater.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/disease_immunity.png b/Common/Textures/Genes/Icons/disease_immunity.png deleted file mode 100644 index 9567e1a..0000000 Binary files a/Common/Textures/Genes/Icons/disease_immunity.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/extra_female.png b/Common/Textures/Genes/Icons/extra_female.png new file mode 100644 index 0000000..1a6ae6e Binary files /dev/null and b/Common/Textures/Genes/Icons/extra_female.png differ diff --git a/Common/Textures/Genes/Icons/extra_male.dds b/Common/Textures/Genes/Icons/extra_male.dds deleted file mode 100644 index ada5226..0000000 Binary files a/Common/Textures/Genes/Icons/extra_male.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/extra_male.png b/Common/Textures/Genes/Icons/extra_male.png index 743ae44..5390ecc 100644 Binary files a/Common/Textures/Genes/Icons/extra_male.png and b/Common/Textures/Genes/Icons/extra_male.png differ diff --git a/Common/Textures/Genes/Icons/Female_Only.png b/Common/Textures/Genes/Icons/female_only.png similarity index 100% rename from Common/Textures/Genes/Icons/Female_Only.png rename to Common/Textures/Genes/Icons/female_only.png diff --git a/Common/Textures/Genes/Icons/feminizer.png b/Common/Textures/Genes/Icons/feminizer.png deleted file mode 100644 index fafd7ed..0000000 Binary files a/Common/Textures/Genes/Icons/feminizer.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/hardwired_progenity.png b/Common/Textures/Genes/Icons/hardwired_progenity.png deleted file mode 100644 index 97811e3..0000000 Binary files a/Common/Textures/Genes/Icons/hardwired_progenity.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/homosexuality.png b/Common/Textures/Genes/Icons/homosexuality.png deleted file mode 100644 index cab42c7..0000000 Binary files a/Common/Textures/Genes/Icons/homosexuality.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/living_cumbucket.png b/Common/Textures/Genes/Icons/living_cumbucket.png deleted file mode 100644 index b79f8cc..0000000 Binary files a/Common/Textures/Genes/Icons/living_cumbucket.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/low_fertility.png b/Common/Textures/Genes/Icons/low_fertility.png deleted file mode 100644 index 0522d94..0000000 Binary files a/Common/Textures/Genes/Icons/low_fertility.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/major_vulnerability.png b/Common/Textures/Genes/Icons/major_vulnerability.png deleted file mode 100644 index 6e96a10..0000000 Binary files a/Common/Textures/Genes/Icons/major_vulnerability.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/Male_Only.png b/Common/Textures/Genes/Icons/male_only.png similarity index 100% rename from Common/Textures/Genes/Icons/Male_Only.png rename to Common/Textures/Genes/Icons/male_only.png diff --git a/Common/Textures/Genes/Icons/minor_vulnerability.png b/Common/Textures/Genes/Icons/minor_vulnerability.png deleted file mode 100644 index 9a82f52..0000000 Binary files a/Common/Textures/Genes/Icons/minor_vulnerability.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/penis_rock_icon.dds b/Common/Textures/Genes/Icons/penis_rock_icon.dds deleted file mode 100644 index 22f3f5b..0000000 Binary files a/Common/Textures/Genes/Icons/penis_rock_icon.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/penis_rock_icon.png b/Common/Textures/Genes/Icons/penis_rock_icon.png deleted file mode 100644 index c1c1324..0000000 Binary files a/Common/Textures/Genes/Icons/penis_rock_icon.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/pregnancy_overwrite.png b/Common/Textures/Genes/Icons/pregnancy_overwrite.png deleted file mode 100644 index 9404a6c..0000000 Binary files a/Common/Textures/Genes/Icons/pregnancy_overwrite.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/rjw_genes_lips.dds b/Common/Textures/Genes/Icons/rjw_genes_lips.dds deleted file mode 100644 index 120d09a..0000000 Binary files a/Common/Textures/Genes/Icons/rjw_genes_lips.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/rjw_naked_prowess.dds b/Common/Textures/Genes/Icons/rjw_naked_prowess.dds deleted file mode 100644 index 5e11870..0000000 Binary files a/Common/Textures/Genes/Icons/rjw_naked_prowess.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/rjw_naked_prowess.png b/Common/Textures/Genes/Icons/rjw_naked_prowess.png index d54231c..468fc60 100644 Binary files a/Common/Textures/Genes/Icons/rjw_naked_prowess.png and b/Common/Textures/Genes/Icons/rjw_naked_prowess.png differ diff --git a/Common/Textures/Genes/Icons/rut.png b/Common/Textures/Genes/Icons/rut.png deleted file mode 100644 index 05a0d23..0000000 Binary files a/Common/Textures/Genes/Icons/rut.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/seduce.dds b/Common/Textures/Genes/Icons/seduce.dds deleted file mode 100644 index 9875559..0000000 Binary files a/Common/Textures/Genes/Icons/seduce.dds and /dev/null differ diff --git a/Common/Textures/Genes/Icons/sex_curiosity.png b/Common/Textures/Genes/Icons/sex_curiosity.png deleted file mode 100644 index b5dcd7f..0000000 Binary files a/Common/Textures/Genes/Icons/sex_curiosity.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/sex_disabled.png b/Common/Textures/Genes/Icons/sex_disabled.png deleted file mode 100644 index 9ce4983..0000000 Binary files a/Common/Textures/Genes/Icons/sex_disabled.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/sex_enabled.png b/Common/Textures/Genes/Icons/sex_enabled.png deleted file mode 100644 index 86e0a6b..0000000 Binary files a/Common/Textures/Genes/Icons/sex_enabled.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/sexual_genetic_swap.png b/Common/Textures/Genes/Icons/sexual_genetic_swap.png deleted file mode 100644 index b0407c4..0000000 Binary files a/Common/Textures/Genes/Icons/sexual_genetic_swap.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/sexual_genetic_thief.png b/Common/Textures/Genes/Icons/sexual_genetic_thief.png deleted file mode 100644 index d871b9f..0000000 Binary files a/Common/Textures/Genes/Icons/sexual_genetic_thief.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/size_blinded.png b/Common/Textures/Genes/Icons/size_blinded.png deleted file mode 100644 index 824a00d..0000000 Binary files a/Common/Textures/Genes/Icons/size_blinded.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/stretcher.png b/Common/Textures/Genes/Icons/stretcher.png deleted file mode 100644 index 4c25049..0000000 Binary files a/Common/Textures/Genes/Icons/stretcher.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/twinkifier.png b/Common/Textures/Genes/Icons/twinkifier.png deleted file mode 100644 index 3b92f1f..0000000 Binary files a/Common/Textures/Genes/Icons/twinkifier.png and /dev/null differ diff --git a/Common/Textures/Genes/Icons/vagina_base.dds b/Common/Textures/Genes/Icons/vagina_base.dds deleted file mode 100644 index f9a2ee2..0000000 Binary files a/Common/Textures/Genes/Icons/vagina_base.dds and /dev/null differ diff --git a/Common/Textures/Other/rjw-genes-previews/Preview.jpg b/Common/Textures/Other/rjw-genes-previews/Preview.jpg deleted file mode 100644 index 94e7eb7..0000000 Binary files a/Common/Textures/Other/rjw-genes-previews/Preview.jpg and /dev/null differ diff --git a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-10.jpg b/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-10.jpg deleted file mode 100644 index 57674c4..0000000 Binary files a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-10.jpg and /dev/null differ diff --git a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-5.jpg b/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-5.jpg deleted file mode 100644 index 103d9cd..0000000 Binary files a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-5.jpg and /dev/null differ diff --git a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-6.jpg b/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-6.jpg deleted file mode 100644 index 3359018..0000000 Binary files a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-6.jpg and /dev/null differ diff --git a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-7.jpg b/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-7.jpg deleted file mode 100644 index f6dc7c3..0000000 Binary files a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-7.jpg and /dev/null differ diff --git a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-8.jpg b/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-8.jpg deleted file mode 100644 index e6a0c63..0000000 Binary files a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-8.jpg and /dev/null differ diff --git a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-9.jpg b/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-9.jpg deleted file mode 100644 index 04473ba..0000000 Binary files a/Common/Textures/Other/rjw-genes-previews/rjw-genes-preview-9.jpg and /dev/null differ diff --git a/Common/Textures/Things/Mote/Cocoon/WeaveA.psd b/Common/Textures/Things/Mote/Cocoon/WeaveA.psd deleted file mode 100644 index 2328868..0000000 Binary files a/Common/Textures/Things/Mote/Cocoon/WeaveA.psd and /dev/null differ diff --git a/Common/Textures/Things/Mote/Cocoon/WeaveB.psd b/Common/Textures/Things/Mote/Cocoon/WeaveB.psd deleted file mode 100644 index c1a852e..0000000 Binary files a/Common/Textures/Things/Mote/Cocoon/WeaveB.psd and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_east.dds b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_east.dds deleted file mode 100644 index bf8cc19..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_east.dds and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_east.png deleted file mode 100644 index ef191bf..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_east.png and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_north.dds b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_north.dds deleted file mode 100644 index 0f1967e..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_north.dds and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_north.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_north.png deleted file mode 100644 index eb5780a..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_north.png and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_south.dds b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_south.dds deleted file mode 100644 index 021f6ad..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_south.dds and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_south.png deleted file mode 100644 index 8e5e4de..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Tail_south.png and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_east.dds b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_east.dds deleted file mode 100644 index 7b0c750..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_east.dds and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_east.png deleted file mode 100644 index 0e193da..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_east.png and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_north.dds b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_north.dds deleted file mode 100644 index 9bd784f..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_north.dds and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_north.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_north.png deleted file mode 100644 index 37ba8fb..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_north.png and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_south.dds b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_south.dds deleted file mode 100644 index 1128e9e..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_south.dds and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_south.png deleted file mode 100644 index 62453b0..0000000 Binary files a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/RJW_Genes_Succubus_Wings_south.png and /dev/null differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_east.png new file mode 100644 index 0000000..7f51811 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_east.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_north.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_north.png new file mode 100644 index 0000000..25c4097 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_north.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_south.png new file mode 100644 index 0000000..60aae1e Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L1_south.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_east.png new file mode 100644 index 0000000..f3be513 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_east.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_north.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_north.png new file mode 100644 index 0000000..7a54823 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_north.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_south.png new file mode 100644 index 0000000..91b5641 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_L2_south.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_east.png new file mode 100644 index 0000000..e08f0b3 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_east.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_north.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_north.png new file mode 100644 index 0000000..60aae1e Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_north.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_south.png new file mode 100644 index 0000000..0c9df93 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R1_south.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_east.png new file mode 100644 index 0000000..ea33158 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_east.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_north.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_north.png new file mode 100644 index 0000000..30e0e28 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_north.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_south.png new file mode 100644 index 0000000..a9f56d7 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Tail/Succubus_Tail_R2_south.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_east.png new file mode 100644 index 0000000..71e3f53 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_east.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_north.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_north.png new file mode 100644 index 0000000..ac55d17 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_north.png differ diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_south.png new file mode 100644 index 0000000..ac55d17 Binary files /dev/null and b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_south.png differ diff --git a/KNOWN_BUGS.md b/KNOWN_BUGS.md index 676fc74..ccf7ea8 100644 --- a/KNOWN_BUGS.md +++ b/KNOWN_BUGS.md @@ -2,59 +2,6 @@ Collection of Known Bugs and reasons for their origin. -## System.MissingMethodException: bool RimWorld.Pawn_GeneTracker.HasActiveGene(Verse.GeneDef) - -You might see a bug like this: - -``` -Exception in Verse.AI.ThinkNode_Priority TryIssueJobPackage: System.MissingMethodException: bool RimWorld.Pawn_GeneTracker.HasActiveGene(Verse.GeneDef) -[Ref A8629303] Duplicate stacktrace, see ref for original -UnityEngine.StackTraceUtility:ExtractStackTrace () -(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch2 (string) -Verse.AI.ThinkNode_Priority:TryIssueJobPackage (Verse.Pawn,Verse.AI.JobIssueParams) -Verse.AI.ThinkNode_SubtreesByTag:TryIssueJobPackage (Verse.Pawn,Verse.AI.JobIssueParams) -Verse.AI.ThinkNode_Priority:TryIssueJobPackage (Verse.Pawn,Verse.AI.JobIssueParams) -Verse.AI.Pawn_JobTracker:DetermineNextJob (Verse.ThinkTreeDef&,bool) -Verse.AI.Pawn_JobTracker:TryFindAndStartJob () -(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1 (Verse.AI.Pawn_JobTracker,Verse.AI.JobCondition,bool,bool) -(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_JobTracker.JobTrackerTick_Patch0 (Verse.AI.Pawn_JobTracker) -(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Pawn.Tick_Patch2 (Verse.Pawn) -Verse.TickList:Tick () -(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch3 (Verse.TickManager) -Verse.TickManager:TickManagerUpdate () -(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Game.UpdatePlay_Patch2 (Verse.Game) -Verse.Root_Play:Update () -``` - -This is due to the game not being updated - hasActiveGene has been introduced later than 1.5. - -You will have to update your game. - -## My Youth Fountain / Age Drainer Pawns do not alter Ages!!! - -Issue: You had a pawn with Youth Fountain have Sex with another Pawn, and the other pawn did not get younger. - -Please Check: - -- Are both pawns in OK Age? -- Did they maybe change age but you didn't notice? Default settings only change by days. -- Did they finish sex? If they are interrupted, nothing happens - -Otherwise: - -Enable the Debug-Settings and provide me with a log. - -## I changed Parts of a pawn and my genes do not apply! - -Issue: You had a pawn with "huge genitalia" and add a horse-cock with licentia or surgery. This new genitalia is not huge. - -Reason: The genes are applied when they are added. This is usually character-spawn. The genes change the attributes of the genitalia-hediff, and thus genitalia added after the genes are not affected. - -I think I will not gonna fix this. -First of all, I think transplants wouldn't reasonably affected by genes. -Second, for implementation I'd need to regularly check if every gene changed all relevant genitalia already, and do the same every x-ticks. -This seems like a performance sink, so I will not gonna do it. - ## Pawn does not refresh empty Fertilin! Issue: A pawn has 0 (or low) Fertilin, and a mood debuff. But they do not do anything about it. diff --git a/LoadFolders.xml b/LoadFolders.xml deleted file mode 100644 index d3c2a27..0000000 --- a/LoadFolders.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - -
  • /
  • -
  • Common
  • - -
  • Mods/NotRaceSupport
  • -
  • Mods/Sanguophage
  • -
  • Mods/Saurid
  • -
  • Mods/Phytokin
  • -
  • Mods/Lycanthrope
  • -
  • Mods/Highmate
  • -
  • Mods/Genie
  • -
  • Mods/Fungoid
  • -
  • Mods/Archon
  • -
  • Mods/Android
  • -
  • Mods/VE_Genetics
  • -
  • Mods/LicentiaLabs
  • -
  • Mods/Sexperience
  • -
    -
    \ No newline at end of file diff --git a/Mods/Android/Defs/AndroidConvertableGenesDefs/AndroidConvertableGenesDefs.xml b/Mods/Android/Defs/AndroidConvertableGenesDefs/AndroidConvertableGenesDefs.xml deleted file mode 100644 index 2977367..0000000 --- a/Mods/Android/Defs/AndroidConvertableGenesDefs/AndroidConvertableGenesDefs.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - rjw_genes_AndroidConvertableGenesDefs - -
  • rjw_genes_gender
  • -
    - - -
    -
    \ No newline at end of file diff --git a/Mods/Android/Defs/GeneDefs/GeneDefs_Androids.xml b/Mods/Android/Defs/GeneDefs/GeneDefs_Androids.xml deleted file mode 100644 index 058d719..0000000 --- a/Mods/Android/Defs/GeneDefs/GeneDefs_Androids.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - rjw_genes_bionic_genitalia - - RJW_Genes.Gene_GenitaliaType - This piece of hardware is a set of bionic genitals of high quality - Genes/Icons/Genitalia_human - -
  • - BionicPenis - BionicVagina - BionicAnus - BionicBreasts -
  • -
    - 802 - -2 -
    - - - rjw_genes_hydrolic_genitalia - - RJW_Genes.Gene_GenitaliaType - This piece of hardware is a set of crude hydrolic genitals, at least it come with a suspension system - Genes/Icons/Genitalia_human - -
  • - HydraulicPenis - HydraulicVagina - HydraulicAnus - HydraulicBreasts -
  • -
    - 802 - - 1.12 - -
    - - - rjw_genes_SexDisabled - - Androids do not feel satisfaction from sex, and have no need to feel it. - Genes/Icons/sex_disabled - 3 - 1 - -
  • Sex
  • -
    - true -
    - -
    \ No newline at end of file diff --git a/Mods/Android/Patches/Android_Quirk_Patch.xml b/Mods/Android/Patches/Android_Quirk_Patch.xml deleted file mode 100644 index 52f9333..0000000 --- a/Mods/Android/Patches/Android_Quirk_Patch.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - /Defs/VREAndroids.AndroidGeneDef[defName="VREA_SyntheticBody"] - -
  • - RobotLoverQuirk -
  • -
    -
    - - /Defs/VREAndroids.AndroidGeneDef[defName="VREA_SyntheticSkin"] - -
  • - RobotLoverQuirk -
  • -
    -
    - - /Defs/GeneCategoryDef[defName="VREA_Subroutine"]/displayPriorityInXenotype - - 10 - - -
    - diff --git a/Mods/Archon/Patches/Archon_Quirk_Patch.xml b/Mods/Archon/Patches/Archon_Quirk_Patch.xml deleted file mode 100644 index 0f7e119..0000000 --- a/Mods/Archon/Patches/Archon_Quirk_Patch.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - /Defs/GeneDef[defName="VRE_Leatherskin"] - -
  • - SkinLoverQuirk -
  • -
    -
    -
    - diff --git a/Mods/Fungoid/Patches/Fungoid_Quirk_Patch.xml b/Mods/Fungoid/Patches/Fungoid_Quirk_Patch.xml deleted file mode 100644 index bcb1e72..0000000 --- a/Mods/Fungoid/Patches/Fungoid_Quirk_Patch.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - /Defs/GeneDef[defName="VRE_FungalCrest"] - -
  • - PlantLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_HairMushroom"] - -
  • - PlantLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_FungalFlesh"] - -
  • - PlantLoverQuirk -
  • -
    -
    -
    - diff --git a/Mods/Genie/Defs/GeneDefs/GeneDefs_Curiosity_sex.xml b/Mods/Genie/Defs/GeneDefs/GeneDefs_Curiosity_sex.xml deleted file mode 100644 index 98cd404..0000000 --- a/Mods/Genie/Defs/GeneDefs/GeneDefs_Curiosity_sex.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - VRE_Curiosity - -
  • VRE_Curiosity
  • -
  • Curiosity
  • -
    - -2 - 2 -
    - - - VRE_Curiosity_Sex - - 0 - The carrier has a natural curiosity for sex which makes them gain recreation whenever they learn it. Furthermore, curiosity prevents skill loss in sex completely. - - Genes/Icons/sex_curiosity - -
  • - Sex - Sex -
  • -
    -
    - - -
    \ No newline at end of file diff --git a/Mods/Highmate/Patches/Highmate_Quirk_Patch.xml b/Mods/Highmate/Patches/Highmate_Quirk_Patch.xml deleted file mode 100644 index 0f69977..0000000 --- a/Mods/Highmate/Patches/Highmate_Quirk_Patch.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - /Defs/GeneDef[defName="VRE_FelineEars"] - -
  • - FurLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_FelineTail"] - -
  • - FurLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_PerfectBody"] - -
  • - SkinLoverQuirk -
  • -
    -
    -
    - diff --git a/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml b/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml deleted file mode 100644 index a0a7eee..0000000 --- a/Mods/LicentiaLabs/Defs/GeneDefs/LicentiaLabs_GeneDefs.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - rjw_genes_elasticity - - rjw_genes_damage - This Xenotype cannot get stretched by huge penetrators. - Genes/Icons/Elasticity - RJW_Genes.Gene_Elasticity - -1 - 1 - 1 - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - - rjw_genes_likes_cumflation - - rjw_genes_cum - This Xenotype loves being cumflated. - Genes/Icons/Cumflation - 536 - -1 - 2 - -
  • - LikesCumflation -
  • -
    - -
  • NotCumflatable
  • -
    - - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - - - rjw_genes_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 - - 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 - - 2 - -1 - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - -
    \ No newline at end of file diff --git a/Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml b/Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml deleted file mode 100644 index 282e54f..0000000 --- a/Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml +++ /dev/null @@ -1,172 +0,0 @@ - - - - rjw_genes_cumflation_counter - HediffWithComps - - cumflation negator - Negates the negative effects usually produced by being cumflated. - (240,200,110) - false - 1.0 - false - false - -
  • - -0.75 -
  • -
    - -
  • - - false -
  • -
  • - - 0.2 - false - - -0.1 - - -
  • - Moving - 0.1 -
  • - - -
  • - - 0.4 - false - - -0.3 - - -
  • - Moving - 0.3 -
  • - - -0.1 - -
  • - - 0.65 - false - - +0.5 - - -
  • - Moving - 0.6 -
  • - - -0.3 - -
  • - - 0.9 - false - - -0.7 - - -
  • - Moving - 1.0 -
  • - - -0.5 - -
    -
    - - - rjw_genes_cumstuffed_counter - HediffWithComps - - cumstuffed negated - Negates the negative effects that one would suffer from being cumstuffed. - (240,200,110) - false - 1.0 - false - false - -
  • - -0.75 -
  • -
    - -
  • - - false -
  • -
  • - - 0.2 - 0.95 - false - - -0.05 - - -
  • - Moving - 0.03 -
  • - - -
  • - - 0.4 - 0.9 - - -0.1 - - false - -
  • - Moving - 0.1 -
  • - - -
  • - - 0.6 - 0.75 - false - - -0.15 - - -
  • - Moving - 0.2 -
  • - - -0.15 - -
  • - - 0.8 - 0.5 - false - - -0.2 - - -
  • - Moving - 0.3 -
  • - - -0.3 - -
    -
    - -
    diff --git a/Mods/Lycanthrope/Patches/Lycanthrope_Quirk_Patch.xml b/Mods/Lycanthrope/Patches/Lycanthrope_Quirk_Patch.xml deleted file mode 100644 index 475950c..0000000 --- a/Mods/Lycanthrope/Patches/Lycanthrope_Quirk_Patch.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - /Defs/GeneDef[defName="VRE_ChestFur"] - -
  • - FurLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_CanineTail"] - -
  • - FurLoverQuirk -
  • -
    -
    -
    - diff --git a/Mods/NotRaceSupport/Defs/HediffDefs/Hediffs_PrivateParts/Hediffs_PrivateParts_Added.xml b/Mods/NotRaceSupport/Defs/HediffDefs/Hediffs_PrivateParts/Hediffs_PrivateParts_Added.xml deleted file mode 100644 index 647b7a2..0000000 --- a/Mods/NotRaceSupport/Defs/HediffDefs/Hediffs_PrivateParts/Hediffs_PrivateParts_Added.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - NeedlePenis - - a needle penis - A long thin needle penis - NeedlePenis - NeedlePenis - -
  • - -
  • Thin
  • -
  • Long
  • - - -
    -
    - - PigPenis - - a screw penis - A large screw penis. - PigPenis - PigPenis - -
  • - -
  • Flared
  • -
  • Long
  • -
  • Girthy
  • - - -
    -
    - - MarinePenis - - a marine penis - A penis similar to those of marine mammals. - MarinePenis - MarinePenis - -
  • - -
  • Sheathed
  • -
  • Long
  • - - -
    -
    - - TentaclePenis - - an alien penis - A alien penis featuring multiples tentacles. - TentaclePenis - TentaclePenis - -
  • - -
  • Multiple
  • -
  • Sheathed
  • -
  • Long
  • - - -
    -
    - - GolemPenis - - an golem penis - A large rocky golem penis. - GolemPenis - GolemPenis - -
  • - -
  • Long
  • -
  • Girthy
  • -
  • Barbed
  • - - -
    -
    - - OrcPenis - - an orc penis - A large orc penis. - OrcPenis - OrcPenis - -
  • - -
  • Long
  • -
  • Girthy
  • - - -
    -
    - - GhostPenis - - an ghost penis - A evanescent ghost penis, you can barely feel it. - GhostPenis - GhostPenis - -
  • - -
  • Thin
  • -
  • Sheathed
  • - - -
    -
    - - NecroPenis - - an undead penis - A rotten, reanimated penis. - NecroPenis - NecroPenis - -
  • - -
  • Long
  • -
  • Girthy
  • - - -
    -
    - - GhostVagina - - a ghost vagina - A evanescent ghost vagina, you can barely feel it. - GhostVagina - GhostVagina - -
  • - -
  • Tight
  • -
  • Deep
  • - - -
    -
    - - -
    \ No newline at end of file diff --git a/Mods/NotRaceSupport/Defs/ThingDefs/Items_BodyParts/Items_BodyParts_Added.xml b/Mods/NotRaceSupport/Defs/ThingDefs/Items_BodyParts/Items_BodyParts_Added.xml deleted file mode 100644 index 9608642..0000000 --- a/Mods/NotRaceSupport/Defs/ThingDefs/Items_BodyParts/Items_BodyParts_Added.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - NeedlePenis - - A long thin needle penis - - 250 - 0.40 - - - - - PigPenis - - A large screw penis. - - 250 - 0.40 - - - - - MarinePenis - - A penis similar to those of marine mammals. - - 250 - 0.40 - - - - - TentaclePenis - - A alien penis featuring multiples tentacles. - - 250 - 0.40 - - - - - GolemPenis - - A large rocky golem penis. - - 250 - 0.40 - - - - - OrcPenis - - A large orc penis. - - 250 - 0.40 - - - - - GhostPenis - - A evanescent ghost penis, you can barely feel it. - - 250 - 0.40 - - - - - NecroPenis - - A rotten, reanimated penis. - - 250 - 0.40 - - - - - GhostVagina - - GhostVagina - - 250 - 0.40 - - - - - - diff --git a/Mods/Phytokin/Patches/Phytokin_Quirk_Patch.xml b/Mods/Phytokin/Patches/Phytokin_Quirk_Patch.xml deleted file mode 100644 index 78089d4..0000000 --- a/Mods/Phytokin/Patches/Phytokin_Quirk_Patch.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - /Defs/GeneDef[defName="VRE_BarkSkin"] - -
  • - PlantLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_FoliageHair"] - -
  • - PlantLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_SapBlood"] - -
  • - PlantLoverQuirk -
  • -
    -
    -
    - diff --git a/Mods/Sanguophage/Patches/Sanguophage_Quirk_Patch.xml b/Mods/Sanguophage/Patches/Sanguophage_Quirk_Patch.xml deleted file mode 100644 index cf01f46..0000000 --- a/Mods/Sanguophage/Patches/Sanguophage_Quirk_Patch.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - /Defs/GeneDef[defName="VRE_SanguineHair"] - -
  • - DemonLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_BatEars"] - -
  • - TeratophileQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_UpperBatEars"] - -
  • - TeratophileQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_Talons"] - -
  • - DemonLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRE_BatNose"] - -
  • - TeratophileQuirk -
  • -
    -
    -
    - diff --git a/Mods/Saurid/Patches/Saurid_Quirk_Patch.xml b/Mods/Saurid/Patches/Saurid_Quirk_Patch.xml deleted file mode 100644 index 37188ff..0000000 --- a/Mods/Saurid/Patches/Saurid_Quirk_Patch.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - /Defs/GeneDef[defName="VRESaurids_FrilledEars"] - -
  • - ScaleLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRESaurids_CenterFrill"] - -
  • - ScaleLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRESaurids_GeckoTail"] - -
  • - ScaleLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRESaurids_SauridClaws"] - -
  • - ScaleLoverQuirk -
  • -
    -
    - - /Defs/GeneDef[defName="VRESaurids_ScaleSkin"] - -
  • - ScaleLoverQuirk -
  • -
    -
    -
    - diff --git a/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml b/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml deleted file mode 100644 index 1d89b7e..0000000 --- a/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - rjw_genes_living_cumbucket - - rjw_genes_cum - When this Xenotype partakes in sexual activity, they store cum and produce it as an item. - Genes/Icons/living_cumbucket - 559 - 3 - -2 - -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    -
    - -
    \ No newline at end of file diff --git a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml deleted file mode 100644 index 2c55a7a..0000000 --- a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - rjw_genes_filled_living_cumbucket - HediffWithComps - - This pawn is a (filled) living cum bucket. Thanks to a generous donation, this pawn will slowly generate cum for pickup. - (240,200,110) - false - - false - false - -
  • - -0.5 -
  • -
  • - -
  • 0
  • -
  • 0.5
  • -
  • 0.25
  • -
  • 0.1
  • -
  • 0.5
  • - - -
    - -
  • - - - -0.1 - -
  • -
  • - - 0.4 - 0.8 - - -0.25 - - -
  • - Moving - -0.05 -
  • - - -
  • - - 0.65 - 0.75 - - -0.25 - - -
  • - Moving - -0.1 -
  • - - -
  • - - 1.1 - 0.6 - - -0.5 - - -
  • - Moving - -0.15 -
  • - - -
  • - - 10.1 - 0.1 - - -1.5 - - -
  • - Moving - -0.55 -
  • - - -
    -
    - - -
    diff --git a/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml b/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml deleted file mode 100644 index 6cbb372..0000000 --- a/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - ProcessCumbucket - RJW_Genes.JobDriver_ProcessingCumbucket - false - false - processing internal cumbucket. - false - - - diff --git a/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml b/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml deleted file mode 100644 index 93aa987..0000000 --- a/Mods/VE_Genetics/Defs/HedifDef/Hediffs_Animals.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - rjw_genes_animal_control_hediff - - This creature is more controlable with a natural human part. - HediffWithComps - (0.9, 1.0, 0.35) - 1 - -
  • - true -
  • -
    - false -
    - -
    \ No newline at end of file diff --git a/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml b/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml deleted file mode 100644 index a4d43ef..0000000 --- a/Mods/VE_Genetics/Defs/RaceGeneDef/RaceGeneDefs_VEgenetic.xml +++ /dev/null @@ -1,654 +0,0 @@ - - - - - GR_Manbear_GenGroup - - -
  • GR_Manbear
  • -
  • GR_Bearman
  • -
    - - - -
  • - Immunity_Strong - 0.8 -
  • -
  • - MinTemp_LargeDecrease - 0.8 -
  • -
  • - Aggression_Aggressive - 0.8 -
  • -
  • - Sleepy - 0.8 -
  • -
  • - Beard_Always - 0.8 -
  • -
  • - VoiceRoar - 0.8 -
  • -
  • - Body_Fat - 0.8 -
  • -
  • - Body_Hulk - 0.8 -
  • -
  • - Hair_ReddishBrown - 0.8 -
  • -
  • - Hair_DarkBrown - 0.8 -
  • -
  • - Hair_DarkSaturatedReddish - 0.8 -
  • -
  • - Hair_DarkReddish - 0.8 -
  • -
  • - RobustDigestion - 0.8 -
  • -
  • - Furskin - 0.8 -
  • -
  • - Unstoppable - 0.8 -
  • -
  • - AptitudeTerrible_Artistic - 0.8 -
  • -
  • - AptitudeTerrible_Social - 0.8 -
  • -
  • - AptitudePoor_Intellectual - 0.8 -
  • - -
    - -
    - - - GR_Manalope_GenGroup - - -
  • GR_Manalope
  • -
  • GR_Booman
  • -
    - - - -
  • - FireSpew - 0.8 -
  • -
  • - Beauty_Ugly - 0.8 -
  • -
  • - Hair_Blonde - 0.8 -
  • -
  • - Hair_SandyBlonde - 0.8 -
  • -
  • - Hair_LightOrange - 0.8 -
  • -
  • - rjw_genes_udder - 0.8 -
  • - -
    - -
    - - - GR_Manchicken_GenGroup - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    - - - -
  • - Mood_Optimist - 0.8 -
  • -
  • - Delicate - 0.8 -
  • -
  • - Beauty_Pretty - 0.8 -
  • -
  • - Body_Thin - 0.8 -
  • -
  • - AptitudeTerrible_Melee - 0.8 -
  • -
  • - AptitudeTerrible_Mining - 0.8 -
  • -
  • - AptitudeRemarkable_Social - 0.8 -
  • -
  • - AptitudeStrong_Intellectual - 0.8 -
  • - -
    - -
    - - - GR_Manffalo_GenGroup - - -
  • GR_Manffalo
  • -
  • GR_Muffaloman
  • -
    - - - -
  • - Headbone_Human - 0.9 -
  • -
  • - Headbone_MiniHorns - 0.9 -
  • -
  • - Furskin - 0.9 -
  • -
  • - MinTemp_SmallIncrease - 0.9 -
  • -
  • - rjw_genes_big_male_genitalia - 0.7 -
  • -
  • - rjw_genes_loose_female_genitalia - 0.7 -
  • -
  • - rjw_genes_big_breasts - 0.7 -
  • -
  • - rjw_genes_udder - 0.7 -
  • -
  • - rjw_genes_Needle_genitalia - 0.7 -
  • -
  • - rjw_mc_genes_perm_lactating - 0.05 -
  • -
  • - rjw_genes_zoophile - 0.5 -
  • -
  • - AptitudeTerrible_Intellectual - 0.05 -
  • -
  • - AptitudePoor_Intellectual - 0.7 -
  • -
    - -
    - - - GR_Manwolf_GenGroup - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    - - - -
  • - AptitudeTerrible_Mining - 0.05 -
  • -
  • - PsychicBonding - 0.05 -
  • -
  • - Mood_Sanguine - 0.05 -
  • -
  • - Ears_Floppy - 0.9 -
  • -
  • - rjw_genes_canine_genitalia - 0.9 -
  • -
  • - Furskin - 0.9 -
  • -
  • - MinTemp_SmallIncrease - 0.9 -
  • -
  • - Libido_High - 0.9 -
  • -
  • - AptitudePoor_Mining - 0.5 -
  • -
  • - rjw_genes_zoophile - 0.5 -
  • -
  • - Mood_Optimist - 0.5 -
  • -
    - -
    - - - GR_Mancat_GenGroup - - -
  • GR_Mancat
  • -
  • GR_Catman
  • -
    - - - -
  • - PsychicBonding - 0.05 -
  • -
  • - AptitudeTerrible_Animals - 0.05 -
  • -
  • - Ears_Cat - 0.9 -
  • -
  • - Body_Thin - 0.9 -
  • -
  • - rjw_genes_feline_genitalia - 0.9 -
  • -
  • - Furskin - 0.9 -
  • -
  • - MinTemp_SmallIncrease - 0.9 -
  • -
  • - rjw_genes_small_male_genitalia - 0.7 -
  • -
  • - rjw_genes_tight_female_genitalia - 0.7 -
  • -
  • - rjw_genes_small_breasts - 0.7 -
  • -
  • - rjw_genes_tight_anus - 0.7 -
  • -
  • - DarkVision - 0.8 -
  • -
  • - AptitudePoor_Animals - 0.5 -
  • -
  • - Beauty_Pretty - 0.7 -
  • -
  • - rjw_genes_zoophile - 0.5 -
  • -
    - -
    - - - GR_Mansquirrel_GenGroup - - -
  • GR_Mansquirrel
  • -
  • GR_Moleman
  • -
    - - - -
  • - MoveSpeed_VeryQuick - 0.8 -
  • -
  • - KindInstinct - 0.8 -
  • -
  • - Delicate - 0.8 -
  • -
  • - Ears_Cat - 0.8 -
  • -
  • - Body_Thin - 0.8 -
  • -
  • - Tail_Furry - 0.8 -
  • -
  • - AptitudeTerrible_Shooting - 0.8 -
  • -
  • - AptitudeTerrible_Melee - 0.8 -
  • -
  • - AptitudeTerrible_Mining - 0.8 -
  • -
  • - AptitudeTerrible_Animals - 0.8 -
  • -
  • - AptitudeStrong_Intellectual - 0.8 -
  • -
  • - rjw_genes_Needle_genitalia - 0.8 -
  • -
  • - rjw_genes_zoophile - 0.8 -
  • - -
    - -
    - - - GR_Thrumboman_GenGroup - - -
  • GR_Thrumboman
  • -
    - - - -
  • - Unstoppable - 0.25 -
  • -
  • - Headbone_CenterHorn - 0.9 -
  • -
  • - VoiceRoar - 0.6 -
  • -
  • - MaxTemp_SmallIncrease - 0.7 -
  • -
  • - MaxTemp_LargeIncrease - 0.1 -
  • -
  • - rjw_genes_dragon_genitalia - 0.6 -
  • -
  • - FireResistant - 0.15 -
  • -
  • - rjw_genes_much_cum - 0.3 -
  • -
  • - rjw_genes_very_much_cum - 0.05 -
  • -
  • - Body_Hulk - 0.7 -
  • - -
    - -
    - - - - - GR_Hurseman_GenGroup - - -
  • GR_Hurseman
  • -
    - - - -
  • - Body_Standard - 0.9 -
  • -
  • - Body_Hulk - 0.7 -
  • -
  • - rjw_genes_equine_genitalia - 0.9 -
  • -
  • - rjw_genes_zoophile - 0.5 -
  • -
  • - rjw_genes_much_cum - 0.5 -
  • -
  • - MoveSpeed_Quick - 0.5 -
  • -
  • - AptitudeTerrible_Mining - 0.5 -
  • -
  • - AptitudeTerrible_Intellectual - 0.5 -
  • -
  • - Furskin - 0.9 -
  • -
  • - MinTemp_SmallIncrease - 0.9 -
  • - -
    - -
    - - - - - GR_Manscarab_GenGroup - - -
  • GR_Manscarab
  • -
    - - - -
  • - Beauty_Ugly - 0.5 -
  • -
  • - Immunity_Strong - 0.6 -
  • -
  • - ToxicEnvironmentResistance_Partial - 0.4 -
  • -
  • - rjw_genes_ovipositor_genitalia - 0.15 -
  • -
  • - rjw_genes_insectincubator - 0.1 -
  • -
  • - rjw_genes_insectbreeder - 0.1 -
  • -
  • - Body_Thin - 0.3 -
  • - -
    - -
    - - - GR_Lizardman_GenGroup - - -
  • GR_Lizardman
  • -
    - - - -
  • - AcidSpray - 0.7 -
  • -
  • - MinTemp_SmallIncrease - 0.7 -
  • -
  • - MaxTemp_SmallIncrease - 0.7 -
  • -
  • - Robust - 0.7 -
  • -
  • - Hair_BaldOnly - 0.7 -
  • -
  • - Beard_NoBeardOnly - 0.7 -
  • -
  • - Body_Standard - 0.7 -
  • -
  • - Headbone_CenterHorn - 0.7 -
  • -
  • - AptitudeTerrible_Artistic - 0.7 -
  • -
  • - AptitudeTerrible_Social - 0.7 -
  • -
  • - rjw_genes_reptilian_genitalia - 0.7 -
  • - -
    - -
    - -
    \ No newline at end of file diff --git a/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml b/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml deleted file mode 100644 index ab3ba01..0000000 --- a/Mods/VE_Genetics/Defs/RaceGroupDef/Hybrid_Group.xml +++ /dev/null @@ -1,795 +0,0 @@ - - - - - Bear_Grizzly_Group - -
  • Human
  • -
  • Bear_Grizzly
  • -
    - -
  • GR_Manbear
  • -
  • GR_Bearman
  • -
    -
    - - - Bear_Polar_Group - -
  • Human
  • -
  • Bear_Polar
  • -
    - - -
  • GR_Manbear
  • -
  • GR_Bearman
  • -
    -
    - - - GR_Manbear_Group - -
  • Human
  • -
  • GR_Manbear
  • -
    - - -
  • Human
  • -
    -
    - - - GR_Bearman_Group - -
  • Human
  • -
  • GR_Bearman
  • -
    - - -
  • Human
  • -
    -
    - - - Boomalope_Group - -
  • Human
  • -
  • Boomalope
  • -
    - - -
  • GR_Manalope
  • -
  • GR_Booman
  • -
    -
    - - - GR_Manalope_Group - -
  • Human
  • -
  • GR_Manalope
  • -
    - - -
  • Human
  • -
    -
    - - - GR_Booman_Group - -
  • Human
  • -
  • GR_Booman
  • -
    - - -
  • Human
  • -
    -
    - - - Chicken_Group - -
  • Human
  • -
  • Chicken
  • -
    - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    -
    - - - Duck_Group - -
  • Human
  • -
  • Duck
  • -
    - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    -
    - - - Turkey_Group - -
  • Human
  • -
  • Turkey
  • -
    - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    -
    - - - Goose_Group - -
  • Human
  • -
  • Goose
  • -
    - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    -
    - - - Ostrich_Group - -
  • Human
  • -
  • Ostrich
  • -
    - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    -
    - - - Emu_Group - -
  • Human
  • -
  • Emu
  • -
    - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    -
    - - - Cassowary_Group - -
  • Human
  • -
  • Cassowary
  • -
    - - -
  • GR_Manchicken
  • -
  • GR_Turkeyman
  • -
    -
    - - - GR_Manchicken_Group - -
  • Human
  • -
  • GR_Manchicken
  • -
    - - -
  • Human
  • -
    -
    - - - GR_Turkeyman_Group - -
  • Human
  • -
  • GR_Turkeyman
  • -
    - - -
  • Human
  • -
    -
    - - - Cow_Group - -
  • Human
  • -
  • Cow
  • -
    - - -
  • GR_Manffalo
  • -
  • GR_Muffaloman
  • -
    -
    - - - Muffalo_Group - -
  • Human
  • -
  • Muffalo
  • -
    - - -
  • GR_Manffalo
  • -
  • GR_Muffaloman
  • -
    -
    - - - Bison_Group - -
  • Human
  • -
  • Bison
  • -
    - - -
  • GR_Manffalo
  • -
  • GR_Muffaloman
  • -
    -
    - - - Yak_Group - -
  • Human
  • -
  • Yak
  • -
    - - -
  • GR_Manffalo
  • -
  • GR_Muffaloman
  • -
    -
    - - - GR_Manffalo_Group - -
  • Human
  • -
  • GR_Manffalo
  • -
    - - -
  • Human
  • -
    -
    - - - GR_Muffaloman_Group - -
  • Human
  • -
  • GR_Muffaloman
  • -
    - - -
  • Human
  • -
    -
    - - - Warg_Group - -
  • Human
  • -
  • Warg
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - Wolf_Timber_Group - -
  • Human
  • -
  • Wolf_Timber
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - Wolf_Arctic_Group - -
  • Human
  • -
  • Wolf_Arctic
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - Fox_Fennec_Group - -
  • Human
  • -
  • Fox_Fennec
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - Fox_Red_Group - -
  • Human
  • -
  • Fox_Red
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - Fox_Arctic_Group - -
  • Human
  • -
  • Fox_Arctic
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - Husky_Group - -
  • Human
  • -
  • Husky
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - LabradorRetriever_Group - -
  • Human
  • -
  • LabradorRetriever
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - YorkshireTerrier_Group - -
  • Human
  • -
  • YorkshireTerrier
  • -
    - - -
  • GR_Manwolf
  • -
  • GR_Dogman
  • -
    -
    - - - GR_Manwolf_Group - -
  • Human
  • -
  • GR_Manwolf
  • -
    - - -
  • Human
  • -
    -
    - - - GR_Dogman_Group - -
  • Human
  • -
  • GR_Dogman
  • -
    - - -
  • Human
  • -
    -
    - - - Cougar_Group - -
  • Human
  • -
  • Cougar
  • -
    - - -
  • GR_Mancat
  • -
  • GR_Catman
  • -
    -
    - - - Panther_Group - -
  • Human
  • -
  • Panther
  • -
    - - -
  • GR_Mancat
  • -
  • GR_Catman
  • -
    -
    - - - Lynx_Group - -
  • Human
  • -
  • Lynx
  • -
    - - -
  • GR_Mancat
  • -
  • GR_Catman
  • -
    -
    - - - Cat_Group - -
  • Human
  • -
  • Cat
  • -
    - - -
  • GR_Mancat
  • -
  • GR_Catman
  • -
    -
    - - - GR_Mancat_Group - -
  • Human
  • -
  • GR_Mancat
  • -
    - - -
  • Human
  • -
    -
    - - - GR_Catman_Group - -
  • Human
  • -
  • GR_Catman
  • -
    - - -
  • Human
  • -
    -
    - - - GuineaPig_Group - -
  • Human
  • -
  • GuineaPig
  • -
    - - -
  • GR_Mansquirrel
  • -
  • GR_Moleman
  • -
    -
    - - - Hare_Group - -
  • Human
  • -
  • Hare
  • -
    - - -
  • GR_Mansquirrel
  • -
  • GR_Moleman
  • -
    -
    - - - Snowhare_Group - -
  • Human
  • -
  • Snowhare
  • -
    - - -
  • GR_Mansquirrel
  • -
  • GR_Moleman
  • -
    -
    - - - Squirrel_Group - -
  • Human
  • -
  • Squirrel
  • -
    - - -
  • GR_Mansquirrel
  • -
  • GR_Moleman
  • -
    -
    - - - Rat_Group - -
  • Human
  • -
  • Rat
  • -
    - - -
  • GR_Mansquirrel
  • -
  • GR_Moleman
  • -
    -
    - - - Raccoon_Group - -
  • Human
  • -
  • Raccoon
  • -
    - - -
  • GR_Mansquirrel
  • -
  • GR_Moleman
  • -
    -
    - - - GR_Mansquirrel_Group - -
  • Human
  • -
  • GR_Mansquirrel
  • -
    - - -
  • Human
  • -
    -
    - - - GR_Moleman_Group - -
  • Human
  • -
  • GR_Moleman
  • -
    - - -
  • Human
  • -
    -
    - - - Thrumbo_Group - -
  • Human
  • -
  • Thrumbo
  • -
    - - -
  • GR_Thrumboman
  • -
    -
    - - - GR_Thrumboman_Group - -
  • Human
  • -
  • GR_Thrumboman
  • -
    - - -
  • Human
  • -
    -
    - - - - - - Dromedary_Group - -
  • Human
  • -
  • Dromedary
  • -
    - - -
  • GR_Hurseman
  • -
    -
    - - - Elk_Group - -
  • Human
  • -
  • Elk
  • -
    - - -
  • GR_Hurseman
  • -
    -
    - - - Horse_Group - -
  • Human
  • -
  • Horse
  • -
    - - -
  • GR_Hurseman
  • -
    -
    - - - Caribou_Group - -
  • Human
  • -
  • Caribou
  • -
    - - -
  • GR_Hurseman
  • -
    -
    - - - Donkey_Group - -
  • Human
  • -
  • Donkey
  • -
    - - -
  • GR_Hurseman
  • -
    -
    - - - GR_Hurseman_Group - -
  • Human
  • -
  • GR_Hurseman
  • -
    - - -
  • Human
  • -
    -
    - - - Megascarab_Group - -
  • Human
  • -
  • Megascarab
  • -
    - - -
  • GR_Manscarab
  • -
    -
    - - - Spelopede_Group - -
  • Human
  • -
  • Spelopede
  • -
    - - -
  • GR_Manscarab
  • -
    -
    - - - Megaspider_Group - -
  • Human
  • -
  • Megaspider
  • -
    - - -
  • GR_Manscarab
  • -
    -
    - - - GR_Manscarab_Group - -
  • Human
  • -
  • GR_Manscarab
  • -
    - - -
  • Human
  • -
    -
    - - - Iguana_Group - -
  • Human
  • -
  • Iguana
  • -
    - - -
  • GR_Lizardman
  • -
    -
    - - - Cobra_Group - -
  • Human
  • -
  • Cobra
  • -
    - - -
  • GR_Lizardman
  • -
    -
    - - - Tortoise_Group - -
  • Human
  • -
  • Tortoise
  • -
    - - -
  • GR_Lizardman
  • -
    -
    - - - GR_Lizardman_Group - -
  • Human
  • -
  • GR_Lizardman
  • -
    - - -
  • Human
  • -
    -
    - -
    diff --git a/README.md b/README.md index b9e5d14..cd3012d 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,36 @@ # RJW-Genes [NSFW] -[![BuyMeACoffee](https://raw.githubusercontent.com/pachadotdev/buymeacoffee-badges/main/bmc-white.svg)](https://buymeacoffee.com/vegapnk) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) - This mod adds genes related and based on RJW to Rimworld. ## Current Features - Different Genitalia Types - Genitalia Size Scaling -- Extra Genitalia, Male Pregnancy, Futas, Femboys -- Most RJW Traits +- Extra Genitalia (and a Futa Attempt) +- Most RJW Traits, Cumflation Immunity, Elasticity - Cum-Amount Changes, Transfer Nutrition Boosts -- Sexual Vampires that need Cum, Cocks or some other sources. -- Mech Breeding Additions & Orgasmic Mytosis +- Mech Breeding / Insect Breeding Additions - Human-Animal Gene Inheritance merged from [Shabakur](https://github.com/Shabakur/RJW_Animal_Gene_Inheritance) -- Genetic Diseases that spread on Intercourse -- Patches for some popular / common Xenotypes from other Mods. +- Succubi, Incubi & Cumazones that utilize Fertilin, similar to Hemogen -*You might not see all of them. Many genes just show up if other mods are loaded*. +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). -**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. +## Bugs? -## Structure +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. -- Toplevel: By Function (i.E. "Genes", "Animal Inheritance", "Utility") -- Then: By Domain, following the Gene-Categories ("Cosmetic","Special", "Damage",...) -- Last: By Type of Action (Def, Patch, etc.) +Please consider looking at [the known bugs](./KNOWN_BUGS.md) -So if you want to change / add a gene about shrinking cocks you were to go: `Genes -> GenitaliaSize -> Defs`. \ No newline at end of file +## 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. + +## Load Order / Deps + +1. Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience). +2. Should not be used with the original RJW_Animal_Gene_Inheritance anymore. +3. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now. +4. CAI5000 will not crash, but will make *Seduce*-Ability fail. I think same goes for Combat Extended. \ No newline at end of file diff --git a/Source/Animal_Inheritance/Harmony_Init.cs b/Source/Animal_Inheritance/Harmony_Init.cs new file mode 100644 index 0000000..1852e9b --- /dev/null +++ b/Source/Animal_Inheritance/Harmony_Init.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using Verse; + +namespace RJW_BGS +{ + [StaticConstructorOnStartup] + internal static class HarmonyInit + { + // Token: 0x0600001F RID: 31 RVA: 0x000029A4 File Offset: 0x00000BA4 + static HarmonyInit() + { + Harmony harmony = new Harmony("RJW_BGS"); + harmony.PatchAll(); + } + } +} diff --git a/Source/Animal_Inheritance/Patches/Patch_RJW_BasePregnancy_VanillaExpandedGenetics.cs b/Source/Animal_Inheritance/Patches/Patch_RJW_BasePregnancy_VanillaExpandedGenetics.cs deleted file mode 100644 index 1395575..0000000 --- a/Source/Animal_Inheritance/Patches/Patch_RJW_BasePregnancy_VanillaExpandedGenetics.cs +++ /dev/null @@ -1,103 +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 BasePregnancyPatcher - { - public static List supportedHybridRaces = new List() - { - "GR_Manbear", - "GR_Bearman", - "GR_Manalope", - "GR_Booman", - "GR_Manchicken", - "GR_Turkeyman", - "GR_Manffalo", - "GR_Muffaloman", - "GR_Manwolf", - "GR_Dogman", - "GR_Mancat", - "GR_Catman", - "GR_Mansquirrel", - "GR_Moleman", - "GR_Thrumboman", - "GR_Hurseman", - "GR_Manscarab", - "GR_Lizardman" - }; - - public static List supportedInitialAnimalRaces = new List() - { - "Bear_Grizzly", - "Bear_Polar", - "Boomalope", - "Chicken", - "Duck", - "Turkey", - "Goose", - "Ostrich", - "Emu", - "Cassowary", - "Cow", - "Muffalo", - "Bison", - "Yak", - "Warg", - "Wolf_Timber", - "Wolf_Arctic", - "Fox_Fennec", - "Fox_Red", - "Fox_Arctic", - "Husky", - "LabradorRetriever", - "YorkshireTerrier", - "Cougar", - "Panther", - "Lynx", - "Cat", - "GuineaPig", - "Hare", - "Snowhare", - "Squirrel", - "Rat", - "Raccoon", - "Thrumbo", - "Dromedary", - "Elk", - "Horse", - "Caribou", - "Donkey", - "Megascarab", - "Spelopede", - "Megaspider", - "Iguana", - "Cobra", - "Tortoise" - }; - - public static HediffDef controler = DefDatabase.GetNamed("rjw_genes_animal_control_hediff", false); - - [HarmonyPostfix] - [HarmonyPatch("GenerateBabies")] - public static void addHedif (Hediff_BasePregnancy __instance) - { - if (controler == null) return; - - foreach (Pawn baby in __instance.babies) - { - if(baby != null && supportedHybridRaces.Contains(baby.kindDef.race.defName)) - baby.health.AddHediff(controler); - } - } - - } -} diff --git a/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs b/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs index d8440e8..c5f6366 100644 --- a/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs +++ b/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs @@ -7,7 +7,6 @@ using HarmonyLib; using RimWorld; using Verse; using rjw; -using static RimWorld.PsychicRitualRoleDef; namespace RJW_BGS { @@ -44,9 +43,7 @@ namespace RJW_BGS // The mix-breed babies should be labelled hybrids baby.genes.hybrid = true; - - //reason = "AbilityDisabledNoFertilinGene".Translate(this.parent.pawn); - baby.genes.xenotypeName = "rjw_genes_bestiality_hybrid".Translate(); + baby.genes.xenotypeName = "Hybrid"; } } } diff --git a/Source/Animal_Inheritance/Patches/Patch_RJW_PregnancyHelper_VanillaExpandedGenetics.cs b/Source/Animal_Inheritance/Patches/Patch_RJW_PregnancyHelper_VanillaExpandedGenetics.cs deleted file mode 100644 index fab9645..0000000 --- a/Source/Animal_Inheritance/Patches/Patch_RJW_PregnancyHelper_VanillaExpandedGenetics.cs +++ /dev/null @@ -1,65 +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 hybrdiization 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. - /// - [HarmonyPrefix] - [HarmonyPatch("AddPregnancyHediff")] - public static bool AddPregnancyHediffPrefix(Pawn mother, Pawn father) - { - if (!RJW_BGSSettings.rjw_bgs_VE_genetics) return true; - if (mother == null || father == null) return true; - bool humanMotherAndSupportedAnimal = mother.IsHuman() && Patch_RJW_BasePregnancy_VanillaExpandedGenetics.supportedInitialAnimalRaces.Contains(father.kindDef.race.defName); - bool humanMotherAndSupportedHybrid = mother.IsHuman() && Patch_RJW_BasePregnancy_VanillaExpandedGenetics.supportedHybridRaces.Contains(father.kindDef.race.defName); - bool humanFatherAndSupportedAnimal = father.IsHuman() && Patch_RJW_BasePregnancy_VanillaExpandedGenetics.supportedInitialAnimalRaces.Contains(mother.kindDef.race.defName); - bool humanFatherAndSupportedHybrid = father.IsHuman() && Patch_RJW_BasePregnancy_VanillaExpandedGenetics.supportedHybridRaces.Contains(mother.kindDef.race.defName); - - if (!(humanMotherAndSupportedAnimal || humanMotherAndSupportedHybrid||humanFatherAndSupportedAnimal|| humanFatherAndSupportedHybrid)) return true; - if (humanMotherAndSupportedAnimal) - { - Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Father); - return false; - } - else if (humanMotherAndSupportedHybrid) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - RJW_Genes.ModLog.Message("preg hediffdefof PregnantHuman " + RimWorld.HediffDefOf.PregnantHuman); - - PregnancyHelper.StartVanillaPregnancy(mother, father); - return false; - } - else if (humanFatherAndSupportedAnimal) - { - Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Mother); - return false; - } - else if (humanFatherAndSupportedHybrid) - { - Hediff_BasePregnancy.Create(mother, father, DnaGivingParent.Father); - return false; - } - return true; - } - - } -} diff --git a/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs b/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs index 854df07..d619354 100644 --- a/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs +++ b/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs @@ -21,18 +21,16 @@ namespace RJW_BGS listing_Standard.ColumnWidth = rect.width / 2.05f; listing_Standard.Begin(rect); listing_Standard.Gap(24f); - listing_Standard.CheckboxLabeled("rjw_genes_animal_inheritance_settings_enabled_key".Translate(), ref rjw_bgs_enabled, "rjw_genes_animal_inheritance_settings_enabled_explanation".Translate(), 0f, 1f); + listing_Standard.CheckboxLabeled("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("rjw_genes_animal_inheritance_settings_added_as_xenogene_key".Translate(), ref rjw_bgs_animal_genes_as_xenogenes, "rjw_genes_animal_inheritance_settings_added_as_xenogene_explanation".Translate(), 0f, 1f); + listing_Standard.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("rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_key".Translate(), ref rjw_bgs_VE_genetics, "rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_explanation".Translate(), 0f, 1f); - listing_Standard.Gap(5f); - listing_Standard.CheckboxLabeled("rjw_genes_animal_inheritance_settings_detailed_debug_key".Translate(), ref rjw_bgs_detailed_debug, "rjw_genes_animal_inheritance_settings_detailed_debug_explanation".Translate(), 0f, 1f); + 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(); } @@ -43,13 +41,11 @@ namespace RJW_BGS Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_global_gene_chance, "rjw_bgs_global_gene_chance", RJW_BGSSettings.rjw_bgs_global_gene_chance, true); Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, "rjw_bgs_animal_genes_as_xenogenes", RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, true); Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_detailed_debug, "rjw_bgs_detailed_debug", RJW_BGSSettings.rjw_bgs_detailed_debug, true); - Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_VE_genetics, "rjw_bgs_VE_genetics", RJW_BGSSettings.rjw_bgs_VE_genetics, true); } public static float rjw_bgs_global_gene_chance = 1f; public static bool rjw_bgs_enabled = true; public static bool rjw_bgs_animal_genes_as_xenogenes = false; public static bool rjw_bgs_detailed_debug = false; - public static bool rjw_bgs_VE_genetics = true; } } diff --git a/Source/Common/Defs/ChanceExtension.cs b/Source/Common/Defs/ChanceExtension.cs deleted file mode 100644 index ff8b260..0000000 --- a/Source/Common/Defs/ChanceExtension.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class ChanceExtension : DefModExtension - { - public float chance; - } - -} diff --git a/Source/Common/Defs/DistanceExtension.cs b/Source/Common/Defs/DistanceExtension.cs deleted file mode 100644 index 8bdd083..0000000 --- a/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/Source/Common/Defs/HediffIncreaseOnSexExtension.cs b/Source/Common/Defs/HediffIncreaseOnSexExtension.cs deleted file mode 100644 index c5f648f..0000000 --- a/Source/Common/Defs/HediffIncreaseOnSexExtension.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class HediffIncreaseOnSexExtension: DefModExtension - { - public HediffDef hediffDef; - public float severityIncrease; - public float applicationChance; - - public bool canCreateHediff; - - public bool applicableForWomen; - public bool applicableForMen; - public bool requiresPenetrativeSex; - } - -} diff --git a/Source/Common/Defs/ModExtensionHelper.cs b/Source/Common/Defs/ModExtensionHelper.cs deleted file mode 100644 index d75fc12..0000000 --- a/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/Source/Common/Defs/MultiplierExtension.cs b/Source/Common/Defs/MultiplierExtension.cs deleted file mode 100644 index 5be194e..0000000 --- a/Source/Common/Defs/MultiplierExtension.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class MultiplierExtension : DefModExtension - { - public float multiplier; - } -} diff --git a/Source/Common/Defs/TickBasedChanceExtension.cs b/Source/Common/Defs/TickBasedChanceExtension.cs deleted file mode 100644 index 1a8feca..0000000 --- a/Source/Common/Defs/TickBasedChanceExtension.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class TickBasedChanceExtension : TickIntervalExtension - { - /// - /// Set to 1 for "always", set to 0 for "never". - /// Everything else is a bit statistics, but e.g. when set to .5 the chances grow per day from [50%, 75%, 82.25%, ...] - /// - public float eventChance; - } -} diff --git a/Source/Common/Defs/TickIntervalExtension.cs b/Source/Common/Defs/TickIntervalExtension.cs deleted file mode 100644 index 3e8184c..0000000 --- a/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/Source/Common/Either.cs b/Source/Common/Either.cs deleted file mode 100644 index dcd6dd8..0000000 --- a/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/Source/Common/Helpers/FactionUtility.cs b/Source/Common/Helpers/FactionUtility.cs deleted file mode 100644 index 10a4e7c..0000000 --- a/Source/Common/Helpers/FactionUtility.cs +++ /dev/null @@ -1,42 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class FactionUtility - { - - /// - /// Tries to change the goodwill between the factions of two pawns. - /// Exceptions when nothing happens: - /// - Pawns, or Pawns Factions, are null - /// - The `actors` Faction is not the players faction - /// - Both pawns have the same faction - /// - The Event is not found - /// - /// The pawn that initiated a faction-goodwill change by his actions - /// The pawn that was harmed/affected by the action - /// The event defname, for proper reporting - /// How much (positive or negative) the goodwill will change - public static void HandleFactionGoodWillPenalties(Pawn actor, Pawn target, string HistoryEventDefname, int goodWillChange, bool canSendHostileLetter=true) - { - if (actor == null) return; - if (target == null) return; - if ( - target.Faction != null && actor.Faction != null - && target.Faction != actor.Faction - && target.Faction != Faction.OfPlayer) - { - HistoryEventDef reason = DefDatabase.GetNamedSilentFail(HistoryEventDefname); - if (reason == null) return; - - target.Faction.TryAffectGoodwillWith(actor.Faction, goodWillChange, true, canSendHostileLetter, reason, target); - } - } - } -} diff --git a/Source/Common/Helpers/LaborState.cs b/Source/Common/Helpers/LaborState.cs deleted file mode 100644 index 8a0e59d..0000000 --- a/Source/Common/Helpers/LaborState.cs +++ /dev/null @@ -1,24 +0,0 @@ - -using Verse; - - -namespace RJW_Genes -{ - class LaborState - { - public Pawn pawn; - public int birthTotal = 0; - public int birthCount = 1; - public bool hasOvaryAgitator = false; - public bool hasBioscaffold = false; - - public LaborState(Pawn pawn, int birthTotal) - { - this.pawn = pawn; - this.birthTotal = birthTotal; - this.birthCount = 0; - this.hasOvaryAgitator = pawn.health.hediffSet.HasHediff(HediffDef.Named("OvaryAgitator")); - this.hasBioscaffold = pawn.health.hediffSet.HasHediff(HediffDef.Named("OvaryAgitator")); - } - } -} diff --git a/Source/Common/Helpers/MapUtility.cs b/Source/Common/Helpers/MapUtility.cs deleted file mode 100644 index 79e45a6..0000000 --- a/Source/Common/Helpers/MapUtility.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Verse; - -namespace RJW_Genes -{ - public class MapUtility - { - /// - /// 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; - } - - } -} diff --git a/Source/Common/ModLog.cs b/Source/Common/ModLog.cs index b78e675..407520a 100644 --- a/Source/Common/ModLog.cs +++ b/Source/Common/ModLog.cs @@ -30,12 +30,5 @@ namespace RJW_Genes Log.Warning($"[{ModId}] {message}"); } - public static void Debug(string message) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - Log.Message($"[{ModId}][debug] {message}"); - } - } } } diff --git a/Source/Common/patches/PatchImplants.cs b/Source/Common/patches/PatchImplants.cs deleted file mode 100644 index 037e081..0000000 --- a/Source/Common/patches/PatchImplants.cs +++ /dev/null @@ -1,72 +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_Genes -{ - - public class PatchImplants - { - public static readonly ThoughtDef regretsStealingLovin = DefDatabase.GetNamed("RegretsStealingLovin"); - public static readonly ThoughtDef stoleSomeLovin = DefDatabase.GetNamed("StoleSomeLovin"); - public static readonly ThoughtDef bloodlustStoleSomeLovin = DefDatabase.GetNamed("BloodlustStoleSomeLovin"); - public static readonly TraitDef rapist = DefDatabase.GetNamed("Rapist"); - - static Dictionary laborStateMap = new Dictionary(); - static public void would_rape_PostFix(ref bool __result, Pawn rapist) - { - if (rapist.health.hediffSet.HasHediff(HediffDef.Named("LimbicStimulator"))) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Message("Found LimbicStimulator hediff during xxx.would_rape check"); - ModLog.Message("Pawn: " + rapist.NameShortColored + " (" + rapist.ThingID + ")"); - ModLog.Message("__result (Before roll): " + __result); - } - __result = Rand.Chance(0.95f); - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Message("__result (After roll): " + __result); - } - } - } - - static public void is_rapist_PostFix(ref bool __result, Pawn pawn) - { - if (pawn.health.hediffSet.HasHediff(HediffDef.Named("LimbicStimulator"))) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Message("Found LimbicStimulator hediff during xxx.is_rapist check for " + pawn.NameShortColored + " (" + pawn.ThingID + ")" + " with __result = " + __result + " - forcing to true"); - __result = true; - } - } - } - - static public void think_about_sex_Rapist_PostFix(ref ThoughtDef __result, Pawn pawn) - { - if (RJW_Genes_Settings.regretStealingLovinThoughtDisabled) return; - - if (pawn.health.hediffSet.HasHediff(HediffDef.Named("LimbicStimulator")) && (__result == stoleSomeLovin || __result == bloodlustStoleSomeLovin) && !pawn.story.traits.HasTrait(rapist)) - { - __result = regretsStealingLovin; - } - } - - - public static void MultiplyPregnancy(ref float __result, Pawn pawn) - { - if (pawn != null && pawn.health.hediffSet.HasHediff(HediffDef.Named("Bioscaffold"))) - { - __result *= 2f; - } - } - } -} diff --git a/Source/Common/patches/PatchPregnancyHelper.cs b/Source/Common/patches/PatchPregnancyHelper.cs deleted file mode 100644 index d646323..0000000 --- a/Source/Common/patches/PatchPregnancyHelper.cs +++ /dev/null @@ -1,261 +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; -using RJW_Genes; -using rjw.Modules.Interactions.Enums; - -namespace RJW_Genes -{ - [HarmonyPatch(typeof(PregnancyHelper))] - public class PatchPregnancyHelper - { - public static HediffDef vasectomydef = DefDatabase.GetNamed("Vasectomy", true); - // Token: 0x0600000F RID: 15 - [HarmonyPostfix] - [HarmonyPatch("impregnate")] - private static void ImpregnatePostfix(ref SexProps props) - { - - if (RJWSettings.DevMode) rjw.ModLog.Message("Rimjobworld::impregnate(" + props.sexType + "):: " + xxx.get_pawnname(props.pawn) + " + " + xxx.get_pawnname(props.partner) + ":"); - - //"mech" pregnancy - if (props.sexType == xxx.rjwSextype.MechImplant) - { - return; - } - - Pawn giver = props.pawn; // orgasmer - Pawn receiver = props.partner; - - if (receiver.genes == null) - { - return; - } - Hediff vasectomy; - receiver.health.hediffSet.TryGetHediff(vasectomydef, out vasectomy); - - - - List pawnparts = giver.GetGenitalsList(); - List partnerparts = receiver.GetGenitalsList(); - var interaction = rjw.Modules.Interactions.Helpers.InteractionHelper.GetWithExtension(props.dictionaryKey); - - - if (!(props.sexType == xxx.rjwSextype.Anal && receiver.genes.HasActiveGene(GeneDefOf.rjw_genes_fertile_anus))) - return; - - //"normal" and "beastial" pregnancy - if (RJWSettings.DevMode) ModLog.Message(" 'normal' pregnancy checks"); - - //interaction stuff if for handling futa/see who penetrates who in interaction - if (!props.isReceiver && - interaction.DominantHasTag(GenitalTag.CanPenetrate) && - interaction.SubmissiveHasFamily(GenitalFamily.Anus)) - { - if (RJWSettings.DevMode) ModLog.Message(" impregnate - by initiator"); - } - else if (props.isReceiver && props.isRevese && - interaction.DominantHasFamily(GenitalFamily.Anus) && - interaction.SubmissiveHasTag(GenitalTag.CanPenetrate)) - { - if (RJWSettings.DevMode) ModLog.Message(" impregnate - by receiver (reverse)"); - } - else - { - if (RJWSettings.DevMode) ModLog.Message(" no valid interaction tags/family"); - return; - } - - if (!rjw.Modules.Interactions.Helpers.PartHelper.FindParts(giver, GenitalTag.CanFertilize).Any()) - { - if (RJWSettings.DevMode) ModLog.Message(xxx.get_pawnname(giver) + " has no parts to Fertilize with"); - return; - } - if (vasectomy != null) - { - if (RJWSettings.DevMode) ModLog.Message("vasectomy check"); - receiver.health.RemoveHediff(vasectomy); - } - if (CanImpregnate2(giver, receiver, props.sexType)) - { - - PregnancyHelper.DoImpregnate(giver, receiver); - - } - if (vasectomy != null) - { - if (RJWSettings.DevMode) ModLog.Message("vasectomy check"); - receiver.health.AddHediff(vasectomy); - } - } - - private static bool CanImpregnate2(Pawn fucker, Pawn fucked, xxx.rjwSextype sexType) - { - - if (fucker == null || fucked == null) - { - return false; - - } - if (RJWSettings.DevMode) - { - rjw.ModLog.Message(string.Concat(new string[] - { - "Rimjobworld::CanImpregnate checks (", - sexType.ToString(), - "):: ", - xxx.get_pawnname(fucker), - " + ", - xxx.get_pawnname(fucked), - ":" - })); - } - if (sexType == xxx.rjwSextype.MechImplant && !RJWPregnancySettings.mechanoid_pregnancy_enabled) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" mechanoid 'pregnancy' disabled"); - } - return false; - - } - if (sexType != xxx.rjwSextype.Vaginal && sexType != xxx.rjwSextype.DoublePenetration && !(sexType == xxx.rjwSextype.Anal && fucked.genes.HasActiveGene(GeneDefOf.rjw_genes_fertile_anus))) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" sextype cannot result in pregnancy"); - } - return false; - - } - if (AndroidsCompatibility.IsAndroid(fucker) && AndroidsCompatibility.IsAndroid(fucked)) - { - if (RJWSettings.DevMode) - { - ModLog.Message(xxx.get_pawnname(fucked) + " androids cant breed/reproduce androids"); - } - return false; - - } - if ((fucker.IsUnsexyRobot() || fucked.IsUnsexyRobot()) && sexType != xxx.rjwSextype.MechImplant) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" unsexy robot cant be pregnant"); - } - return false; - - } - if (!fucker.RaceHasPregnancy()) - { - if (RJWSettings.DevMode) - { - ModLog.Message(xxx.get_pawnname(fucked) + " filtered race that cant be pregnant"); - } - return false; - - } - if (!fucked.RaceHasPregnancy()) - { - if (RJWSettings.DevMode) - { - ModLog.Message(xxx.get_pawnname(fucker) + " filtered race that cant impregnate"); - } - return false; - - } - if (fucked.IsPregnant(false)) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" already pregnant."); - } - return false; - - } - List source = new List(); - fucked.health.hediffSet.GetHediffs(ref source, null); - if (source.Count > 1) - { - if (RJWSettings.DevMode) - { - ModLog.Message(xxx.get_pawnname(fucked) + " cant get pregnant while eggs inside"); - } - return false; - - } - List genitalsList = fucker.GetGenitalsList(); - List genitalsList2 = fucked.GetGenitalsList(); - if (!Genital_Helper.has_penis_fertile(fucker, genitalsList) && !Genital_Helper.has_penis_fertile(fucked, genitalsList2)) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" missing genitals for impregnation"+ Genital_Helper.has_penis_fertile(fucker, genitalsList)+" "+ Genital_Helper.has_anus(fucked, genitalsList2)+" "+ Genital_Helper.has_penis_fertile(fucked, genitalsList2)+" "+ Genital_Helper.has_anus(fucker, genitalsList)); - } - return false; - } - if (fucker.health.capacities.GetLevel(xxx.reproduction) <= 0f || fucked.health.capacities.GetLevel(xxx.reproduction) <= 0f) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" one (or both) pawn(s) infertile"); - } - return false; - - } - if (xxx.is_human(fucked) && xxx.is_human(fucker) && (RJWPregnancySettings.humanlike_impregnation_chance == 0 || !RJWPregnancySettings.humanlike_pregnancy_enabled)) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" human pregnancy chance set to 0% or pregnancy disabled."); - } - return false; - - } - if (((xxx.is_animal(fucker) && xxx.is_human(fucked)) || (xxx.is_human(fucker) && xxx.is_animal(fucked))) && !RJWPregnancySettings.bestial_pregnancy_enabled) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" bestiality pregnancy chance set to 0% or pregnancy disabled."); - } - return false; - - } - if (xxx.is_animal(fucked) && xxx.is_animal(fucker) && (RJWPregnancySettings.animal_impregnation_chance == 0 || !RJWPregnancySettings.animal_pregnancy_enabled)) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" animal-animal pregnancy chance set to 0% or pregnancy disabled."); - } - return false; - - } - if (fucker.def.defName != fucked.def.defName && RJWPregnancySettings.interspecies_impregnation_modifier <= 0f && !RJWPregnancySettings.complex_interspecies) - { - if (RJWSettings.DevMode) - { - ModLog.Message(" interspecies pregnancy disabled."); - } - return false; - - } - if (fucked.RaceProps.gestationPeriodDays <= 0f && fucked.TryGetComp() == null) - { - if (RJWSettings.DevMode) - { - ModLog.Message(xxx.get_pawnname(fucked) + " mother.RaceProps.gestationPeriodDays is " + fucked.RaceProps.gestationPeriodDays.ToString() + " cant impregnate"); - } - return false; - } - - return true; - } - - } -} diff --git a/Source/Common/patches/Patch_HediffIncreaseOnSex.cs b/Source/Common/patches/Patch_HediffIncreaseOnSex.cs deleted file mode 100644 index 55e85a3..0000000 --- a/Source/Common/patches/Patch_HediffIncreaseOnSex.cs +++ /dev/null @@ -1,80 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - - /// - /// This patch "only" applies the hediff increase on sex. - /// It checks for the hediff, creates it if necessary and applicable, - /// and increases it based on the severity, chance and genders specified in the Extension. - /// - /// Some hediffs want follow up logic, e.g. the Feminization Gene, - /// which is handled in an extra patch (that requires the hediff to be present already). - /// - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public class Patch_HediffIncreaseOnSex - { - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() || props.pawn.IsAnimal()) - { - return; - } - - Pawn pawn = props.pawn; - Pawn partner = props.partner; - - if (pawn.genes == null || partner.genes == null) return; - - TryApplyHediffsOfSex(pawn, partner, props); - TryApplyHediffsOfSex(partner, pawn, props); - } - - /// - /// Checks for every gene in a pawn if it applies a hediff or the severity of an existing hediff in a sexual partner. - /// If the checks pass, the hediff is added or changed accordingly. - /// - /// Pawn that holds (one or many) genes that might apply a hediff change - /// Pawn that will receive or alter any hediffs, if applicable - /// The Sexprops, used for checking if sex is penetrative - static void TryApplyHediffsOfSex(Pawn pawn, Pawn partner, SexProps props) - { - var random = new Random(); - - foreach (Gene gene in pawn.genes.GenesListForReading) - { - HediffIncreaseOnSexExtension ext = gene.def.GetModExtension(); - if (ext == null) continue; - - if (DiseaseHelper.IsImmuneAgainstGeneticDisease(partner, gene.def)) continue; - if (ext.requiresPenetrativeSex && DiseaseHelper.IsPenetrativeSex(props)) continue; - if (!ext.applicableForMen && partner.gender == Gender.Male) continue; - if (!ext.applicableForWomen && partner.gender == Gender.Female) continue; - if (random.NextDouble() >= ext.applicationChance) continue; - - Hediff hediff = partner.health.hediffSet.GetFirstHediffOfDef(ext.hediffDef); - if (hediff == null) - { - if (!ext.canCreateHediff) continue; - hediff = partner.health.GetOrAddHediff(ext.hediffDef); - hediff.Severity = 0.01f; - ModLog.Debug($"{partner} got hediff {hediff.def.defName} from Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn}"); - } - float initial_severity = hediff.Severity; - ModLog.Debug($"{partner}s hediff {hediff.def.defName} was changed by Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn} [from {initial_severity} to {initial_severity + ext.severityIncrease}]"); - hediff.Severity += ext.severityIncrease; - - // DevNote: I also want to have "negative" hediff changes here, but I think its not necessary. Once the severity reaches 0, or below, the hediff should remove itself. - } - } - - } -} diff --git a/Source/Common/patches/Patch_ParentRelationUtility_GetParents.cs b/Source/Common/patches/Patch_ParentRelationUtility_GetParents.cs deleted file mode 100644 index d6f2d94..0000000 --- a/Source/Common/patches/Patch_ParentRelationUtility_GetParents.cs +++ /dev/null @@ -1,171 +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_Genes -{ - /// - /// This Patch handles the changes to Fathers / Mothers when dealing with Femboys and Male/Male Pregnancies. - /// - /// This is related to - /// - [HarmonyPatch(typeof(ParentRelationUtility))] - public class Patch_ParentRelationUtility_GetParents - { - - [HarmonyPostfix] - [HarmonyPatch("GetFather")] - private static void FatherPostfix(ref Pawn __result, Pawn pawn) - { - if (__result == null && pawn.RaceProps.IsFlesh && pawn.relations != null) - { - List directRelations = pawn.relations.DirectRelations; - bool flag = false; - for (int i = 0; i < directRelations.Count; i++) - { - DirectPawnRelation directPawnRelation = directRelations[i]; - if (directPawnRelation.def == PawnRelationDefOf.Parent) - { - if (flag) - { - __result = directPawnRelation.otherPawn; - return; - } - flag = true; - } - } - } - } - - [HarmonyPostfix] - [HarmonyPatch("GetMother")] - private static void MotherPostfix(ref Pawn __result, Pawn pawn) - { - if (__result == null && pawn.RaceProps.IsFlesh && pawn.relations != null) - { - List directRelations = pawn.relations.DirectRelations; - for (int i = 0; i < directRelations.Count; i++) - { - DirectPawnRelation directPawnRelation = directRelations[i]; - if (directPawnRelation.def == PawnRelationDefOf.Parent) - { - __result = directPawnRelation.otherPawn; - return; - } - } - } - } - - - [HarmonyPostfix] - [HarmonyPatch("HasSameFather")] - private static void HasSameFatherPostfix(ref bool __result, Pawn pawn, Pawn other) - { - if (!__result && pawn.RaceProps.IsFlesh && pawn.relations != null) - { - Pawn parent = pawn.GetFather(); - Pawn parent2 = other.GetMother(); - Pawn parent3 = other.GetFather(); - Pawn parent4 = pawn.GetMother(); - if (parent != null && parent2 != null && parent == parent2) - { - __result = true; - return; - } - if (parent3 != null && parent4 != null && parent3 == parent4) - { - __result = true; - return; - } - if (parent != null && parent3 != null && parent == parent3) - { - __result = true; - return; - } - if (parent2 != null && parent4 != null && parent2 == parent4) - { - __result = true; - return; - } - } - } - - - [HarmonyPostfix] - [HarmonyPatch("HasSameMother")] - private static void HasSameMotherPostfix(ref bool __result, Pawn pawn, Pawn other) - { - if (!__result && pawn.RaceProps.IsFlesh && pawn.relations != null) - { - Pawn parent = pawn.GetFather(); - Pawn parent2 = other.GetMother(); - Pawn parent3 = other.GetFather(); - Pawn parent4 = pawn.GetMother(); - if (parent != null && parent2 != null && parent == parent2) - { - __result = true; - return; - } - if (parent3 != null && parent4 != null && parent3 == parent4) - { - __result = true; - return; - } - if (parent != null && parent3 != null && parent == parent3) - { - __result = true; - return; - } - if (parent2 != null && parent4 != null && parent2 == parent4) - { - __result = true; - return; - } - } - } - - [HarmonyPrefix] - [HarmonyPatch("SetFather")] - private static bool SetFatherPrefix(Pawn pawn, Pawn newFather) - { - Pawn father = pawn.GetFather(); - if (father != newFather) - { - if (father != null) - { - pawn.relations.RemoveDirectRelation(PawnRelationDefOf.Parent, father); - } - if (newFather != null) - { - pawn.relations.AddDirectRelation(PawnRelationDefOf.Parent, newFather); - } - } - return false; - } - - [HarmonyPrefix] - [HarmonyPatch("SetMother")] - private static bool SetMotherPrefix(Pawn pawn, Pawn newMother) - { - Pawn mother = pawn.GetMother(); - if (mother != newMother) - { - if (mother != null) - { - pawn.relations.RemoveDirectRelation(PawnRelationDefOf.Parent, mother); - } - if (newMother != null) - { - pawn.relations.AddDirectRelation(PawnRelationDefOf.Parent, newMother); - } - } - return false; - } - } -} diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index c410aea..e4af81f 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -21,22 +21,9 @@ namespace RJW_Genes public static readonly GeneDef rjw_genes_ovipositor_genitalia; public static readonly GeneDef rjw_genes_feline_genitalia; public static readonly GeneDef rjw_genes_canine_genitalia; - public static readonly GeneDef rjw_genes_demonicT_genitalia; - public static readonly GeneDef rjw_genes_crocodilian_genitalia; - public static readonly GeneDef rjw_genes_racoon_genitalia; - public static readonly GeneDef rjw_genes_reptilian_genitalia; - public static readonly GeneDef rjw_genes_Ghost_genitalia; - public static readonly GeneDef rjw_genes_Golem_genitalia; - public static readonly GeneDef rjw_genes_Marine_genitalia; - public static readonly GeneDef rjw_genes_Necro_genitalia; - public static readonly GeneDef rjw_genes_Needle_genitalia; - public static readonly GeneDef rjw_genes_Orc_genitalia; - public static readonly GeneDef rjw_genes_Pig_genitalia; - public static readonly GeneDef rjw_genes_Tentacle_genitalia; - public static readonly GeneDef rjw_genes_human_genitalia; - // Extra Genitalia - public static readonly GeneDef rjw_genes_extra_penis; + // 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; @@ -45,12 +32,9 @@ namespace RJW_Genes 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_femboy; - public static readonly GeneDef rjw_genes_featureless_chest; - public static readonly GeneDef rjw_genes_udder; - // Genitalia Sizes - public static readonly GeneDef rjw_genes_big_male_genitalia; + // 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; @@ -58,45 +42,33 @@ namespace RJW_Genes 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_zoophile; - public static readonly GeneDef rjw_genes_fertile_anus; - public static readonly GeneDef rjw_genes_mating_call; - public static readonly GeneDef rjw_genes_fervent_ovipositor; - public static readonly GeneDef rjw_genes_insectbreeder; public static readonly GeneDef rjw_genes_insectincubator; - public static readonly GeneDef rjw_genes_hardwired_progenity; - public static readonly GeneDef rjw_genes_blocked_masturbation; - public static readonly GeneDef rjw_genes_basic_rut; + public static readonly GeneDef rjw_genes_insectbreeder; + public static readonly GeneDef rjw_genes_zoophile; - // Cum - public static readonly GeneDef rjw_genes_no_cum; + // Cum + public static readonly GeneDef rjw_genes_no_cum; public static readonly GeneDef rjw_genes_much_cum; public static readonly GeneDef rjw_genes_very_much_cum; [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_likes_cumflation; [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_cumflation_immunity; - [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_generous_donor; - [MayRequire("rjw.sexperience")] public static readonly GeneDef rjw_genes_living_cumbucket; - - - // Reproduction - public static readonly GeneDef rjw_genes_hypersexual; + [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; - public static readonly GeneDef LitteredBirths; - // Damage & Side Effects - [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_elasticity; + // Damage & Side Effects + [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_elasticity; public static readonly GeneDef rjw_genes_unbreakable; // Special @@ -104,58 +76,27 @@ namespace RJW_Genes 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; - public static readonly GeneDef rjw_genes_cocoonweaver; - public static readonly GeneDef rjw_genes_sex_tamer; - public static readonly GeneDef rjw_genes_sexual_genetic_swap; - public static readonly GeneDef rjw_genes_sexual_genetic_thief; - public static readonly GeneDef rjw_genes_pregnancy_overwrite; - public static readonly GeneDef rjw_genes_feminizer; - public static readonly GeneDef rjw_genes_twinkifier; - // Cosmetic - public static readonly GeneDef rjw_genes_succubus_tail; - public static readonly GeneDef rjw_genes_succubus_wings; + // 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; - // Life force | Fertilin - 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; - // Diseases - public static readonly GeneDef rjw_genes_genetic_disease_immunity; - public static readonly GeneDef rjw_genes_minor_vulnerability; - public static readonly GeneDef rjw_genes_major_vulnerability; - public static readonly GeneDef rjw_genes_fluctual_sexual_needs; - public static readonly GeneDef rjw_genes_size_blinded; - public static readonly GeneDef rjw_genes_infectious_low_fertility; - public static readonly GeneDef rjw_genes_infectious_increased_sex_need; - public static readonly GeneDef rjw_genes_infectious_bisexuality; - public static readonly GeneDef rjw_genes_infectious_homosexuality; - public static readonly GeneDef rjw_genes_infectious_hypersexuality; - public static readonly GeneDef rjw_genes_stretcher; - public static readonly GeneDef rjw_genes_infectious_blocked_masturbation; - public static readonly GeneDef rjw_genes_infectious_rut; + //Other Defs + public static readonly XenotypeDef rjw_genes_succubus; + public static readonly DutyDef rjw_genes_flirt; + public static readonly MentalBreakDef rjw_genes_lifeforce_randomrape; - //Other Defs - public static readonly XenotypeDef rjw_genes_succubus; - public static readonly DutyDef rjw_genes_flirt; - public static readonly MentalBreakDef rjw_genes_lifeforce_randomrape; - [MayRequire("resplice.xotr.charmweavers")] public static GeneDef RS_LoveFeed = DefDatabase.GetNamed("RS_LoveFeed", false); - [MayRequire("resplice.xotr.charmweavers")] public static GeneDef RS_MultiPregnancy = DefDatabase.GetNamed("RS_MultiPregnancy", false); - [MayRequire("redmattis.bigsmall.core")] public static GeneDef VU_VampireLover = DefDatabase.GetNamed("VU_VampireLover", false); - [MayRequire("vanillaracesexpanded.highmate")] public static GeneDef VRE_LovinDependency = DefDatabase.GetNamed("VRE_LovinDependency", false); - - - - } + } } diff --git a/Source/Genes/Breeding/Abilities/CompAbilityEffect_MatingCall.cs b/Source/Genes/Breeding/Abilities/CompAbilityEffect_MatingCall.cs deleted file mode 100644 index f09bb94..0000000 --- a/Source/Genes/Breeding/Abilities/CompAbilityEffect_MatingCall.cs +++ /dev/null @@ -1,35 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse.Sound; -using Verse; -using RimWorld.Planet; -using rjw; -using HarmonyLib; -using Verse.AI; - -namespace RJW_Genes -{ - public class CompAbilityEffect_MatingCall : CompAbilityEffect - { - - private new CompProperties_AbilityMatingCall Props - { - get - { - return (CompProperties_AbilityMatingCall)this.props; - } - } - - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) - { - base.Apply(target, dest); - ModLog.Message($"{this.parent.pawn} is casting MatingCall"); - AnimalBreedingHelper.DoAnimalBreedingPulse(this.parent.pawn, Props.calldistance); - } - - } -} diff --git a/Source/Genes/Breeding/Abilities/CompAbilityEffect_PheromoneSpit.cs b/Source/Genes/Breeding/Abilities/CompAbilityEffect_PheromoneSpit.cs deleted file mode 100644 index 49ae4d7..0000000 --- a/Source/Genes/Breeding/Abilities/CompAbilityEffect_PheromoneSpit.cs +++ /dev/null @@ -1,30 +0,0 @@ -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using Verse.AI; - -namespace RJW_Genes -{ - public class CompAbilityEffect_PheromoneSpit : CompAbilityEffect - { - private new CompProperties_AbilityPheromoneSpit Props - { - get - { - return (CompProperties_AbilityPheromoneSpit)this.props; - } - } - - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) - { - base.Apply(target, dest); - AnimalBreedingHelper.DoAnimalBreedingPulse(target.Pawn, Props.calldistance); - } - - } -} diff --git a/Source/Genes/Breeding/Abilities/CompProperties_AbilityMatingCall.cs b/Source/Genes/Breeding/Abilities/CompProperties_AbilityMatingCall.cs deleted file mode 100644 index e30485c..0000000 --- a/Source/Genes/Breeding/Abilities/CompProperties_AbilityMatingCall.cs +++ /dev/null @@ -1,20 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace RJW_Genes -{ - public class CompProperties_AbilityMatingCall : CompProperties_AbilityEffect - { - - public int calldistance; - - public CompProperties_AbilityMatingCall() - { - this.compClass = typeof(CompAbilityEffect_MatingCall); - } - } -} diff --git a/Source/Genes/Breeding/Abilities/CompProperties_AbilityPheromoneSpit.cs b/Source/Genes/Breeding/Abilities/CompProperties_AbilityPheromoneSpit.cs deleted file mode 100644 index 381843f..0000000 --- a/Source/Genes/Breeding/Abilities/CompProperties_AbilityPheromoneSpit.cs +++ /dev/null @@ -1,18 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace RJW_Genes { - public class CompProperties_AbilityPheromoneSpit : CompProperties_AbilityEffect - { - public int calldistance; - - public CompProperties_AbilityPheromoneSpit() - { - this.compClass = typeof(CompAbilityEffect_PheromoneSpit); - } - } -} diff --git a/Source/Genes/Breeding/AnimalBreedingHelper.cs b/Source/Genes/Breeding/AnimalBreedingHelper.cs deleted file mode 100644 index c44a4c3..0000000 --- a/Source/Genes/Breeding/AnimalBreedingHelper.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse.AI; -using Verse; - -namespace RJW_Genes -{ - public class AnimalBreedingHelper - { - - /// - /// Finds animals in a distance around a pawn, and schedules a breeding job. - /// This is done regardless of the animals genitalia at the moment. - /// This function has no checks if the Pawn is hostile, downed, etc., such checks must be done upstream! - /// - /// The pawn that will be target of breeding animals - /// The range around the pawn for which animals will be triggered. - public static void DoAnimalBreedingPulse(Pawn toBeBred, int pulse_distance, bool ends_manhunter = true) - { - IEnumerable animals = GetAnimalsInRange(toBeBred.Map, toBeBred.Position, pulse_distance); - int breeder_counter = 0; - - foreach (Pawn animal in animals) - { - if (ends_manhunter) - EndManHunter(animal); - - if (!RJW_Genes_Settings.animalMatingPulseCheckForGenitals || rjw.xxx.can_rape(animal)) - { - ForceBreedingJob(toBeBred, animal); - breeder_counter++; - } - - } - ModLog.Message($"{breeder_counter} of {animals.Count()} Animals in range are trying to breed {toBeBred}"); - } - - private static IEnumerable GetAnimalsInRange(Map map, IntVec3 position, int distance) - { - IEnumerable animals = - map.mapPawns - .AllPawnsSpawned - .Where((Func)(p => - p.IsNonMutantAnimal - && p.Position.InHorDistOf(position, distance) - && xxx.is_healthy_enough(p)) - ); - - return animals; - } - - private static void ForceBreedingJob(Pawn toBeBred, Pawn animal) - { - // Stopping all Jobs in this way is a bit heavy - but as it's only about Animals this should be fine. - animal.jobs.CaptureAndClearJobQueue(); - animal.jobs.StopAll(); - Job job = JobMaker.MakeJob(xxx.animalBreed, toBeBred); - animal.jobs.TryTakeOrderedJob(job); - } - - private static void EndManHunter(Pawn animal) - { - if (animal.MentalState != null && (animal.MentalState.def == MentalStateDefOf.Manhunter || animal.MentalState.def == MentalStateDefOf.ManhunterPermanent)) - { - animal?.MentalState?.RecoverFromState(); - } - - } - } -} diff --git a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_ManyChildren.cs b/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_ManyChildren.cs deleted file mode 100644 index c483eb3..0000000 --- a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_ManyChildren.cs +++ /dev/null @@ -1,38 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class ConditionalStatAffecter_ManyChildren : ConditionalStatAffecter - { - public override string Label => (string)"StatsReport_ManyChildren".Translate(); - - public const int THRESHOLD_FOR_CHILDREN = 3; - - public override bool Applies(StatRequest req) - { - if (req == null || req.Thing == null || !req.Thing.Spawned) return false; - - if (req.Thing is Pawn pawn) - { - // Do nothing if Pawn is Baby or Child (#25) - if (!pawn.ageTracker.Adult) - return false; - - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_hardwired_progenity)) - { - // This "middle" Conditional Stat Affecter only fires if the other one does not apply - return pawn.relations.ChildrenCount >= THRESHOLD_FOR_CHILDREN - && pawn.relations.ChildrenCount < ConditionalStatAffecter_VeryManyChildren.THRESHOLD_FOR_CHILDREN; - } - } - - return false; - } - } -} diff --git a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_NoChildren.cs b/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_NoChildren.cs deleted file mode 100644 index 4f50994..0000000 --- a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_NoChildren.cs +++ /dev/null @@ -1,43 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - /// - /// This conditional stat affecter "fires" if the pawn has no children. - /// - /// DevNote: I salvaged this from 1.3.3 Halamyr Conditional Stat Affecters. - /// It seems that with RW 1.5 there was a change how these work, as the req.Pawn seems to be null. - /// Now, the pawn is in req.Thing. - /// - public class ConditionalStatAffecter_NoChildren : ConditionalStatAffecter - { - public override string Label => (string)"StatsReport_NoChildren".Translate(); - - public override bool Applies(StatRequest req) - { - if (req == null || req.Thing == null || !req.Thing.Spawned) return false; - - if (req.Thing is Pawn pawn) - { - // Do nothing if Pawn is Baby or Child (#25) - if (!pawn.ageTracker.Adult) - return false; - - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_hardwired_progenity)) - { - return pawn.relations.ChildrenCount == 0; - } - } - - return false; - } - - } - -} diff --git a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_VeryManyChildren.cs b/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_VeryManyChildren.cs deleted file mode 100644 index e14d4f1..0000000 --- a/Source/Genes/Breeding/ConditionalStatAffecters/ConditionalStatAffecter_VeryManyChildren.cs +++ /dev/null @@ -1,36 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class ConditionalStatAffecter_VeryManyChildren : ConditionalStatAffecter - { - public override string Label => (string)"StatsReport_VeryManyChildren".Translate(); - - public const int THRESHOLD_FOR_CHILDREN = 8; - - public override bool Applies(StatRequest req) - { - if (req == null || req.Thing == null || !req.Thing.Spawned) return false; - - if (req.Thing is Pawn pawn) - { - // Do nothing if Pawn is Baby or Child (#25) - if (!pawn.ageTracker.Adult) - return false; - - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_hardwired_progenity)) - { - return pawn.relations.ChildrenCount >= THRESHOLD_FOR_CHILDREN; - } - } - - return false; - } - } -} diff --git a/Source/Genes/Breeding/Genes/Gene_MechBreeder.cs b/Source/Genes/Breeding/Gene_MechBreeder.cs similarity index 100% rename from Source/Genes/Breeding/Genes/Gene_MechBreeder.cs rename to Source/Genes/Breeding/Gene_MechBreeder.cs diff --git a/Source/Genes/Breeding/Genes/Gene_FerventOvipositor.cs b/Source/Genes/Breeding/Genes/Gene_FerventOvipositor.cs deleted file mode 100644 index 3d8f612..0000000 --- a/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_PartBaseNatural OvipositorF = (Hediff_PartBaseNatural)pawn.health.hediffSet.GetFirstHediffOfDef(rjw.Genital_Helper.ovipositorF); - - if (OvipositorF == null) return; - - OvipositorF.nextEggTick = Math.Max(OvipositorF.nextEggTick - MULTIPLIER, -1); - - // 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/Source/Genes/Breeding/Genes/Gene_InsectIncubator.cs b/Source/Genes/Breeding/Genes/Gene_InsectIncubator.cs deleted file mode 100644 index ce53827..0000000 --- a/Source/Genes/Breeding/Genes/Gene_InsectIncubator.cs +++ /dev/null @@ -1,67 +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. - /// - 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/Source/Genes/Breeding/Genes/Gene_Rut.cs b/Source/Genes/Breeding/Genes/Gene_Rut.cs deleted file mode 100644 index 9240dcd..0000000 --- a/Source/Genes/Breeding/Genes/Gene_Rut.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class Gene_Rut : Gene - { - public override void Tick() - { - base.Tick(); - - if (pawn == null || pawn.genes == null) - return; - - var chanceExtension = this.def.GetModExtension(); - if (chanceExtension == null) return; - - if (pawn.IsHashIntervalTick(chanceExtension.tickInterval)){ - Random r = new Random(); - if (r.NextDouble() < chanceExtension.eventChance) - { - Hediff rut = pawn.health.GetOrAddHediff(HediffDefOf.rjw_genes_genetic_rut); - rut.Severity = 1; - ModLog.Debug($"Pawn {pawn} gained rjw_genes_genetic_rut based on chance."); - } - } - } - } -} diff --git a/Source/Genes/Breeding/Patches/PatchMechBirth.cs b/Source/Genes/Breeding/PatchMechBirth.cs similarity index 100% rename from Source/Genes/Breeding/Patches/PatchMechBirth.cs rename to Source/Genes/Breeding/PatchMechBirth.cs diff --git a/Source/Genes/Breeding/PatchPawnExtensions.cs b/Source/Genes/Breeding/PatchPawnExtensions.cs new file mode 100644 index 0000000..be2e2dc --- /dev/null +++ b/Source/Genes/Breeding/PatchPawnExtensions.cs @@ -0,0 +1,24 @@ +using HarmonyLib; +using rjw; +using Verse; + +namespace RJW_Genes +{ + /// + /// Kindly provided by 'shabalox' https://github.com/Shabalox/RJW_Genes_Addons/ + /// + /// Note on the logic: the result mentioned below is changing the result of fertilization (true or false) to true if the pawn has the insect-breeder gene. + /// + [HarmonyPatch(typeof(PawnExtensions), "RaceImplantEggs")] + public static class PatchPawnExtensions + { + [HarmonyPostfix] + public static void Postfix(Pawn pawn, ref bool __result) + { + if (!__result) + { + __result = GeneUtility.IsInsectBreeder(pawn); + } + } + } +} \ No newline at end of file diff --git a/Source/Genes/Breeding/PatchPregnancyHelper.cs b/Source/Genes/Breeding/PatchPregnancyHelper.cs new file mode 100644 index 0000000..81a0ad4 --- /dev/null +++ b/Source/Genes/Breeding/PatchPregnancyHelper.cs @@ -0,0 +1,54 @@ +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/ + /// + [HarmonyPatch(typeof(PregnancyHelper), "DoEgg")] + static class PatchPregnancyHelper + { + [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/Source/Genes/Breeding/Patch_EggFertilization.cs b/Source/Genes/Breeding/Patch_EggFertilization.cs new file mode 100644 index 0000000..d2f2dcf --- /dev/null +++ b/Source/Genes/Breeding/Patch_EggFertilization.cs @@ -0,0 +1,98 @@ +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 + /// + [HarmonyPatch(typeof(SexUtility), "Aftersex")] + static class Patch_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/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation.cs b/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation.cs deleted file mode 100644 index c888bda..0000000 --- a/Source/Genes/Breeding/Patches/Patch_BlockedMasturbation.cs +++ /dev/null @@ -1,26 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - [HarmonyPatch(typeof(xxx), "can_masturbate")] - public class Patch_BlockedMasturbation - { - public void PostFix(Pawn pawn, ref bool __result) - { - if (pawn != null && !pawn.IsAnimal() && pawn.genes != null) - { - __result = __result - && !pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_blocked_masturbation) - && !pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_infectious_blocked_masturbation); - } - } - - } -} diff --git a/Source/Genes/Cum/CumUtility.cs b/Source/Genes/Cum/CumUtility.cs index dba96b1..b483aed 100644 --- a/Source/Genes/Cum/CumUtility.cs +++ b/Source/Genes/Cum/CumUtility.cs @@ -34,23 +34,8 @@ namespace RJW_Genes } - /// - /// Looks up the "MultiplierExtensions" Value for a given Gene, with a fall back. - /// Returns the fallback if there is no Extension, or if the Multiplier is smaller than 0. - /// - - public static float LookupCumMultiplier(Gene gene, float FALLBACK = 3.0f) => LookupCumMultiplier(gene.def,FALLBACK); - public static float LookupCumMultiplier(GeneDef def, float FALLBACK = 3.0f) - { - MultiplierExtension multiplier = def.GetModExtension(); - if (multiplier == null || multiplier.multiplier < 0) - return FALLBACK; - else return multiplier.multiplier; - } - - - //Get total fluidamount a person has. - public static float GetTotalFluidAmount(Pawn pawn, float multiplier = 1f) + //Get total fluidamount a person has. + public static float GetTotalFluidAmount(Pawn pawn, float multiplier = 1f) { var partBPR = Genital_Helper.get_genitalsBPR(pawn); var parts = Genital_Helper.get_PartsHediffList(pawn, partBPR); diff --git a/Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs b/Source/Genes/Cum/Gene_MuchCum.cs similarity index 51% rename from Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs rename to Source/Genes/Cum/Gene_MuchCum.cs index dc10ba4..e88ac3f 100644 --- a/Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs +++ b/Source/Genes/Cum/Gene_MuchCum.cs @@ -1,38 +1,36 @@ namespace RJW_Genes { - public class Gene_ChangeCumAmount : RJW_Gene + public class Gene_MuchCum : RJW_Gene { bool has_been_fired = false; + float multiplier_much_cum = 3f; public override void PostMake() { base.PostMake(); - float multipier = CumUtility.LookupCumMultiplier(this); - CumUtility.MultiplyFluidAmountBy(pawn, multipier); + CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum); has_been_fired = true; } public override void PostAdd() { base.PostAdd(); - if (!has_been_fired) - { - float multipier = CumUtility.LookupCumMultiplier(this); - CumUtility.MultiplyFluidAmountBy(pawn, multipier); + if (!has_been_fired) { + CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum); has_been_fired = true; } } + public override void PostRemove() { base.PostAdd(); if (has_been_fired) { - float multipier = CumUtility.LookupCumMultiplier(this); - CumUtility.MultiplyFluidAmountBy(pawn, 1/ multipier); + CumUtility.MultiplyFluidAmountBy(pawn, 1/multiplier_much_cum); has_been_fired = false; } } diff --git a/Source/Genes/Cum/Gene_NoCum.cs b/Source/Genes/Cum/Gene_NoCum.cs new file mode 100644 index 0000000..0c3e888 --- /dev/null +++ b/Source/Genes/Cum/Gene_NoCum.cs @@ -0,0 +1,34 @@ +namespace RJW_Genes +{ + public class Gene_NoCum : RJW_Gene + { + bool has_been_fired = false; + + + public override void PostMake() + { + base.PostMake(); + + CumUtility.MultiplyFluidAmountBy(pawn, 0f); + has_been_fired = true; + } + + public override void PostAdd() + { + base.PostAdd(); + if (!has_been_fired) { + CumUtility.MultiplyFluidAmountBy(pawn, 0f); + has_been_fired = true; + } + } + + + public override void PostRemove() + { + // Cum Removal does not do at the moment :/ I would need to safe the old cum amount but I don't want to at the moment + base.PostAdd(); + + } + + } +} diff --git a/Source/Genes/Cum/Gene_VeryMuchCum.cs b/Source/Genes/Cum/Gene_VeryMuchCum.cs new file mode 100644 index 0000000..21faecc --- /dev/null +++ b/Source/Genes/Cum/Gene_VeryMuchCum.cs @@ -0,0 +1,39 @@ +namespace RJW_Genes +{ + public class Gene_VeryMuchCum : RJW_Gene + { + bool has_been_fired = false; + + float multiplier_much_cum = 10f; + + public override void PostMake() + { + base.PostMake(); + + CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum); + has_been_fired = true; + } + + public override void PostAdd() + { + base.PostAdd(); + if (!has_been_fired) { + CumUtility.MultiplyFluidAmountBy(pawn, multiplier_much_cum); + has_been_fired = true; + } + } + + + public override void PostRemove() + { + base.PostAdd(); + + if (has_been_fired) + { + CumUtility.MultiplyFluidAmountBy(pawn, 1/multiplier_much_cum); + has_been_fired = false; + } + } + + } +} diff --git a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs deleted file mode 100644 index 48708cb..0000000 --- a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs +++ /dev/null @@ -1,28 +0,0 @@ - -using RimWorld; -using System; -using Verse; - -namespace RJW_Genes -{ - public class HediffComp_ProcessCumbucket : HediffComp - { - - public HediffsCompProperties_ProcessCumbucketMTB Props - { - get - { - return (HediffsCompProperties_ProcessCumbucketMTB)this.props; - } - } - - public override void CompPostTick(ref float severityAdjustment) - { - if (this.Props.mtbDaysPerStage[this.parent.CurStageIndex] > 0f && base.Pawn.IsHashIntervalTick(60) && Rand.MTBEventOccurs(this.Props.mtbDaysPerStage[this.parent.CurStageIndex], 60000f, 60f)) - { - ModLog.Debug($"Triggered HediffComp_ProcessCumbucket CompPostTick - Starting a JobDriver ProcessCumbucket for {this.parent.pawn}"); - this.Pawn.jobs.StartJob(JobMaker.MakeJob(DefDatabase.GetNamed("ProcessCumbucket")), lastJobEndCondition: Verse.AI.JobCondition.InterruptForced, resumeCurJobAfterwards: true); - } - } - } -} diff --git a/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs b/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs deleted file mode 100644 index 919b715..0000000 --- a/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class HediffsCompProperties_ProcessCumbucketMTB : HediffCompProperties - { - public HediffsCompProperties_ProcessCumbucketMTB() - { - this.compClass = typeof(HediffComp_ProcessCumbucket); - } - - public override IEnumerable ConfigErrors(HediffDef parentDef) - { - foreach (string text in base.ConfigErrors(parentDef)) - { - yield return text; - } - if (this.mtbDaysPerStage == null) - { - yield return "mtbDaysPerStage is not defined"; - } - else if (this.mtbDaysPerStage.Count != parentDef.stages.Count) - { - yield return "mtbDaysPerStage count doesn't match Hediffs number of stages"; - } - yield break; - } - - public List mtbDaysPerStage; - } -} diff --git a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs deleted file mode 100644 index b924a6d..0000000 --- a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs +++ /dev/null @@ -1,132 +0,0 @@ -using LicentiaLabs; -using System.Collections.Generic; -using Verse; -using Verse.AI; -using UnityEngine; -using System; -using rjw; -using RimWorld; - -namespace RJW_Genes -{ - /// - /// Shamelessly stolen from LicentaLabs - /// [Jaals Fork] https://gitgud.io/Jaaldabaoth/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/JobDriver_VomitCum.cs - /// - class JobDriver_ProcessingCumbucket : JobDriver_Vomit - { - public override bool CanBeginNowWhileLyingDown() - { - return true; - } - - protected override IEnumerable MakeNewToils() - { - if (!ModsConfig.IsActive("rjw.sexperience")) - yield break; - - Toil toil = new Toil(); - toil.initAction = delegate () - { - this.ticksLeft = Rand.Range(150, 600); - int num = 0; - IntVec3 c; - for (; ; ) - { - c = this.pawn.Position + GenAdj.AdjacentCellsAndInside[Rand.Range(0, 9)]; - num++; - if (num > 12) - { - break; - } - if (c.InBounds(this.pawn.Map) && c.Standable(this.pawn.Map)) - { - // DevNote: I am not 100% what this all means, but IL_77 is a jump to the case below (it says IL_77). - // basically, this calls the next part of the function, but I am not super sure why this has to be like this. - // JobDrivers are scary. - goto IL_77; - } - } - c = this.pawn.Position; - IL_77: - this.job.targetA = c; - this.pawn.pather.StopDead(); - }; - toil.tickAction = delegate () - { - if (this.ticksLeft % 150 == 149) - { - if (!sourceName.NullOrEmpty()) - { - if (ModsConfig.IsActive("LustLicentia.RJWLabs")) - FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum, sourceName); - SpawnCum(this.pawn, this.job.targetA.Cell, base.Map); - } - else - { - if (ModsConfig.IsActive("LustLicentia.RJWLabs")) - FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum); - SpawnCum(this.pawn, this.job.targetA.Cell, base.Map); - } - } - this.ticksLeft--; - if (this.ticksLeft <= 0) - { - base.ReadyForNextToil(); - TaleRecorder.RecordTale(Licentia.TaleDefs.VomitedCum, new object[] - { - this.pawn - }); - } - }; - toil.defaultCompleteMode = ToilCompleteMode.Never; - toil.WithEffect(EffecterDefOf.Vomit, TargetIndex.A, new Color(100f, 100f, 100f, 0.5f)); - toil.PlaySustainerOrSound(() => SoundDefOf.Vomit, 1f); - yield return toil; - yield break; - } - - private void SpawnCum(Pawn pawn, IntVec3 cell, Map map) - { - ThingDef cumDef = DefDatabase.GetNamed("GatheredCum", true); - - Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket); - if (hediff == null) - { - ModLog.Warning($"{pawn} has the JobDriver_ProcessCumbucket but does not have the Hediff for filled cumbucket."); - return; - } - - // Case 1: "Normal Severity", just puke out a bit of cum here and there. - if (hediff.Severity <= 10) - { - Thing cum = ThingMaker.MakeThing(cumDef); - cum.Position = cell; - int stacks = Math.Max(1, (int)(hediff.Severity * 1.5)); - stacks = Math.Min(stacks, 75); // 75 is the default max stacksize ... - cum.stackCount = stacks; - cum.SpawnSetup(map, false); - hediff.Severity -= (stacks / 50); - } else - // Case 2: Reserviour mode, put out a lot of cum at once but less often. - { - int stacks = Math.Max(1, (int)(hediff.Severity * 1.5)); - - while (stacks > 0) - { - Thing cum = ThingMaker.MakeThing(cumDef); - cum.Position = cell; - var curStacks = Math.Min(stacks, 75); // 75 is the default max stacksize ... - cum.stackCount = stacks; - cum.SpawnSetup(map, false); - hediff.Severity -= (curStacks / 50); - stacks -= curStacks; - } - } - } - - private int ticksLeft; - - public string sourceName; - } -} diff --git a/Source/Genes/Cum/Patches/Patch_CumflationImmunity.cs b/Source/Genes/Cum/Patch_Cumflation.cs similarity index 96% rename from Source/Genes/Cum/Patches/Patch_CumflationImmunity.cs rename to Source/Genes/Cum/Patch_Cumflation.cs index 49f8e73..9e26a26 100644 --- a/Source/Genes/Cum/Patches/Patch_CumflationImmunity.cs +++ b/Source/Genes/Cum/Patch_Cumflation.cs @@ -9,6 +9,7 @@ using HarmonyLib; using rjw; using RimWorld; using Verse; +using LicentiaLabs; namespace RJW_Genes { @@ -18,7 +19,7 @@ namespace RJW_Genes /// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs /// /// - class Patch_CumflationImmunity + class Patch_Cumflation { // This patch does not need the normal Harmony Targetting, // as it needs to be added only on demand (See HarmonyInit.cs) diff --git a/Source/Genes/Cum/Patches/Patch_TransferNutrition.cs b/Source/Genes/Cum/Patch_TransferNutrition.cs similarity index 90% rename from Source/Genes/Cum/Patches/Patch_TransferNutrition.cs rename to Source/Genes/Cum/Patch_TransferNutrition.cs index 3e81a5f..cf8d92d 100644 --- a/Source/Genes/Cum/Patches/Patch_TransferNutrition.cs +++ b/Source/Genes/Cum/Patch_TransferNutrition.cs @@ -11,7 +11,6 @@ using RimWorld; using Verse; using LicentiaLabs; - namespace RJW_Genes { /// @@ -29,16 +28,14 @@ namespace RJW_Genes // Design decision: // I could have done some transpiler stuff, but that is scary and might need to be adjusted quite a lot // Hence, I simply re-book the nutrition back to the giver in the Postfix. That should be robust and easy. - if (GeneUtility.IsGenerousDonor(giver)) - { + + if (GeneUtility.IsGenerousDonor(giver)) { float donatedNutrition = CumflationHelper.CalculateNutritionAmount(giver, cumAmount); // TODO: In theory, there could be something weird happening if the donor has food less than X and the "IgnoreThermodynamics" is set on. // Then it can happen that the donor ends up with more food than he had before cumshot, but I think that is somewhat funny given that you have ignore Thermodynamics on. Need_Food inflatorFood = giver.needs.TryGetNeed(); - if (inflatorFood != null) - inflatorFood.CurLevel += donatedNutrition; + inflatorFood.CurLevel += donatedNutrition; } - } } } \ No newline at end of file diff --git a/Source/Genes/Cum/Patches/Patch_LikesCumflation.cs b/Source/Genes/Cum/Patches/Patch_LikesCumflation.cs deleted file mode 100644 index 6b78068..0000000 --- a/Source/Genes/Cum/Patches/Patch_LikesCumflation.cs +++ /dev/null @@ -1,79 +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 -{ - /// - /// Changes LicentiaLabs (if Present) to add a cumflation-counter hediff, when the pawn is cumflated. - /// The counter hediff takes away the negative stats of the original hediff. - /// This code is exercised / loaded in the HarmonyInit. - /// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs - /// - /// - class Patch_LikesCumflation - { - // 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; - - // Minor Hardening to help with #105 - if (!ModsConfig.IsActive("LustLicentia.RJWLabs")) return; - - if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation) ) - { - AddOrIncreaseCumflationCounterHediff(props.pawn); - } - - if (props.partner.genes != null && props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation)) - { - AddOrIncreaseCumflationCounterHediff(props.partner); - } - } - - public static void AddOrIncreaseCumflationCounterHediff(Pawn inflated) - { - Hediff cumstuffed_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumstuffed); - //Hediff cumstuffed_hediff = LicentiaLabs.CumflationHelper.GetCumflationHediff(inflated, LicentiaLabs.Licentia.HediffDefs.Cumstuffed, "stomach"); - if (cumstuffed_hediff != null && cumstuffed_hediff.Severity >= 0.01) { - ModLog.Message($"{inflated} got cumstuffed and gets the counter-part"); - var bodyPartRecord = inflated.RaceProps.body.AllParts.Find(bpr => bpr.def.defName.Contains("stomach") || bpr.def.defName.Contains("stomach".ToLower())); - var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumstuffed_counter, bodyPartRecord); - counter_hediff.Severity = cumstuffed_hediff.Severity; - } - - Hediff cumflation_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumflation); - if (cumflation_hediff != null && cumflation_hediff.Severity >= 0.01) - { - ModLog.Message($"{inflated} got cumflated and gets the counter-part"); - var bodyPartRecord = Genital_Helper.get_genitalsBPR(inflated); - var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumflation_counter, bodyPartRecord); - counter_hediff.Severity = cumflation_hediff.Severity; - } - } - - 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/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs b/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs deleted file mode 100644 index 67ec45e..0000000 --- a/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs +++ /dev/null @@ -1,64 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using static System.Net.Mime.MediaTypeNames; - -namespace RJW_Genes -{ - - [HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))] - public class Patch_LivingCumbucket_StackHediff - { - - /// - /// This is the amount of fluid required if the pawn has a bodysize of 1, to reach a severity in the hediff of 1. - /// The hediff can still be increased over 1.0. - /// - const float fluid_amount_required_for_hediff_severity_ = 100.0f; - - public static void Postfix(SexProps props) - { - if (!ModsConfig.IsActive("rjw.sexperience")) - return; - - // ShortCuts: Exit Early if Pawn or Partner are null (can happen with Masturbation or other nieche-cases) - if (props == null || props.pawn == null || !props.hasPartner()) - return; - - Pawn pawnA = props.pawn; - Pawn pawnB = props.partner; - - if (pawnA.genes != null && pawnA.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnB) > 0) - { - ProcessLivingCumbucket(pawnA, CumUtility.GetTotalFluidAmount(pawnB)); - } - - if (pawnB.genes != null && pawnB.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnA) > 0) - { - ProcessLivingCumbucket(pawnB, CumUtility.GetTotalFluidAmount(pawnA)); - } - } - - public static void ProcessLivingCumbucket(Pawn pawn, float cumamount) - { - float bodysize = pawn.BodySize; - float result_severity_increase = cumamount / (fluid_amount_required_for_hediff_severity_ * bodysize); - - - Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket); - if (hediff == null) - { - hediff = pawn.health.GetOrAddHediff(HediffDefOf.rjw_genes_filled_living_cumbucket); - hediff.Severity = 0.01f; - } - - hediff.Severity += result_severity_increase; - ModLog.Debug($"Pumping the living cumbucket {pawn} (Bodysize {bodysize}) with {cumamount} cum, resulting in severity {hediff.Severity} (+{result_severity_increase})"); - } - } -} diff --git a/Source/Genes/Damage/Gene_Elasticity.cs b/Source/Genes/Damage/Gene_Elasticity.cs index c66caf5..5d92b51 100644 --- a/Source/Genes/Damage/Gene_Elasticity.cs +++ b/Source/Genes/Damage/Gene_Elasticity.cs @@ -1,7 +1,6 @@ using LicentiaLabs; using Verse; - namespace RJW_Genes { /// @@ -13,13 +12,12 @@ namespace RJW_Genes { 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); + this.pawn.health.AddHediff(Licentia.HediffDefs.Elasticised); ResetSeverity(); } @@ -49,6 +47,5 @@ namespace RJW_Genes candidate.Severity = severity; } } - } -} \ No newline at end of file +} diff --git a/Source/Genes/Diseases/Defs/GeneticDiseaseExtension.cs b/Source/Genes/Diseases/Defs/GeneticDiseaseExtension.cs deleted file mode 100644 index e156195..0000000 --- a/Source/Genes/Diseases/Defs/GeneticDiseaseExtension.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class GeneticDiseaseExtension : DefModExtension - { - /// - /// The chance for this gene to spread upon (finished) sex. - /// - public float infectionChance; - } - -} diff --git a/Source/Genes/Diseases/Defs/GeneticInfectorExtension.cs b/Source/Genes/Diseases/Defs/GeneticInfectorExtension.cs deleted file mode 100644 index 2f00ce5..0000000 --- a/Source/Genes/Diseases/Defs/GeneticInfectorExtension.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class GeneticInfectorExtension : DefModExtension - { - public float infectionChance; - - public List infectionGenes; - } - -} diff --git a/Source/Genes/Diseases/Defs/ImmunityAgainstGenesExtension.cs b/Source/Genes/Diseases/Defs/ImmunityAgainstGenesExtension.cs deleted file mode 100644 index 18fe8e0..0000000 --- a/Source/Genes/Diseases/Defs/ImmunityAgainstGenesExtension.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class ImmunityAgainstGenesExtension : DefModExtension - { - /// - /// A list of the exact defnames of disease-genes that this extension will make immune against. - /// Must perfectly match! - /// - public List givesImmunityAgainst; - } - -} diff --git a/Source/Genes/Diseases/DiseaseHelper.cs b/Source/Genes/Diseases/DiseaseHelper.cs deleted file mode 100644 index 873a0e1..0000000 --- a/Source/Genes/Diseases/DiseaseHelper.cs +++ /dev/null @@ -1,145 +0,0 @@ -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public static class DiseaseHelper - { - - /// - /// Checks for a pawn if it is immune against a disease. - /// - /// The pawn for which immunity is checked - /// The genetic disease that is checked against - /// True if the pawn is immune, false if the pawn can be infected by it. - public static bool IsImmuneAgainstGeneticDisease(Pawn pawn, GeneDef disease) - { - // Case 1: Something is null / not working, return Immune (to have less follow up effects) - if (pawn == null || pawn.genes == null) return true; - if (disease == null) return true; - // Case 1.B: Dead people can spread, but not receive, diseases. - if (pawn.Dead) return true; - - // Case 2: The pawn has general genetic immunity to diseases - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_genetic_disease_immunity)) - return true; - - // Case 3: The pawn already has the genetic disease - if (GeneUtility.HasGeneNullCheck(pawn, disease)) - return true; - - // Case 4: Check all genes if one of them has the Immunity Extension that covers the GeneDef - List genes = pawn.genes.GenesListForReading; - genes = genes.Where(x => pawn.genes.HasActiveGene(x.def)).ToList(); - - foreach (Gene gene in genes) - { - ImmunityAgainstGenesExtension ext = gene.def.GetModExtension(); - if (ext != null) { - foreach (string defname in ext.givesImmunityAgainst) - if (disease.defName == defname) - return true; - } - } - - // Case 5: Nothing special happens, so return false (not immune) - return false; - } - - /// - /// Returns all active Genes with the `GeneticDiseaseExtension`. - /// - /// - /// List of all active Genes with the `GeneticDiseaseExtension` in pawn - public static List GetGeneticDiseaseGenes(Pawn pawn) - { - if (pawn != null && pawn.genes != null) - { - return pawn.genes - .GenesListForReading - .ConvertAll(gene => gene.def) - .Where(genedef => pawn.genes.HasActiveGene(genedef)) - .Where(IsGeneticDiseaseGene) - .ToList(); - } - - return new List() { }; - } - - public static List GetGeneticInfectorGenes(Pawn pawn) - { - if (pawn != null && pawn.genes != null) - { - return pawn.genes - .GenesListForReading - .ConvertAll(gene => gene.def) - .Where(genedef => pawn.genes.HasActiveGene(genedef)) - .Where(IsGeneticInfectorGene) - .ToList(); - } - - return new List() { }; - } - - public static List LookupInfectionGeneDefs(GeneticInfectorExtension infectorExt) - { - if (infectorExt == null) new List(); - - return RimWorld.GeneUtility - .GenesInOrder - .Where(genedef => infectorExt.infectionGenes.Contains(genedef.defName)) - .ToList(); - } - - /// - /// Checks if the performed sex was penetrative. - /// Condom check is not done here! - /// - /// The sexprops - /// - public static bool IsPenetrativeSex(SexProps props) - { - if (props == null) return false; - - return props.sexType == - xxx.rjwSextype.Vaginal - || props.sexType == xxx.rjwSextype.Anal - || props.sexType == xxx.rjwSextype.Oral - || props.sexType == xxx.rjwSextype.DoublePenetration - || props.sexType == xxx.rjwSextype.Fellatio - || props.sexType == xxx.rjwSextype.Sixtynine; - } - - public static bool IsGeneticDiseaseGene(GeneDef geneDef) - { - if (geneDef == null) return false; - GeneticDiseaseExtension diseaseExt = geneDef.GetModExtension(); - return diseaseExt != null; - } - - public static bool IsGeneticInfectorGene(GeneDef geneDef) - { - if (geneDef == null) return false; - GeneticInfectorExtension infectorExt = geneDef.GetModExtension(); - return infectorExt != null; - } - - public static float LookupDiseaseInfectionChance(GeneDef geneDef) - { - if (IsGeneticDiseaseGene(geneDef)) - { - GeneticDiseaseExtension diseaseExt = geneDef.GetModExtension(); - return diseaseExt != null ? diseaseExt.infectionChance : 0.0f; - } - else - return 0.0f; - } - - - } -} diff --git a/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs b/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs deleted file mode 100644 index b25e812..0000000 --- a/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs +++ /dev/null @@ -1,57 +0,0 @@ -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using static HarmonyLib.Code; -using static RimWorld.ColonistBar; - -namespace RJW_Genes -{ - public class Gene_FluctualSexualNeed : Gene - { - - int event_interval; - float event_chance; - - const float REST_INCREASE = 0.1f; - const float SET_SEXNEED_TO = 0.1f; - - public Gene_FluctualSexualNeed() : base() - { - TickBasedChanceExtension tickbasedChanceExt = GeneDefOf.rjw_genes_fluctual_sexual_needs.GetModExtension(); - event_interval = tickbasedChanceExt?.tickInterval ?? 30000; // 30K = 1/2 day - event_chance = tickbasedChanceExt?.eventChance ?? 0.1f; - } - - - public override void Tick() - { - base.Tick(); - - if (pawn.IsHashIntervalTick(event_interval) && (new Random()).NextDouble() < event_chance) - { - ModLog.Debug($"Firing Gene_FluctualSexualNeed for {pawn}"); - ApplyFluctualSexNeedEffect(pawn); - } - } - - public static void ApplyFluctualSexNeedEffect(Pawn pawn) - { - if (pawn == null || pawn.needs == null) return; - - var sexneed = pawn.needs.TryGetNeed(); - if (sexneed != null) - { - sexneed.CurLevelPercentage = SET_SEXNEED_TO; - } - - // Pump up Wake-Ness - if (pawn.needs.rest != null) - pawn.needs.rest.CurLevel += REST_INCREASE; - } - - } -} diff --git a/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs b/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs deleted file mode 100644 index 06b0998..0000000 --- a/Source/Genes/Diseases/Patches/Patch_AfterSexUtility_ApplyGeneticInfectors.cs +++ /dev/null @@ -1,64 +0,0 @@ -using HarmonyLib; -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Remoting.Lifetime; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public class Patch_AfterSexUtility_ApplyGeneticInfectors - { - - const int FACTION_GOODWILL_CHANGE = -3; - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || props.partner == null) return; - - Pawn pawn = props.pawn; - Pawn partner = props.partner; - - if (pawn == partner) return; - if (pawn.IsAnimal() || partner.IsAnimal()) return; - if (pawn.genes == null || partner.genes == null) return; - // No Infections on Condom Use - if (props.usedCondom) return; - - // Exit early if settings require penetrative sex, but this is not penetrative sex - if (!DiseaseHelper.IsPenetrativeSex(props) && RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex) return; - - TryApplyGeneticInfections(pawn, partner); - TryApplyGeneticInfections(partner, pawn); - } - - private static void TryApplyGeneticInfections(Pawn infector, Pawn partner) - { - foreach (GeneDef infectorGeneDef in DiseaseHelper.GetGeneticInfectorGenes(infector)) - { - GeneticInfectorExtension diseaseExt = infectorGeneDef.GetModExtension(); - if (diseaseExt == null) continue; - float application_chance = diseaseExt.infectionChance; - - foreach (GeneDef diseaseGeneDef in DiseaseHelper.LookupInfectionGeneDefs(diseaseExt)) - { - if (DiseaseHelper.IsImmuneAgainstGeneticDisease(partner, diseaseGeneDef)) - continue; - - if ((new Random()).NextDouble() < application_chance) - { - partner.genes.AddGene(diseaseGeneDef, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); - FactionUtility.HandleFactionGoodWillPenalties(infector, partner, "rjw_genes_GoodwillChangedReason_infected_with_disease",FACTION_GOODWILL_CHANGE); - } - } - } - } - - } -} diff --git a/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs b/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs deleted file mode 100644 index a00d40f..0000000 --- a/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs +++ /dev/null @@ -1,60 +0,0 @@ -using HarmonyLib; -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public class Patch_AftersexUtility_TransferGeneticDiseases - { - - public const int FACTION_GOODWILL_CHANGE = -2; - - public static void Postfix(SexProps props) - { - if (!RJW_Genes_Settings.rjw_genes_genetic_disease_spread) return; - - if (props == null || props.pawn == null || props.partner == null) return; - - Pawn pawn = props.pawn; - Pawn partner = props.partner; - - if (pawn == partner) return; - if (pawn.IsAnimal() || partner.IsAnimal()) return; - if (pawn.genes == null || partner.genes == null) return; - // No Infections on Condom Use - if (props.usedCondom) return; - - // Exit early if settings require penetrative sex, but this is not penetrative sex - if (!DiseaseHelper.IsPenetrativeSex(props) && RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex) return; - - //ModLog.Debug($"Firing Patch_TransferGeneticDiseases for {pawn} and {partner}"); - TryTransferGeneticDiseases(pawn, partner, props); - TryTransferGeneticDiseases(partner, pawn, props); - } - - private static void TryTransferGeneticDiseases(Pawn infector, Pawn infected, SexProps props) - { - - foreach (GeneDef disease in DiseaseHelper.GetGeneticDiseaseGenes(infector)) { - ModLog.Debug($"Found genetic disease {disease} in {infector}, trying to infect {infected}"); - - if (DiseaseHelper.IsImmuneAgainstGeneticDisease(infected,disease)) - continue; - - if ((new Random()).NextDouble() <= DiseaseHelper.LookupDiseaseInfectionChance(disease)) - { - infected.genes.AddGene(disease, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); - FactionUtility.HandleFactionGoodWillPenalties(infector, infected, "rjw_genes_GoodwillChangedReason_spread_genetic_disease", FACTION_GOODWILL_CHANGE); - } - } - } - - } -} diff --git a/Source/Genes/Diseases/Patches/Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded.cs b/Source/Genes/Diseases/Patches/Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded.cs deleted file mode 100644 index fa36398..0000000 --- a/Source/Genes/Diseases/Patches/Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded.cs +++ /dev/null @@ -1,56 +0,0 @@ -using HarmonyLib; -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - /// - /// This patch helps with the gene `rjw_genes_size_blinded`. - /// Within RJW the CasualSexHelper utilizes the basefunction "pawn.relations.SecondaryRomanceChanceFactor" - /// https://gitgud.io/Ed86/rjw/-/blob/master/1.5/Source/Common/Helpers/CasualSex_Helper.cs - /// - /// We check on hookup for the other pawn if they have a penis. - /// If yes, we modulate the romance chance based on the following: - /// (Severity * BodySize - 0.5) * romance_multiplier - /// So pawns with a cock smaller than 0.5 will be penalized, while pawns with more than 0.5 will be preferred. - /// - [HarmonyPatch(typeof(Pawn_RelationsTracker), "SecondaryRomanceChanceFactor")] - public class Patch_SecondaryRomanceChanceFactor_Gene_SizeBlinded - { - - const float romance_multiplier = 2f; - - public static void Postfix( Pawn ___pawn, Pawn otherPawn, ref float __result) - { - if (otherPawn == null || ___pawn == null || ___pawn.genes == null || otherPawn.genes == null) - { - return; - } - if (___pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_size_blinded) && Genital_Helper.has_penis_fertile(otherPawn) || (Genital_Helper.has_penis_infertile(otherPawn))) - { - Hediff biggest_cock = GenitaliaUtility.GetBiggestPenis(otherPawn); - if (biggest_cock != null) - { - float bodysize = GenitaliaUtility.GetBodySizeOfSexPart(biggest_cock); - // Bodysize can only be a bonus, not a minus. - bodysize = Math.Max(1.0f, bodysize); - - float attraction_bonus = (biggest_cock.Severity * bodysize - 0.5f) * romance_multiplier; - float result_backup = __result; - __result += attraction_bonus; - // Don't make it smaller than 0, to not get issues. - __result = __result < 0 ? 0.0f : __result; - - ModLog.Debug($"Gene_SizeBlind: Modulate Romance-Chance {___pawn}-->{otherPawn} from {result_backup} by {attraction_bonus} to {__result}"); - } - } - } - - } -} diff --git a/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs b/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs deleted file mode 100644 index 7a85eb3..0000000 --- a/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs +++ /dev/null @@ -1,59 +0,0 @@ -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class ThoughtWorker_HasMoreDiseasesThanMe_Social : ThoughtWorker - { - protected override ThoughtState CurrentSocialStateInternal(Pawn pawn, Pawn other) - { - // Return for trivial errors - if (pawn == null || other == null || pawn == other) - return (ThoughtState)false; - // Check for position-existance - if (pawn.Position == null || other.Position == null || pawn.Map == null || other.Map == null) - return (ThoughtState)false; - // Do nothing if pawn is carried - if (pawn.CarriedBy != null) - return (ThoughtState)false; - // Do nothing if Pawn is Baby or Child (#25) - if (!pawn.ageTracker.Adult) - return (ThoughtState)false; - if (!other.ageTracker.Adult) - return (ThoughtState)false; - // Only check if they are spawned humans - if (!pawn.Spawned || !other.Spawned) - return (ThoughtState)false; - if (!pawn.RaceProps.Humanlike) - return (ThoughtState)false; - if (!other.RaceProps.Humanlike) - return (ThoughtState)false; - - // Pawns that have not "met" wont give each other Mali - // Known-Each-Other is a key-word for Rimworld that shows they have had any interaction and stored each other in relations. - if (!RelationsUtility.PawnsKnowEachOther(pawn, other)) - return (ThoughtState)false; - // If the pawn is not on Map (e.g. caravan), no mali - if (!MapUtility.PawnIsOnHomeMap(pawn)) - return (ThoughtState)false; - - int pawn_diseases = DiseaseHelper.GetGeneticDiseaseGenes(pawn).Count(); - int other_diseases = DiseaseHelper.GetGeneticDiseaseGenes(other).Count(); - int disease_diff = other_diseases - pawn_diseases; - - if (disease_diff >= 5) - return ThoughtState.ActiveAtStage(2); - else if (disease_diff >= 2) - return ThoughtState.ActiveAtStage(1); - else if (disease_diff >= 1) - return ThoughtState.ActiveAtStage(0); - else - return (ThoughtState)false; - } - } -} diff --git a/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs b/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs deleted file mode 100644 index 61199a6..0000000 --- a/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs +++ /dev/null @@ -1,69 +0,0 @@ -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; -using Verse; - -namespace RJW_Genes -{ - public class ThoughtWorker_SizeBlinded_Social : ThoughtWorker - { - protected override ThoughtState CurrentSocialStateInternal(Pawn pawn, Pawn other) - { - // Return for trivial errors - if (pawn == null || other == null || pawn == other) - return (ThoughtState)false; - // Check for position-existance - if (pawn.Position == null || other.Position == null || pawn.Map == null || other.Map == null) - return (ThoughtState)false; - // Do nothing if pawn is carried - if (pawn.CarriedBy != null) - return (ThoughtState)false; - // Do nothing if Pawn is Baby or Child (#25) - if (!pawn.ageTracker.Adult) - return (ThoughtState)false; - if (!other.ageTracker.Adult) - return (ThoughtState)false; - // Only check if they are spawned humans - if (!pawn.Spawned || !other.Spawned) - return (ThoughtState)false; - if (!pawn.RaceProps.Humanlike) - return (ThoughtState)false; - if (!other.RaceProps.Humanlike) - return (ThoughtState)false; - - // Pawns that have not "met" wont give each other Mali - // Known-Each-Other is a key-word for Rimworld that shows they have had any interaction and stored each other in relations. - if (!RelationsUtility.PawnsKnowEachOther(pawn, other)) - return (ThoughtState)false; - // If the pawn is not on Map (e.g. caravan), no mali - if (!MapUtility.PawnIsOnHomeMap(pawn)) - return (ThoughtState)false; - - - // Do nothing if there is no size-blinded involved - if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_size_blinded)) - return (ThoughtState)false; - else - ModLog.Debug($"{pawn} has the size blinded gene"); - - // Iff the pawn has a penis, retrieve it's size. - var penis = GenitaliaUtility.GetBiggestPenis(other); - // Do Nothing if the other pawn has no penis - if (penis == null) return (ThoughtState)false; - var bodysize = GenitaliaUtility.GetBodySizeOfSexPart(penis); - - if (penis.Severity + (bodysize) - 1.0 > 1.0) - return ThoughtState.ActiveAtStage(2); - else if (penis.Severity >= 0.8f) - return ThoughtState.ActiveAtStage(1); - else - return ThoughtState.ActiveAtStage(0); - - } - } -} diff --git a/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs b/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs index 00b4c82..8a93c51 100644 --- a/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs +++ b/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs @@ -1,5 +1,6 @@ using Verse; using rjw; +using RimWorld; namespace RJW_Genes { @@ -53,7 +54,7 @@ namespace RJW_Genes internal void AddFeaturelessBreast() { var partBPR = Genital_Helper.get_breastsBPR(pawn); - added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR); + this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR); } } diff --git a/Source/Genes/ExtraGenitalia/Gene_Femboy.cs b/Source/Genes/ExtraGenitalia/Gene_Femboy.cs deleted file mode 100644 index e86beed..0000000 --- a/Source/Genes/ExtraGenitalia/Gene_Femboy.cs +++ /dev/null @@ -1,75 +0,0 @@ -using Verse; -using rjw; -using RimWorld; - -namespace RJW_Genes -{ - public class Gene_Femboy : RJW_Gene - { - // Token: 0x06000335 RID: 821 RVA: 0x0000401D File Offset: 0x0000221D - public override void PostMake() - { - base.PostMake(); - if (GenderUtility.IsMale(this.pawn) && this.additional_genital == null) - { - this.CreateAndAddVagina(); - } - } - - // Token: 0x06000336 RID: 822 RVA: 0x00004040 File Offset: 0x00002240 - public override void PostAdd() - { - base.PostAdd(); - if (this.pawn.gender == Gender.Male && this.additional_genital == null) - { - this.CreateAndAddVagina(); - } - } - - // Token: 0x06000337 RID: 823 RVA: 0x0000EE4C File Offset: 0x0000D04C - internal void CreateAndAddVagina() - { - if (this.pawn.gender != Gender.Female) - { - GenderHelper.ChangeSex(this.pawn, delegate () - { - this.pawn.gender = Gender.Female; - GenitaliaChanger.RemoveAllGenitalia(this.pawn); - Sexualizer.sexualize_pawn(this.pawn); - }); - GenderUtility.AdjustBodyToTargetGender(this.pawn, Gender.Female); - } - BodyPartRecord bodyPartRecord = Genital_Helper.get_genitalsBPR(this.pawn); - Hediff hediff = Genital_Helper.get_AllPartsHediffList(this.pawn).FindLast((Hediff x) => Genital_Helper.is_vagina(x)); - if (hediff != null) - { - this.pawn.health.RemoveHediff(hediff); - } - HediffDef penisForGene = GenitaliaUtility.GetPenisForGene(GenitaliaUtility.GetGenitaliaTypeGeneForPawn(this.pawn)); - BodyPartRecord part = Genital_Helper.get_genitalsBPR(this.pawn); - this.additional_genital = HediffMaker.MakeHediff(penisForGene, this.pawn, null); - CompHediffBodyPart compHediffBodyPart = this.additional_genital.TryGetComp(); - if (compHediffBodyPart != null) - { - compHediffBodyPart.initComp(this.pawn, false); - compHediffBodyPart.updatesize(0f); - } - this.pawn.health.AddHediff(this.additional_genital, part, null, null); - foreach (Gene g in pawn.genes.GenesListForReading) - { - if (g.def.defName == "rjw_genes_hydrolic_genitalia") - { - g.PostAdd(); - } - if (g.def.defName == "rjw_genes_bionic_genitalia") - { - g.PostAdd(); - return; - } - } - } - - // Token: 0x040001B0 RID: 432 - internal Hediff additional_genital; - } -} diff --git a/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs b/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs index 8aad9ab..d23b2df 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs @@ -9,6 +9,9 @@ namespace RJW_Genes internal Hediff removed_anus; + // TODO: This gene only works if another Gene was set specifying the genitalia. + // If it is added later, it still works, but on creation it needs a different + // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn public override void PostMake() { base.PostMake(); diff --git a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs index caa0a5c..874ff5f 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs @@ -52,5 +52,15 @@ namespace RJW_Genes } } + /* + /// + /// Adds a "rjw.featurelesschest", which means nipples but nothing else (like male human pawns do). + /// + internal void AddFeaturelessBreast() + { + var partBPR = Genital_Helper.get_breastsBPR(pawn); + //this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR); + } + */ } } diff --git a/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs b/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs index b107a5a..be67ef4 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs @@ -9,6 +9,9 @@ namespace RJW_Genes internal Hediff removed_penis; + // TODO: This gene only works if another Gene was set specifying the genitalia. + // If it is added later, it still works, but on creation it needs a different + // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn public override void PostMake() { base.PostMake(); diff --git a/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs b/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs index 438d76e..8083f58 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs @@ -8,7 +8,10 @@ namespace RJW_Genes { internal Hediff removed_vagina; - + + // TODO: This gene only works if another Gene was set specifying the genitalia. + // If it is added later, it still works, but on creation it needs a different + // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn public override void PostMake() { base.PostMake(); diff --git a/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs deleted file mode 100644 index 87f2a20..0000000 --- a/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs +++ /dev/null @@ -1,58 +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 added_udders; - - public override void PostMake() - { - base.PostMake(); - - - } - - public override void PostAdd() - { - base.PostAdd(); - - AddUdders(); - - } - - public override void PostRemove() - { - base.PostRemove(); - - if (added_udders != null) - pawn.health.RemoveHediff(added_udders); - } - - - internal void AddUdders() - { - CompHediffBodyPart CompHediff = null; - BodyPartRecord bpr = Genital_Helper.get_uddersBPR(pawn); - added_udders = pawn.health.AddHediff(Genital_Helper.udder_breasts, bpr); - added_udders.TryGetComp(); - if (CompHediff != null) - { - CompHediff.initComp(pawn); - CompHediff.updatesize(); - } - - } - } - -} \ No newline at end of file diff --git a/Source/Genes/Gender/GenderUtility.cs b/Source/Genes/Gender/GenderUtility.cs index 15c7c02..ea0e1d6 100644 --- a/Source/Genes/Gender/GenderUtility.cs +++ b/Source/Genes/Gender/GenderUtility.cs @@ -1,10 +1,9 @@ using Verse; using rjw; using RimWorld; +using System.Collections; using System.Linq; using System; -using System.Collections.Generic; -using HarmonyLib; namespace RJW_Genes { @@ -31,8 +30,7 @@ namespace RJW_Genes } /// - /// 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. + /// Adjusts the Body Type to match the given target gender /// (for male and female only, baby,child and hulks don't change) /// /// @@ -69,52 +67,7 @@ namespace RJW_Genes } // Force Redraw at the spot - } - - // 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); - } - } - - /// - /// This check helps to get babies after birth, if the pawn was born with the gene it does not need to have thoughts. - /// There are very different ways to do the life stages, and there are also HAR people still around, - /// so instead of checking for stages I intentionally check for the biological ticks to be very low (that they can only exist basically if they are born right before). - /// Issue is tracked in #103. - /// - /// - public static void RemoveSexChangeThoughtsIfTooYoung(Pawn pawn) - { - if (pawn.ageTracker.AgeBiologicalTicks < 1000) - { - GenderUtility.RemoveAllSexChangeThoughts(pawn); - } + pawn.Drawer.renderer.graphics.SetAllGraphicsDirty(); } } } diff --git a/Source/Genes/Gender/Genes/Gene_FemaleOnly.cs b/Source/Genes/Gender/Gene_FemaleOnly.cs similarity index 53% rename from Source/Genes/Gender/Genes/Gene_FemaleOnly.cs rename to Source/Genes/Gender/Gene_FemaleOnly.cs index c3d5ef6..0cfbe0d 100644 --- a/Source/Genes/Gender/Genes/Gene_FemaleOnly.cs +++ b/Source/Genes/Gender/Gene_FemaleOnly.cs @@ -4,7 +4,7 @@ using rjw; namespace RJW_Genes { - public class Gene_FemaleOnly : RJW_Gene + public class Gene_FemaleOnly : Gene { public override void PostMake() { @@ -14,15 +14,12 @@ namespace RJW_Genes // Here we call Sexualization after the Sex-Change if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) Sexualizer.sexualize_pawn(pawn); - - GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn); } public override void PostAdd() { base.PostMake(); AdjustPawnToFemale(); - GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn); } private void AdjustPawnToFemale() @@ -39,25 +36,7 @@ namespace RJW_Genes }); GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Female); } - foreach(Gene g in pawn.genes.GenesListForReading) - { - if(g.def.defName== "rjw_genes_hydrolic_genitalia") - { - g.PostAdd(); - } - if (g.def.defName == "rjw_genes_bionic_genitalia") - { - g.PostAdd(); - return; - } - } } - public override void Notify_OnPawnGeneration() - { - 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/Source/Genes/Gender/Genes/Gene_MaleOnly.cs b/Source/Genes/Gender/Gene_MaleOnly.cs similarity index 51% rename from Source/Genes/Gender/Genes/Gene_MaleOnly.cs rename to Source/Genes/Gender/Gene_MaleOnly.cs index daca649..51806cf 100644 --- a/Source/Genes/Gender/Genes/Gene_MaleOnly.cs +++ b/Source/Genes/Gender/Gene_MaleOnly.cs @@ -4,7 +4,7 @@ using rjw; namespace RJW_Genes { - public class Gene_MaleOnly : RJW_Gene + public class Gene_MaleOnly : Gene { public override void PostMake() { @@ -14,15 +14,12 @@ namespace RJW_Genes // Here we call Sexualization after the Sex-Change if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) Sexualizer.sexualize_pawn(pawn); - - GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn); } public override void PostAdd() { base.PostMake(); AdjustPawnToMale(); - GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn); } private void AdjustPawnToMale() @@ -39,25 +36,7 @@ namespace RJW_Genes }); GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Male); } - foreach (Gene g in pawn.genes.GenesListForReading) - { - if (g.def.defName == "rjw_genes_hydrolic_genitalia") - { - g.PostAdd(); - } - if (g.def.defName == "rjw_genes_bionic_genitalia") - { - g.PostAdd(); - return; - } - } } - public override void Notify_OnPawnGeneration() - { - 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/Source/Genes/Gender/Genes/Gene_GenderFluid.cs b/Source/Genes/Gender/Genes/Gene_GenderFluid.cs deleted file mode 100644 index fe75f5d..0000000 --- a/Source/Genes/Gender/Genes/Gene_GenderFluid.cs +++ /dev/null @@ -1,242 +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() { - TickBasedChanceExtension tickbasedChanceExt = GeneDefOf.rjw_genes_gender_fluid.GetModExtension(); - change_interval = tickbasedChanceExt?.tickInterval ?? CHANGE_INTERVAL_FALLBACK; - switch_chance = tickbasedChanceExt?.eventChance ?? 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(); - - } - - - 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. - /// - - - - /// - /// 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_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/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs index f0892af..a6361aa 100644 --- a/Source/Genes/GeneUtility.cs +++ b/Source/Genes/GeneUtility.cs @@ -6,7 +6,7 @@ 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) { @@ -16,31 +16,24 @@ namespace RJW_Genes } 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); - } + { + 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) { - if (old_value > 0.2f && drain.Resource.Value <= 0.2f) + Pawn pawn = drain.Pawn; + if (!drain.Pawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_fertilin_craving)) { - //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); - } + drain.Pawn.health.AddHediff(HediffDefOf.rjw_genes_fertilin_craving); } } } @@ -50,7 +43,7 @@ namespace RJW_Genes { if (HasLifeForce(pawn)) { - Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType(); + Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType(); if (gene == null || !gene.Active) return false; if (gene.Resource.Value < gene.targetValue) @@ -76,7 +69,15 @@ namespace RJW_Genes 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(); @@ -105,13 +106,15 @@ namespace RJW_Genes { return false; } - return pawn.genes.HasActiveGene(genedef); + 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); } @@ -124,3 +127,26 @@ namespace RJW_Genes } } + +/* +Exception in Verse.AI.ThinkNode_Priority TryIssueJobPackage: System.NullReferenceException: Object reference not set to an instance of an object + at RJW_Genes.GeneUtility.HasLowLifeForce (Verse.Pawn pawn) [0x00014] in < 881b7541af8144a78a14c9dad08e43c7 >:0 + at RJW_Genes.ThinkNode_ConditionalLowLifeForce.Satisfied(Verse.Pawn p) [0x00000] in < 881b7541af8144a78a14c9dad08e43c7 >:0 + at Verse.AI.ThinkNode_Conditional.TryIssueJobPackage(Verse.Pawn pawn, Verse.AI.JobIssueParams jobParams) [0x00000] in < 38562b1a2ab64eacb931fb5df05ca994 >:0 + at Verse.AI.ThinkNode_Priority.TryIssueJobPackage(Verse.Pawn pawn, Verse.AI.JobIssueParams jobParams) [0x00022] in < 38562b1a2ab64eacb931fb5df05ca994 >:0 +UnityEngine.StackTraceUtility:ExtractStackTrace() +Verse.Log:Error(string) +Verse.AI.ThinkNode_Priority:TryIssueJobPackage(Verse.Pawn, Verse.AI.JobIssueParams) +Verse.AI.ThinkNode_SubtreesByTag:TryIssueJobPackage(Verse.Pawn, Verse.AI.JobIssueParams) +Verse.AI.ThinkNode_Priority:TryIssueJobPackage(Verse.Pawn, Verse.AI.JobIssueParams) +Verse.AI.Pawn_JobTracker:DetermineNextJob(Verse.ThinkTreeDef &) +Verse.AI.Pawn_JobTracker:TryFindAndStartJob() +Verse.AI.Pawn_JobTracker:EndCurrentJob(Verse.AI.JobCondition, bool, bool) +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/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs b/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs deleted file mode 100644 index 61430a2..0000000 --- a/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_PartBase penis; - - public HediffDef_PartBase vagina; - - public HediffDef_PartBase anus; - - public HediffDef_PartBase breasts; - - } -} diff --git a/Source/Genes/Genitalia/Gene_CanineGenitalia.cs b/Source/Genes/Genitalia/Gene_CanineGenitalia.cs new file mode 100644 index 0000000..01f0015 --- /dev/null +++ b/Source/Genes/Genitalia/Gene_CanineGenitalia.cs @@ -0,0 +1,22 @@ +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/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs b/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs new file mode 100644 index 0000000..cc0cc29 --- /dev/null +++ b/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs @@ -0,0 +1,23 @@ +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/Source/Genes/Genitalia/Gene_DragonGenitalia.cs b/Source/Genes/Genitalia/Gene_DragonGenitalia.cs new file mode 100644 index 0000000..34d24f6 --- /dev/null +++ b/Source/Genes/Genitalia/Gene_DragonGenitalia.cs @@ -0,0 +1,22 @@ +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/Source/Genes/Genitalia/Gene_EquineGenitalia.cs b/Source/Genes/Genitalia/Gene_EquineGenitalia.cs new file mode 100644 index 0000000..74b8b2f --- /dev/null +++ b/Source/Genes/Genitalia/Gene_EquineGenitalia.cs @@ -0,0 +1,22 @@ +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/Source/Genes/Genitalia/Gene_FelineGenitalia.cs b/Source/Genes/Genitalia/Gene_FelineGenitalia.cs new file mode 100644 index 0000000..2fe4882 --- /dev/null +++ b/Source/Genes/Genitalia/Gene_FelineGenitalia.cs @@ -0,0 +1,22 @@ +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/Source/Genes/Genitalia/Gene_GenitaliaType.cs b/Source/Genes/Genitalia/Gene_GenitaliaType.cs deleted file mode 100644 index 21fada8..0000000 --- a/Source/Genes/Genitalia/Gene_GenitaliaType.cs +++ /dev/null @@ -1,34 +0,0 @@ -using rjw; - -namespace RJW_Genes -{ - // bleh plural attributive noun in keeping with naming convention - public class Gene_GenitaliaType : RJW_Gene - { - public override void PostMake() - { - base.PostMake(); - - } - - public override void PostAdd() - { - base.PostAdd(); - Apply(); - } - - public virtual void Apply() - { - if (this.Active) - { - GenitaliaTypeExtension genitals = def.GetModExtension(); - if (genitals == null && RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Error($"Gene {def} failed to change genitals - Need a modExtension with Class=\"{typeof(GenitaliaTypeExtension).FullName}\"."); - return; - } - GenitaliaChanger.ChangeGenitalia(pawn, genitals.penis, genitals.vagina, genitals.anus, genitals.breasts); - } - } - } -} \ No newline at end of file diff --git a/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs b/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs new file mode 100644 index 0000000..b7a1141 --- /dev/null +++ b/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs @@ -0,0 +1,22 @@ +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/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs b/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs new file mode 100644 index 0000000..5671f1f --- /dev/null +++ b/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs @@ -0,0 +1,22 @@ +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/Source/Genes/Genitalia/GenitaliaChanger.cs b/Source/Genes/Genitalia/GenitaliaChanger.cs index 71f0f05..48ddc4d 100644 --- a/Source/Genes/Genitalia/GenitaliaChanger.cs +++ b/Source/Genes/Genitalia/GenitaliaChanger.cs @@ -2,7 +2,6 @@ using RimWorld; using Verse; using System.Collections.Generic; -using rjw.Modules.Interactions.DefModExtensions; namespace RJW_Genes { @@ -17,7 +16,7 @@ namespace RJW_Genes /// the new type of penis /// the new type of vagina /// the new type of anus - public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement = null, HediffDef vaginaReplacement = null, HediffDef anusReplacement = null , HediffDef breastsReplacement = null) + public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement, HediffDef vaginaReplacement, HediffDef anusReplacement) { var oldParts = Genital_Helper.get_AllPartsHediffList(pawn); BodyPartRecord correctBPR; @@ -35,19 +34,13 @@ namespace RJW_Genes replacementGenital = null; CompHediff = null; - if (Genital_Helper.is_penis(existingGenital) && penisReplacement != null && existingGenital.def != penisReplacement) + if (Genital_Helper.is_penis(existingGenital)) replacementGenital = HediffMaker.MakeHediff(penisReplacement, pawn, correctBPR); - if (Genital_Helper.is_vagina(existingGenital) && vaginaReplacement != null && existingGenital.def != vaginaReplacement) + if (Genital_Helper.is_vagina(existingGenital)) replacementGenital = HediffMaker.MakeHediff(vaginaReplacement, pawn, correctBPR); - if (is_breast(existingGenital) && breastsReplacement != null && existingGenital.def != breastsReplacement) - { - correctBPR = Genital_Helper.get_breastsBPR(pawn); - replacementGenital = HediffMaker.MakeHediff(breastsReplacement, pawn, correctBPR); - } - - if (IsAnus(existingGenital) && anusReplacement != null && existingGenital.def != anusReplacement) + if (IsAnus(existingGenital)) { correctBPR = Genital_Helper.get_anusBPR(pawn); replacementGenital = HediffMaker.MakeHediff(anusReplacement, pawn, correctBPR); @@ -81,18 +74,7 @@ namespace RJW_Genes { return candidate.def.defName.ToLower().Contains("anus"); } - - public static bool is_breast(Hediff hed) - { - if (!GenitalPartExtension.TryGet(hed, out var ext)) - { - return false; - } - - return ext.family == rjw.Modules.Interactions.Enums.GenitalFamily.Breasts; - } - - public static bool IsArtificial(Hediff candidate) + public static bool IsArtificial(Hediff candidate) { return candidate.def.defName.ToLower().Contains("bionic") || candidate.def.defName.ToLower().Contains("archo"); } @@ -106,7 +88,5 @@ namespace RJW_Genes } } - - } } diff --git a/Source/Genes/Genitalia/GenitaliaUtility.cs b/Source/Genes/Genitalia/GenitaliaUtility.cs index 581ba64..4dc289a 100644 --- a/Source/Genes/Genitalia/GenitaliaUtility.cs +++ b/Source/Genes/Genitalia/GenitaliaUtility.cs @@ -16,11 +16,12 @@ namespace RJW_Genes /// The first GeneDef of the pawn related to GenitaliaTypes public static GeneDef GetGenitaliaTypeGeneForPawn(Pawn pawn) { - foreach (var gene in pawn.genes.GenesListForReading) - { - if (gene is Gene_GenitaliaType) + + 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 gene.def; } return null; } @@ -28,24 +29,80 @@ namespace RJW_Genes public static HediffDef GetPenisForGene(GeneDef gene) { - return gene?.GetModExtension()?.penis ?? Genital_Helper.average_penis; + 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) { - return gene?.GetModExtension()?.vagina ?? Genital_Helper.average_vagina; + 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) { - //TODO: Do I want the default to be generic or average for feline,equine and canine? - return gene?.GetModExtension()?.anus ?? Genital_Helper.average_anus; + 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) { - return gene?.GetModExtension()?.breasts ?? Genital_Helper.average_breasts; + 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_ovipositor_genitalia": return Genital_Helper.average_breasts; + + default: return Genital_Helper.generic_breasts; + } } public static bool PawnStillNeedsGenitalia(Pawn pawn) @@ -73,48 +130,5 @@ namespace RJW_Genes { return candidate.def.defName.ToLower().Contains("breast"); } - - /// - /// Returns the biggest penis of a pawn. - /// In case of a identical severity, the highest body size is returned. - /// For women, or pawns without a penis, null is returned. - /// - /// - /// The biggest penis of a pawn. Null on women or error. - public static Hediff GetBiggestPenis(Pawn pawn) - { - Hediff best = null; - var parts = Genital_Helper.get_AllPartsHediffList(pawn); - - foreach (var part in parts) - { - if (Genital_Helper.is_sex_part(part) && Genital_Helper.is_penis(part)) - { - if (best == null) best = part; - - // On a draw of size, we check the body-size. - if (part.Severity == best.Severity) { - var partSize = part.TryGetComp(); - var bestSize = part.TryGetComp(); - if (partSize == null || bestSize == null) { continue; } - - best = partSize.SizeOwner > bestSize.SizeOwner ? part : best; - } else if (part.Severity > best.Severity) { - best = part; - } - } - } - - return best; - } - - public static float GetBodySizeOfSexPart(Hediff part) - { - if (part == null || part.TryGetComp() == null) - return 0.0f; - else - return part.TryGetComp().SizeOwner; - } } - } diff --git a/Source/Genes/GenitaliaSize/Gene_EvergrowingGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_EvergrowingGenitalia.cs deleted file mode 100644 index 493eadf..0000000 --- a/Source/Genes/GenitaliaSize/Gene_EvergrowingGenitalia.cs +++ /dev/null @@ -1,106 +0,0 @@ -using Verse; -using RimWorld; -using rjw; -using System.Collections.Generic; -using System; - -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)); - foreach(Hediff penis in AllPenisses) - { - CompHediffBodyPart CompHediff = penis.TryGetComp(); - if (penis.Severity < 1.00) - { - penis.Severity = Math.Min(1.01f, penis.Severity + 0.05f); - } else { - if (CompHediff != null) - { - CompHediff.SizeOwner += 0.015f; - if (CompHediff.SizeOwner > 3.0f) - { - // Add Mental Hediff - HandleGenitaliaSizeThoughts(pawn); - } - } - } - - // Increase Fluid - if (CompHediff != null) - CompHediff.FluidAmmount *= 1.05f; - } - } - - private void GrowVaginas() - { - List AllVaginas = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_vagina(x)); - foreach (Hediff vagina in AllVaginas) - { - CompHediffBodyPart CompHediff = vagina.TryGetComp(); - if (vagina.Severity < 1.00) - { - vagina.Severity = Math.Min(1.01f, vagina.Severity + 0.05f); - } - else - { - if (CompHediff != null) - { - CompHediff.SizeOwner += 0.015f; - if (CompHediff.SizeOwner > 3.0f) - { - // Add Mental Hediff - HandleGenitaliaSizeThoughts(pawn); - } - } - } - - // Increase Fluid - if (CompHediff != null) - CompHediff.FluidAmmount *= 1.025f; - } - } - - private void HandleGenitaliaSizeThoughts(Pawn pawn) - { - Hediff hybridsThoughts = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_evergrowth_sideeffect); - - if (hybridsThoughts != null) - { - hybridsThoughts.Severity += 0.025f; - } - else - { - hybridsThoughts = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_evergrowth_sideeffect, pawn); - hybridsThoughts.Severity = 0.1f; - pawn.health.AddHediff(hybridsThoughts); - - if (!xxx.is_nympho(pawn)) - { - pawn.story.traits.GainTrait(new Trait(xxx.nymphomaniac)); - } - } - } - - } -} \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs index b7de209..ee24126 100644 --- a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs +++ b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs @@ -1,65 +1,46 @@ -using Verse; - -namespace RJW_Genes +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. /// 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 const int RESIZING_AGE = 20; + public bool WasApplied { get; set; } public override void PostMake() { base.PostMake(); - if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age) + if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE) { Resize(); - ResizingWasApplied = true; + WasApplied = true; } } public override void PostAdd() { base.PostAdd(); - if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age) + if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE) { Resize(); - ResizingWasApplied = true; + WasApplied = 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 + /// 2. Filters for Genitalia Existance /// 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, + /// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and also for futas, /// while the breast-gene is female only. /// public abstract void Resize(); diff --git a/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs b/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs index 448c873..b8542a0 100644 --- a/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs +++ b/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs @@ -7,8 +7,6 @@ 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 @@ -16,14 +14,14 @@ namespace RJW_Genes static void Postfix(Pawn ___pawn, int birthdayAge) { - if (birthdayAge >= RJW_Genes_Settings.rjw_genes_resizing_age) + if (birthdayAge >= Gene_GenitaliaResizingGene.RESIZING_AGE) { foreach(Gene_GenitaliaResizingGene gene in GeneUtility.GetGenitaliaResizingGenes(___pawn)) { - if (!gene.ResizingWasApplied) + if (!gene.WasApplied) { gene.Resize(); - gene.ResizingWasApplied = true; + gene.WasApplied = true; } } } diff --git a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs index 977c77b..dc0f0fa 100644 --- a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs +++ b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs @@ -51,9 +51,9 @@ namespace RJW_Genes } // Increase LifeForce for Biter GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(CockBiter), gained_lifeforce); + // Handle Damage for Bitten - CockBittenPawn.TakeDamage(new DamageInfo(DamageDefOf.Bite, 99999f, 999f, hitPart: Genital_Helper.get_genitalsBPR(CockBittenPawn))); - //CockBittenPawn.health.RemoveHediff(part); + CockBittenPawn.health.RemoveHediff(part); CockBittenPawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.rjw_genes_cock_eaten, CockBittenPawn, null); //Only one penis at the time diff --git a/Source/Genes/Life_Force/Defs/LifeForceEmpathExtension.cs b/Source/Genes/Life_Force/Defs/LifeForceEmpathExtension.cs deleted file mode 100644 index ccc037b..0000000 --- a/Source/Genes/Life_Force/Defs/LifeForceEmpathExtension.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 LifeForceEmpathExtension : DefModExtension - { - public float aheagoIncrement; - public float satisfactionIncrement; - public float frustratedDecrement; - } -} diff --git a/Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusVisit.cs b/Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusDreamVisit.cs similarity index 92% rename from Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusVisit.cs rename to Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusDreamVisit.cs index 22808f8..7948e37 100644 --- a/Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusVisit.cs +++ b/Source/Genes/Life_Force/Events/SuccubusVisit/IncidentWorker_SuccubusDreamVisit.cs @@ -37,14 +37,14 @@ namespace RJW_Genes } } return false; - + } protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; - List victims = ValidVictims(map).ToList(); - if (victims.NullOrEmpty()) + List < Pawn > victims = ValidVictims(map).ToList(); + if(victims.NullOrEmpty()) { return false; } @@ -94,7 +94,7 @@ namespace RJW_Genes if (RJWSettings.rape_enabled) { //follow rjw rules - if (SexAppraiser.would_fuck(sexdemon, victim) > 0f) + if (SexAppraiser.would_fuck(sexdemon,victim) > 0f) { sexdemon.pather.StopDead(); sexdemon.jobs.StopAll(); @@ -104,7 +104,8 @@ namespace RJW_Genes } } - Find.LetterStack.ReceiveLetter("rjw_genes_sexdemon_visit_incident_label".Translate(), "rjw_genes_sexdemon_visit_incident_description".Translate(), RimWorld.LetterDefOf.PositiveEvent, new_sexdemons, null, null, null, null); + 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; } @@ -131,4 +132,4 @@ namespace RJW_Genes return new LordJob_SuccubusVisit(target); } } -} \ No newline at end of file +} diff --git a/Source/Genes/Life_Force/Events/SuccubusVisit/LordJob_SuccubusVisit.cs b/Source/Genes/Life_Force/Events/SuccubusVisit/LordJob_SuccubusVisit.cs index 887a324..f2e9a99 100644 --- a/Source/Genes/Life_Force/Events/SuccubusVisit/LordJob_SuccubusVisit.cs +++ b/Source/Genes/Life_Force/Events/SuccubusVisit/LordJob_SuccubusVisit.cs @@ -9,7 +9,7 @@ namespace RJW_Genes //Based on LordJob_VisitColony public class LordJob_SuccubusVisit : LordJob { - public LordJob_SuccubusVisit() { } + public LordJob_SuccubusVisit(){} public LordJob_SuccubusVisit(Pawn target) { this.target = target; @@ -82,10 +82,10 @@ namespace RJW_Genes { foreach (Pawn pawn in this.lord.ownedPawns) { - if (colonyJoiners.Contains(pawn)) + 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)), RimWorld.LetterDefOf.PositiveEvent, pawn, null, null, null, null); + Find.LetterStack.ReceiveLetter("Guest Joins", string.Format("{0} enjoys it here and has decided to stay", xxx.get_pawnname(pawn)), LetterDefOf.PositiveEvent, pawn, null, null, null, null); } else { @@ -99,4 +99,4 @@ namespace RJW_Genes private int? durationTicks; public List colonyJoiners = new List(); } -} \ No newline at end of file +} diff --git a/Source/Genes/Life_Force/Genes/Gene_LifeForce_Empath.cs b/Source/Genes/Life_Force/Genes/Gene_LifeForce_Empath.cs deleted file mode 100644 index e355fb4..0000000 --- a/Source/Genes/Life_Force/Genes/Gene_LifeForce_Empath.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System.Collections.Generic; -using Verse; -using RimWorld; - -namespace RJW_Genes -{ - public class Gene_LifeForce_Empath : Gene - { - - const int EMPATH_DISTANCE_FALLBACK = 25; - const int TICK_INTERVAL_FALLBACK = 60000 / 48; - - const float AHEAGO_FALLBACK = 0.02f, SATISFIED_FALLBACK = 0.01f, FRUSTRATED_FALLBACK = -0.01f; - - int empathDistance = 25; - int tickInterval = 60000 / 48 ; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day. - - float aheagoIncrement = 0.02f; - float satisfiedIncrement = 0.01f; - float frustratedDecrement = -0.01f; - - - public Gene_LifeForce_Empath() : base() - { - SetValuesFromExtension(); - } - - private void SetValuesFromExtension() - { - LifeForceEmpathExtension empathExt = GeneDefOf.rjw_genes_lifeforce_empath.GetModExtension(); - - tickInterval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_lifeforce_empath, TICK_INTERVAL_FALLBACK); - empathDistance = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_lifeforce_empath, EMPATH_DISTANCE_FALLBACK); - - aheagoIncrement = empathExt?.aheagoIncrement ?? AHEAGO_FALLBACK; - satisfiedIncrement = empathExt?.satisfactionIncrement ?? SATISFIED_FALLBACK; - frustratedDecrement = empathExt?.frustratedDecrement ?? FRUSTRATED_FALLBACK; - } - - public override void Tick() - { - base.Tick(); - if (this.pawn.IsHashIntervalTick(tickInterval) && this.pawn.Map != null) - { - foreach (Pawn pawn in this.AffectedPawns(this.pawn.Position, this.pawn.Map)) - { - this.FarmLifeForce(pawn); - } - - } - } - - /// - /// Creates an IEnumerable of all pawns which are closeby and in lineofsight, self and other pawns with lifeforce gene are skipped (to prevent loops). - /// - /// The position of the empath on the map - /// The map the empath is on - /// A list of all pawns that are close enough for the empath to connect. - private IEnumerable AffectedPawns(IntVec3 pos, Map map) - { - foreach (Pawn pawn in map.mapPawns.AllPawns) - { - // Return for trivial errors - if (pawn == null || this.pawn == null || pawn == this.pawn) - continue; - // Check for position-existance - if (pawn.Position == null || pos == null || pawn.Map == null) - continue; - // Do nothing if pawn is carried - if (pawn.CarriedBy != null) - continue; - // Do nothing if Pawn is Baby or Child (#25) - if (!pawn.ageTracker.Adult) - continue; - // Do nothing for pawns that also have lifeforce - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_lifeforce)) - continue; - - // Actual Logic: - // Pawn qualifies in right distance and needs line of sight. - if (pos.DistanceTo(pawn.Position) < empathDistance && GenSight.LineOfSight(pos, pawn.Position, pawn.Map)) - { - yield return pawn; - } - } - - yield break; - } - - /// - /// Adjust the empaths lifeforce depending on the farmed pawns sexneed. - /// - /// The pawn affecting the empath, increasing or decreasing his lifeforce. - private void FarmLifeForce(Pawn farmedPawn) - { - // Short rename to make rest more obvious. - Pawn empath = pawn; - - if (farmedPawn == null) - return; - - var sexneed = farmedPawn.needs.TryGetNeed(); - - // Shortwire: do nothing on no sexneed. - if (sexneed == null) - return; - - if (sexneed.CurLevel >= sexneed.thresh_ahegao()) - GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(empath), aheagoIncrement); - else if (sexneed.CurLevel >= sexneed.thresh_satisfied()) - GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(empath), satisfiedIncrement); - else if (sexneed.CurLevel <= sexneed.thresh_frustrated()) - GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(empath), frustratedDecrement); - - } - - } -} diff --git a/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs b/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs index eda55b2..4b8b3a7 100644 --- a/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs +++ b/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs @@ -46,8 +46,8 @@ namespace RJW_Genes { 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.HasActiveGene(GeneDefOf.rjw_genes_cum_eater) - || this.Pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_fertilin_absorber) || this.Pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_drainer)) + 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; diff --git a/Source/Genes/Life_Force/IngestionOutcomeDoer_LifeForceOffset.cs b/Source/Genes/Life_Force/IngestionOutcomeDoer_LifeForceOffset.cs index feae482..a853abe 100644 --- a/Source/Genes/Life_Force/IngestionOutcomeDoer_LifeForceOffset.cs +++ b/Source/Genes/Life_Force/IngestionOutcomeDoer_LifeForceOffset.cs @@ -11,11 +11,11 @@ namespace RJW_Genes public const float DEFAULT_FERTILIN_PER_UNIT = 1f; public float FertilinPerUnit = 1f; - protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested, int ingestedCount) + protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { if (GeneUtility.HasLifeForce(pawn) && GeneUtility.IsCumEater(pawn)) { - float num = ingestedCount * this.FertilinPerUnit / 100; + float num = ingested.stackCount * this.FertilinPerUnit / 100; GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(pawn), num); } } diff --git a/Source/Genes/Life_Force/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs b/Source/Genes/Life_Force/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs deleted file mode 100644 index 67fafae..0000000 --- a/Source/Genes/Life_Force/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.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 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; - } - } -} \ No newline at end of file diff --git a/Source/Genes/Life_Force/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs b/Source/Genes/Life_Force/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs deleted file mode 100644 index 371f06d..0000000 --- a/Source/Genes/Life_Force/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; - } - } -} \ No newline at end of file diff --git a/Source/Genes/Life_Force/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs b/Source/Genes/Life_Force/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs deleted file mode 100644 index 04d7657..0000000 --- a/Source/Genes/Life_Force/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs +++ /dev/null @@ -1,43 +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; - } - } -} - diff --git a/Source/Genes/Life_Force/JobDrivers/JobDriver_SexOnSpotReceiver.cs b/Source/Genes/Life_Force/JobDrivers/JobDriver_SexOnSpotReceiver.cs index 82967d6..135b231 100644 --- a/Source/Genes/Life_Force/JobDrivers/JobDriver_SexOnSpotReceiver.cs +++ b/Source/Genes/Life_Force/JobDrivers/JobDriver_SexOnSpotReceiver.cs @@ -64,7 +64,10 @@ namespace RJW_Genes }); 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) diff --git a/Source/Genes/Life_Force/JobGivers/JobGiver_GetLifeForce.cs b/Source/Genes/Life_Force/JobGivers/JobGiver_GetLifeForce.cs index f6b26e4..fdd7279 100644 --- a/Source/Genes/Life_Force/JobGivers/JobGiver_GetLifeForce.cs +++ b/Source/Genes/Life_Force/JobGivers/JobGiver_GetLifeForce.cs @@ -27,7 +27,7 @@ namespace RJW_Genes } - if (ModsConfig.IsActive("rjw.sexperience") && gene_lifeforce.StoredCumAllowed && genes.HasActiveGene(GeneDefOf.rjw_genes_cum_eater)) + if (ModsConfig.IsActive("rjw.sexperience") && gene_lifeforce.StoredCumAllowed && genes.HasGene(GeneDefOf.rjw_genes_cum_eater)) { Thing gatheredCum = this.GetStoredCum(pawn); if (gatheredCum == null) diff --git a/Source/Genes/Life_Force/JobGivers/JobGiver_TryQuickieWith.cs b/Source/Genes/Life_Force/JobGivers/JobGiver_TryQuickieWith.cs index 6c17b75..22fcb01 100644 --- a/Source/Genes/Life_Force/JobGivers/JobGiver_TryQuickieWith.cs +++ b/Source/Genes/Life_Force/JobGivers/JobGiver_TryQuickieWith.cs @@ -31,7 +31,20 @@ namespace RJW_Genes { 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 diff --git a/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs b/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs index 4388cf0..6ea0a62 100644 --- a/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs +++ b/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs @@ -25,12 +25,6 @@ namespace RJW_Genes { return; } - // Exit if the pawn has ONLY an archotech penis, and no other penises. Issue #72 - if (props.pawn.health.hediffSet.hediffs.Any(x => x.def == rjw.Genital_Helper.archotech_penis) - && !(Genital_Helper.has_multipenis(props.pawn))) - { - return; - } //Summary// //We use the positions of the pawn (dom or sub) and based on that which interactions will transfer fertilin diff --git a/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs b/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs index 3d1f684..b4b327c 100644 --- a/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs +++ b/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs @@ -39,10 +39,10 @@ namespace RJW_Genes List absorption_genes_parents = new List(); foreach (GeneDef geneDef in FertilinSourceGenes) { - if(mother.genes != null && mother.genes.HasActiveGene(geneDef)) + if(mother.genes != null && mother.genes.HasGene(geneDef)) absorption_genes_parents.Add(geneDef); - if (father.genes != null && father.genes.HasActiveGene(geneDef)) + if (father.genes != null && father.genes.HasGene(geneDef)) absorption_genes_parents.Add(geneDef); } // Parents had Genes - Pick a random one of them diff --git a/Source/Genes/Life_Force/UI/GeneGizmo_ResourceLifeForce.cs b/Source/Genes/Life_Force/UI/GeneGizmo_ResourceLifeForce.cs index edd2e5f..f2b0055 100644 --- a/Source/Genes/Life_Force/UI/GeneGizmo_ResourceLifeForce.cs +++ b/Source/Genes/Life_Force/UI/GeneGizmo_ResourceLifeForce.cs @@ -13,7 +13,7 @@ namespace RJW_Genes { 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) diff --git a/Source/Genes/Patch_AddNotifyOnGeneration.cs b/Source/Genes/Patch_AddNotifyOnGeneration.cs deleted file mode 100644 index 3395a81..0000000 --- a/Source/Genes/Patch_AddNotifyOnGeneration.cs +++ /dev/null @@ -1,23 +0,0 @@ -using HarmonyLib; -using System.Linq; -using Verse; - -namespace RJW_Genes.Genes -{ - [HarmonyPatch] - public static class Patch_AddNotifyOnGeneration - { - [HarmonyPatch(typeof(PawnGenerator), "GenerateGenes")] - [HarmonyPostfix] - public static void PawnGenerator_GenerateGenes_Postfix(Pawn pawn) - { - if (pawn.genes == null) return; - - foreach(var gene in pawn.genes.GenesListForReading) - { - if (gene is RJW_Gene rjwGene) - rjwGene.Notify_OnPawnGeneration(); - } - } - } -} diff --git a/Source/Genes/Patches/LustFeeding.cs b/Source/Genes/Patches/LustFeeding.cs deleted file mode 100644 index bba72a6..0000000 --- a/Source/Genes/Patches/LustFeeding.cs +++ /dev/null @@ -1,150 +0,0 @@ -using RimWorld; -using rjw; -using Verse; -using System; -using RimWorld.Planet; - - - -namespace RJWLoveFeeding -{ - static class LustFeeding - { - //[HarmonyPostfix] - static Def LoveFeed = DefDatabase.GetNamed("RS_LoveFeed", false); - static Def VampireLover = DefDatabase.GetNamed("VU_VampireLover", false); - static Def LovinDependency = DefDatabase.GetNamed("VRE_LovinDependency", false); - static NeedDef VRE_Lovin = DefDatabase.GetNamed("VRE_Lovin", false); - public static void Postfix(SexProps props) - { - try - { - LustFeeding.RJWLustFeeding(props); - } - catch (Exception e) - { - Log.Error(e.ToString()); - } - } - - public static void RJWLustFeeding(SexProps props) - { - if((props.pawn != null) && (props.partner != null) && !xxx.is_animal(props.pawn) && !xxx.is_animal(props.partner)) - { - //ModLog.Message($" Patch Worked"); - if(!props.pawn.IsCaravanMember() && !props.partner.IsCaravanMember()) - { - FillNeed(props.pawn); - FillNeed(props.partner); - - RJWTryTakeBlood(props.pawn, props.partner); - RJWTryTakeBlood(props.partner, props.pawn); - } - - } - - } - - public static void FillNeed(Pawn pawn) - { - Pawn_GeneTracker genes; - if (LovinDependency != null) - { - genes = pawn.genes; - - if (genes == null) - { - return; - } - if (pawn.genes.HasActiveGene(RJW_Genes.GeneDefOf.VRE_LovinDependency)) - { - if (VRE_Lovin != null) - { - Pawn_NeedsTracker needs = pawn.needs; - ((needs != null) ? needs.TryGetNeed(VRE_Lovin) : null).CurLevel = 1f; - } - } - } - } - - - public static bool RJWTryTakeBlood(Pawn pawn, Pawn bloodBag) - { - - if (bloodBag == null || pawn == null) return false; - Pawn_GeneTracker genes = bloodBag.genes; - if (genes!=null) - if ((genes.GetFirstGeneOfType() != null)) - { - return false; - } - - genes = pawn.genes; - - if (genes == null) - { - return false; - } - - bool isLoveFeeder = false; - - if(LoveFeed != null) - { - if (RJWSettings.DevMode) RJW_Genes.ModLog.Message("LoveFeed checks"); - if (genes.HasActiveGene(RJW_Genes.GeneDefOf.RS_LoveFeed)) - { - - isLoveFeeder = true; - } - } - if (VampireLover != null) - { - if (RJWSettings.DevMode) RJW_Genes.ModLog.Message("LoveFeed checks"); - if (genes.HasActiveGene(RJW_Genes.GeneDefOf.VU_VampireLover)) - { - isLoveFeeder = true; - } - } - - - if (isLoveFeeder && (genes.GetFirstGeneOfType() != null)) - { - ModLog.Message($" Lovefeeder just finished loving: {xxx.get_pawnname(pawn)}"); - - Gene_Hemogen gene_Hemogen = genes.GetFirstGeneOfType(); - if (gene_Hemogen != null) - { - if (gene_Hemogen.Value < gene_Hemogen.targetValue) - { - Hediff bloodBagBloodLoss = bloodBag.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.BloodLoss, false); - if (bloodBagBloodLoss != null) - { - float afterBite = bloodBagBloodLoss.Severity + 0.25f; - if ((afterBite > HediffDefOf.BloodLoss.lethalSeverity) || (afterBite > 0.49f)) - { - //ModLog.Message($"{xxx.get_pawnname(pawn)} would have killed someone. {afterBite} > {HediffDefOf.BloodLoss.lethalSeverity}"); - return false; - } - - } - SanguophageUtility.DoBite(pawn, bloodBag, 0.2f, 0.1f, 0.2f, 1f, IntRange.one, ThoughtDefOf.FedOn, ThoughtDefOf.FedOn_Social); - ModLog.Message($"{xxx.get_pawnname(pawn)} snacked on {xxx.get_pawnname(bloodBag)}"); - return true; - - } - else - { - ModLog.Message($"{xxx.get_pawnname(pawn)} not hungry. {gene_Hemogen.Value} > {gene_Hemogen.targetValue}"); - } - } - - - - } - return false; ; - } - - } - - -} diff --git a/Source/Genes/Patches/MultiplePregnancies.cs b/Source/Genes/Patches/MultiplePregnancies.cs deleted file mode 100644 index f5d3eeb..0000000 --- a/Source/Genes/Patches/MultiplePregnancies.cs +++ /dev/null @@ -1,72 +0,0 @@ -using RimWorld; -using rjw; -using Verse; -using System.Linq; -using System.Collections.Generic; -using System; -using HarmonyLib; -using RJWLoveFeeding; - - -namespace RJWLoveFeeding -{ - [HarmonyPatch(typeof(PawnExtensions), "IsPregnant", new Type[] -{ - typeof(Pawn), typeof(bool) - })] - class MultiplePregnancies - { - static Def MultiPregnancy = DefDatabase.GetNamed("RS_MultiPregnancy", false); - [HarmonyPostfix] - public static void Postfix(ref bool __result, Pawn pawn, bool mustBeVisible) - { - bool isPregnant = __result; - if (MultiPregnancy != null) - { - if (RJWSettings.DevMode) RJW_Genes.ModLog.Message("multipreg checks"); - if (isPregnant) - { - try - { - isPregnant = MultiplePregnancies.RJWMultiplePregnancy(isPregnant, pawn); - } - catch (Exception e) - { - Log.Error(e.ToString()); - } - } - __result = isPregnant; - } - } - - - public static bool RJWMultiplePregnancy(bool isPregnant, Pawn fucked) - { - if ((fucked != null) && !xxx.is_animal(fucked)) - { - - - List set = fucked.health.hediffSet.hediffs; - - //Taking all hediffs that prevent pregnancy but are are not of the type used for pregnancies itself - List setNoPreggo = set.FindAll(o => (o.def.preventsPregnancy) && !(o is HediffWithParents)); - - if (setNoPreggo.NullOrEmpty()) - { - Pawn_GeneTracker genes = fucked.genes; - if (genes.HasActiveGene(RJW_Genes.GeneDefOf.RS_MultiPregnancy)) - { - Log.Message(xxx.get_pawnname(fucked) + " has multipregnancy gene"); - return false; - } - } - else - { - Log.Message(setNoPreggo.First().def.defName + ": This prevents pregnancy"); - } - } - - return isPregnant; - } - } -} diff --git a/Source/Genes/Patches/PatchLitteredBirth.cs b/Source/Genes/Patches/PatchLitteredBirth.cs deleted file mode 100644 index b020099..0000000 --- a/Source/Genes/Patches/PatchLitteredBirth.cs +++ /dev/null @@ -1,153 +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_Genes -{ - - public class PatchLitteredBirth - { - - static Dictionary laborStateMap = new Dictionary(); - public static void Hediff_Labor_PostRemovedPostFix(ref Hediff_Labor __instance) - { - bool randomTwinsRoll; - int totalBirths; - bool laborStateIsNull = !laborStateMap.ContainsKey(__instance.pawn.ThingID); - bool hasLitteredBirthsGene = __instance.pawn.genes.HasActiveGene(GeneDefOf.LitteredBirths); - - // we'll never do additional processing if this is the guaranteed last birth (eg birth #4) - if (!laborStateIsNull && laborStateMap.TryGetValue(__instance.pawn.ThingID).birthCount == 4) - { - return; - } - - // For now, littered birth overrides ovary agitator and twin calculations, so if a LaborState already exists - // with littered births gene, move on - if (!laborStateIsNull && hasLitteredBirthsGene) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Message("Found active LaborState and LitteredBirths gene - skipping additional Hediff_Labor_PostRemovedPostFix work"); - ModLog.Message("Pawn: " + __instance.pawn.NameShortColored + " (" + __instance.pawn.ThingID + ")"); - ModLog.Message("birthCount: " + laborStateMap.TryGetValue(__instance.pawn.ThingID).birthCount); - } - - return; - } - - // Make a new LaborState for the null case with littered births - if (laborStateIsNull && hasLitteredBirthsGene) - { - ModLog.Message("Found littered births gene"); - int litteredBirthsTotalRoll = Rand.RangeInclusive(2, 4); - laborStateMap.SetOrAdd(__instance.pawn.ThingID, new LaborState(__instance.pawn, litteredBirthsTotalRoll)); - return; - } - - // Finally, regardless of littered births gene, we only want new state creation on - // pawns that don't already have state, so return if state is !null (STATE SHOULD ALWAYS BE CLEANED IN LABORPUSHING POSTFIX) - if (!laborStateIsNull) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Warning("Labor state for pawn " + __instance.pawn.NameShortColored + " (" + __instance.pawn.ThingID + - ") is not null despite all checks passing for determining first instance of Hediff_Labor - this warning should never occur, " + - "and may indicate a bug in Hediff_LaborPushing of lingering labor state from a previous pregnancy"); - } - return; - } - - // For everything else, we do random twin and OvaryAgitator handling - // ------- - // If we fail a base chance twins roll, return without any additional processing and proceed with vanilla childbirth - // Notes on rolls: - // -> Chance without OvaryAgitator to have twins: 1% - // -> Chance with OvaryAgitator to have twins: Guaranteed - // ---> Chance with OvaryAgitator to have triplets (MUST HAVE SUCCEEDED TWINS ROLL): 50% - // ---> Chance with OvaryAgitator to have quadruplets (MUST HAVE SUCCEEDED TRIPLETS ROLL): 10% - // -> Chance with Littered Births gene: random between 2 and 4 (inclusive) - randomTwinsRoll = Rand.Chance(0.01f); - bool hasAgitator = __instance.pawn.health.hediffSet.HasHediff(HediffDef.Named("OvaryAgitator")); - if (!randomTwinsRoll && !hasAgitator) - { - // We failed rolls, and we don't have an agitator - no additional processing, do vanilla single baby birth - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Message("Inside Hediff_Labor_PostRemovedPostFix random twins check fail"); - ModLog.Message("Pawn: " + __instance.pawn.NameShortColored); - ModLog.Message("Random twins roll outcome: " + randomTwinsRoll); - ModLog.Message("Has OvaryAgitator: " + hasAgitator); - } - return; - } - - // Beyond this point, we can assume the pawn has an agitator - totalBirths = 2; - bool agitatorTriplets = Rand.Chance(0.5f); - bool agitatorQuadruplets = Rand.Chance(0.1f); - if (hasAgitator) - { - if (agitatorTriplets) totalBirths = 3; - if (agitatorTriplets && agitatorQuadruplets) totalBirths = 4; - } - - // Set new LaborState - laborStateMap.Add(__instance.pawn.ThingID, new LaborState(__instance.pawn, totalBirths)); - } - - public static void Hediff_LaborPushing_PostRemovedPostFix(ref Hediff_LaborPushing __instance) - { - bool hasAgitator = __instance.pawn.health.hediffSet.HasHediff(HediffDef.Named("OvaryAgitator")); - bool hasLitteredBirthsGene = __instance.pawn.genes.HasActiveGene(GeneDefOf.LitteredBirths); - bool laborStateIsNull = !laborStateMap.ContainsKey(__instance.pawn.ThingID); - LaborState currentLaborState; - laborStateMap.TryGetValue(__instance.pawn.ThingID, out currentLaborState); - - if (laborStateIsNull) - { - if (__instance.pawn.health.hediffSet.HasHediff(HediffDef.Named("Bioscaffold"))) - { - __instance.pawn.health.RemoveHediff(__instance.pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Bioscaffold)); - } - return; - } - - if (currentLaborState.birthTotal == currentLaborState.birthCount) - { - laborStateMap.Remove(__instance.pawn.ThingID); - if (__instance.pawn.health.hediffSet.HasHediff(HediffDef.Named("Bioscaffold"))) - { - - __instance.pawn.health.RemoveHediff(__instance.pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Bioscaffold)); - } - return; - } - - ((Hediff_Labor)__instance.pawn.health.AddHediff(RimWorld.HediffDefOf.PregnancyLabor)).SetParents(__instance.pawn, __instance.Father, PregnancyUtility.GetInheritedGeneSet(__instance.Father, __instance.pawn)); - currentLaborState.birthCount++; - - if (!hasAgitator && !hasLitteredBirthsGene) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - { - ModLog.Message("Pawn " + __instance.pawn.NameShortColored + " (" + __instance.pawn.ThingID + ") is having random twins"); - } - Find.LetterStack.ReceiveLetter("Twins!", __instance.pawn.NameShortColored + " is still in labor and is having twins!\n\n" + - "Be sure to gather your doctor and additional friends and family to ensure the other baby is also born healthy!", - LetterDefOf.AnotherBaby, __instance.pawn); - return; - } - - Find.LetterStack.ReceiveLetter("Another baby!", __instance.pawn.NameShortColored + " is still in labor and is having another baby!\n\n" + - "Be sure to gather your doctor and additional friends and family to ensure the next baby is also born healthy!", - LetterDefOf.AnotherBaby, __instance.pawn); - } - } -} diff --git a/Source/Genes/Patches/Patch_Asexual_CanRape.cs b/Source/Genes/Patches/Patch_Asexual_CanRape.cs deleted file mode 100644 index 76e02a3..0000000 --- a/Source/Genes/Patches/Patch_Asexual_CanRape.cs +++ /dev/null @@ -1,28 +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.Patches -{ - /// - /// This Patch hooks after "can_rape" and changes it to false for pawns that have no sex_need (are a-sexual). - /// This helps with #100, and is more of a non-intrusive improvement over the base game. - /// - [HarmonyPatch(typeof(xxx), nameof(xxx.can_rape))] - public class Patch_Asexual_CanRape - { - public static bool PostFix(Pawn pawn, ref bool __result) - { - if (pawn != null && pawn.genes != null && pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_no_sex_need)) - { - __result = false; - } - return __result; - } - } -} diff --git a/Source/Genes/Quirks/Defs/QirkExtension.cs b/Source/Genes/Quirks/Defs/QirkExtension.cs deleted file mode 100644 index 8e90319..0000000 --- a/Source/Genes/Quirks/Defs/QirkExtension.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Verse; -using RimWorld; -using rjw; -using System; - -namespace RJW_Genes -{ - public class QirkExtension : DefModExtension - { - public string Satisfiedquirk; - } -} diff --git a/Source/Genes/Quirks/QuirkPatcher.cs b/Source/Genes/Quirks/QuirkPatcher.cs deleted file mode 100644 index ac2b477..0000000 --- a/Source/Genes/Quirks/QuirkPatcher.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Verse; -using RimWorld; -using rjw; -using System.Collections.Generic; -using rjw.Modules.Quirks; -using System; - -namespace RJW_Genes -{ - public class QuirkPatcher - { - /// - /// This Patch is applied after the quirk-satisfaction and checks - /// a) which quirks can the sex-partner satisfy? - /// b) which of the quirks has the pawn? - /// - /// The result of the Satisfied is an integer, based on the original framework. - /// The framework "just checks" the number of satisfied quirks - we increase this number with this postfix. - /// - public static void CountSatisfiedPostfix(ref int __result, SexProps props) - { - if (props == null) return; - Pawn pawn = props.pawn; - Pawn partner = props.partner; - if (partner == null || pawn == null) return; - if(!pawn.IsHuman()||!partner.IsHuman()) return; - - List potentiallySatisfiedQuirks = new List(); - foreach (Gene gene in partner.genes.GenesListForReading) - { - if (partner.genes.HasActiveGene(gene.def)) - { - string satisfiable_quirk = gene.def?.GetModExtension()?.Satisfiedquirk; - if (!string.IsNullOrEmpty(satisfiable_quirk)) - { - potentiallySatisfiedQuirks.Add(satisfiable_quirk); - } - } - } - - int QuirksSatisfiedByGenes = -1; - - foreach (Quirk quirk in Quirk.All) - { - if (pawn.Has(quirk)) - { - foreach (string satisfiableQuirk in potentiallySatisfiedQuirks) - { - if (!string.IsNullOrEmpty(satisfiableQuirk) && quirk.LocaliztionKey == satisfiableQuirk) - { - QuirksSatisfiedByGenes++; - Quirk.AddThought(pawn); - } - } - } - } - - if(QuirksSatisfiedByGenes > 0) - __result = __result + QuirksSatisfiedByGenes; - return; - } - - } -} diff --git a/Source/Genes/RJW_Gene.cs b/Source/Genes/RJW_Gene.cs index c006d2c..d03440c 100644 --- a/Source/Genes/RJW_Gene.cs +++ b/Source/Genes/RJW_Gene.cs @@ -12,15 +12,5 @@ namespace RJW_Genes if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) Sexualizer.sexualize_pawn(pawn); } - - /// - /// Executed via PawnGenerator.GenerateGenes at Pawn generation - /// Allows for execution of code that should only happen during PawnGeneration - /// - /// This has an accompanying patch `Patch_AddNotifyOnGeneration.cs`. - /// - public virtual void Notify_OnPawnGeneration() - { - } } } diff --git a/Source/Genes/Special/Abilities/CompAbilityEffect_CocoonWeaver.cs b/Source/Genes/Special/Abilities/CompAbilityEffect_CocoonWeaver.cs deleted file mode 100644 index a3af363..0000000 --- a/Source/Genes/Special/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); - } - - } -} \ No newline at end of file diff --git a/Source/Genes/Special/Abilities/CompProperties_AbilityCocoonWeaver.cs b/Source/Genes/Special/Abilities/CompProperties_AbilityCocoonWeaver.cs deleted file mode 100644 index caa63b6..0000000 --- a/Source/Genes/Special/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); - } - } -} \ No newline at end of file diff --git a/Source/Genes/Special/Defs/AgeTransferExtension.cs b/Source/Genes/Special/Defs/AgeTransferExtension.cs deleted file mode 100644 index e309381..0000000 --- a/Source/Genes/Special/Defs/AgeTransferExtension.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Verse; - -namespace RJW_Genes -{ - public class AgeTransferExtension : DefModExtension - { - /// - /// Amount by which the Biological Age Ticks will be changed. - /// - public int ageTickChange; - - /// - /// Minimum Age for youthing to take place - pawns cannot end up underaged. - /// - public int minAgeInYears; - } -} \ No newline at end of file diff --git a/Source/Genes/Special/Defs/GeneAlteringExtension.cs b/Source/Genes/Special/Defs/GeneAlteringExtension.cs deleted file mode 100644 index 64b40d4..0000000 --- a/Source/Genes/Special/Defs/GeneAlteringExtension.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class GeneAlteringExtension : DefModExtension - { - public List minorGenes; - public List majorGenes; - - public float minorApplicationChance; - public float majorApplicationChance; - } -} diff --git a/Source/Genes/Special/Defs/HormonalSalivaExtension.cs b/Source/Genes/Special/Defs/HormonalSalivaExtension.cs deleted file mode 100644 index 7c212f0..0000000 --- a/Source/Genes/Special/Defs/HormonalSalivaExtension.cs +++ /dev/null @@ -1,28 +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 HormonalSalivaExtension : DefModExtension - { - /// - /// How much the genitalia will growth per interaction. - /// This is applied "flat", so if you have penis 0.5 and growthRate 0.05 it goes to 0.55, 0.60, 0.65 etc. - /// - public float sizeIncrement; - /// - /// Upper Limit for the body size - default should be 2-3 - /// - public float maxBodySize; - /// - /// How much more cum the pawn will make. - /// This is applied as multiplication, so if you have cum 20 and multiplier 1.1 you will have 22,24,27 etc. - /// This leads to exponential growth, so try to keep it kinda low. - /// - public float cumMultiplier; - } -} diff --git a/Source/Genes/Special/Genes/Gene_Aphrodisiac_Pheromones.cs b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs similarity index 53% rename from Source/Genes/Special/Genes/Gene_Aphrodisiac_Pheromones.cs rename to Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs index 6d7c432..e3628dc 100644 --- a/Source/Genes/Special/Genes/Gene_Aphrodisiac_Pheromones.cs +++ b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs @@ -11,8 +11,8 @@ namespace RJW_Genes // This means that adding +.25 equals 1.5h of Libido. // Tick Speed is hence set to 0.5h - public const int APHRODISIAC_DISTANCE_FALLBACK = 25; - const int TICK_INTERVAL_FALLBACK = 60000 / 48 ; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day. + const int APHRODISIAC_DISTANCE = 25; + const int TICK_INTERVAL = 60000 / 48 ; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day. const float SEXFREQ_THRESHOLD = 0.5f; @@ -20,10 +20,7 @@ namespace RJW_Genes public override void Tick() { base.Tick(); - - int tickInterval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_aphrodisiac_pheromones, TICK_INTERVAL_FALLBACK); - - if (this.pawn.IsHashIntervalTick(tickInterval) && this.pawn.Map != null) + if (this.pawn.IsHashIntervalTick(TICK_INTERVAL) && this.pawn.Map != null) { // Only spread pheromones if sexdrive above 1 float sexfrequency = this.pawn.GetStatValue(StatDef.Named("SexFrequency")); @@ -42,30 +39,9 @@ namespace RJW_Genes { foreach (Pawn pawn in map.mapPawns.AllPawns) { - // Return for trivial errors - if (pawn == null || this.pawn == null || pawn == this.pawn) - continue; - // Check for position-existance - if (pawn.Position == null || pos == null || pawn.Map == null) - continue; - // Do nothing if pawn is carried - if (pawn.CarriedBy != null) - continue; - // Do nothing if Pawn is Baby or Child (#25) - if (!pawn.ageTracker.Adult) - continue; - // Do nothing for pawns that also have pheromones - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones)) - continue; - // Do nothing for pawns that wear Gas-Masks - if (pawn.apparel != null && pawn.apparel.AnyApparel) - if (pawn.apparel.WornApparel.Any(apparel => apparel.def == RimWorld.ThingDefOf.Apparel_GasMask)) - continue; - - // Actual Logic: - // Pawn qualifies in right distance and needs line of sight. - int effectDistance = ModExtensionHelper.GetDistanceFromModExtension(GeneDefOf.rjw_genes_aphrodisiac_pheromones, APHRODISIAC_DISTANCE_FALLBACK); - if (pos.DistanceTo(pawn.Position) < effectDistance && GenSight.LineOfSight(pos, pawn.Position, pawn.Map)) + if (pawn != null && this.pawn != null && pawn != this.pawn + && pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map) + && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones)) { yield return pawn; } @@ -87,8 +63,6 @@ namespace RJW_Genes aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn); aphrodisiac.Severity = 0.5f; pawn.health.AddHediff(aphrodisiac); - - } } diff --git a/Source/Genes/Special/Patch_AgeDrain.cs b/Source/Genes/Special/Patch_AgeDrain.cs new file mode 100644 index 0000000..2c7e55d --- /dev/null +++ b/Source/Genes/Special/Patch_AgeDrain.cs @@ -0,0 +1,40 @@ +using HarmonyLib; +using rjw; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RJW_Genes.Genes.Special +{ + [HarmonyPatch(typeof(SexUtility), "Aftersex")] + public static class Patch_AgeDrain + { + + const long AGE_TRANSFERED = 120000; // 120k == 2 days + // 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety + const long MINIMUM_AGE = 20 * 60 * 60000 + 1; + + // Comment Below in for debugging, changes years + // const long AGE_TRANSFERED = 12000000; + public static void Postfix(SexProps props) + { + if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() ) + { + return; + } + if (GeneUtility.IsAgeDrainer(props.pawn)) + { + var pawnAge = props.pawn.ageTracker.AgeBiologicalTicks; + //ModLog.Error($"Firing Age Drain \nMinimum Age is \t{MINIMUM_AGE} \nPawn Age is \t{pawnAge} \nTransferred \t{AGE_TRANSFERED}\nResulting in \t{pawnAge - AGE_TRANSFERED}"); + + // Make Partner older + props.partner.ageTracker.AgeBiologicalTicks += AGE_TRANSFERED; + // Make Pawn younger + props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED)); + } + + } + } +} diff --git a/Source/Genes/Special/Patches/Patch_OrgasmRush.cs b/Source/Genes/Special/Patch_OrgasmRush.cs similarity index 95% rename from Source/Genes/Special/Patches/Patch_OrgasmRush.cs rename to Source/Genes/Special/Patch_OrgasmRush.cs index d6df246..eaf6216 100644 --- a/Source/Genes/Special/Patches/Patch_OrgasmRush.cs +++ b/Source/Genes/Special/Patch_OrgasmRush.cs @@ -27,7 +27,7 @@ namespace RJW_Genes if (props.pawn.IsAnimal() || props.partner.IsAnimal()) return; - if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_orgasm_rush)) + if (props.pawn.genes != null && props.pawn.genes.HasGene(GeneDefOf.rjw_genes_orgasm_rush)) { // Pump up Wake-Ness diff --git a/Source/Genes/Special/Patch_Youth_Fountain.cs b/Source/Genes/Special/Patch_Youth_Fountain.cs new file mode 100644 index 0000000..a1a1840 --- /dev/null +++ b/Source/Genes/Special/Patch_Youth_Fountain.cs @@ -0,0 +1,44 @@ +using HarmonyLib; +using rjw; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RJW_Genes.Genes.Special +{ + [HarmonyPatch(typeof(SexUtility), "Aftersex")] + public static class Patch_Youth_Fountain + { + + const long AGE_REDUCTION = 60000; // 60k == 1 day + // 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety + const long MINIMUM_AGE = 20 * 60 * 60000 + 1; + + // Comment Below in for debugging + // const long AGE_REDUCTION = 6000000; // 6000k == 100 days + public static void Postfix(SexProps props) + { + if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal()) + { + return; + } + if (GeneUtility.IsYouthFountain(props.pawn)) + { + var partnerAge = props.partner.ageTracker.AgeBiologicalTicks; + + //ModLog.Error($"Firing Youth Fountain \nMinimum Age is \t{MINIMUM_AGE}\t{ticksToYears(MINIMUM_AGE)}y\nPawn Age is \t{partnerAge}\t{ticksToYears(partnerAge)}y \nTransferred \t {AGE_REDUCTION}\t{ticksToYears(AGE_REDUCTION)}y\nResulting in \t{partnerAge - AGE_REDUCTION}\t{ticksToYears(partnerAge - AGE_REDUCTION)}y"); + + props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION); + } + + } + + private static float ticksToYears(long ticks) + { + return (ticks / 60000f) / 60f; + } + } + +} diff --git a/Source/Genes/Special/Patches/Patch_AgeDrain.cs b/Source/Genes/Special/Patches/Patch_AgeDrain.cs deleted file mode 100644 index 059baef..0000000 --- a/Source/Genes/Special/Patches/Patch_AgeDrain.cs +++ /dev/null @@ -1,91 +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 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; - - const int FACTION_GOODWILL_CHANGE = -1; - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() ) - { - return; - } - - if (props.pawn == props.partner || props.sexType == xxx.rjwSextype.Masturbation || props.sexType == xxx.rjwSextype.None) - { - // This case was reported but is a bit strange, I hardened it after reports in #99 - 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."); - } - - FactionUtility.HandleFactionGoodWillPenalties(receiver, giver, "rjw_genes_GoodwillChangedReason_aged_pawn_with_sex_gene",FACTION_GOODWILL_CHANGE); - } - - } -} diff --git a/Source/Genes/Special/Patches/Patch_Feminizer.cs b/Source/Genes/Special/Patches/Patch_Feminizer.cs deleted file mode 100644 index 4259654..0000000 --- a/Source/Genes/Special/Patches/Patch_Feminizer.cs +++ /dev/null @@ -1,113 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - /// - /// This patch handles the changes produced by `rjw_genes_feminizer`. - /// It requires the hediff `rjw_genes_feminzation_in_progress` which is managed separately, in `Patch_HediffIncreaseOnSex`. - /// - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public static class Patch_Feminizer - { - - static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_feminizer.GetModExtension(); - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || !props.hasPartner() || props.partner == null) - return; - if (props.pawn.IsAnimal() || props.partner.IsAnimal()) - return; - - if (geneAlteringExtension == null) - { - ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Feminizer"); - return; - } - - ApplyFeminization(props.pawn); - ApplyFeminization(props.partner); - } - - private static void ApplyFeminization(Pawn pawn) - { - if (pawn == null) return; - Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_feminization_progress); - if (hediff == null) return; - - var Random = new Random(); - // DevNote: I first had a switch (hediff.SeverityLabel) but SeverityLabel was null. - // So now I have this approach which feels a bit more robust. - // I was thinking about looking for strings in the label, but I think that will break the logic in case of translations. - switch (hediff.Severity) - { - case float f when f > 0.8f: - { - if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance) - MajorChange(pawn); - } break; - case float f when f > 0.6f: - { - if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance) - MinorChange(pawn); - } break; - default: - { - ModLog.Debug($"Tried to feminize {pawn} - severity of feminization was too low ({hediff.def} @ {hediff.Severity} - {hediff.Label})") ; - } break; - } - } - - private static void MinorChange(Pawn pawn) - { - List possibleGenes = geneAlteringExtension.minorGenes.ToList(); - GeneDef chosen = possibleGenes.RandomElement(); - if (chosen == null) - { - ModLog.Warning($"Error in retrieving a minor-feminization gene for feminizing {pawn}"); - return; - } - - // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active. - if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen)) - { - ModLog.Debug($"{pawn} experienced a minor feminization change; {pawn} got new gene {chosen}."); - pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); - } else - { - ModLog.Debug($"Tryed a minor feminization for {pawn} - {pawn} already had {chosen}"); - } - } - - private static void MajorChange(Pawn pawn) - { - List possibleGenes = geneAlteringExtension.majorGenes.ToList(); - GeneDef chosen = possibleGenes.RandomElement(); - if (chosen == null) - { - ModLog.Warning($"Error in retrieving a minor-feminization gene for feminizing {pawn}"); - return; - } - - // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active. - if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen)) - { - ModLog.Debug($"{pawn} experienced a major feminization change; {pawn} got new gene {chosen}."); - pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); - } - else - { - ModLog.Debug($"Tryed a major feminization for {pawn} - {pawn} already had {chosen}"); - ModLog.Debug($"Trying minor feminization for {pawn} instead ..."); - MinorChange(pawn); - } - } - } -} diff --git a/Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs b/Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs deleted file mode 100644 index 377b71d..0000000 --- a/Source/Genes/Special/Patches/Patch_GeneticSexSwap.cs +++ /dev/null @@ -1,69 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public class Patch_GeneticSexSwap - { - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal()) - { - return; - } - - Pawn pawn = props.pawn; - Pawn partner = props.partner; - - if (pawn.genes == null || partner.genes == null) return; - - // If both have the swap gene, nothing happens - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_swap) - && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_swap)) - return; - // If neither has the swap gene, nothing happens - if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_swap) - && !GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_swap)) - return; - - ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_swap.GetModExtension(); - if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance) - SwapOneRandomGene(pawn, partner); - } - - /// - /// Removes a random gene from one pawn and adds it too the other as xenogene. - /// The "gene swap" gene cannot be swapped! - /// - private static void SwapOneRandomGene(Pawn a, Pawn b, bool AddAsXenogene = true) - { - - var geneFromA = a.genes.GenesListForReading - .Where(gene => a.genes.HasActiveGene(gene.def)) - .Where(gene => gene.def != GeneDefOf.rjw_genes_sexual_genetic_swap) - .RandomElement(); - var geneFromB = b.genes.GenesListForReading - .Where(gene => b.genes.HasActiveGene(gene.def)) - .Where(gene => gene.def != GeneDefOf.rjw_genes_sexual_genetic_swap) - .RandomElement(); - - if (geneFromA == null || geneFromB == null) return; - - ModLog.Debug($"Sexual Genetic Swap: Swapping {geneFromA.def} from {a} with {geneFromB.def} from {b}"); - - a.genes.AddGene(geneFromB.def, AddAsXenogene); - b.genes.AddGene(geneFromA.def, AddAsXenogene); - a.genes.RemoveGene(geneFromA); - b.genes.RemoveGene(geneFromB); - } - - } -} diff --git a/Source/Genes/Special/Patches/Patch_GeneticSexThief.cs b/Source/Genes/Special/Patches/Patch_GeneticSexThief.cs deleted file mode 100644 index d61f0bd..0000000 --- a/Source/Genes/Special/Patches/Patch_GeneticSexThief.cs +++ /dev/null @@ -1,75 +0,0 @@ -using HarmonyLib; -using RimWorld; -using RimWorld.Planet; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public class Patch_GeneticSexThief - { - - public const int FACTION_GOODWILL_CHANGE = -10; - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal()) - { - return; - } - - Pawn pawn = props.pawn; - Pawn partner = props.partner; - - if (pawn.genes == null || partner.genes == null) return; - - // If both have the swap gene, nothing happens - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sexual_genetic_thief) - && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_thief)) - return; - - if (GeneUtility.HasGeneNullCheck(pawn,GeneDefOf.rjw_genes_sexual_genetic_thief) && - !GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_genetic_disease_immunity)) - { - ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_thief.GetModExtension(); - if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance) - StealRandomGene(pawn, partner); - } - - if (GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_sexual_genetic_thief) && - !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_genetic_disease_immunity)) - { - ChanceExtension chanceExt = GeneDefOf.rjw_genes_sexual_genetic_thief.GetModExtension(); - if (chanceExt != null && (new Random()).NextDouble() < chanceExt.chance) - StealRandomGene(partner, pawn); - } - } - - /// - /// Removes a random gene from one pawn and adds it too the other as xenogene. - /// - private static void StealRandomGene(Pawn stealer, Pawn victim, bool AddAsXenogene = true) - { - var stolenGene = victim.genes.GenesListForReading - .Where(gene => victim.genes.HasActiveGene(gene.def)) - .RandomElement(); - - if (stolenGene == null) return; - - ModLog.Debug($"Sexual Gene Thief: {stealer} steals {stolenGene.def} from {victim}"); - - stealer.genes.AddGene(stolenGene.def, AddAsXenogene); - victim.genes.RemoveGene(stolenGene); - - FactionUtility.HandleFactionGoodWillPenalties(stealer, victim, "rjw_genes_GoodwillChangedReason_StoleGene", FACTION_GOODWILL_CHANGE); - } - - } -} diff --git a/Source/Genes/Special/Patches/Patch_HormonalSaliva.cs b/Source/Genes/Special/Patches/Patch_HormonalSaliva.cs deleted file mode 100644 index fed69d7..0000000 --- a/Source/Genes/Special/Patches/Patch_HormonalSaliva.cs +++ /dev/null @@ -1,75 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public class Patch_HormonalSaliva - { - const float SIZE_INCREMENT_FALLBACK = 0.02f; - const float MAX_BODY_SIZE_FALLBACK = 2.5f; - const float CUM_MULTIPLIER_FALLBACK = 1.05f; - - 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.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_hormonal_saliva) && (props.sexType == xxx.rjwSextype.Oral || props.sexType == xxx.rjwSextype.Sixtynine || props.sexType == xxx.rjwSextype.Fellatio)) - { - GrowPenisses(partner); - } - - if (GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_hormonal_saliva) && (props.sexType == xxx.rjwSextype.Oral || props.sexType == xxx.rjwSextype.Sixtynine || props.sexType == xxx.rjwSextype.Fellatio)) - { - GrowPenisses(pawn); - } - - } - - private static void GrowPenisses(Pawn pawn) - { - - HormonalSalivaExtension salivaExt = GeneDefOf.rjw_genes_hormonal_saliva.GetModExtension(); - - float size_increment = salivaExt?.sizeIncrement ?? SIZE_INCREMENT_FALLBACK; - float maximum_body_size = salivaExt?.maxBodySize ?? MAX_BODY_SIZE_FALLBACK; - float cum_multiplier = salivaExt?.cumMultiplier ?? CUM_MULTIPLIER_FALLBACK; - - - List AllPenisses = Genital_Helper.get_AllPartsHediffList(pawn).FindAll(x => Genital_Helper.is_penis(x)); - foreach (Hediff penis in AllPenisses) - { - CompHediffBodyPart CompHediff = penis.TryGetComp(); - if (penis.Severity < 1.00) - { - penis.Severity = Math.Min(1.01f, penis.Severity + size_increment); - } - else - { - if (CompHediff != null && CompHediff.SizeOwner <= maximum_body_size) - { - CompHediff.SizeOwner += size_increment; - } - } - - // Increase Fluid - if (CompHediff != null) - CompHediff.FluidAmmount *= cum_multiplier; - } - } - - } -} diff --git a/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs b/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs deleted file mode 100644 index fb93e10..0000000 --- a/Source/Genes/Special/Patches/Patch_OrgasmMytosis.cs +++ /dev/null @@ -1,326 +0,0 @@ -using HarmonyLib; -using RimWorld; -using RimWorld.BaseGen; -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; - bool hasPollutedMytosis = false; - - if (orgasmingPawn == null || orgasmingPawn.genes == null) { return; } - - if ((GeneUtility.HasGeneNullCheck(orgasmingPawn, GeneDefOf.rjw_genes_sexual_mytosis) || hasPollutedMytosis) && ! orgasmingPawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_mytosis_shock_hediff)) - { - var mytosisHediff = GetOrgasmMytosisHediff(orgasmingPawn); - mytosisHediff.Severity += SEVERITY_INCREASE_PER_ORGASM; - if(hasPollutedMytosis && orgasmingPawn.Spawned && GridsUtility.IsPolluted(orgasmingPawn.Position, orgasmingPawn.Map)) - { - mytosisHediff.Severity -= SEVERITY_INCREASE_PER_ORGASM; - } - - if (mytosisHediff.Severity >= 1.0) - { - 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.relations = toMultiply.relations; - copy.skills = CopySkillTracker(copy,toMultiply.skills); - - copy.equipment.DestroyAllEquipment(); - copy.apparel.DestroyAll(); - - - 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.genes.xenotypeName = toMultiply.genes.xenotypeName; - copy.story.favoriteColor = toMultiply.story.favoriteColor; - - Find.LetterStack.ReceiveLetter("Orgasmic Mytosis", $"{toMultiply.NameShortColored} performed mytosis on orgasm! The pawn and its clone entered a regenerative state.", - RimWorld.LetterDefOf.NeutralEvent, copy); - - 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(); - 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/Source/Genes/Special/Patches/Patch_PregnancyOverwrite.cs b/Source/Genes/Special/Patches/Patch_PregnancyOverwrite.cs deleted file mode 100644 index 704a2bd..0000000 --- a/Source/Genes/Special/Patches/Patch_PregnancyOverwrite.cs +++ /dev/null @@ -1,101 +0,0 @@ -using HarmonyLib; -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using static HarmonyLib.Code; - -namespace RJW_Genes -{ - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public class Patch_PregnancyOverwrite - { - public const int FACTION_GOODWILL_CHANGE = -5; - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal()) - { - return; - } - - Pawn pawn = props.pawn; - Pawn partner = props.partner; - - if (pawn.genes == null || partner.genes == null) return; - - // If both have the swap gene, nothing happens - if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pregnancy_overwrite) - && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_pregnancy_overwrite)) - return; - - // If both are pregnant, we have some weird interaction. Exit Early - if (pawn.IsPregnant() && partner.IsPregnant()) - return; - // If neither are pregnant, nothing can happen. - if (!pawn.IsPregnant() && !partner.IsPregnant()) - return; - - if (pawn.IsPregnant() - && GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_pregnancy_overwrite)) - TryReplacePregnancy(partner, pawn); - - if (partner.IsPregnant() - && GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pregnancy_overwrite)) - TryReplacePregnancy(pawn, partner); - } - - /// - /// Tries to replace an existing pregnancy with a new pregnancy at the same gestation process. - /// The new pregnancy will have the same mother, but a new father and a new set of genes. - /// - /// There is a check for pregnancy that checks for the general fertility (using Vanilla Functions) and multiplies it with a xml-configurable chance. - /// If anything is replaced, there will be a faction penalty applied. - /// - /// - /// - public static void TryReplacePregnancy(Pawn replacer, Pawn pregnant) - { - - // DevNote: - // There are some issues with just checking PregnancyUtility.PregnancyChanceForPartners or rjw.PregnancyHelper.CanImpregnate - // Both do give 0.0 chance when the pawn is already pregnant, which does not help me :/ - Hediff pregnancyHediff = PregnancyUtility.GetPregnancyHediff(pregnant); - if (pregnancyHediff == null) - return; - - if (DiseaseHelper.IsImmuneAgainstGeneticDisease(pregnant, GeneDefOf.rjw_genes_pregnancy_overwrite)) - { - ModLog.Debug($"{pregnant} is immune against rjw_genes_pregnancy_overwrite from {replacer}"); - return; - } - - ChanceExtension chanceExt = GeneDefOf.rjw_genes_pregnancy_overwrite.GetModExtension(); - float chance = chanceExt != null ? chanceExt.chance : 0.25f; - float replacerFert = replacer.GetStatValueForPawn(StatDefOf.Fertility, replacer); - chance *= replacerFert ; - double roll = (new Random()).NextDouble(); - if (roll < chance) - { - ModLog.Debug($"Pregnancy-Overwrite for {replacer} and {pregnant}."); - float gestationProgress = pregnancyHediff.Severity; - - PregnancyUtility.ForceEndPregnancy(pregnant); - - PregnancyHelper.StartVanillaPregnancy(pregnant, replacer); - Hediff replacementPregnancyHediff = PregnancyUtility.GetPregnancyHediff(pregnant); - replacementPregnancyHediff.Severity = gestationProgress; - - FactionUtility.HandleFactionGoodWillPenalties(replacer, pregnant, "rjw_genes_GoodwillChangedReason_OverwritePregnancy", FACTION_GOODWILL_CHANGE); - } else - { - ModLog.Debug($"Did not Pregnancy-Overwrite for {replacer} and {pregnant}. Failed: Rolled {roll} <({chanceExt.chance}[XML-Chance] x {replacerFert} [Fert:{replacer}])"); - } - } - - } -} diff --git a/Source/Genes/Special/Patches/Patch_SexualTamer.cs b/Source/Genes/Special/Patches/Patch_SexualTamer.cs deleted file mode 100644 index 6e3c5e1..0000000 --- a/Source/Genes/Special/Patches/Patch_SexualTamer.cs +++ /dev/null @@ -1,59 +0,0 @@ -using HarmonyLib; -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using static RJWSexperience.RsDefOf; - -namespace RJW_Genes -{ - - [HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))] - public static class Patch_SexualTamer - { - - public static void Postfix(SexProps props) - { - // ShortCuts: Exit Early if Pawn or Partner are null (can happen with Masturbation or other nieche-cases) - if (props == null || props.pawn == null || !props.hasPartner() || props.partner == null) - return; - // Exit for non Animals or Animal on Animal - if (!(props.pawn.IsAnimal() || props.partner.IsAnimal() ) ) - return; - Pawn animal = props.pawn.IsAnimal() ? props.pawn : props.partner; - Pawn human = props.pawn.IsAnimal() ? props.partner : props.pawn; - - // Another Short Sanity Check - if (animal == null || human == null ) return; - if (human.genes == null) return; - - if (human.genes.HasActiveGene(GeneDefOf.rjw_genes_sex_tamer)) - { - // Case 1: Wild Animal - Try to Tame - if (animal.AnimalOrWildMan() && animal.Faction == null) - { - if(RJW_Genes_Settings.rjw_genes_detailed_debug) - ModLog.Message($"{human} is a sextamer with bestiality on wild animal {animal} - trying to recruit"); - human.interactions.TryInteractWith(animal, InteractionDefOf.TameAttempt); - } - // Case 2: Colony Animal - Try to Train - else if (human.Faction != null && animal.Faction == human.Faction && animal.training != null) - { - if (RJW_Genes_Settings.rjw_genes_detailed_debug) - ModLog.Message($"{human} is a sextamer with bestiality on colony animal {animal} - trying to train"); - if (animal.training == null) return; - var trainable = animal.training.NextTrainableToTrain(); - if (trainable == null) return; - animal.training.Train(trainable, human); - } - } - } - - } - - -} diff --git a/Source/Genes/Special/Patches/Patch_Twinkifier.cs b/Source/Genes/Special/Patches/Patch_Twinkifier.cs deleted file mode 100644 index b7205fb..0000000 --- a/Source/Genes/Special/Patches/Patch_Twinkifier.cs +++ /dev/null @@ -1,116 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - /// - /// This patch handles the changes produced by `rjw_genes_twinkifier`. - /// It requires the hediff `rjw_genes_twinkification_in_progress` which is managed separately, in `Patch_HediffIncreaseOnSex`. - /// - [HarmonyPatch(typeof(SexUtility), "Aftersex")] - public static class Patch_Twinkifier - { - - static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_twinkifier.GetModExtension(); - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || !props.hasPartner() || props.partner == null) - return; - if (props.pawn.IsAnimal() || props.partner.IsAnimal()) - return; - - if (geneAlteringExtension == null) - { - ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Twinkifier"); - return; - } - - ApplyTwinkification(props.pawn); - ApplyTwinkification(props.partner); - } - - private static void ApplyTwinkification(Pawn pawn) - { - if (pawn == null) return; - Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_twinkification_progress); - if (hediff == null) return; - - var Random = new Random(); - // DevNote: I first had a switch (hediff.SeverityLabel) but SeverityLabel was null. - // So now I have this approach which feels a bit more robust. - // I was thinking about looking for strings in the label, but I think that will break the logic in case of translations. - switch (hediff.Severity) - { - case float f when f > 0.8f: - { - if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance) - MajorChange(pawn); - } break; - case float f when f > 0.6f: - { - if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance) - MinorChange(pawn); - } break; - default: - { - ModLog.Debug($"Tried to twinkify {pawn} - severity of twinkification was too low ({hediff.def} @ {hediff.Severity} - {hediff.Label})") ; - } break; - } - - } - - private static void MinorChange(Pawn pawn) - { - List possibleGenes = geneAlteringExtension.minorGenes.ToList(); - - GeneDef chosen = possibleGenes.RandomElement(); - if (chosen == null) - { - ModLog.Warning($"Error in retrieving a minor-twinkification gene for twinkifying {pawn}"); - return; - } - - // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active. - if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen)) - { - ModLog.Debug($"{pawn} experienced a minor twinkification change; {pawn} got new gene {chosen}."); - pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); - } else - { - ModLog.Debug($"Tryed a minor twinkification for {pawn} - {pawn} already had {chosen}"); - } - } - - private static void MajorChange(Pawn pawn) - { - List possibleGenes = geneAlteringExtension.majorGenes.ToList(); - - GeneDef chosen = possibleGenes.RandomElement(); - if (chosen == null) - { - ModLog.Warning($"Error in retrieving a minor-twinkification gene for twinkifying {pawn}"); - return; - } - - // DevNote: I could do "hasActiveGene" but that could lead to the gene being there but not active. - if (!pawn.genes.GenesListForReading.Any(p => p.def == chosen)) - { - ModLog.Debug($"{pawn} experienced a major twinkification change; {pawn} got new gene {chosen}."); - pawn.genes.AddGene(chosen, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); - } - else - { - ModLog.Debug($"Tryed a major twinkification for {pawn} - {pawn} already had {chosen}"); - ModLog.Debug($"Trying minor twinkification for {pawn} instead ..."); - MinorChange(pawn); - } - } - } -} diff --git a/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs b/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs deleted file mode 100644 index 96ba204..0000000 --- a/Source/Genes/Special/Patches/Patch_Youth_Fountain.cs +++ /dev/null @@ -1,76 +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.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; - - const int FACTION_GOODWILL_CHANGE = 1; - - public static void Postfix(SexProps props) - { - if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal()) - { - return; - } - - if (props.pawn == props.partner || props.sexType == xxx.rjwSextype.Masturbation || props.sexType == xxx.rjwSextype.None) - { - // This case was reported but is a bit strange, I hardened it after reports in #99 - return; - } - - if (GeneUtility.IsYouthFountain(props.pawn)) - { - ChangeAgeForPawn(props.partner, props.pawn); - FactionUtility.HandleFactionGoodWillPenalties(props.pawn, props.partner, "rjw_genes_GoodwillChangedReason_youthed_pawn_with_sex_gene",+1); - } - if (GeneUtility.IsYouthFountain(props.partner)) - { - ChangeAgeForPawn(props.pawn,props.partner); - FactionUtility.HandleFactionGoodWillPenalties(props.pawn, props.partner, "rjw_genes_GoodwillChangedReason_youthed_pawn_with_sex_gene", +1); - } - - } - - 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/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs b/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs deleted file mode 100644 index 6ae9fca..0000000 --- a/Source/Genes/Special/Thoughts/ThoughtWorker_Aphrodisiac_Pheromones_Social.cs +++ /dev/null @@ -1,69 +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; - - // Pawns that have not "met" wont give each other Mali - // Known-Each-Other is a key-word for Rimworld that shows they have had any interaction and stored each other in relations. - if (!RelationsUtility.PawnsKnowEachOther(pawn, other)) - return (ThoughtState)false; - // If the pawn is not on Map (e.g. caravan), no mali - if (!MapUtility.PawnIsOnHomeMap(pawn)) - return (ThoughtState)false; - - // Do nothing if the pawn does not have the pheromones - if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones)) - return (ThoughtState)false; - - // Do nothing for others that also have pheromones - if (GeneUtility.HasGeneNullCheck(other, GeneDefOf.rjw_genes_aphrodisiac_pheromones)) - return (ThoughtState)false; - - // Do nothing for pawns that wear Gas-Masks - if (other.apparel != null && other.apparel.AnyApparel) - if (other.apparel.WornApparel.Any(apparel => apparel.def == RimWorld.ThingDefOf.Apparel_GasMask)) - return (ThoughtState)false; - - // Actual Logic: - // Pawn qualifies in right distance and needs line of sight. - var pos = other.Position; - 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/Source/HarmonyInit.cs b/Source/HarmonyInit.cs index e6c1688..b0f8295 100644 --- a/Source/HarmonyInit.cs +++ b/Source/HarmonyInit.cs @@ -1,50 +1,16 @@ using Verse; using HarmonyLib; using System; -using rjw; -using RJWLoveFeeding; -using RimWorld; -using System.Linq; namespace RJW_Genes { [StaticConstructorOnStartup] internal static class HarmonyInit { - static HarmonyInit() { Harmony harmony = new Harmony("rjw_genes"); - - var RJW_Pregnancy_Tick_Prefixes = typeof(Hediff_Pregnant).GetMethod("Tick"); - harmony.Unpatch(RJW_Pregnancy_Tick_Prefixes, HarmonyPatchType.Prefix, "rjw"); - harmony.PatchAll(); - if (ModsConfig.BiotechActive) - { - harmony.Patch(typeof(SexUtility).GetMethod("ProcessSex"), new HarmonyMethod(typeof(LustFeeding), "Postfix", null)); - } - harmony.Patch(AccessTools.Method(typeof(SexAppraiser), nameof(SexAppraiser.would_rape)), - postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.would_rape_PostFix))); - - harmony.Patch(AccessTools.Method(typeof(xxx), nameof(xxx.is_rapist)), - postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.is_rapist_PostFix))); - - harmony.Patch(AccessTools.Method(typeof(AfterSexUtility), nameof(AfterSexUtility.think_about_sex_Rapist)), - postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.think_about_sex_Rapist_PostFix))); - - harmony.Patch(AccessTools.Method(typeof(PawnUtility), nameof(PawnUtility.BodyResourceGrowthSpeed)), - postfix: new HarmonyMethod(typeof(PatchImplants), nameof(PatchImplants.MultiplyPregnancy))); - - harmony.Patch(AccessTools.Method(typeof(Hediff_Labor), nameof(Hediff_Labor.PostRemoved)), - postfix: new HarmonyMethod(typeof(PatchLitteredBirth), nameof(PatchLitteredBirth.Hediff_Labor_PostRemovedPostFix))); - - // OvaryAgitator/Gene_LitteredBirths multibirth logic - harmony.Patch(AccessTools.Method(typeof(Hediff_LaborPushing), nameof(Hediff_LaborPushing.PostRemoved)), - postfix: new HarmonyMethod(typeof(PatchLitteredBirth), nameof(PatchLitteredBirth.Hediff_LaborPushing_PostRemovedPostFix))); - - harmony.Patch(AccessTools.Method(typeof(Quirk), nameof(Quirk.CountSatisfiedQuirks)), - postfix: new HarmonyMethod(typeof(QuirkPatcher), nameof(QuirkPatcher.CountSatisfiedPostfix))); // Patch Licentia, if Licentia exists // Logic & Explanation taken from https://rimworldwiki.com/wiki/Modding_Tutorials/Compatibility_with_DLLs @@ -57,24 +23,19 @@ namespace RJW_Genes { // Gene: Cumflation Immunity [Prefix Patch] harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)), - prefix: new HarmonyMethod(typeof(Patch_CumflationImmunity), nameof(Patch_CumflationImmunity.Prefix))); + prefix: new HarmonyMethod(typeof(Patch_Cumflation), nameof(Patch_Cumflation.Prefix))); // Gene: Generous Donor [Postfix Patch] harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.TransferNutrition)), postfix: new HarmonyMethod(typeof(Patch_TransferNutrition), nameof(Patch_TransferNutrition.Postfix))); - // Gene: CumEater [Postfix Patch] -- This is not exactly licentia, but the Generous-Donor Gene is only active with Licentia + // 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))); - // Gene: Likes Cumflation [Postfix Patch] - harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)), - postfix: new HarmonyMethod(typeof(Patch_LikesCumflation), nameof(Patch_LikesCumflation.PostFix))); } }))(); } - catch (TypeLoadException ex) - { + catch (TypeLoadException ex) { // To be expected for people without Licentia Labs } - } } } \ No newline at end of file diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs index e06d6fc..4d59a41 100644 --- a/Source/HediffDefOf.cs +++ b/Source/HediffDefOf.cs @@ -16,22 +16,5 @@ namespace RJW_Genes 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; - - public static readonly HediffDef rjw_genes_twinkification_progress; - public static readonly HediffDef rjw_genes_feminization_progress; - - public static readonly HediffDef rjw_genes_genetic_rut; - - // Note: Counter does meant it counters it, not it's counting - [MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumstuffed_counter; - [MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter; - - public static readonly HediffDef OvaryAgitator; - public static readonly HediffDef Bioscaffold; - - [MayRequire("rjw.sexperience")] public static readonly HediffDef rjw_genes_filled_living_cumbucket; } } diff --git a/Source/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs b/Source/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs new file mode 100644 index 0000000..cfa3ebf --- /dev/null +++ b/Source/Interactions/SuccubusTailjob/DomSuccubusTailCustomRequirementHandler.cs @@ -0,0 +1,52 @@ +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/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs b/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs new file mode 100644 index 0000000..8e993aa --- /dev/null +++ b/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs @@ -0,0 +1,74 @@ +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/Source/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs b/Source/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs new file mode 100644 index 0000000..9bd8289 --- /dev/null +++ b/Source/Interactions/SuccubusTailjob/SubSuccubusTailCustomRequirementHandler.cs @@ -0,0 +1,44 @@ +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/Source/LetterDefOf.cs b/Source/LetterDefOf.cs deleted file mode 100644 index 996b619..0000000 --- a/Source/LetterDefOf.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Verse; -using RimWorld; - -namespace RJW_Genes -{ - [DefOf] - public static class LetterDefOf - { - public static LetterDef AnotherBaby; - } -} diff --git a/Source/RJW_Genes.cs b/Source/RJW_Genes.cs index f1c5d2e..c17c779 100644 --- a/Source/RJW_Genes.cs +++ b/Source/RJW_Genes.cs @@ -1,17 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Verse; +using Verse; -namespace RJW_Genes +namespace BTE_MMLA { [StaticConstructorOnStartup] public static class RJW_Genes { - static RJW_Genes() - { - ModLog.Message("RJW-Genes loaded"); - - } + static RJW_Genes() => Log.Message("RJW-Genes loaded"); } } diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index ddfa721..a090438 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -26,27 +26,11 @@ - - - - - - - - - - - - - - - - - - - + + + @@ -56,68 +40,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + + + - + + @@ -129,8 +66,8 @@ - - + + @@ -143,81 +80,68 @@ - - + + + + + + + + - - - - - - - + + + - - + - + - - - - - - - - + + + + + + - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - + + + + + + + @@ -239,15 +163,19 @@ ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll False - - ..\..\licentia-labs-master\Assemblies\LicentiaLabs.dll + + False + ..\..\licentia-labs\Assemblies\LicentiaLabs.dll + False - - ..\..\rjw\1.5\Assemblies\RJW.dll + + False + ..\..\rjw\1.4\Assemblies\RJW.dll False - ..\..\rjw-sexperience\1.5\Assemblies\RJWSexperience.dll + ..\..\RJW-Sexperience\1.4\Assemblies\RJWSexperience.dll + False @@ -265,9 +193,5 @@ False - - - - \ No newline at end of file diff --git a/Source/Rjw-Genes.csproj.user b/Source/Rjw-Genes.csproj.user new file mode 100644 index 0000000..6e4223f --- /dev/null +++ b/Source/Rjw-Genes.csproj.user @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Source/Settings/RJW_Genes_Settings.cs b/Source/Settings/RJW_Genes_Settings.cs index 249aa5d..71cf028 100644 --- a/Source/Settings/RJW_Genes_Settings.cs +++ b/Source/Settings/RJW_Genes_Settings.cs @@ -1,7 +1,6 @@ using System; using Verse; using UnityEngine; -using RimWorld; namespace RJW_Genes { @@ -12,90 +11,57 @@ namespace RJW_Genes //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); - // Genitalia Resizing Age - listing_Standard.Label("rjw_genes_settings_genitalia_resizing_age".Translate() + " " + - Math.Round((double)(RJW_Genes_Settings.rjw_genes_resizing_age), 0).ToString() + "rjw_genes_settings_genitalia_resizing_postfix".Translate(), -1f, "rjw_genes_settings_genitalia_resizing_age_explanation".Translate()); - RJW_Genes_Settings.rjw_genes_resizing_age = listing_Standard.Slider(RJW_Genes_Settings.rjw_genes_resizing_age, 18f, 100f); - listing_Standard.Gap(4f); - // Fertilin Gain From Animals - listing_Standard.Label("rjw_genes_settings_fertilin_gain_from_animals".Translate() + " " + - Math.Round((double)(RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor * 100f), 0).ToString() + "%", -1f, "rjw_genes_settings_fertilin_gain_from_animals_explanation".Translate()); + listing_Standard.Label("Fertlin-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("rjw_genes_settings_sexdemon_spawn_key".Translate(), ref rjw_genes_sexdemon_visit, "rjw_genes_settings_sexdemon_spawn_explanation".Translate(), 0f, 1f); + 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(" " + "rjw_genes_settings_sexdemon_size_matters_key".Translate(), ref rjw_genes_sexdemon_join_size_matters, "rjw_genes_settings_sexdemon_size_matters_explanation".Translate(), 0f, 1f); + 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(" " + "rjw_genes_settings_sexdemon_group_spawn_key".Translate(), ref rjw_genes_sexdemon_visit_groups, "rjw_genes_settings_sexdemon_group_spawn_explanation".Translate(), 0f, 1f); + 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(" " + "rjw_genes_settings_sexdemon_succubi_spawn_key".Translate(), ref rjw_genes_sexdemon_visit_succubi, "rjw_genes_settings_sexdemon_succubi_spawn_explanation".Translate(), 0f, 1f); + 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(" " + "rjw_genes_settings_sexdemon_incubi_spawn_key".Translate(), ref rjw_genes_sexdemon_visit_incubi, "rjw_genes_settings_sexdemon_incubi_spawn_explanation".Translate(), 0f, 1f); + listing_Standard.CheckboxLabeled(" Incubi", ref rjw_genes_sexdemon_visit_incubi, "Allow incubi to spawn through this even", 0f, 1f); + } - listing_Standard.Gap(4f); - - - listing_Standard.Gap(4f); - listing_Standard.CheckboxLabeled("rjw_genes_settings_regret_stealing_love_key".Translate(), ref regretStealingLovinThoughtDisabled, "rjw_genes_settings_regret_stealing_love_explanation".Translate()); - - listing_Standard.Gap(4f); - listing_Standard.CheckboxLabeled("rjw_genes_settings_animal_mating_needs_penis_key".Translate(), ref animalMatingPulseCheckForGenitals, "rjw_genes_settings_animal_mating_needs_penis_explanation".Translate()); - + listing_Standard.Gap(5f); + listing_Standard.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.Label("rjw_genes_genetic_disease_header_key".Translate()); - listing_Standard.Gap(4f); - listing_Standard.CheckboxLabeled("\t" + "rjw_genes_settings_genetic_disease_spread_key".Translate(), ref rjw_genes_genetic_disease_spread, "rjw_genes_settings_genetic_disease_spread_explanation".Translate(), 0f, 1f); - listing_Standard.Gap(4f); - listing_Standard.CheckboxLabeled("\t" + "rjw_genes_genetic_disease_as_endogenes_key".Translate(), ref rjw_genes_genetic_disease_as_endogenes, "rjw_genes_genetic_disease_as_endogenes_explanation".Translate(), 0f, 1f); - listing_Standard.Gap(4f); - listing_Standard.CheckboxLabeled("\t" + "rjw_genes_genetic_disease_spread_only_on_penetrative_sex_key".Translate(), ref rjw_genes_genetic_disease_spread_only_on_penetrative_sex, "rjw_genes_genetic_disease_spread_only_on_penetrative_sex_explanation".Translate(), 0f, 1f); - - - listing_Standard.Gap(10f); - listing_Standard.CheckboxLabeled("rjw_genes_settings_generous_donor_cheatmode_key".Translate(), ref rjw_genes_generous_donor_cheatmode, "rjw_genes_settings_generous_donor_cheatmode_explanation".Translate(), 0f, 1f); - listing_Standard.Gap(5f); - listing_Standard.CheckboxLabeled("rjw_genes_settings_detailed_debug_key".Translate(), ref rjw_genes_detailed_debug, "rjw_genes_settings_detailed_debug_explanation".Translate(), 0f, 1f); + listing_Standard.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_resizing_age, "rjw_genes_resizing_age", RJW_Genes_Settings.rjw_genes_resizing_age, true); 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 regretStealingLovinThoughtDisabled, "regretStealingLovinThoughtDisabled", regretStealingLovinThoughtDisabled, true); - Scribe_Values.Look(ref animalMatingPulseCheckForGenitals, "animalMatingPulseCheckForGenitals", animalMatingPulseCheckForGenitals, 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); 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_genetic_disease_spread, "rjw_genes_genetic_disease_spread", RJW_Genes_Settings.rjw_genes_genetic_disease_spread, true); - Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes, "rjw_genes_genetic_disease_as_endogenes", RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes, true); - Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex, "rjw_genes_genetic_disease_spread_only_on_penetrative", RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex, true); - + 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 float rjw_genes_resizing_age = 20; - public static bool regretStealingLovinThoughtDisabled = false; - public static bool animalMatingPulseCheckForGenitals = true; + public static bool rjw_genes_sexdemon_visit = true; public static bool rjw_genes_sexdemon_join_size_matters = true; @@ -103,10 +69,6 @@ namespace RJW_Genes public static bool rjw_genes_sexdemon_visit_succubi = true; public static bool rjw_genes_sexdemon_visit_incubi = true; - public static bool rjw_genes_genetic_disease_spread = true; - public static bool rjw_genes_genetic_disease_as_endogenes = true; - public static bool rjw_genes_genetic_disease_spread_only_on_penetrative_sex = false; - public static bool rjw_genes_generous_donor_cheatmode = false; } } diff --git a/Source/ThoughtDefOf.cs b/Source/ThoughtDefOf.cs index 596ecc0..aefcfa8 100644 --- a/Source/ThoughtDefOf.cs +++ b/Source/ThoughtDefOf.cs @@ -8,16 +8,11 @@ using Verse; namespace RJW_Genes { [DefOf] - public static class ThoughtDefOf + 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; - - public static readonly ThoughtDef rjw_genes_appealing_cock; - public static readonly ThoughtDef rjw_genes_has_more_diseases; - //Others with same names but other defs than in genedefof public static readonly InteractionDef rjw_genes_flirt; } diff --git a/TODOS.md b/TODOS.md new file mode 100644 index 0000000..1977952 --- /dev/null +++ b/TODOS.md @@ -0,0 +1,38 @@ +# ToDos and Planned Genes + +I have many ideas but not too much time / knowledge of Rimworld or Modding. +So any help is very appreciated, even if it is just pointing me to existing similar projects. + +## Additions to existing things + +**Cumeater** - Look for edible cum-items when low on Fertilin + +**Incubi** - Add a forced striptease Ability + +## Planned Genes + +**Adjustable Cock-Size** like e.g. artificial genitalia have + +**Infectious Hypersexuality Gene** (Maybe?) add Hypersexuality Gene through sex with a certain chance. + +**Cum Addiction** add Cum-Addiction from Sexperience, slowly loose conciousness while addiction is not attended. + +**Cum-Drugs** eating cum has an effect similar to Go-Juice (including (separate?) addiction) + +**Self-Fertilizing Eggs** Pawns fertilize eggs that are put inside them (with themselves as a parent) + +**Death-Rest** until the pawn is cumflated. + +## Planned Xenotypes + +- "Beastmaster": Zoophile with various genes to command animals to rape, mate etc. and increased animal "handling". +- "Hive-Mother": for breeding Insect Armies, maybe it is also possible to "store" small insects in her etc. + +## Genes with Abilities and more Effects + +There were some suggestions on the Discord I saved them somewhere else. I am far away from making that work, but to have them here: + +- Genitalia deal damage as per size (on normal sex-use) +- Genitalia can cause Terror (as ability) +- Cumshot Sniper Abilities +- Healing Pussy \ No newline at end of file