diff --git a/CHANGELOG.md b/CHANGELOG.md index ab1db00..7f25417 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,6 +96,7 @@ but they are meant mostly to have infectors immune against their own diseases. - Fixed an Issue where pawns would always get the Pheromone social boost, unless they had the pheromone (#113) - Fixed two hidden dependencies on Ideology and Royalty (#115) +- Fixed some more hidden dependencies on Ideology Icons (#118) **Internal:** @@ -105,6 +106,8 @@ but they are meant mostly to have infectors immune against their own diseases. **Notes:** +*One Time Error Load* + The changes to the cum-gene will give a 1-time warning on loading the save. The warning looks like this: ``` Could not find class RJW_Genes.Gene_MuchCum while resolving node li. Trying to use Verse.Gene instead. Full node:
  • rjw_genes_much_cumThing_Human697null82
  • @@ -115,6 +118,12 @@ Verse.Log:Error (string) This is not dangerous. +*Supporting* + +You can now support me with [buying me a coffee](https://buymeacoffee.com/vegapnk). +The mod will remain free, open source and I will not hide or lock any features. +Its just meant if you want to drop me a tip. + # 2.1.0 (27-06-2024) **Additions**: diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml index 463046f..33a8078 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml @@ -42,8 +42,8 @@ rjw_genes_fertile_anus - Xenotypes with this gene have a functional uterus connected to the anal cavity even - for males + Xenotypes with this gene have a functional uterus if they do not possess one by means of their vagina. + For males, it is connected to the anal cavity and leads to a normal pregnancy. Genes/Icons/Fertile_anus 54 diff --git a/Common/Defs/GeneDefs/GeneDefs_Damage.xml b/Common/Defs/GeneDefs/GeneDefs_Damage.xml index d045a68..2e7f941 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Damage.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Damage.xml @@ -7,7 +7,7 @@ rjw_genes_damage This Gene makes the Carrier unable to get mood or social penalties from being raped and they cannot be broken for a long period of time. - UI/Icons/Rituals/TrialDefend + Genes/Icons/TrialDefend 2 -1 1 diff --git a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml index b9c1a45..167fd0b 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml @@ -23,7 +23,7 @@ imply negative side-effects. 1 -1 - UI/Icons/Rituals/TrialDefend + Genes/Icons/TrialDefend
  • diff --git a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml index 1c37ba3..5ff7ec6 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Reproduction.xml @@ -52,31 +52,6 @@ - - rjw_genes_masochist @@ -106,7 +81,7 @@ Reproduction This Gene makes you gay. - UI\Ideoligions\Universal\RoundC + Genes/Icons/RoundC 0 3 @@ -134,7 +109,7 @@ Reproduction Carriers of this Gene are Bisexual. - UI\Ideoligions\Universal\RoundC + Genes/Icons/RoundC 0 4 diff --git a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml index 0fe012a..001b765 100644 --- a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml +++ b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml @@ -19,7 +19,7 @@ partially filled) 1 -2 - UI/Memes/FleshPurity + Genes/Icons/FleshPurity 1 @@ -30,7 +30,7 @@ (Partner stays adult) 2 -2 - UI/Ideoligions/FireLeaves + Genes/Icons/FireLeaves 2
  • @@ -180,4 +180,59 @@ + + rjw_genes_feminizer + + Carriers with this gene slowly turn male sexual partners into females. + UI/Icons/Genes/Gene_PsychicBonding + 31 + 5 + -1 + +
  • + +
  • rjw_genes_feminizer
  • + + +
  • + rjw_genes_feminization_progress + true + 0.01 + 1.00 + false + true + false +
  • +
    + + + + + rjw_genes_twinkifier + + Carriers with this gene slowly turn male sexual partners into breedabel cute twinks. + UI/Icons/Genes/Gene_PsychicBonding + 50 + 4 + 0 + +
  • + +
  • rjw_genes_twinkifier
  • + + +
  • + rjw_genes_twinkification_progress + true + 0.99 + 1.00 + false + true + false +
  • +
    +
    + + + \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml new file mode 100644 index 0000000..3dce4c0 --- /dev/null +++ b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml @@ -0,0 +1,147 @@ + + + + + rjw_genes_feminization_progress + HediffWithComps + + Something is changing this pawn - there is a chance to develop female features + upon sex. + false + 1.0 + false + false + +
  • + -0.01 +
  • +
    + + +
  • + + false +
  • + +
  • + + 0.6 + true + +
  • + Consciousness + -0.5 +
  • + + + 0.25 + + + +
  • + + 0.8 + +
  • + Consciousness + -0.05 +
  • + + true + + 0.5 + 0.25 + + + +
  • + + 0.9 + +
  • + Consciousness + -0.1 +
  • + + true + + 1.0 + 0.5 + + +
    +
    + + + + rjw_genes_twinkification_progress + HediffWithComps + + Something is changing this pawn - there is a chance to turn into a cute, + breedable twink upon sex. + false + 1.0 + false + false + +
  • + -0.01 +
  • +
    + + +
  • + + false +
  • + +
  • + + 0.6 + true + +
  • + Consciousness + -0.5 +
  • + + + 0.25 + + + +
  • + + 0.8 + +
  • + Consciousness + -0.05 +
  • + + true + + 0.5 + 0.25 + + + +
  • + + 0.9 + +
  • + Consciousness + -0.1 +
  • + + true + + 1.5 + 0.5 + + +
    +
    + +
    \ No newline at end of file diff --git a/Common/Defs/TipSetDefs/Tips.xml b/Common/Defs/TipSetDefs/Tips.xml index 7147147..bc7aca3 100644 --- a/Common/Defs/TipSetDefs/Tips.xml +++ b/Common/Defs/TipSetDefs/Tips.xml @@ -23,6 +23,8 @@
  • The Settings for Animal-Gene Inheritance are distributed between RJW-Pregnancy-Settings and their own Mod-Options.
  • +
  • Children born by pawns with the `Fertile Anus` gene might be bullied at school, but they can still live a fulfilling and happy life.
  • + diff --git a/Common/Textures/Genes/Icons/FireLeaves.png b/Common/Textures/Genes/Icons/FireLeaves.png new file mode 100644 index 0000000..4f1b247 Binary files /dev/null and b/Common/Textures/Genes/Icons/FireLeaves.png differ diff --git a/Common/Textures/Genes/Icons/FleshPurity.png b/Common/Textures/Genes/Icons/FleshPurity.png new file mode 100644 index 0000000..0843812 Binary files /dev/null and b/Common/Textures/Genes/Icons/FleshPurity.png differ diff --git a/Common/Textures/Genes/Icons/RoundC.png b/Common/Textures/Genes/Icons/RoundC.png new file mode 100644 index 0000000..e2288f5 Binary files /dev/null and b/Common/Textures/Genes/Icons/RoundC.png differ diff --git a/Common/Textures/Genes/Icons/TrialDefend.png b/Common/Textures/Genes/Icons/TrialDefend.png new file mode 100644 index 0000000..1275bf2 Binary files /dev/null and b/Common/Textures/Genes/Icons/TrialDefend.png differ diff --git a/README.md b/README.md index a09fef6..b9e5d14 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # RJW-Genes [NSFW] +[![BuyMeACoffee](https://raw.githubusercontent.com/pachadotdev/buymeacoffee-badges/main/bmc-white.svg)](https://buymeacoffee.com/vegapnk) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + This mod adds genes related and based on RJW to Rimworld. ## Current Features diff --git a/Source/Common/Defs/HediffIncreaseOnSexExtension.cs b/Source/Common/Defs/HediffIncreaseOnSexExtension.cs new file mode 100644 index 0000000..c5f648f --- /dev/null +++ b/Source/Common/Defs/HediffIncreaseOnSexExtension.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace RJW_Genes +{ + public class HediffIncreaseOnSexExtension: DefModExtension + { + public HediffDef hediffDef; + public float severityIncrease; + public float applicationChance; + + public bool canCreateHediff; + + public bool applicableForWomen; + public bool applicableForMen; + public bool requiresPenetrativeSex; + } + +} diff --git a/Source/Common/patches/Patch_HediffIncreaseOnSex.cs b/Source/Common/patches/Patch_HediffIncreaseOnSex.cs new file mode 100644 index 0000000..55e85a3 --- /dev/null +++ b/Source/Common/patches/Patch_HediffIncreaseOnSex.cs @@ -0,0 +1,80 @@ +using HarmonyLib; +using rjw; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace RJW_Genes +{ + + /// + /// This patch "only" applies the hediff increase on sex. + /// It checks for the hediff, creates it if necessary and applicable, + /// and increases it based on the severity, chance and genders specified in the Extension. + /// + /// Some hediffs want follow up logic, e.g. the Feminization Gene, + /// which is handled in an extra patch (that requires the hediff to be present already). + /// + [HarmonyPatch(typeof(SexUtility), "Aftersex")] + public class Patch_HediffIncreaseOnSex + { + + public static void Postfix(SexProps props) + { + if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() || props.pawn.IsAnimal()) + { + return; + } + + Pawn pawn = props.pawn; + Pawn partner = props.partner; + + if (pawn.genes == null || partner.genes == null) return; + + TryApplyHediffsOfSex(pawn, partner, props); + TryApplyHediffsOfSex(partner, pawn, props); + } + + /// + /// Checks for every gene in a pawn if it applies a hediff or the severity of an existing hediff in a sexual partner. + /// If the checks pass, the hediff is added or changed accordingly. + /// + /// Pawn that holds (one or many) genes that might apply a hediff change + /// Pawn that will receive or alter any hediffs, if applicable + /// The Sexprops, used for checking if sex is penetrative + static void TryApplyHediffsOfSex(Pawn pawn, Pawn partner, SexProps props) + { + var random = new Random(); + + foreach (Gene gene in pawn.genes.GenesListForReading) + { + HediffIncreaseOnSexExtension ext = gene.def.GetModExtension(); + if (ext == null) continue; + + if (DiseaseHelper.IsImmuneAgainstGeneticDisease(partner, gene.def)) continue; + if (ext.requiresPenetrativeSex && DiseaseHelper.IsPenetrativeSex(props)) continue; + if (!ext.applicableForMen && partner.gender == Gender.Male) continue; + if (!ext.applicableForWomen && partner.gender == Gender.Female) continue; + if (random.NextDouble() >= ext.applicationChance) continue; + + Hediff hediff = partner.health.hediffSet.GetFirstHediffOfDef(ext.hediffDef); + if (hediff == null) + { + if (!ext.canCreateHediff) continue; + hediff = partner.health.GetOrAddHediff(ext.hediffDef); + hediff.Severity = 0.01f; + ModLog.Debug($"{partner} got hediff {hediff.def.defName} from Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn}"); + } + float initial_severity = hediff.Severity; + ModLog.Debug($"{partner}s hediff {hediff.def.defName} was changed by Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn} [from {initial_severity} to {initial_severity + ext.severityIncrease}]"); + hediff.Severity += ext.severityIncrease; + + // DevNote: I also want to have "negative" hediff changes here, but I think its not necessary. Once the severity reaches 0, or below, the hediff should remove itself. + } + } + + } +} diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index f4a2d08..64b84f6 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -108,6 +108,8 @@ namespace RJW_Genes public static readonly GeneDef rjw_genes_sexual_genetic_swap; public static readonly GeneDef rjw_genes_sexual_genetic_thief; public static readonly GeneDef rjw_genes_pregnancy_overwrite; + public static readonly GeneDef rjw_genes_feminizer; + public static readonly GeneDef rjw_genes_twinkifier; // Cosmetic public static readonly GeneDef rjw_genes_succubus_tail; @@ -131,6 +133,12 @@ namespace RJW_Genes public static readonly GeneDef rjw_genes_major_vulnerability; public static readonly GeneDef rjw_genes_fluctual_sexual_needs; public static readonly GeneDef rjw_genes_size_blinded; + public static readonly GeneDef rjw_genes_infectious_low_fertility; + public static readonly GeneDef rjw_genes_infectious_increased_sex_need; + public static readonly GeneDef rjw_genes_infectious_bisexuality; + public static readonly GeneDef rjw_genes_infectious_homosexuality; + public static readonly GeneDef rjw_genes_infectious_hypersexuality; + public static readonly GeneDef rjw_genes_stretcher; //Other Defs public static readonly XenotypeDef rjw_genes_succubus; diff --git a/Source/Genes/Special/Patches/Patch_Twinkifier.cs b/Source/Genes/Special/Patches/Patch_Twinkifier.cs new file mode 100644 index 0000000..53c9d46 --- /dev/null +++ b/Source/Genes/Special/Patches/Patch_Twinkifier.cs @@ -0,0 +1,78 @@ +using HarmonyLib; +using rjw; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace RJW_Genes +{ + /// + /// This patch handles the changes produced by `rjw_genes_twinkifier`. + /// It requires the hediff `rjw_genes_twinkification_in_progress` which is managed separately, in `Patch_HediffIncreaseOnSex`. + /// + [HarmonyPatch(typeof(SexUtility), "Aftersex")] + public static class Patch_Twinkifier + { + const float MINOR_APPLICATION_CHANCE = 0.25f; // = 25% to have a minor transformation + const float MAJOR_APPLICATION_CHANCE = 0.10f; // = 10% to have a major transformation + + public static void Postfix(SexProps props) + { + if (props == null || props.pawn == null || !props.hasPartner() || props.partner == null) + return; + if (props.pawn.IsAnimal() || props.partner.IsAnimal()) + return; + + ApplyTwinkification(props.pawn); + ApplyTwinkification(props.partner); + } + + private static void ApplyTwinkification(Pawn pawn) + { + if (pawn == null) return; + Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_twinkification_progress); + if (hediff == null) return; + + var Random = new Random(); + switch (hediff.SeverityLabel) + { + case "severe": + case "critical": + { + if (Random.NextDouble() < MAJOR_APPLICATION_CHANCE) + majorChange(pawn); + } break; + case "minor": + { + if (Random.NextDouble() < MINOR_APPLICATION_CHANCE) + minorChange(pawn); + } break; + } + + } + + private static void minorChange(Pawn pawn) + { + // Minor Infectious Vulnerability + // Smaller Genitalia + // Remove Beard + // Thin Body Type + } + + private static void majorChange(Pawn pawn) + { + // Final Gene-Pool should have: + // - Fragile (?) + // - Infectious Vulnerability + // - Infectious Homosexuality + // - Beauty + // - Fertile Anus + + pawn.genes.AddGene(GeneDefOf.rjw_genes_fertile_anus, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); + pawn.genes.AddGene(GeneDefOf.rjw_genes_infectious_homosexuality, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes); + } + } +} diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs index d957096..4214041 100644 --- a/Source/HediffDefOf.cs +++ b/Source/HediffDefOf.cs @@ -20,6 +20,10 @@ namespace RJW_Genes public static readonly HediffDef rjw_genes_orgasmic_mytosis_hediff; public static readonly HediffDef rjw_genes_mytosis_shock_hediff; + public static readonly HediffDef rjw_genes_twinkification_progress; + public static readonly HediffDef rjw_genes_feminization_progress; + + // Note: Counter does meant it counters it, not it's counting [MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumstuffed_counter; [MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter; diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index dabb692..8300996 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -58,6 +58,7 @@ + @@ -68,6 +69,7 @@ + @@ -195,6 +197,7 @@ +