diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0e2154e..1f3d4d5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,4 +23,6 @@ But please consider also the following: - Many of the Icons I made (e.g. Genitalia Types) include things from [OpenMoji](https://openmoji.org/) which is awesome - Placeholder, Rapist, Necrophile come from [RJW-Sexperience Ideology](https://gitgud.io/amevarashi/rjw-sexperience-ideology/) -- Hypersexual & Zoophile comes from [RJW](https://gitgud.io/Ed86/rjw) \ No newline at end of file +- Hypersexual & Zoophile comes from [RJW](https://gitgud.io/Ed86/rjw) +- Cockeater & Naked Prowess come from *WasMachenSachen*. +- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur \ No newline at end of file diff --git a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml index 71ad638..82d5bd8 100644 --- a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml +++ b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml @@ -4,7 +4,7 @@ rjw_genes_naked_prowess Enhance the strength and resilience of your naked body with fertilin. - Things/Mote/Heart + Genes/Icons/rjw_naked_prowess Things/Mote/Heart CastAbilityOnThing False diff --git a/Common/Defs/AbilityDefs/Ability_Seduce.xml b/Common/Defs/AbilityDefs/Ability_Seduce.xml index fb87fea..3310595 100644 --- a/Common/Defs/AbilityDefs/Ability_Seduce.xml +++ b/Common/Defs/AbilityDefs/Ability_Seduce.xml @@ -4,7 +4,7 @@ rjw_genes_seduce Seduce the target to approach the caster. - Things/Mote/Heart + Genes/Icons/seduce True true true diff --git a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml index fe67321..cc70eae 100644 --- a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml +++ b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml @@ -15,7 +15,7 @@ true true A reserve of biological strength which can be gained and spent in a variety of ways. \n\nFertilin can be increased by absorbing cum, typically through oral sex or stored cum. \n\nIf fertilin reaches zero, {PAWN_nameDef} will become very unhappy and may try to obtain some forcefully. - UI/Icons/Genes/Gene_Hemogenic + Genes/Icons/FertilinAlt 0 rjw_genes_fertilin -2 @@ -39,7 +39,7 @@ Carriers lose an additional 15 fertilin per day from biological entropy. fertilin RJW_Genes.Gene_LifeForceDrain - UI/Icons/Genes/Gene_HemogenDrain + Genes/Icons/FertilinDrainAlt rjw_genes_lifeforce 0.15 rjw_genes_fertilin @@ -53,7 +53,7 @@ pussyhealer Carriers of this gene are able use vaginal sex to tend to other's wounds. - Things/Mote/Heart + Genes/Icons/Healpussy rjw_genes_lifeforce 9 rjw_genes_fertilin @@ -79,7 +79,7 @@ cockeater Carriers of this gene are able eat cocks to restore their fertilin supply. Cocks are consumed during that process. - Things/Mote/Heart + Genes/Icons/cockeater rjw_genes_lifeforce 11 rjw_genes_fertilin @@ -130,7 +130,7 @@ seduction Carriers of this gene are able to seduce a pawn into having sex with them. - Things/Mote/Heart + Genes/Icons/seduce rjw_genes_lifeforce 13 rjw_genes_fertilin @@ -155,7 +155,7 @@ rjw_genes_naked_prowess Carriers of this gene are able to temporarily increase their strength and resilience, while they are naked. - Things/Mote/Heart + Genes/Icons/rjw_naked_prowess rjw_genes_lifeforce 13 rjw_genes_fertilin @@ -173,7 +173,7 @@ rjw_genes_cum_eater Carriers of this gene are able to absorb fertilin through eating cum. This includes oral sex, eating cum for food or sucking out cumflated pawns. - Things/Mote/Heart + Genes/Icons/cumeater rjw_genes_lifeforce 1 rjw_genes_fertilin @@ -181,27 +181,16 @@ - rjw_genes_vaginal_absorber - - Carriers of this gene are able to absorb the fertilin inside sperm through their vagina. - Things/Mote/Heart + rjw_genes_fertilin_absorber + + Carriers of this gene are able to absorb the fertilin inside sperm through their vagina and anus. + Genes/Icons/Vaginal_cum_absorption rjw_genes_lifeforce 2 rjw_genes_fertilin 1 - - rjw_genes_anal_absorber - - Carriers of this gene are able to absorb the fertilin inside sperm through their anus. - Things/Mote/Heart - rjw_genes_lifeforce - 3 - rjw_genes_fertilin - 1 - - rjw_genes_drainer diff --git a/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml b/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml index 9942abf..38dfa28 100644 --- a/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml +++ b/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml @@ -31,8 +31,7 @@
  • rjw_genes_demonic_genitalia
  • rjw_genes_cum_eater
  • -
  • rjw_genes_vaginal_absorber
  • -
  • rjw_genes_anal_absorber
  • +
  • rjw_genes_fertilin_absorber
  • rjw_genes_paralysingkiss
  • rjw_genes_seduce
  • @@ -89,7 +88,7 @@
  • UVSensitivity_Intense
  • AptitudeStrong_Intellectual
  • Ears_Pointed
  • -
  • Headbone_MiniHorns
  • +
  • Headbone_CenterHorn
  • Skin_InkBlack
  • @@ -114,7 +113,6 @@
  • KillThirst
  • Robust
  • Pain_Reduced
  • -
  • rjw_genes_rapist
  • Beauty_Ugly
  • Hair_BaldOnly
  • Hair_ShortOnly
  • @@ -125,6 +123,7 @@
  • AptitudePoor_Crafting
  • AptitudePoor_Artistic
  • Unstoppable
  • +
  • rjw_genes_rapist
  • rjw_genes_female_only
  • rjw_genes_lifeforce
  • rjw_genes_lifeforce_drain
  • diff --git a/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml b/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml new file mode 100644 index 0000000..3d1048c --- /dev/null +++ b/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml @@ -0,0 +1,43 @@ + + + + + + rjw_genes_aphrodisiac_pheromone + HediffWithComps + + sex drive increasing due to smelling aphrodisiac pheromones. + (1,0,0.5) + 1.0 + +
  • + -4.0 +
  • +
    + +
  • + + + 1.25 + +
  • +
  • + 0.35 + + + + 1.8 + +
  • +
  • + 0.9 + + + + 2.5 + +
  • +
    +
    + +
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml index fd56ec9..d8ee3db 100644 --- a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml +++ b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml @@ -1,26 +1,5 @@  - - rjw_genes_aphrodisiac_pheromone - HediffWithComps - - sex drive increasing due to smelling aphrodisiac pheromones. - (1,0,0.5) - 1.0 - -
  • - -24.0 -
  • -
    - -
  • - true - - 2 - -
  • -
    -
    rjw_genes_fertilin_lost diff --git a/Common/Patches/ThingDefs/RJW_Used_Condoms.xml b/Common/Patches/ThingDefs/RJW_Used_Condoms.xml new file mode 100644 index 0000000..d04bcb1 --- /dev/null +++ b/Common/Patches/ThingDefs/RJW_Used_Condoms.xml @@ -0,0 +1,19 @@ + + + + + +
  • RimJobWorld
  • +
    + + /Defs/ThingDef[defName="UsedCondom"]/ingestible + + +
  • + 1 +
  • +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/Common/Patches/Xenotypes/FromRJWGenes/Patch_Sexperience_SexSkill.xml b/Common/Patches/Xenotypes/FromRJWGenes/Patch_Sexperience_SexSkill.xml new file mode 100644 index 0000000..419eeb2 --- /dev/null +++ b/Common/Patches/Xenotypes/FromRJWGenes/Patch_Sexperience_SexSkill.xml @@ -0,0 +1,30 @@ + + + + +
  • + +
  • RJW Sexperience
  • + + + Defs/XenotypeDef[defName="rjw_genes_succubus"]/genes + +
  • AptitudeRemarkable_Sex
  • +
    +
    + +
  • + +
  • RJW Sexperience
  • + + + Defs/XenotypeDef[defName="rjw_genes_incubus"]/genes + +
  • AptitudeRemarkable_Sex
  • +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/Common/Textures/Genes/Icons/FertilinAlt.png b/Common/Textures/Genes/Icons/FertilinAlt.png new file mode 100644 index 0000000..f89bc2d Binary files /dev/null and b/Common/Textures/Genes/Icons/FertilinAlt.png differ diff --git a/Common/Textures/Genes/Icons/FertilinDrainAlt.png b/Common/Textures/Genes/Icons/FertilinDrainAlt.png new file mode 100644 index 0000000..adb198b Binary files /dev/null and b/Common/Textures/Genes/Icons/FertilinDrainAlt.png differ diff --git a/Common/Textures/Genes/Icons/Healpussy.png b/Common/Textures/Genes/Icons/Healpussy.png new file mode 100644 index 0000000..46a11a3 Binary files /dev/null and b/Common/Textures/Genes/Icons/Healpussy.png differ diff --git a/Common/Textures/Genes/Icons/Vaginal_cum_absorption.png b/Common/Textures/Genes/Icons/Vaginal_cum_absorption.png new file mode 100644 index 0000000..4148bde Binary files /dev/null and b/Common/Textures/Genes/Icons/Vaginal_cum_absorption.png differ diff --git a/Common/Textures/Genes/Icons/cockeater.png b/Common/Textures/Genes/Icons/cockeater.png new file mode 100644 index 0000000..deab6ef Binary files /dev/null and b/Common/Textures/Genes/Icons/cockeater.png differ diff --git a/Common/Textures/Genes/Icons/cumeater.png b/Common/Textures/Genes/Icons/cumeater.png new file mode 100644 index 0000000..3150a18 Binary files /dev/null and b/Common/Textures/Genes/Icons/cumeater.png differ diff --git a/Common/Textures/Genes/Icons/rjw_naked_prowess.png b/Common/Textures/Genes/Icons/rjw_naked_prowess.png new file mode 100644 index 0000000..468fc60 Binary files /dev/null and b/Common/Textures/Genes/Icons/rjw_naked_prowess.png differ diff --git a/Common/Textures/Genes/Icons/seduce.png b/Common/Textures/Genes/Icons/seduce.png new file mode 100644 index 0000000..635132c Binary files /dev/null and b/Common/Textures/Genes/Icons/seduce.png differ diff --git a/Common/Textures/Genes/Icons/vagina_base.png b/Common/Textures/Genes/Icons/vagina_base.png new file mode 100644 index 0000000..3f300a0 Binary files /dev/null and b/Common/Textures/Genes/Icons/vagina_base.png differ diff --git a/KNOWN_BUGS.md b/KNOWN_BUGS.md index a5efec9..ebedd72 100644 --- a/KNOWN_BUGS.md +++ b/KNOWN_BUGS.md @@ -15,6 +15,16 @@ Things to consider: There also is a known mod-conflict with `rjw Animations patch` (See #18), so make sure you use up-to-date versions of everything. +## Seduce aborts on sex-start! + +Error: You have a succubus using seduce on a hostile pawn, they start sex but immediately abort. + +Things to Consider: + +1. Is your Succubus drafted? If not, they might have a flight-mode set and are scared of the enemy. + +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. + ## Random Vaginas for Goblins Error: Pawns have different genitalia than expected, e.g. if the "no vagina" gene is specified there are pawns with vaginas AND a penis. diff --git a/README.md b/README.md index ade08b3..d138b8a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This mod adds genes related and based on RJW to Rimworld. - Extra Genitalia (and a Futa Attempt) - Most RJW Traits, Cumflation Immunity, Elasticity - Cum-Amount Changes, Transfer Nutrition Boosts -- Mech Breeding / Insect Breeding Support +- Mech Breeding / Insect Breeding Additions - Human-Animal Gene Inheritance merged from [Shabakur](https://github.com/Shabakur/RJW_Animal_Gene_Inheritance) - Succubi, Incubi & Cumazones that utilize Fertilin, similar to Hemogen @@ -32,4 +32,5 @@ One of the main motivations was to have genes being added to the xenotypes that 1. Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience). 2. Should not be used with the original RJW_Animal_Gene_Inheritance anymore. -3. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now. \ No newline at end of file +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. \ No newline at end of file diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index f8a84f1..e4af81f 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -82,8 +82,7 @@ namespace RJW_Genes public static readonly GeneDef rjw_genes_pussyhealing; public static readonly GeneDef rjw_genes_lifeforce_drain; public static readonly GeneDef rjw_genes_cum_eater; - public static readonly GeneDef rjw_genes_vaginal_absorber; - public static readonly GeneDef rjw_genes_anal_absorber; + public static readonly GeneDef rjw_genes_fertilin_absorber; public static readonly GeneDef rjw_genes_drainer; public static readonly GeneDef rjw_genes_seduce; public static readonly GeneDef rjw_genes_paralysingkiss; diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs index cea77f2..65121e9 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -13,6 +14,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoAnus()) + { + return; + } + if (additional_anus == null) { CreateAndAddAnus(); @@ -23,6 +31,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoAnus()) + { + return; + } + if (additional_anus == null) { CreateAndAddAnus(); @@ -53,5 +68,15 @@ namespace RJW_Genes pawn.health.AddHediff(additional_anus, partBPR); } + internal bool HasAlreadyTwoAnus() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_anus(t)); + + return possible_breasts.Count() >= 2; + } } } diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs index 8829854..84fb107 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -13,6 +14,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoBreasts()) + { + return; + } + // Tits are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_breasts == null) { @@ -24,6 +32,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoBreasts()) + { + return; + } + // Tits are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_breasts == null) { @@ -55,5 +70,16 @@ namespace RJW_Genes pawn.health.AddHediff(additional_breasts, partBPR); } + internal bool HasAlreadyTwoBreasts() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => t.def.defName.Contains("breast")); + + return possible_breasts.Count() >= 2; + } + } } diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs index aee18c7..7b8fcb4 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -13,6 +14,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoPenis()) + { + return; + } + // Penis are only added for male pawns! if (GenderUtility.IsMale(pawn) && additional_penis == null) { @@ -24,6 +32,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoPenis()) + { + return; + } + // Penis are only added for male pawns! if (GenderUtility.IsMale(pawn) && additional_penis == null) { @@ -55,5 +70,17 @@ namespace RJW_Genes pawn.health.AddHediff(additional_penis, partBPR); } + + internal bool HasAlreadyTwoPenis() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_penis(t)); + + return possible_breasts.Count() >= 2; + } + } } diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs index 9940de0..fa02b87 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -18,6 +19,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoVaginas()) + { + return; + } + // Vaginas are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_vagina == null) { @@ -29,6 +37,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoVaginas()) + { + return; + } + // Vaginas are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_vagina == null) { @@ -60,5 +75,15 @@ namespace RJW_Genes pawn.health.AddHediff(additional_vagina, partBPR); } + internal bool HasAlreadyTwoVaginas() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_vagina(t)); + + return possible_breasts.Count() >= 2; + } } } diff --git a/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs b/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs index d209423..4b8b3a7 100644 --- a/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs +++ b/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs @@ -47,7 +47,7 @@ namespace RJW_Genes if (cachedLifeForceGene.Resource.Value <= cachedLifeForceGene.Resource.MinLevelForAlert && this.Pawn.IsHashIntervalTick(2500) && Rand.Chance(0.03f)) //~50% chance each day for mental break { if (this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_cum_eater) - || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_drainer)) + || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_drainer)) { //TODO: use mentalstatedef instead of mentalbreakdef MentalBreakDef randomrape = GeneDefOf.rjw_genes_lifeforce_randomrape; diff --git a/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs b/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs index 74cb0bb..6ea0a62 100644 --- a/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs +++ b/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs @@ -180,24 +180,17 @@ namespace RJW_Genes { absorb_factor += 1f; } - else if (props.sexType == xxx.rjwSextype.Vaginal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_vaginal_absorber)) + else if (props.sexType == xxx.rjwSextype.Vaginal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber)) { absorb_factor += 1f; } - else if (props.sexType == xxx.rjwSextype.Anal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_anal_absorber)) + else if (props.sexType == xxx.rjwSextype.Anal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber)) { absorb_factor += 1f; } - else if (props.sexType == xxx.rjwSextype.DoublePenetration) + else if (props.sexType == xxx.rjwSextype.DoublePenetration && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber)) { - if (GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_vaginal_absorber)) - { - absorb_factor += 0.5f; - } - if (GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_anal_absorber)) - { - absorb_factor += 0.5f; - } + absorb_factor += 1f; } else if (props.sexType == xxx.rjwSextype.Scissoring || props.sexType == xxx.rjwSextype.Cunnilingus) { diff --git a/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs b/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs index 6bb3c92..b4b327c 100644 --- a/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs +++ b/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs @@ -58,8 +58,7 @@ namespace RJW_Genes private static List FertilinSourceGenes = new List() { GeneDefOf.rjw_genes_drainer, GeneDefOf.rjw_genes_cum_eater, - GeneDefOf.rjw_genes_vaginal_absorber, - GeneDefOf.rjw_genes_anal_absorber, + GeneDefOf.rjw_genes_fertilin_absorber, GeneDefOf.rjw_genes_cockeater }; diff --git a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs index 46f25d2..e3628dc 100644 --- a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs +++ b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs @@ -5,21 +5,30 @@ using RimWorld; namespace RJW_Genes { public class Gene_Aphrodisiac_Pheromones : Gene - { + { + + // Default XML Setting is that it looses 4 Severity per day - so a "fully libido" gives 6h boost. + // 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. + + const float SEXFREQ_THRESHOLD = 0.5f; // Summary: once every one hour check for all pawns nearby and in line of sight (same room) and add/renew a hediff which lasts for 1 hour. public override void Tick() { base.Tick(); - if (this.pawn.IsHashIntervalTick(2500) && this.pawn.Map != null) + if (this.pawn.IsHashIntervalTick(TICK_INTERVAL) && this.pawn.Map != null) { // Only spread pheromones if sexdrive above 1 float sexfrequency = this.pawn.GetStatValue(StatDef.Named("SexFrequency")); - if(sexfrequency > 1f) + if(sexfrequency > SEXFREQ_THRESHOLD) { foreach (Pawn pawn in this.AffectedPawns(this.pawn.Position, this.pawn.Map)) { - this.InduceAphrodisiac(pawn, sexfrequency); + this.InduceAphrodisiac(pawn); } } } @@ -31,7 +40,7 @@ namespace RJW_Genes foreach (Pawn pawn in map.mapPawns.AllPawns) { if (pawn != null && this.pawn != null && pawn != this.pawn - && pos.DistanceTo(pawn.Position) < 5 && GenSight.LineOfSight(pos, pawn.Position, pawn.Map) + && pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map) && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones)) { yield return pawn; @@ -41,33 +50,21 @@ namespace RJW_Genes yield break; } - // Applies or renews a hediff which increases sexdrive for 6 hours - private void InduceAphrodisiac(Pawn pawn, float sexfrequency) + private void InduceAphrodisiac(Pawn pawn) { - Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone); + Hediff aphrodisiac = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone); - if (hediff != null) + if (aphrodisiac != null) { - hediff.Severity = 1f; + aphrodisiac.Severity += 0.25f; } else { - Hediff aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn); - foreach (StatModifier stat in aphrodisiac.CurStage.statFactors) - { - if (stat.stat.defName == "SexFrequency") - { - stat.value = ModifySexfrequency(pawn, sexfrequency); - pawn.health.AddHediff(aphrodisiac); - } - } + aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn); + aphrodisiac.Severity = 0.5f; + pawn.health.AddHediff(aphrodisiac); } } - // Function to modify aphrodisiac strength, currently has no effect, but provides an easy hook for other modders and patches. - public float ModifySexfrequency(Pawn pawn, float sexfrequency) - { - return sexfrequency; - } } } diff --git a/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs b/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs index 1825550..8e993aa 100644 --- a/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs +++ b/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs @@ -35,12 +35,9 @@ namespace RJW_Genes.Interactions yield return new Weighted(weight, LewdablePartKind.Beak); } - if (pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber)) + if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber)) { yield return new Weighted(weight, LewdablePartKind.Vagina); - } - if (pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber)) - { yield return new Weighted(weight, LewdablePartKind.Anus); } } @@ -64,12 +61,10 @@ namespace RJW_Genes.Interactions } yield return new Weighted(weight, LewdablePartKind.Mouth); yield return new Weighted(weight, LewdablePartKind.Beak); - if (pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber)) + + if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber)) { yield return new Weighted(weight, LewdablePartKind.Vagina); - } - if (pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber)) - { yield return new Weighted(weight, LewdablePartKind.Anus); } } diff --git a/TODOS.md b/TODOS.md index b19f8e1..66083a5 100644 --- a/TODOS.md +++ b/TODOS.md @@ -3,6 +3,12 @@ I have many ideas but not too much time / knowledge of Rimworld or Modding. So any help is very appreciated, even if it is just pointing me to existing similar projects. +## Additions to existing things + +**Cumeater** - Look for edible cum-items when low on Fertilin + +**Incubi** - Add a forced striptease Ability + ## Planned Genes **Adjustable Cock-Size** like e.g. artificial genitalia have