Compare commits
No commits in common. "697e3ba7fb9e92033e5d259d4789d84b403c4ea4" and "5d263421cefca8d490a0dfefbefa68b3eb62cc0b" have entirely different histories.
697e3ba7fb
...
5d263421ce
64
CHANGELOG.md
|
@ -1,68 +1,7 @@
|
||||||
# 1.2
|
# 1.1.0 (2023-xx-xx)
|
||||||
|
|
||||||
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.
|
1.1.0-beta-1 was released on 05.02.2023.
|
||||||
|
|
||||||
Changes since beta: Typos, Icons & Merge of Anal & Vaginal Absorber.
|
|
||||||
|
|
||||||
## Features:
|
## Features:
|
||||||
|
|
||||||
- Succubus, other Fertilin Xenotypes (see below)
|
- Succubus, other Fertilin Xenotypes (see below)
|
||||||
|
@ -133,7 +72,6 @@ Currently Succubi and Incubi only spawn through a special event determined by th
|
||||||
- Genitalia Resizing triggers on 20th Birthday (#11)
|
- Genitalia Resizing triggers on 20th Birthday (#11)
|
||||||
- RJW-Gene-Inheritance Settings now do things (#13, Shabakur)
|
- RJW-Gene-Inheritance Settings now do things (#13, Shabakur)
|
||||||
- Check for Animals in Orgasm Rush, no Orgasm Rush for and from Animals (#15)
|
- 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)
|
# 1.0.1 (2022-12-20)
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@ But please consider also the following:
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
- Shabalox (MechBreeding, InsectBreeding, Animal Gene Inheritance)
|
- Shabalox (MechBreeding, InsectBreeding, Animal Gene Inheritance)
|
||||||
- WasMachenDennSachen (Various Icons)
|
|
||||||
|
|
||||||
## Other Credits
|
## Other Credits
|
||||||
|
|
||||||
|
@ -25,5 +24,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
|
- 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/)
|
- 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)
|
- Hypersexual & Zoophile comes from [RJW](https://gitgud.io/Ed86/rjw)
|
||||||
- Cockeater & Naked Prowess come from *WasMachenDennSachen* but I copied it from Discord Chat.
|
- Cockeater & Naked Prowess come from *WasMachenSachen*.
|
||||||
- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur
|
- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur
|
|
@ -4,7 +4,7 @@
|
||||||
<defName>rjw_genes_cockeater</defName>
|
<defName>rjw_genes_cockeater</defName>
|
||||||
<label>Eat Cock</label>
|
<label>Eat Cock</label>
|
||||||
<description>Eat the cock of another pawn, restoring fertilin based on the size of the cock.</description>
|
<description>Eat the cock of another pawn, restoring fertilin based on the size of the cock.</description>
|
||||||
<iconPath>Genes/Icons/cockeater</iconPath>
|
<iconPath>Things/Mote/Heart</iconPath>
|
||||||
<stunTargetWhileCasting>true</stunTargetWhileCasting>
|
<stunTargetWhileCasting>true</stunTargetWhileCasting>
|
||||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||||
|
@ -27,7 +27,8 @@
|
||||||
</targetParams>
|
</targetParams>
|
||||||
</verbProperties>
|
</verbProperties>
|
||||||
<comps>
|
<comps>
|
||||||
<li Class="RJW_Genes.CompProperties_AbilityCockEater"/> <!-- namespace needs to be changed when copied to another mod-->
|
<li Class="RJW_Genes.CompProperties_AbilityCockEater"> <!-- namespace needs to be changed when copied to another mod-->
|
||||||
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</AbilityDef>
|
</AbilityDef>
|
||||||
</Defs>
|
</Defs>
|
|
@ -1,34 +0,0 @@
|
||||||
<?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>
|
|
|
@ -6,7 +6,7 @@
|
||||||
<description>Enhance the strength and resilience of your naked body with fertilin.</description>
|
<description>Enhance the strength and resilience of your naked body with fertilin.</description>
|
||||||
<iconPath>Genes/Icons/rjw_naked_prowess</iconPath>
|
<iconPath>Genes/Icons/rjw_naked_prowess</iconPath>
|
||||||
<warmupMoteSocialSymbol>Things/Mote/Heart</warmupMoteSocialSymbol>
|
<warmupMoteSocialSymbol>Things/Mote/Heart</warmupMoteSocialSymbol>
|
||||||
<jobDef>CastAbilityOnThing</jobDef>
|
<jobDef>CastAbilityOnThing</jobDef>
|
||||||
<targetRequired>False</targetRequired>
|
<targetRequired>False</targetRequired>
|
||||||
<canUseAoeToGetTargets>False</canUseAoeToGetTargets>
|
<canUseAoeToGetTargets>False</canUseAoeToGetTargets>
|
||||||
<stunTargetWhileCasting>True</stunTargetWhileCasting>
|
<stunTargetWhileCasting>True</stunTargetWhileCasting>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<stunTargetWhileCasting>true</stunTargetWhileCasting>
|
<stunTargetWhileCasting>true</stunTargetWhileCasting>
|
||||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||||
<statBases>
|
<statBases>
|
||||||
<Ability_Duration>10</Ability_Duration>
|
<Ability_Duration>10</Ability_Duration>
|
||||||
</statBases>
|
</statBases>
|
||||||
<warmupMote>Mote_CoagulateStencil</warmupMote>
|
<warmupMote>Mote_CoagulateStencil</warmupMote>
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
<?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>
|
|
|
@ -67,11 +67,6 @@
|
||||||
<displayPriorityInXenotype>8</displayPriorityInXenotype>
|
<displayPriorityInXenotype>8</displayPriorityInXenotype>
|
||||||
</GeneCategoryDef>
|
</GeneCategoryDef>
|
||||||
|
|
||||||
<GeneCategoryDef>
|
|
||||||
<defName>rjw_genes_hive</defName>
|
|
||||||
<label>Hive</label>
|
|
||||||
<displayPriorityInXenotype>7</displayPriorityInXenotype>
|
|
||||||
</GeneCategoryDef>
|
|
||||||
|
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
|
@ -40,7 +40,7 @@
|
||||||
<label>Zoophile</label>
|
<label>Zoophile</label>
|
||||||
<displayCategory>rjw_genes_breeding</displayCategory>
|
<displayCategory>rjw_genes_breeding</displayCategory>
|
||||||
<description>Xenotypes with this Gene are Zoophile.</description>
|
<description>Xenotypes with this Gene are Zoophile.</description>
|
||||||
<iconPath>Genes/Icons/Zoophile</iconPath>
|
<iconPath>Genes/Icons/Zoophile_2</iconPath>
|
||||||
<displayOrderInCategory>54</displayOrderInCategory>
|
<displayOrderInCategory>54</displayOrderInCategory>
|
||||||
<forcedTraits>
|
<forcedTraits>
|
||||||
<li>
|
<li>
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
<GeneDef ParentName="GeneExtraGenitaliaBase">
|
<GeneDef ParentName="GeneExtraGenitaliaBase">
|
||||||
<defName>rjw_genes_no_breasts</defName>
|
<defName>rjw_genes_no_breasts</defName>
|
||||||
<label>no breasts</label>
|
<label>no breasts</label>
|
||||||
<description>Females of this do not have a pair of breasts, but only nipples.</description>
|
<description>Females of this do not have a pair of breasts.</description>
|
||||||
<iconPath>Genes/Icons/No_Breasts</iconPath>
|
<iconPath>Genes/Icons/No_Breasts</iconPath>
|
||||||
<geneClass>RJW_Genes.Gene_NoBreasts</geneClass>
|
<geneClass>RJW_Genes.Gene_NoBreasts</geneClass>
|
||||||
<displayOrderInCategory>706</displayOrderInCategory>
|
<displayOrderInCategory>706</displayOrderInCategory>
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
<GeneDef ParentName="GeneExtraGenitaliaBase">
|
<GeneDef ParentName="GeneExtraGenitaliaBase">
|
||||||
<defName>rjw_genes_futa</defName>
|
<defName>rjw_genes_futa</defName>
|
||||||
<label>futanari</label>
|
<label>futanari</label>
|
||||||
<description>Males with this gene grow additional female genitalia, females grow additional male genitalia.</description>
|
<description>Males of this xenotype grow additional female genitalia, Females grow additional male genitalia.</description>
|
||||||
<iconPath>Genes/Icons/Futa</iconPath>
|
<iconPath>Genes/Icons/Futa</iconPath>
|
||||||
<geneClass>RJW_Genes.Gene_Futa</geneClass>
|
<geneClass>RJW_Genes.Gene_Futa</geneClass>
|
||||||
<displayOrderInCategory>709</displayOrderInCategory>
|
<displayOrderInCategory>709</displayOrderInCategory>
|
||||||
|
@ -116,16 +116,4 @@
|
||||||
</exclusionTags>
|
</exclusionTags>
|
||||||
</GeneDef>
|
</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>
|
</Defs>
|
|
@ -10,7 +10,7 @@
|
||||||
<defName>rjw_genes_big_male_genitalia</defName>
|
<defName>rjw_genes_big_male_genitalia</defName>
|
||||||
<label>Big Male Genitaliasize</label>
|
<label>Big Male Genitaliasize</label>
|
||||||
<description>Penises of this Xenotype are bigger.(Resizing takes place at 20th Birthday)</description>
|
<description>Penises of this Xenotype are bigger.(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_BigMaleGenitalia</geneClass>
|
<geneClass>RJW_Genes.Gene_BigMaleGenitalia</geneClass>
|
||||||
<displayOrderInCategory>751</displayOrderInCategory>
|
<displayOrderInCategory>751</displayOrderInCategory>
|
||||||
<exclusionTags>
|
<exclusionTags>
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
<defName>rjw_genes_small_male_genitalia</defName>
|
<defName>rjw_genes_small_male_genitalia</defName>
|
||||||
<label>Small Male Genitaliasize</label>
|
<label>Small Male Genitaliasize</label>
|
||||||
<description>Penises of this Xenotype are smaller. (Resizing takes place at 20th Birthday)</description>
|
<description>Penises of this Xenotype are smaller. (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_SmallMaleGenitalia</geneClass>
|
<geneClass>RJW_Genes.Gene_SmallMaleGenitalia</geneClass>
|
||||||
<displayOrderInCategory>753</displayOrderInCategory>
|
<displayOrderInCategory>753</displayOrderInCategory>
|
||||||
<exclusionTags>
|
<exclusionTags>
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
<?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>
|
|
|
@ -19,7 +19,6 @@
|
||||||
<selectionWeight>0</selectionWeight>
|
<selectionWeight>0</selectionWeight>
|
||||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||||
<displayOrderInCategory>-2</displayOrderInCategory>
|
<displayOrderInCategory>-2</displayOrderInCategory>
|
||||||
<minAgeActive>18</minAgeActive>
|
|
||||||
<customEffectDescriptions>
|
<customEffectDescriptions>
|
||||||
<li>Gives fertilin supply.</li>
|
<li>Gives fertilin supply.</li>
|
||||||
</customEffectDescriptions>
|
</customEffectDescriptions>
|
||||||
|
@ -44,7 +43,6 @@
|
||||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||||
<resourceLossPerDay>0.15</resourceLossPerDay>
|
<resourceLossPerDay>0.15</resourceLossPerDay>
|
||||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||||
<minAgeActive>18</minAgeActive>
|
|
||||||
<displayOrderInCategory>-1</displayOrderInCategory>
|
<displayOrderInCategory>-1</displayOrderInCategory>
|
||||||
<biostatCpx>1</biostatCpx>
|
<biostatCpx>1</biostatCpx>
|
||||||
<biostatMet>6</biostatMet>
|
<biostatMet>6</biostatMet>
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
<statOffsets>
|
<statOffsets>
|
||||||
<WorkSpeedGlobal>-0.2</WorkSpeedGlobal>
|
<WorkSpeedGlobal>-0.2</WorkSpeedGlobal>
|
||||||
</statOffsets>
|
</statOffsets>
|
||||||
<vomitMtbDays>0.4</vomitMtbDays>
|
<vomitMtbDays>0.05</vomitMtbDays>
|
||||||
<hungerRateFactorOffset>0.1</hungerRateFactorOffset>
|
<hungerRateFactorOffset>0.1</hungerRateFactorOffset>
|
||||||
<restFallFactorOffset>0.35</restFallFactorOffset>
|
<restFallFactorOffset>0.35</restFallFactorOffset>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -39,17 +39,17 @@
|
||||||
<li>
|
<li>
|
||||||
<label>fertilin craving</label>
|
<label>fertilin craving</label>
|
||||||
<description>My bones ache. I really need fertilin.</description>
|
<description>My bones ache. I really need fertilin.</description>
|
||||||
<baseMoodEffect>-25</baseMoodEffect>
|
<baseMoodEffect>-10</baseMoodEffect>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label>fertilin craving</label>
|
<label>fertilin craving</label>
|
||||||
<description>This hurts bad and I can't stop thinking about sex. I would do anything for some cum.</description>
|
<description>This hurts bad and I can't stop thinking about sex. I would do anything for some cum.</description>
|
||||||
<baseMoodEffect>-40</baseMoodEffect>
|
<baseMoodEffect>-15</baseMoodEffect>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label>fertilin craving</label>
|
<label>fertilin craving</label>
|
||||||
<description>Can't think. Sex. Sex. Must. Have. Cum.</description>
|
<description>Can't think. Sex. Sex. Must. Have. Cum.</description>
|
||||||
<baseMoodEffect>-55</baseMoodEffect>
|
<baseMoodEffect>-20</baseMoodEffect>
|
||||||
</li>
|
</li>
|
||||||
</stages>
|
</stages>
|
||||||
</ThoughtDef>
|
</ThoughtDef>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<value>
|
<value>
|
||||||
<li>rjw_genes_tight_female_genitalia</li>
|
<li>rjw_genes_tight_female_genitalia</li>
|
||||||
<li>rjw_genes_tight_anus</li>
|
<li>rjw_genes_tight_anus</li>
|
||||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
<li>rjw_genes_elasticity</li>
|
||||||
<li>rjw_genes_bisexual</li>
|
<li>rjw_genes_bisexual</li>
|
||||||
</value>
|
</value>
|
||||||
</match>
|
</match>
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
<value>
|
<value>
|
||||||
<li>rjw_genes_tight_female_genitalia</li>
|
<li>rjw_genes_tight_female_genitalia</li>
|
||||||
<li>rjw_genes_tight_anus</li>
|
<li>rjw_genes_tight_anus</li>
|
||||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
<li>rjw_genes_elasticity</li>
|
||||||
<li>rjw_genes_bisexual</li>
|
<li>rjw_genes_bisexual</li>
|
||||||
</value>
|
</value>
|
||||||
</match>
|
</match>
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
<value>
|
<value>
|
||||||
<li>rjw_genes_tight_female_genitalia</li>
|
<li>rjw_genes_tight_female_genitalia</li>
|
||||||
<li>rjw_genes_tight_anus</li>
|
<li>rjw_genes_tight_anus</li>
|
||||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
<li>rjw_genes_elasticity</li>
|
||||||
<li>rjw_genes_bisexual</li>
|
<li>rjw_genes_bisexual</li>
|
||||||
</value>
|
</value>
|
||||||
</match>
|
</match>
|
||||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
BIN
Common/Textures/Genes/Icons/Zoophile_2.png
Normal file
After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 5.6 KiB |
|
@ -2,27 +2,6 @@
|
||||||
|
|
||||||
Collection of Known Bugs and reasons for their origin.
|
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!
|
## Fertilin does not go up after Sex!
|
||||||
|
|
||||||
Error: An Incubus or Succubus had sex with another pawn, but did not gain Fertilin.
|
Error: An Incubus or Succubus had sex with another pawn, but did not gain Fertilin.
|
||||||
|
@ -43,7 +22,6 @@ Error: You have a succubus using seduce on a hostile pawn, they start sex but im
|
||||||
Things to Consider:
|
Things to Consider:
|
||||||
|
|
||||||
1. Is your Succubus drafted? If not, they might have a flight-mode set and are scared of the enemy.
|
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.
|
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.
|
||||||
|
|
||||||
|
@ -65,8 +43,6 @@ Maybe you can also fix it by changing `<DisplayOrderInXenotype>` in the Male/Fem
|
||||||
|
|
||||||
## Full-No-Genital-Genes get Genitals later
|
## 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!
|
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,
|
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,
|
||||||
|
@ -76,8 +52,6 @@ however then the RJW base-logic runs the sexualizer.
|
||||||
|
|
||||||
## Log Pops up for Xenotypes with Female/Male Only Gene
|
## 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:
|
Error:
|
||||||
|
|
||||||
When using a Xenotype with the Female only gene, upon refresh it can open the log with the following (red) statement:
|
When using a Xenotype with the Female only gene, upon refresh it can open the log with the following (red) statement:
|
||||||
|
|
15
README.md
|
@ -28,14 +28,9 @@ Please consider looking at [the known bugs](./KNOWN_BUGS.md)
|
||||||
I currently don't use Races after Biotech was introduced.
|
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.
|
One of the main motivations was to have genes being added to the xenotypes that other mods and the base game add, e.g. adding demonic penis for impids.
|
||||||
|
|
||||||
Some HAR races change sex-ages and behave unfriendly with this mod.
|
## Load Order / Deps
|
||||||
You can make reports about that, but I might not fix it.
|
|
||||||
|
|
||||||
## Load Order, Dependencies and Conflicts
|
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.
|
||||||
Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience).
|
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.
|
||||||
**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.
|
|
24
Source/Genes/Breeding/PatchPawnExtensions.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,61 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,15 +6,18 @@ namespace RJW_Genes
|
||||||
{
|
{
|
||||||
public class Gene_NoBreasts : RJW_Gene
|
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()
|
public override void PostMake()
|
||||||
{
|
{
|
||||||
base.PostMake();
|
base.PostMake();
|
||||||
|
|
||||||
// Breasts are removed for female pawns!
|
// Breasts are removed for female pawns!
|
||||||
if (GenderUtility.IsFemale(pawn) && oldSize < 0)
|
if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
|
||||||
{
|
{
|
||||||
RemoveButStoreBreasts();
|
RemoveButStoreBreasts();
|
||||||
}
|
}
|
||||||
|
@ -25,7 +28,7 @@ namespace RJW_Genes
|
||||||
base.PostAdd();
|
base.PostAdd();
|
||||||
|
|
||||||
// Breasts are removed for female pawns!
|
// Breasts are removed for female pawns!
|
||||||
if (GenderUtility.IsFemale(pawn) && oldSize < 0)
|
if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
|
||||||
{
|
{
|
||||||
RemoveButStoreBreasts();
|
RemoveButStoreBreasts();
|
||||||
}
|
}
|
||||||
|
@ -34,33 +37,21 @@ namespace RJW_Genes
|
||||||
public override void PostRemove()
|
public override void PostRemove()
|
||||||
{
|
{
|
||||||
base.PostRemove();
|
base.PostRemove();
|
||||||
// Re-Add the old breasts
|
if(removed_breasts != null)
|
||||||
if (oldSize != null)
|
pawn.health.AddHediff(removed_breasts);
|
||||||
breastsToShrink.Severity = oldSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void RemoveButStoreBreasts()
|
internal void RemoveButStoreBreasts()
|
||||||
{
|
{
|
||||||
var partBPR = Genital_Helper.get_breastsBPR(pawn);
|
var partBPR = Genital_Helper.get_breastsBPR(pawn);
|
||||||
breastsToShrink = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
|
Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
|
||||||
|
|
||||||
if(breastsToShrink != null)
|
if(breastsToRemove != null)
|
||||||
{
|
{
|
||||||
oldSize = breastsToShrink.Severity;
|
removed_breasts = breastsToRemove;
|
||||||
//pawn.health.RemoveHediff(breastsToRemove);
|
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);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,8 +44,6 @@ namespace RJW_Genes
|
||||||
if (HasLifeForce(pawn))
|
if (HasLifeForce(pawn))
|
||||||
{
|
{
|
||||||
Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType<Gene_LifeForce>();
|
Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType<Gene_LifeForce>();
|
||||||
if (gene == null || !gene.Active)
|
|
||||||
return false;
|
|
||||||
if (gene.Resource.Value < gene.targetValue)
|
if (gene.Resource.Value < gene.targetValue)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -59,8 +57,6 @@ namespace RJW_Genes
|
||||||
if (HasLifeForce(pawn))
|
if (HasLifeForce(pawn))
|
||||||
{
|
{
|
||||||
Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType<Gene_LifeForce>();
|
Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType<Gene_LifeForce>();
|
||||||
if (gene == null || !gene.Active)
|
|
||||||
return false;
|
|
||||||
if (gene.Resource.Value < gene.MinLevelForAlert)
|
if (gene.Resource.Value < gene.MinLevelForAlert)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -127,26 +123,3 @@ 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()
|
|
||||||
*/
|
|
|
@ -1,81 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -51,9 +51,9 @@ namespace RJW_Genes
|
||||||
}
|
}
|
||||||
// Increase LifeForce for Biter
|
// Increase LifeForce for Biter
|
||||||
GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(CockBiter), gained_lifeforce);
|
GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(CockBiter), gained_lifeforce);
|
||||||
|
|
||||||
// Handle Damage for Bitten
|
// 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);
|
CockBittenPawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.rjw_genes_cock_eaten, CockBittenPawn, null);
|
||||||
|
|
||||||
//Only one penis at the time
|
//Only one penis at the time
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace RJW_Genes
|
||||||
{
|
{
|
||||||
Pawn_GeneTracker genes = pawn.genes;
|
Pawn_GeneTracker genes = pawn.genes;
|
||||||
Gene_LifeForce gene_Lifeforce = (genes != null) ? genes.GetFirstGeneOfType<Gene_LifeForce>() : null;
|
Gene_LifeForce gene_Lifeforce = (genes != null) ? genes.GetFirstGeneOfType<Gene_LifeForce>() : null;
|
||||||
if (gene_Lifeforce != null && gene_Lifeforce.Active && gene_Lifeforce.Value < gene_Lifeforce.MinLevelForAlert)
|
if (gene_Lifeforce != null && gene_Lifeforce.Value < gene_Lifeforce.MinLevelForAlert)
|
||||||
{
|
{
|
||||||
this.targets.Add(pawn);
|
this.targets.Add(pawn);
|
||||||
this.targetLabels.Add(pawn.NameShortColored.Resolve());
|
this.targetLabels.Add(pawn.NameShortColored.Resolve());
|
||||||
|
|
|
@ -39,25 +39,9 @@ namespace RJW_Genes
|
||||||
{
|
{
|
||||||
foreach (Pawn pawn in map.mapPawns.AllPawns)
|
foreach (Pawn pawn in map.mapPawns.AllPawns)
|
||||||
{
|
{
|
||||||
// Return for trivial errors
|
if (pawn != null && this.pawn != null && pawn != this.pawn
|
||||||
if (pawn == null || this.pawn == null || pawn == this.pawn)
|
&& pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map)
|
||||||
continue;
|
&& !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
|
||||||
// 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;
|
yield return pawn;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,33 +11,28 @@ namespace RJW_Genes.Genes.Special
|
||||||
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
||||||
public static class Patch_AgeDrain
|
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
|
const long AGE_TRANSFERED = 120000; // 120k == 2 days
|
||||||
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
// 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
||||||
const long MINIMUM_AGE = 18 * 60 * 60000 + 1;
|
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)
|
public static void Postfix(SexProps props)
|
||||||
{
|
{
|
||||||
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() )
|
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GeneUtility.IsAgeDrainer(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks > MINIMUM_AGE)
|
if (GeneUtility.IsAgeDrainer(props.pawn))
|
||||||
{
|
{
|
||||||
var pawnAge = props.pawn.ageTracker.AgeBiologicalTicks;
|
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}");
|
//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
|
// Make Partner older
|
||||||
props.partner.ageTracker.AgeBiologicalTicks += AGE_TRANSFERED;
|
props.partner.ageTracker.AgeBiologicalTicks += AGE_TRANSFERED;
|
||||||
// Make Pawn younger if he is older than minimum age
|
// Make Pawn younger
|
||||||
if (pawnAge - AGE_TRANSFERED > MINIMUM_AGE)
|
props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED));
|
||||||
props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,33 +11,34 @@ namespace RJW_Genes.Genes.Special
|
||||||
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
||||||
public static class Patch_Youth_Fountain
|
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
|
const long AGE_REDUCTION = 60000; // 60k == 1 day
|
||||||
// 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
// 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
|
||||||
const long MINIMUM_AGE = 18 * 60 * 60000 + 1;
|
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)
|
public static void Postfix(SexProps props)
|
||||||
{
|
{
|
||||||
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
|
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GeneUtility.IsYouthFountain(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks >= MINIMUM_AGE)
|
if (GeneUtility.IsYouthFountain(props.pawn))
|
||||||
{
|
{
|
||||||
var partnerAge = props.partner.ageTracker.AgeBiologicalTicks;
|
var partnerAge = props.partner.ageTracker.AgeBiologicalTicks;
|
||||||
|
|
||||||
if(partnerAge - AGE_REDUCTION > MINIMUM_AGE)
|
//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);
|
|
||||||
|
props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static float ticksToYears(long ticks)
|
||||||
|
{
|
||||||
|
return (ticks / 60000f) / 60f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
<Compile Include="GeneDefOf.cs" />
|
<Compile Include="GeneDefOf.cs" />
|
||||||
<Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
|
<Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
|
||||||
<Compile Include="Genes\Breeding\PatchMechBirth.cs" />
|
<Compile Include="Genes\Breeding\PatchMechBirth.cs" />
|
||||||
|
<Compile Include="Genes\Breeding\PatchPawnExtensions.cs" />
|
||||||
<Compile Include="Genes\Breeding\Patch_EggFertilization.cs" />
|
<Compile Include="Genes\Breeding\Patch_EggFertilization.cs" />
|
||||||
<Compile Include="Genes\Breeding\PatchPregnancyHelper.cs" />
|
<Compile Include="Genes\Breeding\PatchPregnancyHelper.cs" />
|
||||||
<Compile Include="Genes\Cum\CumUtility.cs" />
|
<Compile Include="Genes\Cum\CumUtility.cs" />
|
||||||
|
@ -58,7 +59,6 @@
|
||||||
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" />
|
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" />
|
||||||
<Compile Include="Genes\ExtraGenitalia\Gene_Futa.cs" />
|
<Compile Include="Genes\ExtraGenitalia\Gene_Futa.cs" />
|
||||||
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraVagina.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_NoBreasts.cs" />
|
||||||
<Compile Include="Genes\ExtraGenitalia\Gene_NoAnus.cs" />
|
<Compile Include="Genes\ExtraGenitalia\Gene_NoAnus.cs" />
|
||||||
<Compile Include="Genes\ExtraGenitalia\Gene_NoVagina.cs" />
|
<Compile Include="Genes\ExtraGenitalia\Gene_NoVagina.cs" />
|
||||||
|
@ -87,8 +87,6 @@
|
||||||
<Compile Include="Genes\Genitalia\Gene_DemonicGenitalia.cs" />
|
<Compile Include="Genes\Genitalia\Gene_DemonicGenitalia.cs" />
|
||||||
<Compile Include="Genes\Genitalia\Gene_EquineGenitalia.cs" />
|
<Compile Include="Genes\Genitalia\Gene_EquineGenitalia.cs" />
|
||||||
<Compile Include="Genes\Genitalia\GenitaliaChanger.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\Abilities\AbilityUtility.cs" />
|
||||||
<Compile Include="Genes\Life_Force\UI\Alert_LowFertilin.cs" />
|
<Compile Include="Genes\Life_Force\UI\Alert_LowFertilin.cs" />
|
||||||
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_CasterIsNaked.cs" />
|
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_CasterIsNaked.cs" />
|
||||||
|
|
38
TODOS.md
|
@ -1,6 +1,7 @@
|
||||||
# ToDos and Planned Genes
|
# ToDos and Planned Genes
|
||||||
|
|
||||||
Any help is very appreciated, even if it is just pointing me to existing similar projects.
|
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
|
## Additions to existing things
|
||||||
|
|
||||||
|
@ -20,34 +21,6 @@ Any help is very appreciated, even if it is just pointing me to existing similar
|
||||||
|
|
||||||
**Self-Fertilizing Eggs** Pawns fertilize eggs that are put inside them (with themselves as a parent)
|
**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
|
## 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:
|
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:
|
||||||
|
@ -55,9 +28,4 @@ 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 deal damage as per size (on normal sex-use)
|
||||||
- Genitalia can cause Terror (as ability)
|
- Genitalia can cause Terror (as ability)
|
||||||
- Cumshot Sniper Abilities
|
- 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
|
|