diff --git a/CHANGELOG.md b/CHANGELOG.md index 26387d8..8bc0df6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,37 @@ +# 2.2.0 + +**Genetic Diseases** + +This update introduces genetic diseases that are shared on sex. +Infection is handled when sex finishes, so a coitus-interruptus will not result in infections. + +Infections can be + +- Turned off entirely +- Spread only on penetrative sex +- Chances are adjustable per XML per Gene + +By turning their spread off, you effectively have a set of normal negative genes. + +*Why???* + +Most of the genes so far were positive or neutral, +so I got some fair requests to introduce negative genes to keep xenotypes balanced. +I know that this is some overlap with the STD mod, but well ... you are free to turn things off? + +**Additions** + +- Passive Gene: *Genetic Disease Immunity* - cannot get infected by any genetic diseases, and won't be affected by some other genes (see relevant genes) +- Disease Gene: Vulnerability. Pawn is likelier to be raped +- Disease Gene: Infectious Hypersexuality +- Disease Gene: Infectious Homosexuality & Bisexuality +- Disease Gene: Fluctual Sexual Need. (Configurable) Chance to reset sex-need to near-zero and gain a bit of rest-need. + +**Internal** + +- GenderFluid-Gene now uses a generalized `TickBasedChanceExtension` over its unique special `GenderFluidExtension` +- Introduced a `ModLog.Debug` Function that checks for the settings before printing - trying to spread it over the whole project. + # 2.1.0 **Additions**: diff --git a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml index e4fead1..e5c8723 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml @@ -1,49 +1,189 @@ - - - rjw_genes_diseases - rjw_genes_genetic_disease_immunity - - 1 - - - This gene makes the pawn immune against genetic STDs and other genes that imply negative side-effects. - 2 - -1 - UI/Icons/ColonistBar/Idle -
  • - Genes/Icons/RJW_Genes_Endogene_Background - Genes/Icons/RJW_Genes_Xenogene_Background -
  • -
    - - - rjw_genes_diseases - rjw_genes_minor_vulnerability - - RJW_Genes.DiseaseGene - - - This gene makes the pawn more vulnerable, and a more attractive target for rape. - 2 - -1 - UI/Icons/ColonistBar/Idle - 3 - + + rjw_genes_diseases + false
  • Genes/Icons/RJW_Genes_Endogene_Background Genes/Icons/RJW_Genes_Xenogene_Background
  • - -
  • - 1.0 + + + + + rjw_genes_diseases + rjw_genes_genetic_disease_immunity + 1 + 0.95 + + This gene makes the pawn immune against genetic STDs and some other genes that + imply negative side-effects. + 1 + -1 + UI/Icons/Rituals/TrialDefend + +
  • + Genes/Icons/RJW_Genes_Endogene_Background + Genes/Icons/RJW_Genes_Xenogene_Background
  • -
    +
    + + + + rjw_genes_minor_vulnerability + + This gene makes the pawn a bit more vulnerable, and a slightly more attractive + target for rape. + 1 + 1 + 0.85 + UI/Icons/ColonistBar/Idle + 5 + + + 0.15 + + + +
  • RJW_Genes_Vulnerability
  • +
    + + +
  • + 0.05 +
  • +
    +
    + + + rjw_genes_major_vulnerability + + This gene makes the pawn more vulnerable, and a more attractive target for + rape. + 2 + 1 + UI/Icons/ColonistBar/Idle + 6 + + +
  • RJW_Genes_Vulnerability
  • +
    + + + 0.3 + + + +
  • + 0.03 +
  • +
    +
    + + + rjw_genes_infectious_hypersexuality + + This gene makes the pawn hypersexual, and has a chance to spread on + intercourse. + Genes/Icons/Hypersexual + 2 + 2 + 7 + +
  • rjw_genes_hypersexuality_trait_giver
  • +
    + + +
  • + Nymphomaniac +
  • +
    + + +
  • + 0.05 +
  • +
    +
    + + + rjw_genes_infectious_bisexuality + + This gene makes the pawn bisexual, and has a chance to spread on intercourse. + UI\Ideoligions\Universal\RoundC + 1 + 0 + 8 + + +
  • rjw_genes_bisexuality_trait_giver
  • +
  • rjw_genes_sexual_orientation
  • +
    + + +
  • + Bisexual +
  • +
    + + +
  • + 0.1 +
  • +
    +
    + + + rjw_genes_infectious_homosexuality + + This gene makes the pawn homosexual, and has a chance to spread on intercourse. + UI\Ideoligions\Universal\RoundC + 1 + 0 + 9 + + +
  • rjw_genes_homosexuality_trait_giver
  • +
  • rjw_genes_sexual_orientation
  • +
    + + +
  • + Gay +
  • +
    + + +
  • + 0.1 +
  • +
    +
    + + + rjw_genes_fluctual_sexual_needs + + Carriers of this genetic disease have a chance to suddenly require sex, gaining a bit of energy to find quick relief. + UI/Icons/ColonistBar/Idle + 1 + 2 + 11 + RJW_Genes.Gene_FluctualSexualNeed + +
  • + 0.1 +
  • +
  • + + 30000 + 0.15 +
  • +
    +
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml index 8a9d018..7c305d4 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml @@ -14,6 +14,10 @@ + +
  • rjw_genes_hypersexuality_trait_giver
  • +
    + false
  • + +
  • rjw_genes_homosexuality_trait_giver
  • rjw_genes_sexual_orientation
  • @@ -138,7 +144,8 @@ -
  • rjw_genes_sexual_orientation
  • +
  • rjw_genes_sexual_orientation
  • +
  • rjw_genes_bisexuality_trait_giver
  • false diff --git a/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml b/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml index 12ba760..82a302c 100644 --- a/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml +++ b/Common/Defs/GeneDefs/GeneDefs_SpecifiedGender.xml @@ -65,10 +65,10 @@ Genes/Icons/RJW_Genes_Endogene_Background Genes/Icons/RJW_Genes_Xenogene_Background -
  • +
  • - 120000 - 0.25 + 120000 + 0.25
  • diff --git a/README.md b/README.md index 697bcdc..a09fef6 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ This mod adds genes related and based on RJW to Rimworld. - Sexual Vampires that need Cum, Cocks or some other sources. - Mech Breeding Additions & Orgasmic Mytosis - Human-Animal Gene Inheritance merged from [Shabakur](https://github.com/Shabakur/RJW_Animal_Gene_Inheritance) +- Genetic Diseases that spread on Intercourse - Patches for some popular / common Xenotypes from other Mods. *You might not see all of them. Many genes just show up if other mods are loaded*. diff --git a/Source/Common/Defs/TickBasedChanceExtension.cs b/Source/Common/Defs/TickBasedChanceExtension.cs new file mode 100644 index 0000000..1a8feca --- /dev/null +++ b/Source/Common/Defs/TickBasedChanceExtension.cs @@ -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 +{ + public class TickBasedChanceExtension : TickIntervalExtension + { + /// + /// Set to 1 for "always", set to 0 for "never". + /// Everything else is a bit statistics, but e.g. when set to .5 the chances grow per day from [50%, 75%, 82.25%, ...] + /// + public float eventChance; + } +} diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index af53f67..e4f4aff 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -124,6 +124,8 @@ namespace RJW_Genes // Diseases public static readonly GeneDef rjw_genes_genetic_disease_immunity; public static readonly GeneDef rjw_genes_minor_vulnerability; + public static readonly GeneDef rjw_genes_major_vulnerability; + public static readonly GeneDef rjw_genes_fluctual_sexual_needs; //Other Defs public static readonly XenotypeDef rjw_genes_succubus; diff --git a/Source/Genes/Diseases/Genes/DiseaseGene.cs b/Source/Genes/Diseases/Genes/DiseaseGene.cs deleted file mode 100644 index deba64f..0000000 --- a/Source/Genes/Diseases/Genes/DiseaseGene.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace RJW_Genes -{ - public class DiseaseGene : Gene - { - - } -} diff --git a/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs b/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs new file mode 100644 index 0000000..b25e812 --- /dev/null +++ b/Source/Genes/Diseases/Genes/Gene_FluctualSexualNeed.cs @@ -0,0 +1,57 @@ +using rjw; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using static HarmonyLib.Code; +using static RimWorld.ColonistBar; + +namespace RJW_Genes +{ + public class Gene_FluctualSexualNeed : Gene + { + + int event_interval; + float event_chance; + + const float REST_INCREASE = 0.1f; + const float SET_SEXNEED_TO = 0.1f; + + public Gene_FluctualSexualNeed() : base() + { + TickBasedChanceExtension tickbasedChanceExt = GeneDefOf.rjw_genes_fluctual_sexual_needs.GetModExtension(); + event_interval = tickbasedChanceExt?.tickInterval ?? 30000; // 30K = 1/2 day + event_chance = tickbasedChanceExt?.eventChance ?? 0.1f; + } + + + public override void Tick() + { + base.Tick(); + + if (pawn.IsHashIntervalTick(event_interval) && (new Random()).NextDouble() < event_chance) + { + ModLog.Debug($"Firing Gene_FluctualSexualNeed for {pawn}"); + ApplyFluctualSexNeedEffect(pawn); + } + } + + public static void ApplyFluctualSexNeedEffect(Pawn pawn) + { + if (pawn == null || pawn.needs == null) return; + + var sexneed = pawn.needs.TryGetNeed(); + if (sexneed != null) + { + sexneed.CurLevelPercentage = SET_SEXNEED_TO; + } + + // Pump up Wake-Ness + if (pawn.needs.rest != null) + pawn.needs.rest.CurLevel += REST_INCREASE; + } + + } +} diff --git a/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs b/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs index bf6e26c..d7a2e07 100644 --- a/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs +++ b/Source/Genes/Diseases/Patches/Patch_AftersexUtility_TransferGeneticDiseases.cs @@ -15,6 +15,8 @@ namespace RJW_Genes.Genes.Diseases.Patches public static void Postfix(SexProps props) { + if (!RJW_Genes_Settings.rjw_genes_genetic_disease_spread) return; + if (props == null || props.pawn == null || props.partner == null) return; Pawn pawn = props.pawn; @@ -26,6 +28,9 @@ namespace RJW_Genes.Genes.Diseases.Patches // No Infections on Condom Use if (props.usedCondom) return; + // Exit early if settings require penetrative sex, but this is not penetrative sex + if (!IsPenetrativeSex(props) && RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex) return; + ModLog.Debug($"Firing Patch_TransferGeneticDiseases for {pawn} and {partner}"); TryTransferGeneticDiseases(pawn, partner, props); TryTransferGeneticDiseases(partner, pawn, props); @@ -47,7 +52,7 @@ namespace RJW_Genes.Genes.Diseases.Patches if ((new Random()).NextDouble() <= LookupDiseaseInfectionChance(disease)) { - infected.genes.AddGene(disease, false); + infected.genes.AddGene(disease, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); } } } @@ -67,9 +72,24 @@ namespace RJW_Genes.Genes.Diseases.Patches return new List() { }; } + private static bool IsPenetrativeSex(SexProps props) + { + if (props == null) return false; + + return props.sexType == + xxx.rjwSextype.Vaginal + || props.sexType == xxx.rjwSextype.Anal + || props.sexType == xxx.rjwSextype.Oral + || props.sexType == xxx.rjwSextype.DoublePenetration + || props.sexType == xxx.rjwSextype.Fellatio + || props.sexType == xxx.rjwSextype.Sixtynine; + } + private static bool IsGeneticDiseaseGene(GeneDef geneDef) { - return geneDef.geneClass.FullName.Contains("DiseaseGene"); + if (geneDef == null) return false; + GeneticDiseaseExtension diseaseExt = geneDef.GetModExtension(); + return diseaseExt != null; } private static float LookupDiseaseInfectionChance(GeneDef geneDef) diff --git a/Source/Genes/Gender/Defs/GenderFluidExtension.cs b/Source/Genes/Gender/Defs/GenderFluidExtension.cs deleted file mode 100644 index 332015f..0000000 --- a/Source/Genes/Gender/Defs/GenderFluidExtension.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Verse; - -namespace RJW_Genes -{ - public class GenderFluidExtension : DefModExtension - { - /// - /// Number of ticks until the change can be triggered. - /// Just being "triggered" does not mean changing, see the changeChance below. - /// - public int changeInterval; - - /// - /// How high is the chance to change gender? - /// Set to 1 for "always", set to 0 for "never". - /// Everything else is a bit statistics, but e.g. when set to .5 the chances grow per day from [50%, 75%, 82.25%, ...] - /// - public float changeChance; - } -} \ No newline at end of file diff --git a/Source/Genes/Gender/Gene_FemaleOnly.cs b/Source/Genes/Gender/Genes/Gene_FemaleOnly.cs similarity index 100% rename from Source/Genes/Gender/Gene_FemaleOnly.cs rename to Source/Genes/Gender/Genes/Gene_FemaleOnly.cs diff --git a/Source/Genes/Gender/Gene_GenderFluid.cs b/Source/Genes/Gender/Genes/Gene_GenderFluid.cs similarity index 96% rename from Source/Genes/Gender/Gene_GenderFluid.cs rename to Source/Genes/Gender/Genes/Gene_GenderFluid.cs index bdd5c00..fe75f5d 100644 --- a/Source/Genes/Gender/Gene_GenderFluid.cs +++ b/Source/Genes/Gender/Genes/Gene_GenderFluid.cs @@ -39,9 +39,9 @@ namespace RJW_Genes private bool sexChangeWasBlocked = false; public Gene_GenderFluid() : base() { - GenderFluidExtension genderFluidExt = GeneDefOf.rjw_genes_gender_fluid.GetModExtension(); - change_interval = genderFluidExt?.changeInterval ?? CHANGE_INTERVAL_FALLBACK; - switch_chance = genderFluidExt?.changeChance ?? SWITCH_CHANCE_FALLBACK; + TickBasedChanceExtension tickbasedChanceExt = GeneDefOf.rjw_genes_gender_fluid.GetModExtension(); + change_interval = tickbasedChanceExt?.tickInterval ?? CHANGE_INTERVAL_FALLBACK; + switch_chance = tickbasedChanceExt?.eventChance ?? SWITCH_CHANCE_FALLBACK; } public override void Tick() diff --git a/Source/Genes/Gender/Gene_MaleOnly.cs b/Source/Genes/Gender/Genes/Gene_MaleOnly.cs similarity index 100% rename from Source/Genes/Gender/Gene_MaleOnly.cs rename to Source/Genes/Gender/Genes/Gene_MaleOnly.cs diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 0abf68c..f684926 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -58,6 +58,7 @@ + @@ -75,7 +76,7 @@ - + @@ -89,8 +90,7 @@ - - + @@ -110,8 +110,8 @@ - - + + @@ -240,9 +240,7 @@ False - - - +