Compare commits

...

26 commits

Author SHA1 Message Date
vegapnk
697e3ba7fb
Merge pull request #30 from Drunkender/patch-1
Update PatchVREPhytokin.xml
2023-04-17 16:37:45 +02:00
Drunkender
128d7368c0
Update PatchVREPhytokin.xml 2023-04-15 02:55:01 -05:00
Drunkender
cee346c718
Update PatchVREPhytokin.xml
Added (MayRequire="LustLicentia.RJWLabs") to Licentia Labs Hediffs to remove errors on startup without Licentia Labs installed.
2023-04-15 02:52:55 -05:00
Vegapnk
81efecef8b Fixed Cocoon Effect, gave it a cool down 2023-04-11 09:44:30 +02:00
Vegapnk
fead22f28c Start of Cocoon Gene, minor fixes to cockeater 2023-04-10 12:33:05 +02:00
Vegapnk
88f588631c Merge 2023-04-06 08:32:21 +02:00
Vegapnk
59418ba429 Updated Docs for 1.1.4 2023-04-06 08:31:05 +02:00
Vegapnk
9a90026f80 Changed youth fountain checks to fix #26 and fix #28. 2023-04-06 08:24:00 +02:00
vegapnk
b68a2643e4
Update CHANGELOG.md 2023-04-01 16:24:49 +02:00
vegapnk
a8e2147f08
Drastically reduce vomitingmtb on drained fixes 29 2023-04-01 16:19:39 +02:00
Vegapnk
814c4ffe47 1.1.3 build 2023-03-28 08:12:48 +02:00
Vegapnk
d662d8f032 Updated documents 2023-03-28 08:09:49 +02:00
Vegapnk
e669a3a65b Reduced Throwup Chance of Drained Pawns 2023-03-28 08:09:41 +02:00
Vegapnk
f994cc6283 Adjusted Age-Drain and Youth Fountain after short discussion in #26 2023-03-24 10:53:58 +01:00
Vegapnk
b6ac823fd7 Removed Orphaned Patch for Egg Fertilisation, maybe fix #23 2023-03-24 07:50:32 +01:00
Vegapnk
a28354b164 Updated Build and Documents for 1.1.2 2023-03-19 17:39:17 +01:00
Vegapnk
8324c7a76c Merge branch 'main' of https://github.com/vegapnk/RJW-Genes 2023-03-19 17:20:11 +01:00
vegapnk
b908d7462e
Merge pull request #22 from WasmachenDennSachenSo/New-Icons
New Icons
2023-03-19 17:20:01 +01:00
Vegapnk
bb6fbb67d9 Added more checks to pheromone, fixes #25 2023-03-19 17:17:33 +01:00
Wasmachensachen
181d3d001a New Icons
- Added Extra Anus Icon
 - Added Extra Breasts Icon
 - Added Extra Male Icon
 - Added Denitalia Demon Icon
 - Added Loose Anus Icon
 - Added No Anus Icon
 - Added No Male Genitalia Icon
 - Added Tight Anus Icon
 - Added Zoophile Icon
 - Removed Zoophile_2.png and changed xml entry to Zoophile.png
2023-03-13 22:31:14 +01:00
Vegapnk
90204f9134 Changes to NoBreasts - Split in Nipples and Featureless Chest. Adjusted Logs accordingly 2023-03-10 08:15:53 +01:00
Vegapnk
1b590ba2a2 Hardened Utility to account for childs with in-active lifeforce 2023-03-10 08:03:07 +01:00
Vegapnk
999236768e Added MinAge of 18 for Fertilin 2023-03-10 07:01:50 +01:00
Vegapnk
330eefd593 Big and Small Male Genitalia Icon Swap 2023-03-10 06:47:34 +01:00
Vegapnk
f5541963bd Updated Documents for 1.1 2023-03-04 10:19:23 +01:00
Vegapnk
785791c208 Build for 1.1 2023-03-04 09:55:09 +01:00
44 changed files with 525 additions and 94 deletions

View file

@ -1,7 +1,68 @@
# 1.1.0 (2023-xx-xx)
# 1.2
Changes:
- Cocoon Weaver Gene
Fixes:
- Cockeater Ability has now Icon of Cockeater Gene
- Cockeater now leaves a bite wound!
# 1.1.4
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
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
Changes:
- Added more cool images from WasMachenDennSachen (#22)
Fixes:
- Aphrodisiac Pheromones checks for children and other conditions (#25)
# 1.1.1
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:
- Small and Big Male Genitalia had images wrong way round
- Fertilin should activate at a MinAge of 18
**Important**: The Fertilin Changes could throw errors! I tested a bit, but not a lot.
So please reach out if you get something and I will try to fix it ASAP.
# 1.1.0 (2023-03-04)
1.1.0-beta-1 was released on 05.02.2023.
Changes since beta: Typos, Icons & Merge of Anal & Vaginal Absorber.
## Features:
- Succubus, other Fertilin Xenotypes (see below)
@ -72,6 +133,7 @@ Currently Succubi and Incubi only spawn through a special event determined by th
- Genitalia Resizing triggers on 20th Birthday (#11)
- RJW-Gene-Inheritance Settings now do things (#13, Shabakur)
- Check for Animals in Orgasm Rush, no Orgasm Rush for and from Animals (#15)
- Using Character Editor, it can happen that the Genes fired twice. I hoped to harden this issue by checking better (#19)
# 1.0.1 (2022-12-20)

View file

@ -16,6 +16,7 @@ But please consider also the following:
## Contributors
- Shabalox (MechBreeding, InsectBreeding, Animal Gene Inheritance)
- WasMachenDennSachen (Various Icons)
## Other Credits
@ -24,5 +25,5 @@ But please consider also the following:
- Many of the Icons I made (e.g. Genitalia Types) include things from [OpenMoji](https://openmoji.org/) which is awesome
- 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 *WasMachenSachen*.
- Cockeater & Naked Prowess come from *WasMachenDennSachen* but I copied it from Discord Chat.
- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur

Binary file not shown.

View file

@ -4,7 +4,7 @@
<defName>rjw_genes_cockeater</defName>
<label>Eat Cock</label>
<description>Eat the cock of another pawn, restoring fertilin based on the size of the cock.</description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/cockeater</iconPath>
<stunTargetWhileCasting>true</stunTargetWhileCasting>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
@ -27,8 +27,7 @@
</targetParams>
</verbProperties>
<comps>
<li Class="RJW_Genes.CompProperties_AbilityCockEater"> <!-- namespace needs to be changed when copied to another mod-->
</li>
<li Class="RJW_Genes.CompProperties_AbilityCockEater"/> <!-- namespace needs to be changed when copied to another mod-->
</comps>
</AbilityDef>
</Defs>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<AbilityDef ParentName="AbilityTouchBase">
<defName>rjw_genes_cocoonweaver</defName>
<label>Cocoon</label>
<description>Weaves the victim into a (self-sustaining) cocoon. The victim cannot move, but can be bred.</description>
<iconPath>Things/Mote/Heart</iconPath>
<stunTargetWhileCasting>true</stunTargetWhileCasting>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<warmupMote>Mote_CocoonStencil</warmupMote>
<warmupEffecter>CocoonWeave</warmupEffecter>
<jobDef>CastAbilityOnThingMelee</jobDef>
<displayOrder>404</displayOrder>
<!-- 30k Ticks = 12h -->
<cooldownTicksRange>30000</cooldownTicksRange>
<verbProperties>
<verbClass>Verb_CastAbilityTouch</verbClass>
<drawAimPie>false</drawAimPie>
<range>-1</range>
<warmupTime>15</warmupTime>
<targetParams>
<canTargetAnimals>true</canTargetAnimals>
<canTargetSelf>false</canTargetSelf>
<canTargetBuildings>false</canTargetBuildings>
<canTargetMechs>false</canTargetMechs>
<canTargetBloodfeeders>true</canTargetBloodfeeders>
</targetParams>
</verbProperties>
<comps>
<li Class="RJW_Genes.CompProperties_AbilityCocoonWeaver"/>
</comps>
</AbilityDef>
</Defs>

View file

@ -6,7 +6,7 @@
<description>Enhance the strength and resilience of your naked body with fertilin.</description>
<iconPath>Genes/Icons/rjw_naked_prowess</iconPath>
<warmupMoteSocialSymbol>Things/Mote/Heart</warmupMoteSocialSymbol>
<jobDef>CastAbilityOnThing</jobDef>
<jobDef>CastAbilityOnThing</jobDef>
<targetRequired>False</targetRequired>
<canUseAoeToGetTargets>False</canUseAoeToGetTargets>
<stunTargetWhileCasting>True</stunTargetWhileCasting>

View file

@ -9,7 +9,7 @@
<stunTargetWhileCasting>true</stunTargetWhileCasting>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<statBases>
<statBases>
<Ability_Duration>10</Ability_Duration>
</statBases>
<warmupMote>Mote_CoagulateStencil</warmupMote>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<EffecterDef>
<defName>CocoonWeave</defName>
<children>
<li>
<subEffecterClass>SubEffecter_SprayerChance</subEffecterClass>
<fleckDef>BloodSplash</fleckDef>
<chancePerTick>0.15</chancePerTick>
<burstCount>2~3</burstCount>
<scale>0.75~1.5</scale>
<color>(244, 244, 244)</color>
<spawnLocType>RandomDrawPosOnTarget</spawnLocType>
<attachToSpawnThing>true</attachToSpawnThing>
</li>
</children>
</EffecterDef>
<ThingDef ParentName="MoteBase">
<defName>Mote_CocoonStencil</defName>
<thingClass>MoteAttached</thingClass>
<altitudeLayer>Terrain</altitudeLayer>
<mote>
<fadeInTime>0.1</fadeInTime>
<fadeOutTime>0.4</fadeOutTime>
<solidTime>999999</solidTime>
<needsMaintenance>True</needsMaintenance>
</mote>
<graphicData>
<graphicClass>Graphic_PawnBodySilhouette</graphicClass>
<shaderType>PawnSilhouetteStencil</shaderType>
<texPath>Things/Mote/Transparent</texPath>
</graphicData>
</ThingDef>
</Defs>

View file

@ -67,6 +67,11 @@
<displayPriorityInXenotype>8</displayPriorityInXenotype>
</GeneCategoryDef>
<GeneCategoryDef>
<defName>rjw_genes_hive</defName>
<label>Hive</label>
<displayPriorityInXenotype>7</displayPriorityInXenotype>
</GeneCategoryDef>
</Defs>

View file

@ -40,7 +40,7 @@
<label>Zoophile</label>
<displayCategory>rjw_genes_breeding</displayCategory>
<description>Xenotypes with this Gene are Zoophile.</description>
<iconPath>Genes/Icons/Zoophile_2</iconPath>
<iconPath>Genes/Icons/Zoophile</iconPath>
<displayOrderInCategory>54</displayOrderInCategory>
<forcedTraits>
<li>

View file

@ -70,7 +70,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_no_breasts</defName>
<label>no breasts</label>
<description>Females of this do not have a pair of breasts.</description>
<description>Females of this do not have a pair of breasts, but only nipples.</description>
<iconPath>Genes/Icons/No_Breasts</iconPath>
<geneClass>RJW_Genes.Gene_NoBreasts</geneClass>
<displayOrderInCategory>706</displayOrderInCategory>
@ -106,7 +106,7 @@
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_futa</defName>
<label>futanari</label>
<description>Males of this xenotype grow additional female genitalia, Females grow additional male genitalia.</description>
<description>Males with this gene grow additional female genitalia, females grow additional male genitalia.</description>
<iconPath>Genes/Icons/Futa</iconPath>
<geneClass>RJW_Genes.Gene_Futa</geneClass>
<displayOrderInCategory>709</displayOrderInCategory>
@ -116,4 +116,16 @@
</exclusionTags>
</GeneDef>
<GeneDef ParentName="GeneExtraGenitaliaBase">
<defName>rjw_genes_featureless_chest</defName>
<label>Featureless Chest</label>
<description>Carriers of this gene do not have breasts or nipples.</description>
<iconPath>Genes/Icons/No_Breasts</iconPath>
<geneClass>RJW_Genes.Gene_FeaturelessChest</geneClass>
<displayOrderInCategory>710</displayOrderInCategory>
<exclusionTags>
<li>BreastAmount</li>
</exclusionTags>
</GeneDef>
</Defs>

View file

@ -10,7 +10,7 @@
<defName>rjw_genes_big_male_genitalia</defName>
<label>Big Male Genitaliasize</label>
<description>Penises of this Xenotype are bigger.(Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Small_Male_Genitalia</iconPath>
<iconPath>Genes/Icons/Big_Male_Genitalia</iconPath>
<geneClass>RJW_Genes.Gene_BigMaleGenitalia</geneClass>
<displayOrderInCategory>751</displayOrderInCategory>
<exclusionTags>
@ -22,7 +22,7 @@
<defName>rjw_genes_small_male_genitalia</defName>
<label>Small Male Genitaliasize</label>
<description>Penises of this Xenotype are smaller. (Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Big_Male_Genitalia</iconPath>
<iconPath>Genes/Icons/Small_Male_Genitalia</iconPath>
<geneClass>RJW_Genes.Gene_SmallMaleGenitalia</geneClass>
<displayOrderInCategory>753</displayOrderInCategory>
<exclusionTags>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<GeneDef>
<defName>rjw_genes_cocoonweaver</defName>
<label>Cocoon Weaver</label>
<labelShortAdj>cocooner</labelShortAdj>
<description>Carriers of this gene can produce a cocoon to prepare helpless victims for breeding.</description>
<iconPath>Things/Mote/Heart</iconPath>
<displayOrderInCategory>11</displayOrderInCategory>
<displayCategory>rjw_genes_hive</displayCategory>
<abilities>
<li>rjw_genes_cocoonweaver</li>
</abilities>
<descriptionHyperlinks>
<AbilityDef>rjw_genes_cocoonweaver</AbilityDef>
</descriptionHyperlinks>
<biostatCpx>1</biostatCpx>
<biostatMet>-1</biostatMet>
</GeneDef>
</Defs>

View file

@ -19,6 +19,7 @@
<selectionWeight>0</selectionWeight>
<displayCategory>rjw_genes_fertilin</displayCategory>
<displayOrderInCategory>-2</displayOrderInCategory>
<minAgeActive>18</minAgeActive>
<customEffectDescriptions>
<li>Gives fertilin supply.</li>
</customEffectDescriptions>
@ -43,6 +44,7 @@
<prerequisite>rjw_genes_lifeforce</prerequisite>
<resourceLossPerDay>0.15</resourceLossPerDay>
<displayCategory>rjw_genes_fertilin</displayCategory>
<minAgeActive>18</minAgeActive>
<displayOrderInCategory>-1</displayOrderInCategory>
<biostatCpx>1</biostatCpx>
<biostatMet>6</biostatMet>

View file

@ -74,7 +74,7 @@
<statOffsets>
<WorkSpeedGlobal>-0.2</WorkSpeedGlobal>
</statOffsets>
<vomitMtbDays>0.05</vomitMtbDays>
<vomitMtbDays>0.4</vomitMtbDays>
<hungerRateFactorOffset>0.1</hungerRateFactorOffset>
<restFallFactorOffset>0.35</restFallFactorOffset>
</li>

View file

@ -39,17 +39,17 @@
<li>
<label>fertilin craving</label>
<description>My bones ache. I really need fertilin.</description>
<baseMoodEffect>-10</baseMoodEffect>
<baseMoodEffect>-25</baseMoodEffect>
</li>
<li>
<label>fertilin craving</label>
<description>This hurts bad and I can't stop thinking about sex. I would do anything for some cum.</description>
<baseMoodEffect>-15</baseMoodEffect>
<baseMoodEffect>-40</baseMoodEffect>
</li>
<li>
<label>fertilin craving</label>
<description>Can't think. Sex. Sex. Must. Have. Cum.</description>
<baseMoodEffect>-20</baseMoodEffect>
<baseMoodEffect>-55</baseMoodEffect>
</li>
</stages>
</ThoughtDef>

View file

@ -11,7 +11,7 @@
<value>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_elasticity</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
<li>rjw_genes_bisexual</li>
</value>
</match>
@ -25,7 +25,7 @@
<value>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_elasticity</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
<li>rjw_genes_bisexual</li>
</value>
</match>
@ -40,7 +40,7 @@
<value>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_tight_anus</li>
<li>rjw_genes_elasticity</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
<li>rjw_genes_bisexual</li>
</value>
</match>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Binary file not shown.

View file

@ -2,6 +2,27 @@
Collection of Known Bugs and reasons for their origin.
## 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.
Reason: Pawns might go on a mental break when their fertilin is low to rape people. However, if your pawn is generally happy, they will not have a mental break. Then they run around with low fertilin.
Workarounds / Solutions: Depending on your Gene-Setup, you might consider a cum-based diet. You can also tweak sex-settings for more sex need and hookups. Lastly, you can edit the xml to give higher mood penalties, which will lead to more mental breakdowns.
In general, I am happy to hear your feedback. If you have other ideas how to change this to be a bit tricky but not too punishing please let me know.
## Fertilin does not go up after Sex!
Error: An Incubus or Succubus had sex with another pawn, but did not gain Fertilin.
@ -22,6 +43,7 @@ Error: You have a succubus using seduce on a hostile pawn, they start sex but im
Things to Consider:
1. Is your Succubus drafted? If not, they might have a flight-mode set and are scared of the enemy.
2. Do you have mods changing combat AI? (CAI5000 or Combat Extended)
It seems that things changing Enemy Combat AI also affect this. One report was about CAI5000 and we also expect Combat Extended to be incompatible.
@ -43,6 +65,8 @@ Maybe you can also fix it by changing `<DisplayOrderInXenotype>` in the Male/Fem
## Full-No-Genital-Genes get Genitals later
*Update: Should be addressed with 1.1.1 and not appear anymore*
Error: I added all "no-XXX" genes but my pawn has genitalia on map!
Reason: If you go with Full-No-Genitals (No Penis, No Anus, No Breasts, No Vagina) then the pawn spawns without any Genitalia on the map,
@ -52,6 +76,8 @@ however then the RJW base-logic runs the sexualizer.
## Log Pops up for Xenotypes with Female/Male Only Gene
*Update: Should not appear anymore after 1.1 when used with current rjw versions*
Error:
When using a Xenotype with the Female only gene, upon refresh it can open the log with the following (red) statement:

View file

@ -28,9 +28,14 @@ Please consider looking at [the known bugs](./KNOWN_BUGS.md)
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
Some HAR races change sex-ages and behave unfriendly with this mod.
You can make reports about that, but I might not fix it.
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.
## Load Order, Dependencies and Conflicts
Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience).
**Conflicts:**
1. Should not be used with the original RJW_Animal_Gene_Inheritance anymore.
2. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
3. CAI5000 will not crash, but will make *Seduce*-Ability fail. I think same goes for Combat Extended.

View file

@ -1,24 +0,0 @@
using HarmonyLib;
using rjw;
using Verse;
namespace RJW_Genes
{
/// <summary>
/// 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.
/// </summary>
[HarmonyPatch(typeof(PawnExtensions), "RaceImplantEggs")]
public static class PatchPawnExtensions
{
[HarmonyPostfix]
public static void Postfix(Pawn pawn, ref bool __result)
{
if (!__result)
{
__result = GeneUtility.IsInsectBreeder(pawn);
}
}
}
}

View file

@ -0,0 +1,61 @@
using Verse;
using rjw;
using RimWorld;
namespace RJW_Genes
{
public class Gene_FeaturelessChest : RJW_Gene
{
internal Hediff removed_breasts;
internal Hediff added_nipples;
public override void PostMake()
{
base.PostMake();
if (removed_breasts == null)
{
RemoveButStoreBreasts();
AddFeaturelessBreast();
}
}
public override void PostAdd()
{
base.PostAdd();
if (removed_breasts == null)
{
RemoveButStoreBreasts();
AddFeaturelessBreast();
}
}
public override void PostRemove()
{
base.PostRemove();
if (added_nipples != null)
pawn.health.RemoveHediff(added_nipples);
if (removed_breasts != null)
pawn.health.AddHediff(removed_breasts);
}
internal void RemoveButStoreBreasts()
{
var partBPR = Genital_Helper.get_breastsBPR(pawn);
Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
if (breastsToRemove != null)
{
removed_breasts = breastsToRemove;
pawn.health.RemoveHediff(breastsToRemove);
}
}
internal void AddFeaturelessBreast()
{
var partBPR = Genital_Helper.get_breastsBPR(pawn);
this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR);
}
}
}

View file

@ -6,18 +6,15 @@ namespace RJW_Genes
{
public class Gene_NoBreasts : RJW_Gene
{
Hediff breastsToShrink;
internal float oldSize = -1f;
internal Hediff removed_breasts;
// 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. IDEA: Add male-nipples ?
public override void PostMake()
{
base.PostMake();
// Breasts are removed for female pawns!
if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
if (GenderUtility.IsFemale(pawn) && oldSize < 0)
{
RemoveButStoreBreasts();
}
@ -28,7 +25,7 @@ namespace RJW_Genes
base.PostAdd();
// Breasts are removed for female pawns!
if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
if (GenderUtility.IsFemale(pawn) && oldSize < 0)
{
RemoveButStoreBreasts();
}
@ -37,21 +34,33 @@ namespace RJW_Genes
public override void PostRemove()
{
base.PostRemove();
if(removed_breasts != null)
pawn.health.AddHediff(removed_breasts);
// Re-Add the old breasts
if (oldSize != null)
breastsToShrink.Severity = oldSize;
}
internal void RemoveButStoreBreasts()
{
var partBPR = Genital_Helper.get_breastsBPR(pawn);
Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
breastsToShrink = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
if(breastsToRemove != null)
if(breastsToShrink != null)
{
removed_breasts = breastsToRemove;
pawn.health.RemoveHediff(breastsToRemove);
oldSize = breastsToShrink.Severity;
//pawn.health.RemoveHediff(breastsToRemove);
breastsToShrink.Severity = 0f;
}
}
/*
/// <summary>
/// Adds a "rjw.featurelesschest", which means nipples but nothing else (like male human pawns do).
/// </summary>
internal void AddFeaturelessBreast()
{
var partBPR = Genital_Helper.get_breastsBPR(pawn);
//this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR);
}
*/
}
}

View file

@ -44,6 +44,8 @@ namespace RJW_Genes
if (HasLifeForce(pawn))
{
Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType<Gene_LifeForce>();
if (gene == null || !gene.Active)
return false;
if (gene.Resource.Value < gene.targetValue)
{
return true;
@ -57,6 +59,8 @@ namespace RJW_Genes
if (HasLifeForce(pawn))
{
Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType<Gene_LifeForce>();
if (gene == null || !gene.Active)
return false;
if (gene.Resource.Value < gene.MinLevelForAlert)
{
return true;
@ -123,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()
*/

View file

@ -0,0 +1,81 @@
using Verse;
using RimWorld;
using rjw;
namespace RJW_Genes
{
/// <summary>
/// The CocoonWeaver Ability applies the RJW-Cocoon to a pawn.
/// Friendly Pawns can always be cocooned, neutral and hostile pawns must be downed.
/// </summary>
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"));
}
/// <summary>
/// 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.
/// </summary>
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);
}
}
}

View file

@ -0,0 +1,18 @@
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);
}
}
}

View file

@ -51,9 +51,9 @@ namespace RJW_Genes
}
// Increase LifeForce for Biter
GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(CockBiter), gained_lifeforce);
// Handle Damage for Bitten
CockBittenPawn.health.RemoveHediff(part);
CockBittenPawn.TakeDamage(new DamageInfo(DamageDefOf.Bite, 99999f, 999f, hitPart: Genital_Helper.get_genitalsBPR(CockBittenPawn)));
//CockBittenPawn.health.RemoveHediff(part);
CockBittenPawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.rjw_genes_cock_eaten, CockBittenPawn, null);
//Only one penis at the time

View file

@ -42,7 +42,7 @@ namespace RJW_Genes
{
Pawn_GeneTracker genes = pawn.genes;
Gene_LifeForce gene_Lifeforce = (genes != null) ? genes.GetFirstGeneOfType<Gene_LifeForce>() : null;
if (gene_Lifeforce != null && gene_Lifeforce.Value < gene_Lifeforce.MinLevelForAlert)
if (gene_Lifeforce != null && gene_Lifeforce.Active && gene_Lifeforce.Value < gene_Lifeforce.MinLevelForAlert)
{
this.targets.Add(pawn);
this.targetLabels.Add(pawn.NameShortColored.Resolve());

View file

@ -39,9 +39,25 @@ namespace RJW_Genes
{
foreach (Pawn pawn in map.mapPawns.AllPawns)
{
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))
// 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;
// Actual Logic:
// Pawn qualifies in right distance and needs line of sight.
if (pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map))
{
yield return pawn;
}

View file

@ -11,28 +11,33 @@ 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 = 120000; // 120k == 2 days
// 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE = 20 * 60 * 60000 + 1;
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE = 18 * 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))
if (GeneUtility.IsAgeDrainer(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks > MINIMUM_AGE)
{
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));
// Make Pawn younger if he is older than minimum age
if (pawnAge - AGE_TRANSFERED > MINIMUM_AGE)
props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED));
}
}

View file

@ -11,34 +11,33 @@ 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 = 60000; // 60k == 1 day
// 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE = 20 * 60 * 60000 + 1;
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE = 18 * 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))
if (GeneUtility.IsYouthFountain(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks >= MINIMUM_AGE)
{
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);
if(partnerAge - AGE_REDUCTION > MINIMUM_AGE)
props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION);
}
}
private static float ticksToYears(long ticks)
{
return (ticks / 60000f) / 60f;
}
}
}

View file

@ -44,7 +44,6 @@
<Compile Include="GeneDefOf.cs" />
<Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
<Compile Include="Genes\Breeding\PatchMechBirth.cs" />
<Compile Include="Genes\Breeding\PatchPawnExtensions.cs" />
<Compile Include="Genes\Breeding\Patch_EggFertilization.cs" />
<Compile Include="Genes\Breeding\PatchPregnancyHelper.cs" />
<Compile Include="Genes\Cum\CumUtility.cs" />
@ -59,6 +58,7 @@
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_Futa.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraVagina.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_FeaturelessChest.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_NoBreasts.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_NoAnus.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_NoVagina.cs" />
@ -87,6 +87,8 @@
<Compile Include="Genes\Genitalia\Gene_DemonicGenitalia.cs" />
<Compile Include="Genes\Genitalia\Gene_EquineGenitalia.cs" />
<Compile Include="Genes\Genitalia\GenitaliaChanger.cs" />
<Compile Include="Genes\Hive\Abilities\CompAbilityEffect_CocoonWeaver.cs" />
<Compile Include="Genes\Hive\Abilities\CompProperties_AbilityCocoonWeaver.cs" />
<Compile Include="Genes\Life_Force\Abilities\AbilityUtility.cs" />
<Compile Include="Genes\Life_Force\UI\Alert_LowFertilin.cs" />
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_CasterIsNaked.cs" />

View file

@ -1,7 +1,6 @@
# 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.
Any help is very appreciated, even if it is just pointing me to existing similar projects.
## Additions to existing things
@ -21,6 +20,34 @@ So any help is very appreciated, even if it is just pointing me to existing simi
**Self-Fertilizing Eggs** Pawns fertilize eggs that are put inside them (with themselves as a parent)
**Death-Rest** until the pawn is cumflated.
**Alpha / Beta Genes** that you can only have one alpha, and the alpha makes mostly beta children (1:10). This might fit with the xenotypes below. As this is an RJW mod, this should also somewhat affect sex (e.g. betas cannot impregnate betas).
## Planned Xenotypes
**Beastmaster:**
- [] Animal Mating Call (Get fucked by everything nearby, potentially ending animal rage)
- [] Pheromone Spit that marks a target for being raped by animals
- [] Power-Boost & Bonding to animals through zoophilia
- [] Maybe: Boost pregnancy times of Animals
- [] Maybe: Make it Animal-Fertilin-Dependend
- [] Either: Can only eat meat or cannot eat meat
Can't help but think about Rexxar Porn now I am a bad person.
**Hive Mother:**
- [] Spawn the small scarabs
- [] Fertilise Eggs inside her
- [] Produce cocoons
- [] Maybe: Insert "dropped" Insect eggs
- [] Very fragile, no use except breeding
- [] Maybe: can only eat insect jelly
- [] Should look like a nice green-yellow alien as we all know fuckable insects would look like.
- [] There can only be one Hive Mother, some penalties if there are others. This could be implement with an "Alpha Gene" that gives heavy penalties when other Alpha exists.
## 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:
@ -28,4 +55,9 @@ There were some suggestions on the Discord I saved them somewhere else. I am far
- Genitalia deal damage as per size (on normal sex-use)
- Genitalia can cause Terror (as ability)
- Cumshot Sniper Abilities
- Healing Pussy
## Cleanups:
- Streamline Filenames / Names to either be LifeForce or Fertilin (e.g. `Hediffs_Fertilin.xml` but `Pawnkind_LifeForce.xml`). I think most things are called LifeForce.
- Similar cleanup for the patches, and make a note what to find where in the patches
- Change Project structure to the 1.3, 1.4 Structure of other mods