diff --git a/CHANGELOG.md b/CHANGELOG.md index d41f131..2c4c8e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -75,6 +75,8 @@ but they are meant mostly to have infectors immune against their own diseases. - Disease Gene: Fluctual Sexual Need. (Configurable) Chance to reset sex-need to near-zero and gain a bit of rest-need. - Disease Gene: Size Blinded. Pawns have a higher chance for hooking up with pawns with a big cock, lower chance for small cocks. - Infector Gene: Genetic Stretcher. Pawns can infect other pawns with *Size Blinded* +- Gene: Hardwired Progenity. Pawns with this get a malus on having no-children, and bonus on having a lot. +- Pawns will have negative thoughts about pawns with more genetic diseases than themselves. **Fixes:** diff --git a/Common/Defs/ThoughtDefs/Thoughts_Disease.xml b/Common/Defs/ThoughtDefs/Thoughts_Disease.xml index d0721ee..8997a52 100644 --- a/Common/Defs/ThoughtDefs/Thoughts_Disease.xml +++ b/Common/Defs/ThoughtDefs/Thoughts_Disease.xml @@ -24,4 +24,26 @@ + + rjw_genes_has_more_diseases + Thought_SituationalSocial + RJW_Genes.ThoughtWorker_HasMoreDiseasesThanMe_Social + true + + +
  • + + -3 +
  • +
  • + + -8 +
  • +
  • + + -18 +
  • +
    +
    + diff --git a/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs b/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs new file mode 100644 index 0000000..7a85eb3 --- /dev/null +++ b/Source/Genes/Diseases/Thoughts/ThoughtWorker_HasMoreDiseasesThanMe_Social.cs @@ -0,0 +1,59 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace RJW_Genes +{ + public class ThoughtWorker_HasMoreDiseasesThanMe_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; + if (!other.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; + + // Pawns that have not "met" wont give each other Mali + // Known-Each-Other is a key-word for Rimworld that shows they have had any interaction and stored each other in relations. + if (!RelationsUtility.PawnsKnowEachOther(pawn, other)) + return (ThoughtState)false; + // If the pawn is not on Map (e.g. caravan), no mali + if (!MapUtility.PawnIsOnHomeMap(pawn)) + return (ThoughtState)false; + + int pawn_diseases = DiseaseHelper.GetGeneticDiseaseGenes(pawn).Count(); + int other_diseases = DiseaseHelper.GetGeneticDiseaseGenes(other).Count(); + int disease_diff = other_diseases - pawn_diseases; + + if (disease_diff >= 5) + return ThoughtState.ActiveAtStage(2); + else if (disease_diff >= 2) + return ThoughtState.ActiveAtStage(1); + else if (disease_diff >= 1) + return ThoughtState.ActiveAtStage(0); + else + return (ThoughtState)false; + } + } +} diff --git a/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs b/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs index 871b276..61199a6 100644 --- a/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs +++ b/Source/Genes/Diseases/Thoughts/ThoughtWorker_SizeBlinded_Social.cs @@ -44,7 +44,6 @@ namespace RJW_Genes if (!MapUtility.PawnIsOnHomeMap(pawn)) return (ThoughtState)false; - //ModLog.Debug($"ThoughtWorker Checks Size Blinded {pawn} -> {other}"); // Do nothing if there is no size-blinded involved if (!GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_size_blinded)) diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 728b22f..0e0df2d 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -86,6 +86,7 @@ + diff --git a/Source/ThoughtDefOf.cs b/Source/ThoughtDefOf.cs index 50f2a00..596ecc0 100644 --- a/Source/ThoughtDefOf.cs +++ b/Source/ThoughtDefOf.cs @@ -16,6 +16,7 @@ namespace RJW_Genes public static readonly ThoughtDef rjw_genes_pheromone_carrier_nearby; public static readonly ThoughtDef rjw_genes_appealing_cock; + public static readonly ThoughtDef rjw_genes_has_more_diseases; //Others with same names but other defs than in genedefof public static readonly InteractionDef rjw_genes_flirt;