diff --git a/CHANGELOG.md b/CHANGELOG.md index 22ede1f..0db6c9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,12 @@ Features: - Orgasm Rush got a Hediff - Unbreakable Gene - Age-Transfer and Youth-Fountain per Sex Gene +- Bisexual and Homosexual Genes with Placeholder Icon - Balancing some Genes by changing metabolism and complexity +- Pheromone Gene (#13, Shabakur) +- RJW Race-Support Compatibility (#12,#13, Shabakur) +- Animal Gene Inheritance Gene-Chance Multiplier per Setting (#13, Shabakur) +- Lots of Debug-Only Logging for Animal Gene Inheritance Succubus: @@ -14,6 +19,9 @@ Fixes: - Issue with Breast-Size (#8) fixed by lowercasing breast-match (Shabakur) - Error on Game Load when Licentia Genes are tried to be added to Xenotypes for players without Licentia (#5) +- Futa Gene only triggers if Pawn is not a futa already (#2) +- Genitalia Resizing triggers on 20th Birthday (#11) +- RJW-Gene-Inheritance Settings now do things (#13, Shabakur) # 1.0.1 (2022-12-20) diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index f512931..4b6ffe9 100644 Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ diff --git a/Common/Defs/Genes/GeneCategories.xml b/Common/Defs/Genes/GeneCategories.xml index 6fe9417..06b31cc 100644 --- a/Common/Defs/Genes/GeneCategories.xml +++ b/Common/Defs/Genes/GeneCategories.xml @@ -63,7 +63,7 @@ rjw_genes_special - + 8 diff --git a/Common/Defs/Genes/GeneDefs_Cosmetic.xml b/Common/Defs/Genes/GeneDefs_Cosmetic.xml index a4460d2..f49b690 100644 --- a/Common/Defs/Genes/GeneDefs_Cosmetic.xml +++ b/Common/Defs/Genes/GeneDefs_Cosmetic.xml @@ -13,7 +13,7 @@ - rjw_genes_Succubus_Wings + rjw_genes_succubus_wings Carriers of this gene grow succubus wings. Genes/Icons/Succubus_Wings diff --git a/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml b/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml index 89bc7f9..cc26c04 100644 --- a/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml +++ b/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml @@ -9,7 +9,7 @@ rjw_genes_big_male_genitalia - Penises of this Xenotype are bigger. + Penises of this Xenotype are bigger.(Resizing takes place at 20th Birthday) Genes/Icons/Small_Male_Genitalia RJW_Genes.Gene_BigMaleGenitalia 751 @@ -21,7 +21,7 @@ rjw_genes_small_male_genitalia - Penises of this Xenotype are smaller. + Penises of this Xenotype are smaller. (Resizing takes place at 20th Birthday) Genes/Icons/Big_Male_Genitalia RJW_Genes.Gene_SmallMaleGenitalia 753 @@ -34,7 +34,7 @@ rjw_genes_loose_female_genitalia - Vaginas of this Xenotype are quite spacy. + Vaginas of this Xenotype are quite spacy. (Resizing takes place at 20th Birthday) Genes/Icons/Loose_Female_Genitalia RJW_Genes.Gene_LooseFemaleGenitalia 754 @@ -46,7 +46,7 @@ rjw_genes_tight_female_genitalia - Vaginas of this Xenotype are pretty tight. + Vaginas of this Xenotype are pretty tight.(Resizing takes place at 20th Birthday) Genes/Icons/Tight_Female_Genitalia RJW_Genes.Gene_TightFemaleGenitalia 756 @@ -59,7 +59,7 @@ rjw_genes_big_breasts - Females of this Xenotype have big honkers. + Females of this Xenotype have big honkers.(Resizing takes place at 20th Birthday) Genes/Icons/Big_Breasts RJW_Genes.Gene_BigBreasts 757 @@ -71,7 +71,7 @@ rjw_genes_small_breasts - Females of this Xenotype have smaller breasts. + Females of this Xenotype have smaller breasts.(Resizing takes place at 20th Birthday) Genes/Icons/Small_Breasts RJW_Genes.Gene_SmallBreasts 759 @@ -84,7 +84,7 @@ rjw_genes_loose_anus - The Anus of this Xenotype is roomy. + The Anus of this Xenotype is roomy.(Resizing takes place at 20th Birthday) Genes/Icons/Loose_Anus RJW_Genes.Gene_LooseAnus 760 @@ -96,7 +96,7 @@ rjw_genes_tight_anus - The anus of this Xenotype is small. + The anus of this Xenotype is small.(Resizing takes place at 20th Birthday) Genes/Icons/Tight_Anus RJW_Genes.Gene_TightAnus 762 diff --git a/Common/Defs/Genes/GeneDefs_LifeForce.xml b/Common/Defs/Genes/GeneDefs_LifeForce.xml index 9a78bff..3ad1981 100644 --- a/Common/Defs/Genes/GeneDefs_LifeForce.xml +++ b/Common/Defs/Genes/GeneDefs_LifeForce.xml @@ -34,7 +34,7 @@ - rjw_genes_lifeforcedrain + rjw_genes_lifeforce_drain draining Carriers lose an additional 15 fertilin per day from biological entropy. diff --git a/Common/Defs/Genes/GeneDefs_Reproduction.xml b/Common/Defs/Genes/GeneDefs_Reproduction.xml index 614bb38..97fb937 100644 --- a/Common/Defs/Genes/GeneDefs_Reproduction.xml +++ b/Common/Defs/Genes/GeneDefs_Reproduction.xml @@ -29,4 +29,41 @@ + + + rjw_genes_homosexual + + Reproduction + This Gene makes you gay. + UI\Ideoligions\Universal\RoundC + 0 + 3 + +
  • + Gay +
  • +
    + +
  • rjw_genes_sexual_orientation
  • +
    +
    + + + rjw_genes_bisexual + + Reproduction + Carriers of this Gene are Bisexual. + UI\Ideoligions\Universal\RoundC + 0 + 4 + +
  • + Bisexual +
  • +
    + +
  • rjw_genes_sexual_orientation
  • +
    +
    + \ No newline at end of file diff --git a/Common/Defs/Genes/GeneDefs_SexSpecial.xml b/Common/Defs/Genes/GeneDefs_SexSpecial.xml index 86666d7..1e0e8c9 100644 --- a/Common/Defs/Genes/GeneDefs_SexSpecial.xml +++ b/Common/Defs/Genes/GeneDefs_SexSpecial.xml @@ -11,19 +11,6 @@ 1
    - - rjw_genes_aphrodisiac_pheromones - - rjw_genes_special - RJW_Genes.Gene_Aphrodisiac_Pheromones - Carriers of this gene create an aphrodisiac pheremones which induce an increased sexdrive to others nearby, increasing in strength as the sexdrive of the carrier increases.\n\nCarriers are unaffected by others with this gene. - Things/Mote/Heart - 2 - 1 - 1 - - - rjw_genes_youth_fountain @@ -45,4 +32,17 @@ UI/Icons/ColonistBar/Idle 3 + + + rjw_genes_aphrodisiac_pheromones + + rjw_genes_special + RJW_Genes.Gene_Aphrodisiac_Pheromones + Pheremones of this pawn induce an incressed sexdrive to others nearby. + UI/Memes/FleshPurity + 4 + 1 + 1 + + \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml index cfd2154..6148308 100644 --- a/Common/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml @@ -2,7 +2,12 @@ Canine - Canine_Group + +
  • Canine_Group
  • +
  • CanineAnimal
  • +
  • CanineSingleGenderAnimal
  • +
  • CanineSkinAnimal
  • +
  • Ears_Floppy @@ -38,7 +43,11 @@ Insect - Insect_Group + +
  • Insect_Group
  • +
  • ArthropodOvipositorAnimal
  • +
  • ArthropodOvipositorHornyAnimal
  • +
  • Beauty_Ugly @@ -73,7 +82,14 @@ Feline - Feline_Group + +
  • Feline_Group
  • +
  • FelineAnimal
  • +
  • FelineHornyAnimal
  • +
  • FelineSingleGenderAnimal
  • +
  • AA_SandProwlerAnimal
  • + +
  • Tail_Furry @@ -108,7 +124,10 @@ Equine - Equine_Group + +
  • Equine_Group
  • +
  • HorseAnimal
  • +
  • Furskin @@ -143,7 +162,12 @@ Dragon - Dragon_Group + +
  • Dragon_Group
  • +
  • ThrumboAnimal
  • +
  • DragonAnimal
  • +
  • DragonSingleGenderAnimal
  • +
  • Unstoppable @@ -166,7 +190,7 @@ 0.1
  • - rjw_genes_draconic_genitalia + rjw_genes_dragon_genitalia 0.6
  • @@ -190,7 +214,12 @@ Rodent - Rodent_Group + +
  • Rodent_Group
  • +
  • RodentAnimal
  • +
  • RodentSingleGenderAnimal
  • +
  • DragonSingleGenderAnimal
  • +
  • Furskin @@ -225,7 +254,10 @@ Racoon - Raccon_Group + +
  • Raccon_Group
  • +
  • RaccoonAnimal
  • +
  • Furskin diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml index 29e92c6..b092257 100644 --- a/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml @@ -1,12 +1,17 @@ - - +this is to disable the xml, remove it for your own xml --> - + + +this is to disable the xml, remove it for your own xml --> \ No newline at end of file diff --git a/Common/Defs/Xenotypes/Succubus.xml b/Common/Defs/Xenotypes/Succubus.xml new file mode 100644 index 0000000..c6b51a1 --- /dev/null +++ b/Common/Defs/Xenotypes/Succubus.xml @@ -0,0 +1,53 @@ + + + + + rjw_genes_succubus + + Succubi are strongly enhanced xenohumans. Powered by archites, their abilities go far beyond normal genetic enhancements. These overnaturally beautiful creatures strive parasitically on the Fertilin found in semen. + Succubi are beautiful and extremely hungry Xenohumans. They strive on having sex and extracting their victims life-force through this. + UI/Icons/Xenotypes/Sanguophage + PawnBecameSanguophage + 0.5 + 0.1~140 + 1 + -1000 + 0.005 + + 0.02 + 0.02 + 0.02 + 0.02 + 0.02 + 0.02 + + +
  • rjw_genes_bisexual
  • +
  • rjw_genes_hypersexual
  • +
  • rjw_genes_female_only
  • +
  • rjw_genes_lifeforce
  • +
  • rjw_genes_lifeforce_drain
  • +
  • rjw_genes_vaginal_absorber
  • +
  • rjw_genes_anal_absorber
  • + +
  • rjw_genes_drainer
  • + +
  • rjw_genes_pussyhealer
  • +
  • rjw_genes_paralysingkiss
  • +
  • rjw_genes_seduce
  • +
  • rjw_genes_elasticity
  • +
  • rjw_genes_succubus_tail
  • +
  • rjw_genes_aphrodisiac_pheromones
  • + +
  • Beauty_Pretty
  • +
  • MoveSpeed_Quick
  • +
  • Robust
  • +
  • UVSensitivity_Intense
  • +
  • AptitudeStrong_Social
  • +
  • Ears_Pointed
  • +
  • Headbone_MiniHorns
  • +
  • Skin_Purple
  • +
    + + +
    \ No newline at end of file diff --git a/Source/Animal_Inheritance/BestialityGeneInheritanceDef.cs b/Source/Animal_Inheritance/BestialityGeneInheritanceDef.cs index 04a9735..ae0c51e 100644 --- a/Source/Animal_Inheritance/BestialityGeneInheritanceDef.cs +++ b/Source/Animal_Inheritance/BestialityGeneInheritanceDef.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace RJW_BGS +namespace RJW_BGS { public class BestialityGeneInheritanceDef { diff --git a/Source/Animal_Inheritance/InheritanceUtility.cs b/Source/Animal_Inheritance/InheritanceUtility.cs index d860b14..de486ae 100644 --- a/Source/Animal_Inheritance/InheritanceUtility.cs +++ b/Source/Animal_Inheritance/InheritanceUtility.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; using Verse; using RimWorld; using rjw; @@ -20,14 +16,18 @@ namespace RJW_BGS if (mother.RaceProps.Humanlike && father.RaceProps.Humanlike) return genelist; - + ModLog.Message($"Trigger an Animal-Gene-Inheritance for {father.Name} and {mother.Name}"); //One parent must be an animal and the other must be human, so only one needs to return if (father != null && !father.RaceProps.Humanlike) { + if (RJW_BGSSettings.rjw_bgs_detailed_debug) + ModLog.Message($"Father was found to be animal - looking up genes for {father.Name}"); return SelectGenes(father); } if (mother != null && !mother.RaceProps.Humanlike) { + if (RJW_BGSSettings.rjw_bgs_detailed_debug) + ModLog.Message($"Mother was found to be animal - looking up genes for {mother.Name}"); return SelectGenes(mother); } @@ -48,30 +48,48 @@ namespace RJW_BGS { foreach (BestialityGeneInheritanceDef gene in raceGeneDef.genes) { - if (gene.chance * RJW_BGSSettings.global_gene_chance >= Rand.Range(0.01f,1f)) + if (gene.chance * RJW_BGSSettings.rjw_bgs_global_gene_chance >= Rand.Range(0.01f,1f)) { genelist.Add(DefDatabase.GetNamed(gene.defName)); } } } + if (RJW_BGSSettings.rjw_bgs_detailed_debug) + ModLog.Message($"From {raceGeneDef.genes.Count} possible genes in {raceGeneDef.defName}, {genelist.Count} were added by chance ({RJW_BGSSettings.rjw_bgs_global_gene_chance} chance multiplier from Settings)."); return genelist; } + + /// + /// Adds a list of Genes to the pawns existing GeneSet. + /// Whether it is added as a Xenogene or Endogene is configured in Mod-Settings. + /// + /// The pawn for which Genes will be added + /// The Genes to add (Endogene by default, Xenogene with Mod Settings) public static void AddGenes(Pawn pawn, List genes) { foreach (GeneDef gene in genes) { - pawn.genes.AddGene(gene, false); + pawn.genes.AddGene(gene, RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes); } } - //For ParchRJWHediffInsect_egg + /// + /// Initiates a bestiality baby with genes if the baby does not exist earlier. + /// This is used to make rjw-egg-pregnancies work. + /// Related file: PatchRJWHediffInsect_Egg.cs + /// + /// The mother of the baby. + /// The father of the baby. + /// The baby created in non-pregnancy-way (has 0 Genes yet) public static void NewGenes(Pawn mother, Pawn dad, Pawn baby) { - if (!RJW_BGSSettings.enabled) + if (!RJW_BGSSettings.rjw_bgs_enabled) { return; } + + ModLog.Message($"Triggering an New-Gene Animal-Gene-Inheritance for {baby.Name} ({dad.Name} + {mother.Name})"); if (baby.RaceProps.Humanlike) { if (baby.genes == null) diff --git a/Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs b/Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs index 31f9bfd..da5ac8d 100644 --- a/Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs +++ b/Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs @@ -16,7 +16,7 @@ namespace RJW_BGS [HarmonyPostfix] public static void AddGenes(Pawn mother, Pawn dad, ref Hediff_BasePregnancy __instance) { - if (!RJW_BGSSettings.enabled) + if (!RJW_BGSSettings.rjw_bgs_enabled) { return; } diff --git a/Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs b/Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs index d52f62d..587571f 100644 --- a/Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs +++ b/Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs @@ -1,14 +1,8 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using HarmonyLib; using rjw; -using RimWorld; -using Verse; namespace RJW_BGS { diff --git a/Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs b/Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs index 6aa5e1d..afbfa09 100644 --- a/Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs +++ b/Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs @@ -1,15 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using HarmonyLib; using RimWorld; using Verse; -using rjw; namespace RJW_BGS { + /// + /// This Patch is applied to change the normal pregnancy to add animal-inheritance. + /// If the settings allow animal gene inheritance, + /// the genes are determined and "simply added". + /// [HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[] { typeof(Pawn), @@ -22,7 +24,7 @@ namespace RJW_BGS [HarmonyPostfix] public static void AnimalInheritedGenes(Pawn father, Pawn mother, ref GeneSet __result) { - if (!RJW_BGSSettings.enabled) + if (!RJW_BGSSettings.rjw_bgs_enabled) { return; } diff --git a/Source/Animal_Inheritance/RJW_BGSSettings.cs b/Source/Animal_Inheritance/RJW_BGSSettings.cs index 4847d89..d619354 100644 --- a/Source/Animal_Inheritance/RJW_BGSSettings.cs +++ b/Source/Animal_Inheritance/RJW_BGSSettings.cs @@ -21,23 +21,31 @@ namespace RJW_BGS listing_Standard.ColumnWidth = rect.width / 2.05f; listing_Standard.Begin(rect); listing_Standard.Gap(24f); - listing_Standard.CheckboxLabeled("enabled", ref enabled, "no function yet", 0f, 1f); + listing_Standard.CheckboxLabeled("enabled", ref rjw_bgs_enabled, "If toggled, Animal Pregnancies will try inherit genes.", 0f, 1f); //listing_Standard.CheckboxLabeled("sexfrenzy", ref sexfrenzy, "disable the effects", 0f, 1f); listing_Standard.Gap(5f); listing_Standard.Label("gene inheritance chance"+ ": " + - Math.Round((double)(RJW_BGSSettings.global_gene_chance * 100f), 0).ToString() + "%", -1f, "modify chance for a gene to be inherited."); - RJW_BGSSettings.global_gene_chance = listing_Standard.Slider(RJW_BGSSettings.global_gene_chance, 0f, 5f); + Math.Round((double)(RJW_BGSSettings.rjw_bgs_global_gene_chance * 100f), 0).ToString() + "%", -1f, "modify chance for a gene to be inherited."); + RJW_BGSSettings.rjw_bgs_global_gene_chance = listing_Standard.Slider(RJW_BGSSettings.rjw_bgs_global_gene_chance, 0f, 5f); + listing_Standard.Gap(5f); + listing_Standard.CheckboxLabeled("genes as xenogenes", ref rjw_bgs_animal_genes_as_xenogenes, "If toggled, animal genes will be added as xenogenes.", 0f, 1f); + listing_Standard.Gap(5f); + listing_Standard.CheckboxLabeled("detailed-debug", ref rjw_bgs_detailed_debug, "Adds detailed information to the log about pregnancies and genes.", 0f, 1f); listing_Standard.End(); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref RJW_BGSSettings.enabled, "enabled", RJW_BGSSettings.enabled, true); - Scribe_Values.Look(ref RJW_BGSSettings.global_gene_chance, "global_gene_chance", RJW_BGSSettings.global_gene_chance, true); + Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_enabled, "rjw_bgs_enabled", RJW_BGSSettings.rjw_bgs_enabled, true); + Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_global_gene_chance, "rjw_bgs_global_gene_chance", RJW_BGSSettings.rjw_bgs_global_gene_chance, true); + Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, "rjw_bgs_animal_genes_as_xenogenes", RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, true); + Scribe_Values.Look(ref RJW_BGSSettings.rjw_bgs_detailed_debug, "rjw_bgs_detailed_debug", RJW_BGSSettings.rjw_bgs_detailed_debug, true); } - public static float global_gene_chance = 1f; - public static bool enabled = true; + public static float rjw_bgs_global_gene_chance = 1f; + public static bool rjw_bgs_enabled = true; + public static bool rjw_bgs_animal_genes_as_xenogenes = false; + public static bool rjw_bgs_detailed_debug = false; } } diff --git a/Source/Animal_Inheritance/RaceGeneDef.cs b/Source/Animal_Inheritance/RaceGeneDef.cs index 02ac62d..5c4b0ad 100644 --- a/Source/Animal_Inheritance/RaceGeneDef.cs +++ b/Source/Animal_Inheritance/RaceGeneDef.cs @@ -11,11 +11,11 @@ namespace RJW_BGS public class RaceGeneDef : Def { public int priority; - public String raceGroup; + public string raceGroup; //keeping this for backwards compatibility + public List raceGroups; //racegroup, but in list form so multiple can be entered, preference to use this over racegroup public List raceNames; public List pawnKindNames; public List genes; - //public List genechances; public String hybridName; } } diff --git a/Source/Animal_Inheritance/RaceGeneDef_Helper.cs b/Source/Animal_Inheritance/RaceGeneDef_Helper.cs index 680b155..f88084d 100644 --- a/Source/Animal_Inheritance/RaceGeneDef_Helper.cs +++ b/Source/Animal_Inheritance/RaceGeneDef_Helper.cs @@ -1,11 +1,8 @@ -using System; +using rjw; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; -using rjw; using Verse; -using RimWorld; namespace RJW_BGS { @@ -21,14 +18,14 @@ namespace RJW_BGS return result; } return null; - //First check if there is a matching pawnkinddef then race, then racegroup - } + public static List ValidRaceGeneDefs(Pawn pawn) { PawnKindDef kindDef = pawn.kindDef; if (kindDef == null) { + ModLog.Warning($"Error looking up PawnKindDef for {pawn.Name} - Could not lookup Animal Inheritance Genes"); return null; } string raceName = kindDef.race.defName; @@ -36,6 +33,9 @@ namespace RJW_BGS PawnData pawnData = SaveStorage.DataStore.GetPawnData(pawn); RaceGroupDef raceGroupDef = pawnData.RaceSupportDef; + if (RJW_BGSSettings.rjw_bgs_detailed_debug) + ModLog.Message($"Looking up Animal-Inheritable Genes for {pawn.Name} with KindDef {kindDef.defName},RaceName {raceName}, PawnKind {pawnKindName} and RaceGroup {raceGroupDef.defName}"); + IEnumerable allDefs = DefDatabase.AllDefs; List pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group) { @@ -43,26 +43,60 @@ namespace RJW_BGS return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); }).ToList(); if (pawnKindDefs.Count() > 0) + { + DebugPrintRaceGeneDefs("PawnKindDefs",pawn.Name.ToStringFull,pawnKindDefs); return pawnKindDefs; + } + else if (RJW_BGSSettings.rjw_bgs_detailed_debug) + ModLog.Message($"Did not find PawnKindDefs for {pawn.Name.ToStringFull}"); + List raceKindDefs = allDefs.Where(delegate (RaceGeneDef group) { List raceNames = group.raceNames; return raceNames != null && raceNames.Contains(raceName); }).ToList(); if (raceKindDefs.Count() > 0) + { + DebugPrintRaceGeneDefs("PawnKindDefs", pawn.Name.ToStringFull, raceKindDefs); return raceKindDefs; + } + else if (RJW_BGSSettings.rjw_bgs_detailed_debug) + ModLog.Message($"Did not find RaceKindDefs for {pawn.Name.ToStringFull}"); + List raceGroupDefs = new List(); if (raceGroupDef != null) { raceGroupDefs = allDefs.Where(delegate (RaceGeneDef group) { - String raceGroupDefName = group.raceGroup; - return raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName; + string raceGroupDefName = group.raceGroup; + List list_raceGroupDefName = group.raceGroups; + return (raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName) + || (list_raceGroupDefName != null && list_raceGroupDefName.Contains(raceGroupDef.defName)); }).ToList(); } + if (raceGroupDefs.Count() > 0) + { + DebugPrintRaceGeneDefs("RaceKindDefs", pawn.Name.ToStringFull, raceGroupDefs); return raceGroupDefs; + } + else if (RJW_BGSSettings.rjw_bgs_detailed_debug) + ModLog.Message($"Did not find RaceGroupDefs for {pawn.Name.ToStringFull}"); + + ModLog.Message($"Did not find any Genes inheritable for {pawn.Name.ToStringFull}"); return new List(); } + + private static void DebugPrintRaceGeneDefs(String header,String identifier,List defs) + { + if (RJW_BGSSettings.rjw_bgs_detailed_debug) + { + var defString = "["; + foreach (RaceGeneDef raceGeneDef in defs) + defString += $"({raceGeneDef.priority}:{raceGeneDef.defName} - {raceGeneDef.genes.Count} Genes)"; + defString += "]"; + ModLog.Message($"Found the following {header}-Genes for {identifier}: {defString}"); + } + } } } diff --git a/Source/Common/ModLog.cs b/Source/Common/ModLog.cs new file mode 100644 index 0000000..407520a --- /dev/null +++ b/Source/Common/ModLog.cs @@ -0,0 +1,34 @@ +using Verse; + +namespace RJW_Genes +{ + internal class ModLog + { + public static string ModId => "RJW-Genes"; + + /// + /// Logs the given message with [SaveStorage.ModId] appended. + /// + public static void Error(string message) + { + Log.Error($"[{ModId}] {message}"); + } + + /// + /// Logs the given message with [SaveStorage.ModId] appended. + /// + public static void Message(string message) + { + Log.Message($"[{ModId}] {message}"); + } + + /// + /// Logs the given message with [SaveStorage.ModId] appended. + /// + public static void Warning(string message) + { + Log.Warning($"[{ModId}] {message}"); + } + + } +} diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index d25284d..73aeb76 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -51,6 +51,7 @@ namespace RJW_Genes public static readonly GeneDef rjw_genes_mechbreeder; public static readonly GeneDef rjw_genes_insectincubator; public static readonly GeneDef rjw_genes_insectbreeder; + public static readonly GeneDef rjw_genes_zoophile; // Cum public static readonly GeneDef rjw_genes_no_cum; @@ -63,7 +64,8 @@ namespace RJW_Genes // Reproduction public static readonly GeneDef rjw_genes_hypersexual; public static readonly GeneDef rjw_genes_rapist; - public static readonly GeneDef rjw_genes_zoophile; + public static readonly GeneDef rjw_genes_homosexual; + public static readonly GeneDef rjw_genes_bisexual; // Damage & Side Effects [MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_elasticity; @@ -71,23 +73,29 @@ namespace RJW_Genes // Special public static readonly GeneDef rjw_genes_orgasm_rush; + public static readonly GeneDef rjw_genes_youth_fountain; + public static readonly GeneDef rjw_genes_sex_age_drain; public static readonly GeneDef rjw_genes_aphrodisiac_pheromones; // LifeForce public static readonly GeneDef rjw_genes_lifeforce; public static readonly GeneDef rjw_genes_pussyhealing; + public static readonly GeneDef rjw_genes_lifeforce_drain; public static readonly GeneDef rjw_genes_vaginal_absorber; public static readonly GeneDef rjw_genes_anal_absorber; public static readonly GeneDef rjw_genes_drainer; // Cosmetic public static readonly GeneDef rjw_genes_succubus_tail; + public static readonly GeneDef rjw_genes_succubus_wings; - + // Others & Non-Genes public static readonly GeneDef rjw_genes_youth_fountain; public static readonly GeneDef rjw_genes_sex_age_drain; public static readonly HediffDef rjw_genes_orgasm_rush_hediff; public static readonly XenotypeDef Succubus; + + } } diff --git a/Source/Genes/Damage/Gene_Unbreakable.cs b/Source/Genes/Damage/Gene_Unbreakable.cs index 2ebdad3..578ed8a 100644 --- a/Source/Genes/Damage/Gene_Unbreakable.cs +++ b/Source/Genes/Damage/Gene_Unbreakable.cs @@ -1,5 +1,4 @@ -using LicentiaLabs; -using rjw; +using rjw; using Verse; namespace RJW_Genes diff --git a/Source/Genes/ExtraGenitalia/Gene_Futa.cs b/Source/Genes/ExtraGenitalia/Gene_Futa.cs index 2d9f367..812f381 100644 --- a/Source/Genes/ExtraGenitalia/Gene_Futa.cs +++ b/Source/Genes/ExtraGenitalia/Gene_Futa.cs @@ -13,6 +13,12 @@ namespace RJW_Genes { base.PostMake(); + // If the Pawn is already a Futa, do not do anything. Can Happen by Base-RJW Spawn Chance or potentially races / other mods. + if (IsAlreadyFuta(pawn)) + { + return; + } + if (GenderUtility.IsFemale(pawn) && additional_genital == null) { createAndAddPenis(); @@ -27,6 +33,12 @@ namespace RJW_Genes { base.PostAdd(); + // If the Pawn is already a Futa, do not do anything. Can Happen by Base-RJW Spawn Chance or potentially races / other mods. + if (IsAlreadyFuta(pawn)) + { + return; + } + if (pawn.gender == Gender.Female && additional_genital == null) { createAndAddPenis(); @@ -79,5 +91,15 @@ namespace RJW_Genes pawn.health.AddHediff(additional_genital, partBPR); } + private static bool IsAlreadyFuta(Pawn pawn) + { + if (pawn == null) + return false; + if (!Genital_Helper.has_genitals(pawn)) + return false; + return + (Genital_Helper.has_penis_fertile(pawn) || Genital_Helper.has_penis_infertile(pawn)) + && Genital_Helper.has_vagina(pawn) ; + } } } diff --git a/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs index f4baccd..5b48a18 100644 --- a/Source/Genes/GeneUtility.cs +++ b/Source/Genes/GeneUtility.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Verse; using RimWorld; namespace RJW_Genes @@ -102,7 +103,7 @@ namespace RJW_Genes return pawn.genes.HasGene(GeneDefOf.rjw_genes_youth_fountain); } - internal static bool IsAgeDrainer(Pawn pawn) + public static bool IsAgeDrainer(Pawn pawn) { if (pawn.genes == null) { @@ -173,5 +174,20 @@ namespace RJW_Genes } return pawn.genes.HasGene(GeneDefOf.rjw_genes_unbreakable); } + + public static List GetGenitaliaResizingGenes(Pawn pawn) + { + var ResizingGenes = new List(); + + // Error Handling: Issue with Pawn or Genes return empty. + if (pawn == null || pawn.genes == null) + return ResizingGenes; + + foreach (Gene gene in pawn.genes.GenesListForReading) + if (gene is Gene_GenitaliaResizingGene resizing_gene) + ResizingGenes.Add(resizing_gene); + + return ResizingGenes; + } } } \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs b/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs index b0e61ad..b1c6e4f 100644 --- a/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs +++ b/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs @@ -1,24 +1,12 @@ using Verse; namespace RJW_Genes { - public class Gene_BigBreasts : RJW_Gene + public class Gene_BigBreasts : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - - if (pawn.gender == Gender.Female) - SizeAdjuster.AdjustAllBreastSizes(pawn,0.5f,1.0f); - } - - public override void PostAdd() - { - base.PostAdd(); if (pawn.gender == Gender.Female) SizeAdjuster.AdjustAllBreastSizes(pawn, 0.5f, 1.0f); } - - } -} +} \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs index b04df46..8cee1ef 100644 --- a/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs +++ b/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs @@ -1,20 +1,10 @@ namespace RJW_Genes { - public class Gene_BigMaleGenitalia : RJW_Gene + public class Gene_BigMaleGenitalia : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - - SizeAdjuster.AdjustAllPenisSizes(pawn,0.5f,1.0f); - } - - public override void PostAdd() - { - base.PostAdd(); SizeAdjuster.AdjustAllPenisSizes(pawn, 0.5f, 1.0f); } - } -} +} \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs new file mode 100644 index 0000000..ee24126 --- /dev/null +++ b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs @@ -0,0 +1,49 @@ +namespace RJW_Genes +{ + /// + /// Parent Gene for Genitalia Resizing. All Resizing genes should inherit for this class. + /// + /// This helps with some functions (e.g. "hasGenitaliaResizingGenes(pawn)") but also to fire genitalia resizing later in life for Pawns. + /// (No Children with huge ding dongs, and I don't want kids with tight anuses I am not that degenerate) + /// + public abstract class Gene_GenitaliaResizingGene : RJW_Gene + { + + public const int RESIZING_AGE = 20; + public bool WasApplied { get; set; } + + public override void PostMake() + { + base.PostMake(); + if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE) + { + Resize(); + WasApplied = true; + } + } + + public override void PostAdd() + { + base.PostAdd(); + if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE) + { + Resize(); + WasApplied = true; + } + } + + /// + /// Used to resize the pawns genitalia. + /// All Logic should be put here: + /// 1. Filters for Gender + /// 2. Filters for Genitalia Existance + /// 3. Selection of right Genitalia + /// 4. Adjustment of Size + /// + /// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and also for futas, + /// while the breast-gene is female only. + /// + public abstract void Resize(); + + } +} \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs b/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs index f5a5312..520eb5a 100644 --- a/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs +++ b/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs @@ -1,22 +1,12 @@ -namespace RJW_Genes +using Verse; + +namespace RJW_Genes { - public class Gene_LooseAnus : RJW_Gene + public class Gene_LooseAnus : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - SizeAdjuster.AdjustAllAnusSizes(pawn, 0.5f, 1.0f); } - - public override void PostAdd() - { - base.PostAdd(); - SizeAdjuster.AdjustAllAnusSizes(pawn, 0.5f, 1.0f); - } - - - } } diff --git a/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs index 68578b6..2885c07 100644 --- a/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs +++ b/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs @@ -1,22 +1,12 @@ -namespace RJW_Genes +using Verse; + +namespace RJW_Genes { - public class Gene_LooseFemaleGenitalia : RJW_Gene + public class Gene_LooseFemaleGenitalia : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.5f, 1.0f); } - - public override void PostAdd() - { - base.PostAdd(); - SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.5f, 1.0f); - } - - - } } diff --git a/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs b/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs index d5b4a4e..2e8af43 100644 --- a/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs +++ b/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs @@ -1,18 +1,11 @@ -namespace RJW_Genes +using Verse; + +namespace RJW_Genes { - public class Gene_SmallBreasts : RJW_Gene + public class Gene_SmallBreasts : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - - SizeAdjuster.AdjustAllBreastSizes(pawn, 0.0f, 0.5f); - } - - public override void PostAdd() - { - base.PostAdd(); SizeAdjuster.AdjustAllBreastSizes(pawn, 0.0f, 0.5f); } } diff --git a/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs index 12ba154..ce5d33a 100644 --- a/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs +++ b/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs @@ -1,20 +1,10 @@ namespace RJW_Genes { - public class Gene_SmallMaleGenitalia : RJW_Gene + public class Gene_SmallMaleGenitalia : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - - SizeAdjuster.AdjustAllPenisSizes(pawn,0.0f,0.5f); - } - - public override void PostAdd() - { - base.PostAdd(); SizeAdjuster.AdjustAllPenisSizes(pawn, 0.0f, 0.5f); } - } -} +} \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Gene_TightAnus.cs b/Source/Genes/GenitaliaSize/Gene_TightAnus.cs index 56f52cd..443aba7 100644 --- a/Source/Genes/GenitaliaSize/Gene_TightAnus.cs +++ b/Source/Genes/GenitaliaSize/Gene_TightAnus.cs @@ -1,21 +1,10 @@ namespace RJW_Genes { - public class Gene_TightAnus : RJW_Gene + public class Gene_TightAnus : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - SizeAdjuster.AdjustAllAnusSizes(pawn, 0.0f, 0.5f); } - - public override void PostAdd() - { - base.PostAdd(); - SizeAdjuster.AdjustAllAnusSizes(pawn, 0.0f, 0.5f); - } - - } -} +} \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs index 53ec2a7..306635d 100644 --- a/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs +++ b/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs @@ -1,20 +1,10 @@ namespace RJW_Genes { - public class Gene_TightFemaleGenitalia : RJW_Gene + public class Gene_TightFemaleGenitalia : Gene_GenitaliaResizingGene { - - public override void PostMake() + public override void Resize() { - base.PostMake(); - SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.0f, 0.5f); } - - public override void PostAdd() - { - base.PostAdd(); - SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.0f, 0.5f); - } - } -} +} \ No newline at end of file diff --git a/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs b/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs new file mode 100644 index 0000000..b8542a0 --- /dev/null +++ b/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs @@ -0,0 +1,30 @@ +using HarmonyLib; +using Verse; + +namespace RJW_Genes +{ + /// + /// This Patch adds behavior to all resizing genes: + /// At Age RESIZING_MIN_AGE the Pawns Resizing Genes will trigger again, if not already triggered somewhere else. + /// This is meant to allow kids to grow up without resized genitals, and resize later (Fixing #11). + /// + [HarmonyPatch(typeof(Pawn_AgeTracker), "BirthdayBiological")] + public class Patch_ResizingOnAdulthood + { + + static void Postfix(Pawn ___pawn, int birthdayAge) + { + if (birthdayAge >= Gene_GenitaliaResizingGene.RESIZING_AGE) + { + foreach(Gene_GenitaliaResizingGene gene in GeneUtility.GetGenitaliaResizingGenes(___pawn)) + { + if (!gene.WasApplied) + { + gene.Resize(); + gene.WasApplied = true; + } + } + } + } + } +} \ No newline at end of file diff --git a/Source/Genes/Life_Force/Gene_LifeForce.cs b/Source/Genes/Life_Force/Gene_LifeForce.cs index c5cfa12..5bb73b6 100644 --- a/Source/Genes/Life_Force/Gene_LifeForce.cs +++ b/Source/Genes/Life_Force/Gene_LifeForce.cs @@ -24,7 +24,7 @@ namespace RJW_Genes Pawn pawn = this.pawn; return ((pawn != null) ? pawn.ageTracker : null) == null || - ((float)this.pawn.ageTracker.AgeBiologicalYears >= this.def.minAgeActive && this.pawn.ageTracker.AgeBiologicalYears >= (RJWSettings.AllowYouthSex ? 13f : 18f)); + ((float)this.pawn.ageTracker.AgeBiologicalYears >= this.def.minAgeActive); } } diff --git a/Source/Genes/Special/Patch_AgeDrain.cs b/Source/Genes/Special/Patch_AgeDrain.cs index 981f483..2c7e55d 100644 --- a/Source/Genes/Special/Patch_AgeDrain.cs +++ b/Source/Genes/Special/Patch_AgeDrain.cs @@ -13,9 +13,11 @@ namespace RJW_Genes.Genes.Special { const long AGE_TRANSFERED = 120000; // 120k == 2 days + // 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety + const long MINIMUM_AGE = 20 * 60 * 60000 + 1; // Comment Below in for debugging, changes years - // const long AGE_TRANSFERED = 6000000; // 6000k == 100 days + // const long AGE_TRANSFERED = 12000000; public static void Postfix(SexProps props) { if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() ) @@ -25,12 +27,12 @@ namespace RJW_Genes.Genes.Special if (GeneUtility.IsAgeDrainer(props.pawn)) { var pawnAge = props.pawn.ageTracker.AgeBiologicalTicks; - var pawnMinAge = props.pawn.ageTracker.AdultMinAgeTicks; + //ModLog.Error($"Firing Age Drain \nMinimum Age is \t{MINIMUM_AGE} \nPawn Age is \t{pawnAge} \nTransferred \t{AGE_TRANSFERED}\nResulting in \t{pawnAge - AGE_TRANSFERED}"); // Make Partner older props.partner.ageTracker.AgeBiologicalTicks += AGE_TRANSFERED; // Make Pawn younger - props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(pawnMinAge, pawnAge - AGE_TRANSFERED); + props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED)); } } diff --git a/Source/Genes/Special/Patch_OrgasmRush.cs b/Source/Genes/Special/Patch_OrgasmRush.cs index fefcb7a..3caaa68 100644 --- a/Source/Genes/Special/Patch_OrgasmRush.cs +++ b/Source/Genes/Special/Patch_OrgasmRush.cs @@ -46,10 +46,10 @@ namespace RJW_Genes /// public static Hediff GetOrgasmRushHediff(Pawn orgasmed) { - Hediff orgasmRushHediff = orgasmed.health.hediffSet.GetFirstHediffOfDef(GeneDefOf.rjw_genes_orgasm_rush_hediff); + Hediff orgasmRushHediff = orgasmed.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_orgasm_rush_hediff); if (orgasmRushHediff == null) { - orgasmRushHediff = HediffMaker.MakeHediff(GeneDefOf.rjw_genes_orgasm_rush_hediff, orgasmed); + orgasmRushHediff = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_orgasm_rush_hediff, orgasmed); orgasmRushHediff.Severity = 0; orgasmed.health.AddHediff(orgasmRushHediff); } diff --git a/Source/Genes/Special/Patch_Youth_Fountain.cs b/Source/Genes/Special/Patch_Youth_Fountain.cs index f2c7e13..a1a1840 100644 --- a/Source/Genes/Special/Patch_Youth_Fountain.cs +++ b/Source/Genes/Special/Patch_Youth_Fountain.cs @@ -13,9 +13,11 @@ namespace RJW_Genes.Genes.Special { const long AGE_REDUCTION = 60000; // 60k == 1 day + // 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety + const long MINIMUM_AGE = 20 * 60 * 60000 + 1; // Comment Below in for debugging - //const long AGE_REDUCTION = 6000000; // 6000k == 100 days + // const long AGE_REDUCTION = 6000000; // 6000k == 100 days public static void Postfix(SexProps props) { if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal()) @@ -25,12 +27,18 @@ namespace RJW_Genes.Genes.Special if (GeneUtility.IsYouthFountain(props.pawn)) { var partnerAge = props.partner.ageTracker.AgeBiologicalTicks; - var minAge = props.partner.ageTracker.AdultMinAgeTicks; - props.partner.ageTracker.AgeBiologicalTicks = Math.Max(minAge, partnerAge - AGE_REDUCTION); + //ModLog.Error($"Firing Youth Fountain \nMinimum Age is \t{MINIMUM_AGE}\t{ticksToYears(MINIMUM_AGE)}y\nPawn Age is \t{partnerAge}\t{ticksToYears(partnerAge)}y \nTransferred \t {AGE_REDUCTION}\t{ticksToYears(AGE_REDUCTION)}y\nResulting in \t{partnerAge - AGE_REDUCTION}\t{ticksToYears(partnerAge - AGE_REDUCTION)}y"); + + props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION); } } + private static float ticksToYears(long ticks) + { + return (ticks / 60000f) / 60f; + } } + } diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs index b0425ec..c6581f8 100644 --- a/Source/HediffDefOf.cs +++ b/Source/HediffDefOf.cs @@ -14,5 +14,6 @@ namespace RJW_Genes public static readonly HediffDef Aphrodisiac_Pheromone; public static readonly HediffDef Fertilin_Lost; public static readonly HediffDef Succubus_Drained; + public static readonly HediffDef rjw_genes_orgasm_rush_hediff; } } diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 6b61162..c6cc0f6 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -63,7 +63,6 @@ - @@ -74,6 +73,7 @@ + @@ -85,6 +85,7 @@ + @@ -101,6 +102,7 @@ + @@ -108,6 +110,7 @@ + @@ -134,9 +137,7 @@ - - @@ -155,6 +156,7 @@ +