Compare commits

...

6 commits

Author SHA1 Message Date
Vegapnk
420e14f7af WIP for Twinkification 2024-07-10 16:01:13 +02:00
Vegapnk
f1debffbb3 Applying hediffs by Gene works 2024-07-10 15:29:26 +02:00
Vegapnk
b263b68538 Fixed hidden dependencies on Ideology icons by copying them (closes #118) 2024-07-10 14:28:21 +02:00
Vegapnk
9d6361454e Added Info on BuyMeACoffee 2024-07-10 08:17:44 +02:00
Vegapnk
1cb50f5a26 Start shilling out defs for Twinkification and Feminization 2024-07-09 19:48:51 +02:00
Vegapnk
9ec6993b00 Clarified some wording, closes #111 2024-07-09 18:57:58 +02:00
19 changed files with 420 additions and 33 deletions

View file

@ -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: <li Class="RJW_Genes.Gene_MuchCum"><def>rjw_genes_much_cum</def><pawn>Thing_Human697</pawn><overriddenByGene>null</overriddenByGene><loadID>82</loadID></li>
@ -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**:

View file

@ -42,8 +42,8 @@
<GeneDef ParentName="BreedingBase">
<defName>rjw_genes_fertile_anus</defName>
<label>fertile anus</label>
<description>Xenotypes with this gene have a functional uterus connected to the anal cavity even
for males</description>
<description>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.</description>
<iconPath>Genes/Icons/Fertile_anus</iconPath>
<displayOrderInCategory>54</displayOrderInCategory>
</GeneDef>

View file

@ -7,7 +7,7 @@
<displayCategory>rjw_genes_damage</displayCategory>
<description>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.</description>
<iconPath>UI/Icons/Rituals/TrialDefend</iconPath>
<iconPath>Genes/Icons/TrialDefend</iconPath>
<displayOrderInCategory>2</displayOrderInCategory>
<biostatMet>-1</biostatMet>
<biostatCpx>1</biostatCpx>

View file

@ -23,7 +23,7 @@
imply negative side-effects.</description>
<biostatCpx>1</biostatCpx>
<biostatMet>-1</biostatMet>
<iconPath>UI/Icons/Rituals/TrialDefend</iconPath>
<iconPath>Genes/Icons/TrialDefend</iconPath>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core"
Class="VanillaGenesExpanded.GeneExtension">

View file

@ -52,31 +52,6 @@
</modExtensions>
</GeneDef>
<!--
<GeneDef>
<defName>rjw_genes_sadist_gene</defName>
<label>sadist</label>
<displayCategory>Reproduction</displayCategory>
<description>Xenotypes with this Gene are Sadists.</description>
<iconPath>Genes/Icons/Rape</iconPath>
<biostatMet>1</biostatMet>
<displayOrderInCategory>2</displayOrderInCategory>
<forcedTraits>
<li>
<def>rjw_genes_sadist</def>
</li>
</forcedTraits>
<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>
<defName>rjw_genes_masochist</defName>
<label>masochist</label>
@ -106,7 +81,7 @@
<label>homosexual</label>
<displayCategory>Reproduction</displayCategory>
<description>This Gene makes you gay.</description>
<iconPath>UI\Ideoligions\Universal\RoundC</iconPath>
<iconPath>Genes/Icons/RoundC</iconPath>
<biostatMet>0</biostatMet>
<displayOrderInCategory>3</displayOrderInCategory>
<forcedTraits>
@ -134,7 +109,7 @@
<label>bisexual</label>
<displayCategory>Reproduction</displayCategory>
<description>Carriers of this Gene are Bisexual.</description>
<iconPath>UI\Ideoligions\Universal\RoundC</iconPath>
<iconPath>Genes/Icons/RoundC</iconPath>
<biostatMet>0</biostatMet>
<displayOrderInCategory>4</displayOrderInCategory>
<forcedTraits>

View file

@ -19,7 +19,7 @@
partially filled)</description>
<biostatCpx>1</biostatCpx>
<biostatMet>-2</biostatMet>
<iconPath>UI/Memes/FleshPurity</iconPath>
<iconPath>Genes/Icons/FleshPurity</iconPath>
<displayOrderInCategory>1</displayOrderInCategory>
</GeneDef>
@ -30,7 +30,7 @@
(Partner stays adult)</description>
<biostatCpx>2</biostatCpx>
<biostatMet>-2</biostatMet>
<iconPath>UI/Ideoligions/FireLeaves</iconPath>
<iconPath>Genes/Icons/FireLeaves</iconPath>
<displayOrderInCategory>2</displayOrderInCategory>
<modExtensions>
<li Class="RJW_Genes.AgeTransferExtension">
@ -180,4 +180,59 @@
</modExtensions>
</GeneDef>
<GeneDef ParentName="SpecialBase">
<defName>rjw_genes_feminizer</defName>
<label>feminizer</label>
<description>Carriers with this gene slowly turn male sexual partners into females.</description>
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath>
<displayOrderInCategory>31</displayOrderInCategory>
<biostatCpx>5</biostatCpx>
<biostatMet>-1</biostatMet>
<modExtensions>
<li Class="RJW_Genes.ImmunityAgainstGenesExtension">
<givesImmunityAgainst>
<li>rjw_genes_feminizer</li>
</givesImmunityAgainst>
</li>
<li Class="RJW_Genes.HediffIncreaseOnSexExtension">
<hediffDef>rjw_genes_feminization_progress</hediffDef>
<canCreateHediff>true</canCreateHediff>
<severityIncrease>0.01</severityIncrease>
<applicationChance>1.00</applicationChance>
<applicableForWomen>false</applicableForWomen>
<applicableForMen>true</applicableForMen>
<requiresPenetrativeSex>false</requiresPenetrativeSex>
</li>
</modExtensions>
</GeneDef>
<GeneDef ParentName="SpecialBase">
<defName>rjw_genes_twinkifier</defName>
<label>twinkifier</label>
<description>Carriers with this gene slowly turn male sexual partners into breedabel cute twinks.</description>
<iconPath>UI/Icons/Genes/Gene_PsychicBonding</iconPath>
<displayOrderInCategory>50</displayOrderInCategory>
<biostatCpx>4</biostatCpx>
<biostatMet>0</biostatMet>
<modExtensions>
<li Class="RJW_Genes.ImmunityAgainstGenesExtension">
<givesImmunityAgainst>
<li>rjw_genes_twinkifier</li>
</givesImmunityAgainst>
</li>
<li Class="RJW_Genes.HediffIncreaseOnSexExtension">
<hediffDef>rjw_genes_twinkification_progress</hediffDef>
<canCreateHediff>true</canCreateHediff>
<severityIncrease>0.99</severityIncrease>
<applicationChance>1.00</applicationChance>
<applicableForWomen>false</applicableForWomen>
<applicableForMen>true</applicableForMen>
<requiresPenetrativeSex>false</requiresPenetrativeSex>
</li>
</modExtensions>
</GeneDef>
</Defs>

View file

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<HediffDef>
<defName>rjw_genes_feminization_progress</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>feminization</label>
<description>Something is changing this pawn - there is a chance to develop female features
upon sex.</description>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<isBad>false</isBad>
<tendable>false</tendable>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-0.01</severityPerDay>
</li>
</comps>
<stages>
<li>
<label>neglectable</label>
<becomeVisible>false</becomeVisible>
</li>
<li>
<label>minor</label>
<minSeverity>0.6</minSeverity>
<becomeVisible>true</becomeVisible>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.5</offset>
</li>
</capMods>
<statOffsets>
<Vulnerability>0.25</Vulnerability>
</statOffsets>
</li>
<li>
<label>severe</label>
<minSeverity>0.8</minSeverity>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.05</offset>
</li>
</capMods>
<becomeVisible>true</becomeVisible>
<statOffsets>
<Vulnerability>0.5</Vulnerability>
<SexFrequency>0.25</SexFrequency>
</statOffsets>
</li>
<li>
<label>critical</label>
<minSeverity>0.9</minSeverity>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.1</offset>
</li>
</capMods>
<becomeVisible>true</becomeVisible>
<statOffsets>
<Vulnerability>1.0</Vulnerability>
<SexFrequency>0.5</SexFrequency>
</statOffsets>
</li>
</stages>
</HediffDef>
<HediffDef>
<defName>rjw_genes_twinkification_progress</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>twinkification</label>
<description>Something is changing this pawn - there is a chance to turn into a cute,
breedable twink upon sex.</description>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<isBad>false</isBad>
<tendable>false</tendable>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-0.01</severityPerDay>
</li>
</comps>
<stages>
<li>
<label>neglectable</label>
<becomeVisible>false</becomeVisible>
</li>
<li>
<label>minor</label>
<minSeverity>0.6</minSeverity>
<becomeVisible>true</becomeVisible>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.5</offset>
</li>
</capMods>
<statOffsets>
<Vulnerability>0.25</Vulnerability>
</statOffsets>
</li>
<li>
<label>severe</label>
<minSeverity>0.8</minSeverity>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.05</offset>
</li>
</capMods>
<becomeVisible>true</becomeVisible>
<statOffsets>
<Vulnerability>0.5</Vulnerability>
<SexFrequency>0.25</SexFrequency>
</statOffsets>
</li>
<li>
<label>critical</label>
<minSeverity>0.9</minSeverity>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.1</offset>
</li>
</capMods>
<becomeVisible>true</becomeVisible>
<statOffsets>
<Vulnerability>1.5</Vulnerability>
<SexFrequency>0.5</SexFrequency>
</statOffsets>
</li>
</stages>
</HediffDef>
</Defs>

View file

@ -23,6 +23,8 @@
<li TKey="BestialityGeneSettings">The Settings for Animal-Gene Inheritance are distributed between RJW-Pregnancy-Settings and their own Mod-Options.</li>
<li TKey="FertilaAnusJoke">Children born by pawns with the `Fertile Anus` gene might be bullied at school, but they can still live a fulfilling and happy life.</li>
</tips>
</TipSetDef>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -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

View file

@ -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;
}
}

View file

@ -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
{
/// <summary>
/// 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).
/// </summary>
[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);
}
/// <summary>
/// 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.
/// </summary>
/// <param name="pawn">Pawn that holds (one or many) genes that might apply a hediff change</param>
/// <param name="partner">Pawn that will receive or alter any hediffs, if applicable</param>
/// <param name="props">The Sexprops, used for checking if sex is penetrative</param>
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<HediffIncreaseOnSexExtension>();
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.
}
}
}
}

View file

@ -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;

View file

@ -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
{
/// <summary>
/// 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`.
/// </summary>
[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);
}
}
}

View file

@ -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;

View file

@ -58,6 +58,7 @@
<Compile Include="Animal_Inheritance\Defs\BestialityGeneInheritanceDef.cs" />
<Compile Include="Common\Defs\ChanceExtension.cs" />
<Compile Include="Common\Defs\DistanceExtension.cs" />
<Compile Include="Common\Defs\HediffIncreaseOnSexExtension.cs" />
<Compile Include="Common\Defs\ModExtensionHelper.cs" />
<Compile Include="Common\Defs\MultiplierExtension.cs" />
<Compile Include="Common\Defs\TickBasedChanceExtension.cs" />
@ -68,6 +69,7 @@
<Compile Include="Common\ModLog.cs" />
<Compile Include="Common\Defs\TickIntervalExtension.cs" />
<Compile Include="Common\Patches\PatchImplants.cs" />
<Compile Include="Common\Patches\Patch_HediffIncreaseOnSex.cs" />
<Compile Include="Common\Patches\Patch_ParentRelationUtility_GetParents.cs" />
<Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_MatingCall.cs" />
<Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_PheromoneSpit.cs" />
@ -195,6 +197,7 @@
<Compile Include="Genes\Special\Patches\Patch_OrgasmMytosis.cs" />
<Compile Include="Genes\Special\Patches\Patch_PregnancyOverwrite.cs" />
<Compile Include="Genes\Special\Patches\Patch_SexualTamer.cs" />
<Compile Include="Genes\Special\Patches\Patch_Twinkifier.cs" />
<Compile Include="Genes\Special\Thoughts\ThoughtWorker_Aphrodisiac_Pheromones_Social.cs" />
<Compile Include="LetterDefOf.cs" />
<Compile Include="Interactions\SuccubusTailjob\CompAbility_SexInteractionRequirements.cs" />