Compare commits
23 Commits
1.3.0-beta
...
main
Author | SHA1 | Date |
---|---|---|
Vegapnk | 7d9e399a47 | |
Vegapnk | e805cfe025 | |
Vegapnk | a3a6273b86 | |
Vegapnk | 87b5500018 | |
Vegapnk | d5eefa7608 | |
Vegapnk | f4002ed9f2 | |
Vegapnk | 65f74e7369 | |
Vegapnk | 996831269d | |
Vegapnk | 483965ea19 | |
vegapnk | 49e66d3302 | |
vegapnk | 7b0a7102a9 | |
mwcrow | a2f0840c79 | |
vegapnk | 729f60151b | |
Vegapnk | 071d5b578d | |
Vegapnk | 3db05a8dce | |
Vegapnk | 70a15dbfed | |
Vegapnk | 051f67af55 | |
Vegapnk | d4e90f6762 | |
Vegapnk | 0aefb45d9b | |
Vegapnk | 57bb1950e4 | |
Vegapnk | 7c22dcd348 | |
Vegapnk | 132344b294 | |
Vegapnk | ef1e3cdd0f |
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Manifest>
|
||||
<identifier>RJW-Genes</identifier>
|
||||
<version>1.2.1</version>
|
||||
<version>1.3.1</version>
|
||||
<dependencies>
|
||||
<li>RimJobWorld</li>
|
||||
<li>HugsLib</li>
|
||||
|
|
32
CHANGELOG.md
32
CHANGELOG.md
|
@ -1,4 +1,29 @@
|
|||
# 1.3.0
|
||||
# 1.3.3
|
||||
|
||||
**Fixes:**
|
||||
|
||||
- Added another check to the AG Malachai Xenotype (Fixes #68)
|
||||
- Fixed the `GatheredCum`Fertilin Ingestion Patch throwing an Error for people without Sexperience (Fixes #69 (nice))
|
||||
|
||||
# 1.3.2
|
||||
|
||||
**Fixes:**
|
||||
|
||||
- Removed patch for Malachai, needs a different patching operator but I don't want to have broken fixes for now (Tracked in a new Issue)
|
||||
|
||||
# 1.3.1
|
||||
|
||||
**Changes**
|
||||
|
||||
- Added patches for Alpha-Genes Animusen, Drakonori and Malachai (Closes #65, thanks @Stars22223)
|
||||
- Little Social Boost for Pawns affected by pheromones (Closes #50)
|
||||
|
||||
**Fixes:**
|
||||
|
||||
- XML Missmatch for Succubus Letter (Fixed in #64, thanks @mwcrow)
|
||||
- Made constructor for Empathetic Lifeforce explicitly `public` to not hang up in character creation (Fixes #66)
|
||||
|
||||
# 1.3.0 (19-09-2023)
|
||||
|
||||
**Changes:**
|
||||
|
||||
|
@ -8,12 +33,17 @@
|
|||
- Simple Gene that removes Sex need (called asexual, `rjw_genes_no_sex_need`)
|
||||
- New Gene that grows Penisses on Oral sex. Configurable in XML.
|
||||
- New Gene Lifeforce Empath: Gain Lifeforce for sexually satisfied pawns, loose for frustrated pawns.
|
||||
- More genes are configurable with XML, e.g. tick speed, distances or multipliers. I am getting the hang of it.
|
||||
- Halfed Succubus Fertilin-Need, increased cost of abilities.
|
||||
- Translation Keys for some letters
|
||||
|
||||
**Fixes:**
|
||||
|
||||
- New attempt at fixing condom consumption for Fertilin, adressing #41 & #48 provided by Infi
|
||||
- Copy of Infis patch for eating cum from sexperience, #41 and #48
|
||||
- Updated some Icons to have better backgrounds (thanks @WasmachenDennSachenSo #53)
|
||||
- Custom Queen- and Drone-Xenotypes should work now.
|
||||
- Some more checks if Queen is on Map or not (fixing #60)
|
||||
|
||||
*Notes*:
|
||||
The pawns that are gender fluid can get pregnant.
|
||||
|
|
Binary file not shown.
|
@ -38,7 +38,7 @@
|
|||
</li>
|
||||
<li Class="RJW_Genes.CompProperties_CasterIsNaked"/>
|
||||
<li Class="RJW_Genes.CompProperties_AbilityLifeForceCost">
|
||||
<fertilinCost>0.1</fertilinCost>
|
||||
<fertilinCost>0.15</fertilinCost>
|
||||
</li>
|
||||
</comps>
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
<fleckDef>rjw_genes_lips</fleckDef> <!--Will change to kiss when I have a good icon/fleck for it-->
|
||||
</li>
|
||||
<li Class="RJW_Genes.CompProperties_AbilityLifeForceCost">
|
||||
<fertilinCost>0.05</fertilinCost>
|
||||
<fertilinCost>0.1</fertilinCost>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="RJW_Genes.CompProperties_AbilityLifeForceCost">
|
||||
<fertilinCost>0.2</fertilinCost>
|
||||
<fertilinCost>0.3</fertilinCost>
|
||||
</li>
|
||||
<li Class="RJW_Genes.CompProperties_AbilityPussyHeal">
|
||||
<tendQualityRange>0.4~0.8</tendQualityRange>
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
<fleckDef>Heart</fleckDef>
|
||||
</li>
|
||||
<li Class="RJW_Genes.CompProperties_AbilityLifeForceCost">
|
||||
<fertilinCost>0.1</fertilinCost>
|
||||
<fertilinCost>0.20</fertilinCost>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
|
|
@ -125,6 +125,12 @@
|
|||
<li>PenisSize</li>
|
||||
<li>VaginaSize</li>
|
||||
</exclusionTags>
|
||||
<modExtensions>
|
||||
<li Class="RJW_Genes.TickIntervalExtension">
|
||||
<!-- One day has 60k ticks-->
|
||||
<tickInterval>60000</tickInterval>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
</Defs>
|
|
@ -1,6 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<GeneDef>
|
||||
|
||||
<GeneDef Name="LifeForceBase" Abstract="True">
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_lifeforce</defName>
|
||||
<label>fertilin</label>
|
||||
<description>Carriers of this gene have a reserve of biological strength powered by a resource called fertilin. The resource can be gained and spent in various ways, some of which are unlocked by other genes.\n\nCarriers lose 5 fertilin per day from biological entropy. \n\nGene is inactive until carrier is able to have sex.</description>
|
||||
|
@ -17,7 +29,6 @@
|
|||
<resourceDescription>A reserve of biological strength which can be gained and spent in a variety of ways. \n\nFertilin can be increased by absorbing cum, typically through oral sex or stored cum. \n\nIf fertilin reaches zero, {PAWN_nameDef} will become very unhappy and may try to obtain some forcefully.</resourceDescription>
|
||||
<iconPath>Genes/Icons/FertilinAlt</iconPath>
|
||||
<selectionWeight>0</selectionWeight>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<displayOrderInCategory>-2</displayOrderInCategory>
|
||||
<minAgeActive>18</minAgeActive>
|
||||
<customEffectDescriptions>
|
||||
|
@ -28,43 +39,28 @@
|
|||
<li><symbol>fert</symbol></li>
|
||||
</prefixSymbols>
|
||||
</symbolPack>
|
||||
<resourceLossPerDay>0.05</resourceLossPerDay>
|
||||
<resourceLossPerDay>0.025</resourceLossPerDay>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
<biostatMet>1</biostatMet>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_lifeforce_drain</defName>
|
||||
<label>fertilin drain</label>
|
||||
<labelShortAdj>draining</labelShortAdj>
|
||||
<description>Carriers lose an additional 15 fertilin per day from biological entropy.</description>
|
||||
<description>Carriers lose an additional 7.5 fertilin per day from biological entropy.</description>
|
||||
<resourceLabel>fertilin</resourceLabel>
|
||||
<geneClass>RJW_Genes.Gene_LifeForceDrain</geneClass>
|
||||
<iconPath>Genes/Icons/FertilinDrainAlt</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<resourceLossPerDay>0.15</resourceLossPerDay>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<resourceLossPerDay>0.075</resourceLossPerDay>
|
||||
<minAgeActive>18</minAgeActive>
|
||||
<displayOrderInCategory>-1</displayOrderInCategory>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
<biostatMet>6</biostatMet>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_pussyhealing</defName>
|
||||
<label>Pussy Healer</label>
|
||||
<labelShortAdj>pussyhealer</labelShortAdj>
|
||||
|
@ -72,7 +68,6 @@
|
|||
<iconPath>Genes/Icons/Healpussy</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>9</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<abilities>
|
||||
<li>rjw_genes_ability_pussyheal</li>
|
||||
</abilities>
|
||||
|
@ -88,16 +83,9 @@
|
|||
<li><symbol>heal</symbol></li>
|
||||
</suffixSymbols>
|
||||
</symbolPack>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_cockeater</defName>
|
||||
<label>Cockeater</label>
|
||||
<labelShortAdj>cockeater</labelShortAdj>
|
||||
|
@ -105,7 +93,6 @@
|
|||
<iconPath>Genes/Icons/cockeater</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>11</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<abilities>
|
||||
<li>rjw_genes_ability_cockeater</li>
|
||||
</abilities>
|
||||
|
@ -121,16 +108,9 @@
|
|||
<li><symbol>eat</symbol></li>
|
||||
</suffixSymbols>
|
||||
</symbolPack>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_paralysingkiss</defName>
|
||||
<label>paralysing kiss</label>
|
||||
<labelShortAdj>paralysing kiss</labelShortAdj>
|
||||
|
@ -138,7 +118,6 @@
|
|||
<iconPath>Genes/Icons/Paralysing_Kiss</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>12</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<abilities>
|
||||
<li>rjw_genes_ability_paralysingkiss</li>
|
||||
</abilities>
|
||||
|
@ -153,16 +132,9 @@
|
|||
<li><symbol>kiss</symbol></li>
|
||||
</suffixSymbols>
|
||||
</symbolPack>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_seduce</defName>
|
||||
<label>seduction</label>
|
||||
<labelShortAdj>seduction</labelShortAdj>
|
||||
|
@ -170,7 +142,6 @@
|
|||
<iconPath>Genes/Icons/seduce</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>13</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<abilities>
|
||||
<li>rjw_genes_ability_seduce</li>
|
||||
</abilities>
|
||||
|
@ -186,23 +157,15 @@
|
|||
<li><symbol>kiss</symbol></li>
|
||||
</suffixSymbols>
|
||||
</symbolPack>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_naked_prowess</defName>
|
||||
<label>naked prowess</label>
|
||||
<description>Carriers of this gene are able to temporarily increase their strength and resilience, while they are naked.</description>
|
||||
<iconPath>Genes/Icons/rjw_naked_prowess</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>14</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<abilities>
|
||||
<li>rjw_genes_ability_naked_prowess</li>
|
||||
</abilities>
|
||||
|
@ -211,52 +174,29 @@
|
|||
</descriptionHyperlinks>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
<biostatMet>-1</biostatMet>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_cum_eater</defName>
|
||||
<label>Cum eater</label>
|
||||
<description>Carriers of this gene are able to absorb fertilin through eating cum. This includes oral sex, eating cum for food or sucking out cumflated pawns. </description>
|
||||
<iconPath>Genes/Icons/cumeater</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>1</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_fertilin_absorber</defName>
|
||||
<label>Fertilin Absorber</label>
|
||||
<description>Carriers of this gene are able to absorb the fertilin inside sperm through their vagina and anus.</description>
|
||||
<iconPath>Genes/Icons/Vaginal_cum_absorption</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>2</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_lifeforce_empath</defName>
|
||||
<label>empathic lifeforce</label>
|
||||
<geneClass>RJW_Genes.Gene_LifeForce_Empath</geneClass>
|
||||
|
@ -264,42 +204,34 @@
|
|||
<iconPath>Genes/Icons/Hypersexual</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>3</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
<biostatMet>-1</biostatMet>
|
||||
<biostatCpx>3</biostatCpx>
|
||||
<biostatMet>-2</biostatMet>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
<li Class="RJW_Genes.LifeForceEmpathExtension">
|
||||
<!-- One day has 60k ticks, so we check every hour with 60000/24 = 2500-->
|
||||
<tickInterval>2500</tickInterval>
|
||||
<empathDistance>25</empathDistance>
|
||||
<aheagoIncrement>0.02</aheagoIncrement>
|
||||
<satisfactionIncrement>0.01</satisfactionIncrement>
|
||||
<frustratedDecrement>-0.01</frustratedDecrement>
|
||||
</li>
|
||||
<li Class="RJW_Genes.TickIntervalExtension">
|
||||
<!-- One day has 60k ticks, so we check every hour with 60000/24 = 2500-->
|
||||
<tickInterval>2500</tickInterval>
|
||||
</li>
|
||||
<li Class="RJW_Genes.DistanceExtension">
|
||||
<!-- distance 25 means 25 tiles in every direction from the empath.-->
|
||||
<distance>25</distance>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef>
|
||||
<GeneDef ParentName="LifeForceBase">
|
||||
<defName>rjw_genes_drainer</defName>
|
||||
<label>vitality drainer</label>
|
||||
<description>Carriers of this gene are able to absorb a great amount of fertilin by draining the vitality of the partner. This is done passively through having sex with a non-drained pawn that does not have this gene.</description>
|
||||
<iconPath>Genes/Icons/Vitality_Drainer</iconPath>
|
||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||
<displayOrderInCategory>4</displayOrderInCategory>
|
||||
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
<biostatMet>-1</biostatMet>
|
||||
|
||||
<modExtensions>
|
||||
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
|
||||
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
|
||||
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
</Defs>
|
|
@ -65,6 +65,17 @@
|
|||
<displayOrderInCategory>4</displayOrderInCategory>
|
||||
<biostatCpx>1</biostatCpx>
|
||||
<biostatMet>1</biostatMet>
|
||||
|
||||
<modExtensions>
|
||||
<li Class="RJW_Genes.TickIntervalExtension">
|
||||
<!-- One day has 60k ticks, so we check every hour with 60000/48 = 1250-->
|
||||
<tickInterval>1250</tickInterval>
|
||||
</li>
|
||||
<li Class="RJW_Genes.DistanceExtension">
|
||||
<!-- distance 25 means 25 tiles in every direction from the pheromone-pawn.-->
|
||||
<distance>25</distance>
|
||||
</li>
|
||||
</modExtensions>
|
||||
</GeneDef>
|
||||
|
||||
<GeneDef ParentName="SpecialBase">
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
|
||||
<ThoughtDef>
|
||||
<defName>rjw_genes_pheromone_carrier_nearby</defName>
|
||||
<thoughtClass>Thought_SituationalSocial</thoughtClass>
|
||||
<workerClass>RJW_Genes.ThoughtWorker_Aphrodisiac_Pheromones_Social</workerClass>
|
||||
<stages>
|
||||
<li>
|
||||
<label>Pheromones</label>
|
||||
<description>{0} has a special vibe, we should hang out more often.</description>
|
||||
<baseOpinionOffset>+3</baseOpinionOffset>
|
||||
</li>
|
||||
</stages>
|
||||
</ThoughtDef>
|
||||
|
||||
</Defs>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
|
||||
<rjw_genes_queenbirth_letter_label>New Queen</rjw_genes_queenbirth_letter_label>
|
||||
<rjw_genes_queenbirth_letter_description>A new Queen was born! Make sure to adress inheritance before the new queen reaches adolesence.</rjw_genes_queenbirth_letter_description>
|
||||
|
||||
</LanguageData>
|
|
@ -14,4 +14,7 @@
|
|||
|
||||
<rjw_genes_sexdemon_visit_incident_label>Dirty dreams</rjw_genes_sexdemon_visit_incident_label>
|
||||
<rjw_genes_sexdemon_visit_incident_description>The dirty dreams of your colonists have attracted succubi.\n\nThey will hang around for a couple of days trying to seduce your colonists. They may decide to join your colony, if they are impressed by your colonists's sexual prowess.</rjw_genes_sexdemon_visit_incident_description>
|
||||
</LanguageData>
|
||||
|
||||
<rjw_genes_succubus_joins_letter_label>Guest Joins</rjw_genes_succubus_joins_letter_label>
|
||||
<rjw_genes_succubus_joins_letter_description>{0} enjoys it here and has decided to stay.</rjw_genes_succubus_joins_letter_description>
|
||||
</LanguageData>
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
|
||||
<!--
|
||||
DevNote:
|
||||
There used to be an issue with a Gene-Mod Called "Cum-Addiction Gene". That mod just overwrote the complete UsedCondom.xml and Sexperience Cum.xml
|
||||
There used to be an issue with a Gene-Mod Called "Cum-Addiction Gene". That mod just overwrote the
|
||||
complete UsedCondom.xml and Sexperience Cum.xml
|
||||
This would lead to two types of failures:
|
||||
A) If this mod was before the other mod, changes were just overwritten
|
||||
B) If this mod was after, there was an issue in targetting the XML throwing a patch error
|
||||
|
@ -11,26 +12,30 @@
|
|||
|
||||
This patch was kindly mirrored after Infis Patch of UsedCondoms.
|
||||
-->
|
||||
|
||||
<Operation Class="PatchOperationConditional">
|
||||
<xpath>Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers</xpath>
|
||||
<nomatch Class="PatchOperationAdd">
|
||||
<xpath>/Defs/ThingDef[defName="GatheredCum"]/ingestible</xpath>
|
||||
<value>
|
||||
<outcomeDoers>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>RJW Sexperience</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationConditional">
|
||||
<xpath>Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers</xpath>
|
||||
<nomatch Class="PatchOperationAdd">
|
||||
<xpath>/Defs/ThingDef[defName="GatheredCum"]/ingestible</xpath>
|
||||
<value>
|
||||
<outcomeDoers>
|
||||
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
|
||||
<FertilinPerUnit>1</FertilinPerUnit>
|
||||
</li>
|
||||
</outcomeDoers>
|
||||
</value>
|
||||
</nomatch>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers</xpath>
|
||||
<value>
|
||||
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
|
||||
<FertilinPerUnit>1</FertilinPerUnit>
|
||||
</li>
|
||||
</outcomeDoers>
|
||||
</value>
|
||||
</nomatch>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/ThingDef[defName="GatheredCum"]/ingestible/outcomeDoers</xpath>
|
||||
<value>
|
||||
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
|
||||
<FertilinPerUnit>1</FertilinPerUnit>
|
||||
</li>
|
||||
</value>
|
||||
</value>
|
||||
</match>
|
||||
</match>
|
||||
</Operation>
|
||||
|
||||
|
|
|
@ -1,86 +1,131 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Fleetkind"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_slime_genitalia</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Fleetkind"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_slime_genitalia</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Helixien"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_slime_genitalia</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Helixien"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_slime_genitalia</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Taukai"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_sexual_mytosis</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Taukai"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_sexual_mytosis</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_MindDevourer"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
<li>rjw_genes_sex_age_drain</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Lapis"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_big_breasts</li>
|
||||
<li>rjw_genes_no_cum</li>
|
||||
<li>rjw_genes_big_male_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_MindDevourer"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
<li>rjw_genes_sex_age_drain</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Efreet"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
<li>rjw_genes_small_breasts</li>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Lapis"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_big_breasts</li>
|
||||
<li>rjw_genes_no_cum</li>
|
||||
<li>rjw_genes_big_male_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Efreet"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
<li>rjw_genes_small_breasts</li>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Drakonori"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_dragon_genitalia</li>
|
||||
<li>rjw_genes_big_male_genitalia</li>
|
||||
<li>rjw_genes_aphrodisiac_pheromones</li>
|
||||
<li>rjw_genes_big_breasts</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Animusen"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_canine_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Alpha Genes</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Sanguophage</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="AG_Malachai"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Biotech Nyaron</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="Nyaron"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Biotech Nyaron</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="Nyaron"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Erin's Auronya</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="ERN_Auronya"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Erin's Auronya</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="ERN_Auronya"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Erin's Shisune</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="ERN_Shisune"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_canine_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Erin's Shisune</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="ERN_Shisune"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_canine_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Kijin Race 3.0</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="KijinXenotype"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Kijin Race 3.0</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="KijinXenotype"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,15 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>NaraiXenotype</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="Narai"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_canine_genitalia</li>
|
||||
<li>rjw_genes_zoophile</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>NaraiXenotype</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="Narai"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_canine_genitalia</li>
|
||||
<li>rjw_genes_zoophile</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,15 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Biotech Nyaron</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="Nyaron"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Biotech Nyaron</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="Nyaron"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,16 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Papou Race : emotional birds</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="papago"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_orgasm_rush</li>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Papou Race : emotional birds</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="papago"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_orgasm_rush</li>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,17 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Roo's Faun Xenotype</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="RBSF_Faun"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_small_male_genitalia</li>
|
||||
<li>rjw_genes_small_breasts</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Roo's Faun Xenotype</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="RBSF_Faun"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_small_male_genitalia</li>
|
||||
<li>rjw_genes_small_breasts</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,18 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Roo's Minotaur Xenotype</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="RBM_Minotaur"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_much_cum</li>
|
||||
<li>rjw_genes_cumflation_immunity</li>
|
||||
<li>rjw_genes_loose_female_genitalia</li>
|
||||
<li>rjw_genes_big_male_genitalia</li>
|
||||
<li>rjw_genes_equine_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Roo's Minotaur Xenotype</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="RBM_Minotaur"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_much_cum</li>
|
||||
<li>rjw_genes_cumflation_immunity</li>
|
||||
<li>rjw_genes_loose_female_genitalia</li>
|
||||
<li>rjw_genes_big_male_genitalia</li>
|
||||
<li>rjw_genes_equine_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Saurid</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRESaurids_Saurid"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_dragon_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
<Operation Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Saurid</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRESaurids_Saurid"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_dragon_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,50 +1,50 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Phytokin</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Poluxkin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li>rjw_genes_bisexual</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Phytokin</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Gauranlenkin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li>rjw_genes_bisexual</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Phytokin</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Poluxkin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li>rjw_genes_bisexual</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Phytokin</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Gauranlenkin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li>rjw_genes_bisexual</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Phytokin</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Animakin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li>rjw_genes_bisexual</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Phytokin</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Animakin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
<li>rjw_genes_tight_anus</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li>rjw_genes_bisexual</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,41 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Sanguophage</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Bruxa"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Sanguophage</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Ekkimian"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Sanguophage</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Bruxa"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Sanguophage</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Ekkimian"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Sanguophage</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Strigoi"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>Vanilla Races Expanded - Sanguophage</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="VRE_Strigoi"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -1,69 +1,69 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Patch>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Nyankind"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Growler"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_canine_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Elfin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_small_male_genitalia</li>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<Operation Class="PatchOperationSequence">
|
||||
<operations>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Nyankind"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_feline_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Growler"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_canine_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Ork"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_big_male_genitalia</li>
|
||||
<li>rjw_genes_loose_female_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Lilime"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li MayRequire="rjw.sexperience">AptitudeRemarkable_Sex</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Elfin"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_small_male_genitalia</li>
|
||||
<li>rjw_genes_tight_female_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Ork"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_big_male_genitalia</li>
|
||||
<li>rjw_genes_loose_female_genitalia</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
|
||||
<li Class="PatchOperationFindMod">
|
||||
<mods>
|
||||
<li>[LTS]Xenotech</li>
|
||||
</mods>
|
||||
<match Class="PatchOperationAdd">
|
||||
<xpath>Defs/XenotypeDef[defName="LTS_Lilime"]/genes</xpath>
|
||||
<value>
|
||||
<li>rjw_genes_demonic_genitalia</li>
|
||||
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
|
||||
<li MayRequire="rjw.sexperience">AptitudeRemarkable_Sex</li>
|
||||
</value>
|
||||
</match>
|
||||
</li>
|
||||
</operations>
|
||||
</Operation>
|
||||
</Patch>
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Small Extension that covers distances for Genes.
|
||||
/// This allows to set distance in the XMLs.
|
||||
/// The distance is measured in tiles, so a distance of ~25 means 25 tiles away from the pawn in any direction.
|
||||
/// </summary>
|
||||
public class DistanceExtension : DefModExtension
|
||||
{
|
||||
public int distance;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
internal class ModExtensionHelper
|
||||
{
|
||||
|
||||
public static int GetDistanceFromModExtension(GeneDef defOf, int fallback)
|
||||
{
|
||||
DistanceExtension distanceExt = defOf.GetModExtension<DistanceExtension>();
|
||||
|
||||
int potentialDistance = distanceExt?.distance ?? fallback;
|
||||
|
||||
if (potentialDistance > 0)
|
||||
{
|
||||
return potentialDistance;
|
||||
} else {
|
||||
ModLog.Warning($"Retrieved a bad distance ({potentialDistance}) reading the RJW_Genes.DistanceExtension for {defOf.defName}");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static int GetTickIntervalFromModExtension(GeneDef defOf, int fallback)
|
||||
{
|
||||
TickIntervalExtension tickExt = defOf.GetModExtension<TickIntervalExtension>();
|
||||
|
||||
int potentialTickInterval = tickExt?.tickInterval ?? fallback;
|
||||
|
||||
if (potentialTickInterval > 0)
|
||||
{
|
||||
return potentialTickInterval;
|
||||
}
|
||||
else
|
||||
{
|
||||
ModLog.Warning($"Retrieved a bad distance ({potentialTickInterval}) reading the RJW_Genes.DistanceExtension for {defOf.defName}");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
/// <summary>
|
||||
/// General DefModExtension to cover various genes that need to tick regularly.
|
||||
/// Defining it like this allows to adjust things in XML.
|
||||
/// </summary>
|
||||
public class TickIntervalExtension : DefModExtension
|
||||
{
|
||||
public int tickInterval;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
public class Either<TL, TR>
|
||||
{
|
||||
public readonly TL left;
|
||||
public readonly TR right;
|
||||
public readonly bool isLeft;
|
||||
|
||||
public Either(TL left)
|
||||
{
|
||||
this.left = left;
|
||||
this.isLeft = true;
|
||||
}
|
||||
|
||||
public Either(TR right)
|
||||
{
|
||||
this.right = right;
|
||||
this.isLeft = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -16,13 +16,14 @@ namespace RJW_Genes
|
|||
public const int RESIZING_AGE = 20;
|
||||
|
||||
//public const int GROWTH_INTERVAL = 1000; // Test value for Quick Trials
|
||||
public const int GROWTH_INTERVAL = 60000; // 60k == 1 day
|
||||
public const int GROWTH_INTERVAL_FALLBACK = 60000; // 60k == 1 day
|
||||
|
||||
public override void Tick()
|
||||
{
|
||||
base.Tick();
|
||||
|
||||
if (pawn.IsHashIntervalTick(GROWTH_INTERVAL)
|
||||
int interval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_evergrowth, GROWTH_INTERVAL_FALLBACK);
|
||||
if (pawn.IsHashIntervalTick(interval)
|
||||
&& this.pawn.Map != null
|
||||
&& pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE)
|
||||
{
|
||||
|
@ -100,6 +101,11 @@ namespace RJW_Genes
|
|||
hybridsThoughts = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_evergrowth_sideeffect, pawn);
|
||||
hybridsThoughts.Severity = 0.1f;
|
||||
pawn.health.AddHediff(hybridsThoughts);
|
||||
|
||||
if (!xxx.is_nympho(pawn))
|
||||
{
|
||||
pawn.story.traits.GainTrait(new Trait(xxx.nymphomaniac));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using RimWorld;
|
||||
using rjw;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
@ -30,9 +31,9 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="pawn">The pawn born, that maybe becomes a hive-xenotype.</param>
|
||||
/// <param name="hasDroneParent">whether there was a drone parent involved</param>
|
||||
public static void ManageHiveBirth(Pawn pawn, bool hasDroneParent = false, XenotypeDef fallbackQueenDef = null, XenotypeDef fallbackDroneDef = null)
|
||||
public static void ManageHiveBirth(Pawn pawn, bool hasDroneParent = false, Either<XenotypeDef, CustomXenotype> fallbackQueenDef = null, Either<XenotypeDef, CustomXenotype> fallbackDroneDef = null)
|
||||
{
|
||||
XenotypeDef queenDef = TryFindParentQueenXenotype(pawn);
|
||||
Either<XenotypeDef,CustomXenotype> queenDef = TryFindParentQueenXenotype(pawn);
|
||||
if (queenDef == null) queenDef = fallbackQueenDef;
|
||||
HiveOffspringChanceDef hiveOffspringChanceDef = HiveUtility.LookupHiveInheritanceChances(queenDef);
|
||||
|
||||
|
@ -49,17 +50,15 @@ namespace RJW_Genes
|
|||
// Case 2.a: New Queen born
|
||||
if (roll < hiveOffspringChanceDef.queenChance)
|
||||
{
|
||||
pawn.genes.SetXenotype(queenDef);
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a new queen with xenotype {queenDef.defName} ({hiveOffspringChanceDef.queenChance * 100}% chance,rolled {roll})");
|
||||
MakeQueenBornLetter(pawn);
|
||||
MakeQueen(pawn, queenDef);
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Queen Chance: {hiveOffspringChanceDef.queenChance * 100}% chance,rolled { roll}");
|
||||
}
|
||||
// Case 2.b: New Drone born
|
||||
else if (roll < hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance)
|
||||
{
|
||||
XenotypeDef droneDef = TryFindParentDroneXenotype(pawn);
|
||||
if (droneDef == null) droneDef = fallbackDroneDef;
|
||||
pawn.genes.SetXenotype(droneDef);
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a new drone with xenotype {droneDef.defName} ({(hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance) * 100}% chance,rolled {roll}))");
|
||||
var droneDef = TryFindParentDroneXenotype(pawn);
|
||||
MakeDrone(pawn,droneDef);
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Drone Chance ({(hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance) * 100}% chance,rolled {roll}))");
|
||||
}
|
||||
// Case 2.c: Worker
|
||||
else
|
||||
|
@ -70,6 +69,52 @@ namespace RJW_Genes
|
|||
}
|
||||
}
|
||||
|
||||
private static void MakeQueen(Pawn pawnToBeQueen, Either<XenotypeDef,CustomXenotype> queenDef) {
|
||||
if (queenDef == null && pawnToBeQueen == null)
|
||||
return;
|
||||
if (queenDef.isLeft) {
|
||||
var xenotype = queenDef.left;
|
||||
pawnToBeQueen.genes.SetXenotype(xenotype);
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeQueen} born as a new queen with Xenotype {xenotype.defName}");
|
||||
} else {
|
||||
var customXenotype = queenDef.right;
|
||||
|
||||
foreach (var gene in customXenotype.genes)
|
||||
pawnToBeQueen.genes.AddGene(gene, true);
|
||||
|
||||
pawnToBeQueen.genes.xenotypeName = customXenotype.name;
|
||||
pawnToBeQueen.genes.iconDef = customXenotype.iconDef;
|
||||
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeQueen} born as a new queen with custom Xenotype {customXenotype.name}");
|
||||
}
|
||||
|
||||
MakeQueenBornLetter(pawnToBeQueen);
|
||||
}
|
||||
|
||||
|
||||
private static void MakeDrone(Pawn pawnToBeDrone, Either<XenotypeDef, CustomXenotype> droneDef)
|
||||
{
|
||||
if (droneDef == null && pawnToBeDrone == null)
|
||||
return;
|
||||
if (droneDef.isLeft)
|
||||
{
|
||||
var xenotype = droneDef.left;
|
||||
pawnToBeDrone.genes.SetXenotype(xenotype);
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeDrone} born as a new drone with Xenotype {xenotype.defName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
var customXenotype = droneDef.right;
|
||||
|
||||
foreach (var gene in customXenotype.genes)
|
||||
pawnToBeDrone.genes.AddGene(gene, true);
|
||||
|
||||
pawnToBeDrone.genes.xenotypeName = customXenotype.name;
|
||||
pawnToBeDrone.genes.iconDef = customXenotype.iconDef;
|
||||
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawnToBeDrone} born as a new drone with custom Xenotype {customXenotype.name}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Turns a given pawn into a worker, by looking up the relevant genes as per queen.
|
||||
|
@ -79,14 +124,19 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="pawnTobeWorker">The pawn for which the genes are added.</param>
|
||||
/// <param name="queenDef">The xenotype of the queen, used for lookup.</param>
|
||||
private static void MakeWorker(Pawn pawnTobeWorker, XenotypeDef queenDef)
|
||||
private static void MakeWorker(Pawn pawnTobeWorker, Either<XenotypeDef, CustomXenotype> queenDef)
|
||||
{
|
||||
if (pawnTobeWorker == null)
|
||||
return;
|
||||
|
||||
var mappings = HiveUtility.GetQueenWorkerMappings();
|
||||
String queenDefName = HiveUtility.GetXenotypeDefName(queenDef);
|
||||
if (queenDef == null || mappings.NullOrEmpty())
|
||||
return;
|
||||
|
||||
var genes = mappings.TryGetValue(queenDef, HiveUtility.LookupDefaultWorkerGenes());
|
||||
var genes = mappings.TryGetValue(queenDefName, HiveUtility.LookupDefaultWorkerGenes());
|
||||
if (genes == null)
|
||||
return;
|
||||
|
||||
foreach (var gene in genes)
|
||||
pawnTobeWorker.genes.AddGene(gene, false);
|
||||
|
@ -101,7 +151,7 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="pawn">The pawn for whichs parent the xenotypes is looked up.</param>
|
||||
/// <returns>The Drone-Xenotype of a parent or null. If both are drones, mothers are preferred.</returns>
|
||||
public static XenotypeDef TryFindParentDroneXenotype(Pawn pawn)
|
||||
public static Either<XenotypeDef,CustomXenotype> TryFindParentDroneXenotype(Pawn pawn)
|
||||
{
|
||||
if (pawn == null)
|
||||
return null;
|
||||
|
@ -109,7 +159,7 @@ namespace RJW_Genes
|
|||
List<DirectPawnRelation> parentRelations = pawn.relations.DirectRelations.FindAll(rel => rel.def.Equals(PawnRelationDefOf.Parent));
|
||||
foreach (DirectPawnRelation parent in parentRelations)
|
||||
{
|
||||
XenotypeDef xenotype = HiveUtility.TryGetDroneXenotype(parent.otherPawn);
|
||||
var xenotype = HiveUtility.TryGetDroneXenotype(parent.otherPawn);
|
||||
if (xenotype != null) return xenotype;
|
||||
}
|
||||
|
||||
|
@ -120,10 +170,10 @@ namespace RJW_Genes
|
|||
{
|
||||
if (bornQueen == null) return;
|
||||
|
||||
var letter= LetterMaker.MakeLetter(
|
||||
"New Queen", "A new Queen was born! Make sure to adress inheritance before the new queen reaches adolesence.", LetterDefOf.NeutralEvent, bornQueen
|
||||
);
|
||||
//letter.Start();
|
||||
var letter = LetterMaker.MakeLetter(
|
||||
"rjw_genes_queenbirth_letter_label".Translate(),
|
||||
string.Format("rjw_genes_queenbirth_letter_description".Translate(), xxx.get_pawnname(bornQueen)),
|
||||
LetterDefOf.NeutralEvent, bornQueen);
|
||||
Find.LetterStack.ReceiveLetter(letter);
|
||||
}
|
||||
|
||||
|
@ -134,7 +184,7 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="pawn">The pawn for whichs parent the xenotypes is looked up.</param>
|
||||
/// <returns>The Queen-Xenotype of a parent or null. If both are queens, mothers are preferred.</returns>
|
||||
public static XenotypeDef TryFindParentQueenXenotype(Pawn pawn)
|
||||
public static Either<XenotypeDef,CustomXenotype> TryFindParentQueenXenotype(Pawn pawn)
|
||||
{
|
||||
if (pawn == null)
|
||||
return null;
|
||||
|
@ -142,7 +192,7 @@ namespace RJW_Genes
|
|||
List<DirectPawnRelation> parentRelations = pawn.relations.DirectRelations.FindAll(rel => rel.def.Equals(PawnRelationDefOf.Parent));
|
||||
foreach (var parent in parentRelations)
|
||||
{
|
||||
XenotypeDef xenotype = HiveUtility.TryGetQueenXenotype(parent.otherPawn);
|
||||
var xenotype = HiveUtility.TryGetQueenXenotype(parent.otherPawn);
|
||||
if (xenotype != null) return xenotype;
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,9 @@ namespace RJW_Genes
|
|||
/// <returns>True if the pawn is on the home-map, False otherwise.</returns>
|
||||
public static bool PawnIsOnHomeMap(Pawn pawn)
|
||||
{
|
||||
if (Find.Maps.NullOrEmpty() || !Find.Maps.Where(mapCandidate => mapCandidate.IsPlayerHome).Any()) {
|
||||
return false;
|
||||
}
|
||||
Map homeMap = Find.Maps.Where(mapCandidate => mapCandidate.IsPlayerHome).First();
|
||||
return
|
||||
homeMap != null && pawn != null
|
||||
|
@ -74,7 +77,7 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="pawn"></param>
|
||||
/// <returns>A xenotype with a queen gene, or null.</returns>
|
||||
public static XenotypeDef TryGetQueenXenotype(Pawn pawn)
|
||||
public static Either<XenotypeDef,CustomXenotype> TryGetQueenXenotype(Pawn pawn)
|
||||
{
|
||||
if (pawn == null)
|
||||
return null;
|
||||
|
@ -84,8 +87,15 @@ namespace RJW_Genes
|
|||
var potentialXenotype = pawn.genes.Xenotype;
|
||||
if (potentialXenotype != null && potentialXenotype.genes.Contains(GeneDefOf.rjw_genes_queen))
|
||||
{
|
||||
return potentialXenotype;
|
||||
return new Either<XenotypeDef,CustomXenotype>(potentialXenotype);
|
||||
}
|
||||
|
||||
var potentialCustomXenotype = pawn.genes.CustomXenotype;
|
||||
if (potentialCustomXenotype != null && potentialCustomXenotype.genes.Contains(GeneDefOf.rjw_genes_queen))
|
||||
{
|
||||
return new Either<XenotypeDef, CustomXenotype>(potentialCustomXenotype);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -98,7 +108,7 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="pawn"></param>
|
||||
/// <returns>A xenotype with a drone gene, or null.</returns>
|
||||
public static XenotypeDef TryGetDroneXenotype(Pawn pawn)
|
||||
public static Either<XenotypeDef,CustomXenotype> TryGetDroneXenotype(Pawn pawn)
|
||||
{
|
||||
if (pawn == null)
|
||||
return null;
|
||||
|
@ -108,7 +118,13 @@ namespace RJW_Genes
|
|||
var potentialXenotype = pawn.genes.Xenotype;
|
||||
if (potentialXenotype != null && potentialXenotype.genes.Contains(GeneDefOf.rjw_genes_drone))
|
||||
{
|
||||
return potentialXenotype;
|
||||
return new Either<XenotypeDef,CustomXenotype>(potentialXenotype);
|
||||
}
|
||||
|
||||
var potentialCustomXenotype = pawn.genes.CustomXenotype;
|
||||
if (potentialCustomXenotype != null && potentialCustomXenotype.genes.Contains(GeneDefOf.rjw_genes_drone))
|
||||
{
|
||||
return new Either<XenotypeDef, CustomXenotype>(potentialCustomXenotype);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -122,23 +138,35 @@ namespace RJW_Genes
|
|||
/// Prints a bigger piece of information when debug printing is enabled.
|
||||
/// </summary>
|
||||
/// <returns>A mapping which Queen-Xenotypes should produce which worker genes.</returns>
|
||||
|
||||
public static Dictionary<XenotypeDef,List<GeneDef>> GetQueenWorkerMappings()
|
||||
public static Dictionary<String,List<GeneDef>> GetQueenWorkerMappings()
|
||||
{
|
||||
Dictionary<XenotypeDef,List<GeneDef>> dict = new Dictionary<XenotypeDef, List<GeneDef>>();
|
||||
IEnumerable<QueenWorkerMappingDef> mappingDefs = DefDatabase<QueenWorkerMappingDef>.AllDefs;
|
||||
|
||||
Dictionary<string, List<GeneDef>> results = new Dictionary<string, List<GeneDef>>();
|
||||
|
||||
// Dev-Note: I first a nice lambda here, but I used nesting in favour of logging.
|
||||
foreach (QueenWorkerMappingDef mappingDef in mappingDefs)
|
||||
{
|
||||
|
||||
// Option A) This is the default worker genes, expected, just ignore.
|
||||
if (mappingDef.defName == "rjw_genes_default_worker_genes")
|
||||
{
|
||||
// Do nothing, there is no lookup but this entry is fine and should not log a warning.
|
||||
continue;
|
||||
}
|
||||
// Option B) The Xenotype is a "static" Xenotype, from a mod or something.
|
||||
XenotypeDef queenDef = DefDatabase<XenotypeDef>.GetNamed(mappingDef.queenXenotype);
|
||||
string defName = null;
|
||||
if (queenDef != null)
|
||||
{
|
||||
defName = queenDef.defName;
|
||||
}
|
||||
else if (Current.Game != null && Current.Game.customXenotypeDatabase != null)
|
||||
{
|
||||
// Option C) The Xenotype is a Custom Xenotype, created by the player
|
||||
CustomXenotype customQueenDef = Current.Game.customXenotypeDatabase.customXenotypes.Find(f => f.name == mappingDef.defName);
|
||||
defName = customQueenDef?.name;
|
||||
}
|
||||
if (defName != null)
|
||||
{
|
||||
List<GeneDef> workerGenes = new List<GeneDef>();
|
||||
foreach (string geneName in mappingDef.workerGenes)
|
||||
|
@ -149,15 +177,17 @@ namespace RJW_Genes
|
|||
else if(RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||
ModLog.Warning($"Could not look up Gene {geneName} for {mappingDef.queenXenotype}.");
|
||||
}
|
||||
dict.Add(queenDef, workerGenes);
|
||||
}
|
||||
else {
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||
ModLog.Warning($"Did not find a matching xenotype for {mappingDef.queenXenotype}! Defaulting to rjw_genes_default_worker_genes.");
|
||||
results.Add(defName, workerGenes);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Option D) Fallback, unknown
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||
ModLog.Warning($"Did not find a matching xenotype for {mappingDef.queenXenotype}! Defaulting to rjw_genes_default_worker_genes.");
|
||||
|
||||
}
|
||||
|
||||
return dict;
|
||||
return results;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -203,6 +233,16 @@ namespace RJW_Genes
|
|||
}
|
||||
|
||||
|
||||
public static String GetXenotypeDefName(Either<XenotypeDef, CustomXenotype> def)
|
||||
{
|
||||
if (def == null)
|
||||
return null;
|
||||
else if (def.isLeft)
|
||||
return def.left.defName;
|
||||
else
|
||||
return def.right.name;
|
||||
}
|
||||
|
||||
public static HiveOffspringChanceDef LookupDefaultHiveInheritanceChances()
|
||||
{
|
||||
IEnumerable<HiveOffspringChanceDef> offspringChanceDefs = DefDatabase<HiveOffspringChanceDef>.AllDefs;
|
||||
|
@ -217,11 +257,16 @@ namespace RJW_Genes
|
|||
return defaultChance;
|
||||
}
|
||||
|
||||
public static HiveOffspringChanceDef LookupHiveInheritanceChances(XenotypeDef queenDef)
|
||||
public static HiveOffspringChanceDef LookupHiveInheritanceChances(Either<XenotypeDef, CustomXenotype> queenDef)
|
||||
{
|
||||
if (queenDef == null)
|
||||
return LookupDefaultHiveInheritanceChances();
|
||||
|
||||
String queenDefName = queenDef.isLeft ? queenDef.left.defName : queenDef.right.name;
|
||||
|
||||
IEnumerable<HiveOffspringChanceDef> offspringChanceDefs = DefDatabase<HiveOffspringChanceDef>.AllDefs;
|
||||
|
||||
return offspringChanceDefs.FirstOrFallback(t => t.queenXenotype == queenDef.defName, LookupDefaultHiveInheritanceChances());
|
||||
return offspringChanceDefs.FirstOrFallback(t => t.queenXenotype == queenDefName, LookupDefaultHiveInheritanceChances());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -34,8 +34,8 @@ namespace RJW_Genes
|
|||
|
||||
Pawn pawn = (Pawn)__result;
|
||||
|
||||
XenotypeDef queenDef = HiveBirthLogic.TryFindParentQueenXenotype(pawn) ?? TryFindParentQueenXenotypeFromEgg(__instance);
|
||||
XenotypeDef droneDef = HiveBirthLogic.TryFindParentDroneXenotype(pawn) ?? TryFindParentDroneXenotypeFromEgg(__instance);
|
||||
Either<XenotypeDef,CustomXenotype> queenDef = HiveBirthLogic.TryFindParentQueenXenotype(pawn) ?? TryFindParentQueenXenotypeFromEgg(__instance);
|
||||
Either<XenotypeDef, CustomXenotype> droneDef = HiveBirthLogic.TryFindParentDroneXenotype(pawn) ?? TryFindParentDroneXenotypeFromEgg(__instance);
|
||||
|
||||
bool hasQueenParent = queenDef != null;
|
||||
bool hasDroneParent = droneDef != null;
|
||||
|
@ -47,6 +47,15 @@ namespace RJW_Genes
|
|||
} else
|
||||
{
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Ignoring Postfix Hediff_InsectEgg::ProcessHumanLikeInsectEgg - No Queen Parent - No Action.");
|
||||
|
||||
// Extra Debug for #56
|
||||
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
|
||||
{
|
||||
ModLog.Message($"Implanter was: ({__instance.implanter.genes.xenotypeName}|{__instance.implanter.genes.Xenotype}), Fertilizer was: ({__instance.father.genes.xenotypeName}|{__instance.father.genes.Xenotype})");
|
||||
ModLog.Message($"Implanter Xenotype From helper: {HiveUtility.TryGetQueenXenotype(__instance.implanter)} and has Queen {__instance.implanter.genes.HasGene(GeneDefOf.rjw_genes_queen)}");
|
||||
ModLog.Message($"Father Xenotype From helper: {HiveUtility.TryGetDroneXenotype(__instance.implanter)} and has Drone {__instance.father.genes.HasGene(GeneDefOf.rjw_genes_drone)}");
|
||||
CustomXenotype custom = __instance.implanter.genes.CustomXenotype;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,9 +68,9 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="egg">An Egg for which queens are looked up for</param>
|
||||
/// <returns>The relevant xenotypedef of a queen, or null.</returns>
|
||||
public static XenotypeDef TryFindParentQueenXenotypeFromEgg(Hediff_InsectEgg egg)
|
||||
public static Either<XenotypeDef, CustomXenotype> TryFindParentQueenXenotypeFromEgg(Hediff_InsectEgg egg)
|
||||
{
|
||||
XenotypeDef queenDef = null;
|
||||
Either<XenotypeDef, CustomXenotype> queenDef = null;
|
||||
if (egg == null)
|
||||
return null;
|
||||
|
||||
|
@ -85,9 +94,9 @@ namespace RJW_Genes
|
|||
/// </summary>
|
||||
/// <param name="egg">An Egg for which drones are looked up for</param>
|
||||
/// <returns>The relevant xenotypedef of a drone, or null.</returns>
|
||||
public static XenotypeDef TryFindParentDroneXenotypeFromEgg(Hediff_InsectEgg egg)
|
||||
public static Either<XenotypeDef, CustomXenotype> TryFindParentDroneXenotypeFromEgg(Hediff_InsectEgg egg)
|
||||
{
|
||||
XenotypeDef droneDef = null;
|
||||
Either<XenotypeDef, CustomXenotype> droneDef = null;
|
||||
if (egg == null)
|
||||
return null;
|
||||
|
||||
|
|
|
@ -9,9 +9,6 @@ namespace RJW_Genes
|
|||
{
|
||||
public class LifeForceEmpathExtension : DefModExtension
|
||||
{
|
||||
public int tickInterval;
|
||||
public int empathDistance;
|
||||
|
||||
public float aheagoIncrement;
|
||||
public float satisfactionIncrement;
|
||||
public float frustratedDecrement;
|
||||
|
|
|
@ -85,7 +85,7 @@ namespace RJW_Genes
|
|||
if(colonyJoiners.Contains(pawn))
|
||||
{
|
||||
RecruitUtility.Recruit(pawn, Faction.OfPlayer);
|
||||
Find.LetterStack.ReceiveLetter("Guest Joins", string.Format("{0} enjoys it here and has decided to stay", xxx.get_pawnname(pawn)), LetterDefOf.PositiveEvent, pawn, null, null, null, null);
|
||||
Find.LetterStack.ReceiveLetter("rjw_genes_succubus_joins_letter_label".Translate(), string.Format("rjw_genes_succubus_joins_letter_description".Translate(), xxx.get_pawnname(pawn)), LetterDefOf.PositiveEvent, pawn, null, null, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace RJW_Genes
|
|||
float frustratedDecrement = -0.01f;
|
||||
|
||||
|
||||
Gene_LifeForce_Empath() : base()
|
||||
public Gene_LifeForce_Empath() : base()
|
||||
{
|
||||
SetValuesFromExtension();
|
||||
}
|
||||
|
@ -29,8 +29,8 @@ namespace RJW_Genes
|
|||
{
|
||||
LifeForceEmpathExtension empathExt = GeneDefOf.rjw_genes_lifeforce_empath.GetModExtension<LifeForceEmpathExtension>();
|
||||
|
||||
tickInterval = empathExt?.tickInterval ?? TICK_INTERVAL_FALLBACK;
|
||||
empathDistance = empathExt?.empathDistance ?? EMPATH_DISTANCE_FALLBACK;
|
||||
tickInterval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_lifeforce_empath, TICK_INTERVAL_FALLBACK);
|
||||
empathDistance = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_lifeforce_empath, EMPATH_DISTANCE_FALLBACK);
|
||||
|
||||
aheagoIncrement = empathExt?.aheagoIncrement ?? AHEAGO_FALLBACK;
|
||||
satisfiedIncrement = empathExt?.satisfactionIncrement ?? SATISFIED_FALLBACK;
|
||||
|
|
|
@ -11,8 +11,8 @@ namespace RJW_Genes
|
|||
// This means that adding +.25 equals 1.5h of Libido.
|
||||
// Tick Speed is hence set to 0.5h
|
||||
|
||||
const int APHRODISIAC_DISTANCE = 25;
|
||||
const int TICK_INTERVAL = 60000 / 48 ; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day.
|
||||
public const int APHRODISIAC_DISTANCE_FALLBACK = 25;
|
||||
const int TICK_INTERVAL_FALLBACK = 60000 / 48 ; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day.
|
||||
|
||||
const float SEXFREQ_THRESHOLD = 0.5f;
|
||||
|
||||
|
@ -20,7 +20,10 @@ namespace RJW_Genes
|
|||
public override void Tick()
|
||||
{
|
||||
base.Tick();
|
||||
if (this.pawn.IsHashIntervalTick(TICK_INTERVAL) && this.pawn.Map != null)
|
||||
|
||||
int tickInterval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_aphrodisiac_pheromones, TICK_INTERVAL_FALLBACK);
|
||||
|
||||
if (this.pawn.IsHashIntervalTick(tickInterval) && this.pawn.Map != null)
|
||||
{
|
||||
// Only spread pheromones if sexdrive above 1
|
||||
float sexfrequency = this.pawn.GetStatValue(StatDef.Named("SexFrequency"));
|
||||
|
@ -57,7 +60,8 @@ namespace RJW_Genes
|
|||
|
||||
// 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))
|
||||
int effectDistance = ModExtensionHelper.GetDistanceFromModExtension(GeneDefOf.rjw_genes_aphrodisiac_pheromones, APHRODISIAC_DISTANCE_FALLBACK);
|
||||
if (pos.DistanceTo(pawn.Position) < effectDistance && GenSight.LineOfSight(pos, pawn.Position, pawn.Map))
|
||||
{
|
||||
yield return pawn;
|
||||
}
|
||||
|
@ -79,6 +83,8 @@ namespace RJW_Genes
|
|||
aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn);
|
||||
aphrodisiac.Severity = 0.5f;
|
||||
pawn.health.AddHediff(aphrodisiac);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
using RimWorld;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Genes
|
||||
{
|
||||
public class ThoughtWorker_Aphrodisiac_Pheromones_Social : ThoughtWorker
|
||||
{
|
||||
protected override ThoughtState CurrentSocialStateInternal(Pawn pawn, Pawn other)
|
||||
{
|
||||
// Return for trivial errors
|
||||
if (pawn == null || other == null || pawn == other)
|
||||
return (ThoughtState)false;
|
||||
// Check for position-existance
|
||||
if (pawn.Position == null || other.Position == null || pawn.Map == null || other.Map == null)
|
||||
return (ThoughtState)false;
|
||||
// Do nothing if pawn is carried
|
||||
if (pawn.CarriedBy != null)
|
||||
return (ThoughtState)false;
|
||||
// Do nothing if Pawn is Baby or Child (#25)
|
||||
if (!pawn.ageTracker.Adult)
|
||||
return (ThoughtState)false;
|
||||
// Only check if they are spawned humans
|
||||
if (!pawn.Spawned || !other.Spawned)
|
||||
return (ThoughtState)false;
|
||||
if (!pawn.RaceProps.Humanlike)
|
||||
return (ThoughtState)false;
|
||||
if (!other.RaceProps.Humanlike)
|
||||
return (ThoughtState)false;
|
||||
|
||||
if (!RelationsUtility.PawnsKnowEachOther(pawn, other))
|
||||
return (ThoughtState)false;
|
||||
// If the pawn is not on Map (e.g. caravan), no mali
|
||||
if (!HiveUtility.PawnIsOnHomeMap(pawn))
|
||||
return (ThoughtState)false;
|
||||
|
||||
|
||||
// Do nothing for pawns that also have pheromones
|
||||
if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
|
||||
|
||||
return (ThoughtState)false;
|
||||
|
||||
// Actual Logic:
|
||||
// Pawn qualifies in right distance and needs line of sight.
|
||||
var pos = other.Position;
|
||||
int effectDistance = ModExtensionHelper.GetDistanceFromModExtension(GeneDefOf.rjw_genes_aphrodisiac_pheromones, Gene_Aphrodisiac_Pheromones.APHRODISIAC_DISTANCE_FALLBACK);
|
||||
if (pos.DistanceTo(pawn.Position) < effectDistance && GenSight.LineOfSight(pos, pawn.Position, pawn.Map))
|
||||
{
|
||||
return (ThoughtState)true;
|
||||
}
|
||||
|
||||
return (ThoughtState)false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Verse;
|
||||
|
||||
|
@ -14,9 +15,8 @@ namespace RJW_Genes
|
|||
{
|
||||
ModLog.Message($"{HiveUtility.getQueenXenotypes().EnumerableCount()} Queen-Xenotypes ({string.Join(",", HiveUtility.getQueenXenotypes().Select(t => t.defName))})");
|
||||
ModLog.Message($"{HiveUtility.getDroneXenotypes().EnumerableCount()} Drone-Xenotypes ({string.Join(",", HiveUtility.getDroneXenotypes().Select(t => t.defName))})");
|
||||
ModLog.Message($"Found {HiveUtility.GetQueenWorkerMappings().Count} Queen-Worker Mappings ({string.Join(",", HiveUtility.GetQueenWorkerMappings().Keys.Select(t => t.defName))} + Default) ");
|
||||
|
||||
|
||||
ModLog.Message($"Found {HiveUtility.GetQueenWorkerMappings().Count} Queen-Worker Mappings ({string.Join(",", HiveUtility.GetQueenWorkerMappings().Keys.Select(t => t))} + Default) ");
|
||||
IEnumerable<HiveOffspringChanceDef> offspringChanceDefs = DefDatabase<HiveOffspringChanceDef>.AllDefs;
|
||||
IEnumerable<HiveOffspringChanceDef> faultOffspringDefs = offspringChanceDefs.Where(t => t.queenChance + t.workerChance + t.workerChance > 1.02 || t.queenChance + t.workerChance + t.workerChance < 0.98 );
|
||||
ModLog.Message($"Found {offspringChanceDefs.Count()} OffspringChanceDefs, of which {faultOffspringDefs.Count()} had faulty chances ({string.Join(",", faultOffspringDefs.Select(t => t.defName))})");
|
||||
|
|
|
@ -39,7 +39,11 @@
|
|||
<Compile Include="Animal_Inheritance\Settings\RJW_BGSSettings.cs" />
|
||||
<Compile Include="Animal_Inheritance\Settings\RJW_BGSSettingsController.cs" />
|
||||
<Compile Include="Animal_Inheritance\Defs\BestialityGeneInheritanceDef.cs" />
|
||||
<Compile Include="Common\Defs\DistanceExtension.cs" />
|
||||
<Compile Include="Common\Defs\ModExtensionHelper.cs" />
|
||||
<Compile Include="Common\Either.cs" />
|
||||
<Compile Include="Common\ModLog.cs" />
|
||||
<Compile Include="Common\Defs\TickIntervalExtension.cs" />
|
||||
<Compile Include="GeneDefOf.cs" />
|
||||
<Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
|
||||
<Compile Include="Genes\Breeding\PatchMechBirth.cs" />
|
||||
|
@ -149,6 +153,7 @@
|
|||
<Compile Include="Genes\Special\Patches\Patch_AgeDrain.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_HormonalSaliva.cs" />
|
||||
<Compile Include="Genes\Special\Patches\Patch_OrgasmMytosis.cs" />
|
||||
<Compile Include="Genes\Special\Thoughts\ThoughtWorker_Aphrodisiac_Pheromones_Social.cs" />
|
||||
<Compile Include="Interactions\SuccubusTailjob\CompAbility_SexInteractionRequirements.cs" />
|
||||
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_PussyHeal.cs" />
|
||||
<Compile Include="Genes\Life_Force\Abilities\CompProperties_AbilityLifeForceCost.cs" />
|
||||
|
@ -206,6 +211,7 @@
|
|||
</Reference>
|
||||
<Reference Include="RJWSexperience">
|
||||
<HintPath>..\..\RJW-Sexperience-1.1.4.0\1.4\Assemblies\RJWSexperience.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="UnityEngine">
|
||||
|
|
|
@ -13,6 +13,8 @@ namespace RJW_Genes
|
|||
public static readonly ThoughtDef rjw_genes_cock_eaten;
|
||||
public static readonly ThoughtDef rjw_genes_seduced;
|
||||
|
||||
public static readonly ThoughtDef rjw_genes_pheromone_carrier_nearby;
|
||||
|
||||
//Others with same names but other defs than in genedefof
|
||||
public static readonly InteractionDef rjw_genes_flirt;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue