mirror of
				https://github.com/vegapnk/RJW-Genes.git
				synced 2024-08-15 00:23:31 +00:00 
			
		
		
		
	Drafts for more extra-genitalia
This commit is contained in:
		
							parent
							
								
									bb679527af
								
							
						
					
					
						commit
						fa07b9365c
					
				
					 14 changed files with 514 additions and 38 deletions
				
			
		| 
						 | 
				
			
			@ -21,5 +21,11 @@ namespace RJW_Genes
 | 
			
		|||
		// Extra Genitalia 
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_extra_penis;
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_no_penis;
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_extra_vagina;
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_no_vagina;
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_extra_breasts;
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_no_breasts;
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_extra_anus;
 | 
			
		||||
		[MayRequireBiotech] public static readonly GeneDef rjw_genes_no_anus;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										59
									
								
								Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
namespace RJW_Genes
 | 
			
		||||
{
 | 
			
		||||
    public class Gene_ExtraAnus : Gene
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        internal Hediff additional_anus;
 | 
			
		||||
 | 
			
		||||
        public override void PostMake()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostMake();
 | 
			
		||||
            if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
 | 
			
		||||
                Sexualizer.sexualize_pawn(pawn);
 | 
			
		||||
 | 
			
		||||
            if (additional_anus == null)
 | 
			
		||||
            {
 | 
			
		||||
                CreateAndAddAnus();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public override void PostAdd()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostAdd();
 | 
			
		||||
 | 
			
		||||
            if (additional_anus == null)
 | 
			
		||||
            {
 | 
			
		||||
                CreateAndAddAnus();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void PostRemove()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostRemove();
 | 
			
		||||
            if(additional_anus != null)    
 | 
			
		||||
                pawn.health.RemoveHediff(additional_anus);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void CreateAndAddAnus()
 | 
			
		||||
        {
 | 
			
		||||
            var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
 | 
			
		||||
            var anusDef = GenitaliaUtility.GetAnusForGene(correctGene);
 | 
			
		||||
            var partBPR = Genital_Helper.get_anusBPR(pawn);
 | 
			
		||||
            additional_anus = HediffMaker.MakeHediff(anusDef, pawn);
 | 
			
		||||
 | 
			
		||||
            var CompHediff = additional_anus.TryGetComp<rjw.CompHediffBodyPart>();
 | 
			
		||||
            if (CompHediff != null)
 | 
			
		||||
            {
 | 
			
		||||
                CompHediff.initComp(pawn);
 | 
			
		||||
                CompHediff.updatesize();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            pawn.health.AddHediff(additional_anus, partBPR);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
namespace RJW_Genes
 | 
			
		||||
{
 | 
			
		||||
    public class Gene_ExtraBreasts : Gene
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        internal Hediff additional_breasts;
 | 
			
		||||
 | 
			
		||||
        public override void PostMake()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostMake();
 | 
			
		||||
            if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
 | 
			
		||||
                Sexualizer.sexualize_pawn(pawn);
 | 
			
		||||
 | 
			
		||||
            // Penis are only added for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && additional_breasts == null)
 | 
			
		||||
            {
 | 
			
		||||
                createAndAddPenis();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public override void PostAdd()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostAdd();
 | 
			
		||||
 | 
			
		||||
            // Penis are only added for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && additional_breasts == null)
 | 
			
		||||
            {
 | 
			
		||||
                createAndAddPenis();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void PostRemove()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostRemove();
 | 
			
		||||
            if(additional_breasts != null)    
 | 
			
		||||
                pawn.health.RemoveHediff(additional_breasts);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void createAndAddPenis()
 | 
			
		||||
        {
 | 
			
		||||
            var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
 | 
			
		||||
            var breastDef = GenitaliaUtility.GetBreastsForGene(correctGene);
 | 
			
		||||
            var partBPR = Genital_Helper.get_breastsBPR(pawn);
 | 
			
		||||
            additional_breasts = HediffMaker.MakeHediff(breastDef, pawn);
 | 
			
		||||
 | 
			
		||||
            var CompHediff = additional_breasts.TryGetComp<rjw.CompHediffBodyPart>();
 | 
			
		||||
            if (CompHediff != null)
 | 
			
		||||
            {
 | 
			
		||||
                CompHediff.initComp(pawn);
 | 
			
		||||
                CompHediff.updatesize();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            pawn.health.AddHediff(additional_breasts, partBPR);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ namespace RJW_Genes
 | 
			
		|||
        internal void createAndAddPenis()
 | 
			
		||||
        {
 | 
			
		||||
            var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
 | 
			
		||||
            var penisDef = GenitaliaUtility.GetPenisForGene(correctGene);
 | 
			
		||||
            HediffDef penisDef = GenitaliaUtility.GetPenisForGene(correctGene);
 | 
			
		||||
            var partBPR = Genital_Helper.get_genitalsBPR(pawn);
 | 
			
		||||
            additional_penis = HediffMaker.MakeHediff(penisDef, pawn);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										66
									
								
								Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
namespace RJW_Genes
 | 
			
		||||
{
 | 
			
		||||
    public class Gene_ExtraVagina : Gene
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        internal Hediff additional_vagina;
 | 
			
		||||
 | 
			
		||||
        //TODO: This works ingame when genes are added, but if there is 
 | 
			
		||||
        //a gene (e.g. ovipositor) in creation it does not work as expected (only has one genital)
 | 
			
		||||
        //Penis works as expected
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public override void PostMake()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostMake();
 | 
			
		||||
            if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
 | 
			
		||||
                Sexualizer.sexualize_pawn(pawn);
 | 
			
		||||
 | 
			
		||||
            // Vaginas are only added for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && additional_vagina == null)
 | 
			
		||||
            {
 | 
			
		||||
                CreateAndAddVagina();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public override void PostAdd()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostAdd();
 | 
			
		||||
 | 
			
		||||
            // Vaginas are only added for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && additional_vagina == null)
 | 
			
		||||
            {
 | 
			
		||||
                CreateAndAddVagina();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void PostRemove()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostRemove();
 | 
			
		||||
            if(additional_vagina != null)    
 | 
			
		||||
                pawn.health.RemoveHediff(additional_vagina);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void CreateAndAddVagina()
 | 
			
		||||
        {
 | 
			
		||||
            var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
 | 
			
		||||
            HediffDef vaginaDef = GenitaliaUtility.GetVaginaForGene(correctGene);
 | 
			
		||||
            var partBPR = Genital_Helper.get_genitalsBPR(pawn);
 | 
			
		||||
            additional_vagina = HediffMaker.MakeHediff(vaginaDef, pawn);
 | 
			
		||||
 | 
			
		||||
            var CompHediff = additional_vagina.TryGetComp<rjw.CompHediffBodyPart>();
 | 
			
		||||
            if (CompHediff != null)
 | 
			
		||||
            {
 | 
			
		||||
                CompHediff.initComp(pawn);
 | 
			
		||||
                CompHediff.updatesize();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            pawn.health.AddHediff(additional_vagina, partBPR);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								Source/Genes/ExtraGenitalia/Gene_NoAnus.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								Source/Genes/ExtraGenitalia/Gene_NoAnus.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
namespace RJW_Genes
 | 
			
		||||
{
 | 
			
		||||
    public class Gene_NoAnus : Gene
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        internal Hediff removed_anus;
 | 
			
		||||
 | 
			
		||||
        // TODO: This gene only works if another Gene was set specifying the genitalia. 
 | 
			
		||||
        // If it is added later, it still works, but on creation it needs a different 
 | 
			
		||||
        // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn
 | 
			
		||||
        public override void PostMake()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostMake();
 | 
			
		||||
            if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
 | 
			
		||||
                Sexualizer.sexualize_pawn(pawn);
 | 
			
		||||
 | 
			
		||||
            if (removed_anus == null)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveButStoreAnus();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public override void PostAdd()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostAdd();
 | 
			
		||||
 | 
			
		||||
            if (removed_anus == null)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveButStoreAnus();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void PostRemove()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostRemove();
 | 
			
		||||
            if(removed_anus != null)    
 | 
			
		||||
                pawn.health.AddHediff(removed_anus);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void RemoveButStoreAnus()
 | 
			
		||||
        {
 | 
			
		||||
            var partBPR = Genital_Helper.get_anusBPR(pawn);
 | 
			
		||||
            Hediff anusToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaChanger.IsAnus(x));
 | 
			
		||||
 | 
			
		||||
            if(anusToRemove != null)
 | 
			
		||||
            {
 | 
			
		||||
                removed_anus = anusToRemove;
 | 
			
		||||
                pawn.health.RemoveHediff(anusToRemove);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
namespace RJW_Genes
 | 
			
		||||
{
 | 
			
		||||
    public class Gene_NoBreasts : Gene
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        internal Hediff removed_breasts;
 | 
			
		||||
 | 
			
		||||
        // TODO: This gene only works if another Gene was set specifying the genitalia. 
 | 
			
		||||
        // If it is added later, it still works, but on creation it needs a different 
 | 
			
		||||
        // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn. IDEA: Add male-nipples ?
 | 
			
		||||
        public override void PostMake()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostMake();
 | 
			
		||||
            if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
 | 
			
		||||
                Sexualizer.sexualize_pawn(pawn);
 | 
			
		||||
            
 | 
			
		||||
            // Breasts are removed for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && removed_breasts == null)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveButStoreBreasts();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public override void PostAdd()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostAdd();
 | 
			
		||||
 | 
			
		||||
            // Breasts are removed for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && removed_breasts == null)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveButStoreBreasts();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void PostRemove()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostRemove();
 | 
			
		||||
            if(removed_breasts != null)    
 | 
			
		||||
                pawn.health.AddHediff(removed_breasts);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void RemoveButStoreBreasts()
 | 
			
		||||
        {
 | 
			
		||||
            var partBPR = Genital_Helper.get_breastsBPR(pawn);
 | 
			
		||||
            Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
 | 
			
		||||
 | 
			
		||||
            if(breastsToRemove != null)
 | 
			
		||||
            {
 | 
			
		||||
                removed_breasts = breastsToRemove;
 | 
			
		||||
                pawn.health.RemoveHediff(breastsToRemove);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ namespace RJW_Genes
 | 
			
		|||
 | 
			
		||||
        // TODO: This gene only works if another Gene was set specifying the genitalia. 
 | 
			
		||||
        // If it is added later, it still works, but on creation it needs a different 
 | 
			
		||||
        // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn
 | 
			
		||||
        public override void PostMake()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostMake();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										59
									
								
								Source/Genes/ExtraGenitalia/Gene_NoVagina.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Source/Genes/ExtraGenitalia/Gene_NoVagina.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
namespace RJW_Genes
 | 
			
		||||
{
 | 
			
		||||
    public class Gene_NoVagina : Gene
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        internal Hediff removed_vagina;
 | 
			
		||||
 | 
			
		||||
        // TODO: This gene only works if another Gene was set specifying the genitalia. 
 | 
			
		||||
        // If it is added later, it still works, but on creation it needs a different 
 | 
			
		||||
        // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn
 | 
			
		||||
        public override void PostMake()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostMake();
 | 
			
		||||
            if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
 | 
			
		||||
                Sexualizer.sexualize_pawn(pawn);
 | 
			
		||||
 | 
			
		||||
            // Vaginas are only removed for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && removed_vagina == null)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveButStoreVagina();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public override void PostAdd()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostAdd();
 | 
			
		||||
 | 
			
		||||
            // Vaginas are only removed for female pawns!
 | 
			
		||||
            if (pawn.gender == Gender.Female && removed_vagina == null)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveButStoreVagina();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void PostRemove()
 | 
			
		||||
        {
 | 
			
		||||
            base.PostRemove();
 | 
			
		||||
            if(removed_vagina != null)    
 | 
			
		||||
                pawn.health.AddHediff(removed_vagina);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void RemoveButStoreVagina()
 | 
			
		||||
        {
 | 
			
		||||
            var partBPR = Genital_Helper.get_genitalsBPR(pawn);
 | 
			
		||||
            Hediff vaginaToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => Genital_Helper.is_vagina(x));
 | 
			
		||||
 | 
			
		||||
            if(vaginaToRemove != null)
 | 
			
		||||
            {
 | 
			
		||||
                removed_vagina = vaginaToRemove;
 | 
			
		||||
                pawn.health.RemoveHediff(vaginaToRemove);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -70,11 +70,11 @@ namespace RJW_Genes
 | 
			
		|||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        private static bool IsAnus(Hediff candidate)
 | 
			
		||||
        public static bool IsAnus(Hediff candidate)
 | 
			
		||||
        {
 | 
			
		||||
            return candidate.def.defName.ToLower().Contains("anus");        }
 | 
			
		||||
 | 
			
		||||
		private static bool IsArtificial(Hediff candidate)
 | 
			
		||||
		public static bool IsArtificial(Hediff candidate)
 | 
			
		||||
        {
 | 
			
		||||
			return candidate.def.defName.ToLower().Contains("bionic") || candidate.def.defName.ToLower().Contains("archo");
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
using RimWorld;
 | 
			
		||||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace RJW_Genes
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -26,30 +27,6 @@ namespace RJW_Genes
 | 
			
		|||
            return GeneDefOf.rjw_genes_human_genitalia;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Adds a genital created from a given Def to the pawn.
 | 
			
		||||
        /// Does not alter/touch gender.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pawn">The pawn whom to add the genital to,</param>
 | 
			
		||||
        /// <param name="genitalToAdd">The type of genital to be added</param>
 | 
			
		||||
        public static void AddGenitalToPawn(Pawn pawn,HediffDef genitalToAdd)
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn == null || genitalToAdd == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var partBPR = Genital_Helper.get_genitalsBPR(pawn);
 | 
			
		||||
            var additionalGenital = HediffMaker.MakeHediff(genitalToAdd, pawn);
 | 
			
		||||
 | 
			
		||||
            var CompHediff = additionalGenital.TryGetComp<rjw.CompHediffBodyPart>();
 | 
			
		||||
            if (CompHediff != null)
 | 
			
		||||
            {
 | 
			
		||||
                CompHediff.initComp(pawn);
 | 
			
		||||
                CompHediff.updatesize();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            pawn.health.AddHediff(additionalGenital, partBPR);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static HediffDef GetPenisForGene(GeneDef gene)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +46,59 @@ namespace RJW_Genes
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static HediffDef GetVaginaForGene(GeneDef gene)
 | 
			
		||||
        {
 | 
			
		||||
            switch (gene.defName)
 | 
			
		||||
            {
 | 
			
		||||
                case "rjw_genes_human_genitalia": return Genital_Helper.average_vagina;
 | 
			
		||||
                case "rjw_genes_equine_genitalia": return Genital_Helper.equine_vagina;
 | 
			
		||||
                case "rjw_genes_canine_genitalia": return Genital_Helper.canine_vagina;
 | 
			
		||||
                case "rjw_genes_feline_genitalia": return Genital_Helper.feline_vagina;
 | 
			
		||||
                case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_vagina;
 | 
			
		||||
                case "rjw_genes_dragon_genitalia": return Genital_Helper.dragon_vagina;
 | 
			
		||||
                case "rjw_genes_slime_genitalia": return Genital_Helper.slime_vagina;
 | 
			
		||||
                case "rjw_genes_ovipositor_genitalia": return Genital_Helper.ovipositorF;
 | 
			
		||||
 | 
			
		||||
                default: return Genital_Helper.average_vagina;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static HediffDef GetAnusForGene(GeneDef gene)
 | 
			
		||||
        {
 | 
			
		||||
            switch (gene.defName)
 | 
			
		||||
            {
 | 
			
		||||
                //TODO: Do I want the default to be generic or average for feline,equine and canine?
 | 
			
		||||
                case "rjw_genes_human_genitalia": return Genital_Helper.average_anus;
 | 
			
		||||
                case "rjw_genes_equine_genitalia": return Genital_Helper.average_anus;
 | 
			
		||||
                case "rjw_genes_canine_genitalia": return Genital_Helper.average_anus;
 | 
			
		||||
                case "rjw_genes_feline_genitalia": return Genital_Helper.average_anus;
 | 
			
		||||
                case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_anus;
 | 
			
		||||
                case "rjw_genes_dragon_genitalia": return Genital_Helper.average_anus;
 | 
			
		||||
                case "rjw_genes_slime_genitalia": return Genital_Helper.slime_anus;
 | 
			
		||||
                case "rjw_genes_ovipositor_genitalia": return Genital_Helper.insect_anus;
 | 
			
		||||
 | 
			
		||||
                default: return Genital_Helper.generic_anus;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static HediffDef GetBreastsForGene(GeneDef gene)
 | 
			
		||||
        {
 | 
			
		||||
            switch (gene.defName)
 | 
			
		||||
            {
 | 
			
		||||
                //TODO: Do I want the default to be generic or average?
 | 
			
		||||
                case "rjw_genes_human_genitalia": return Genital_Helper.average_breasts;
 | 
			
		||||
                case "rjw_genes_equine_genitalia": return Genital_Helper.average_breasts;
 | 
			
		||||
                case "rjw_genes_canine_genitalia": return Genital_Helper.average_breasts;
 | 
			
		||||
                case "rjw_genes_feline_genitalia": return Genital_Helper.average_breasts;
 | 
			
		||||
                case "rjw_genes_demonic_genitalia": return Genital_Helper.average_breasts;
 | 
			
		||||
                case "rjw_genes_dragon_genitalia": return Genital_Helper.average_breasts;
 | 
			
		||||
                case "rjw_genes_slime_genitalia": return Genital_Helper.slime_breasts;
 | 
			
		||||
                case "rjw_genes_ovipositor_genitalia": return Genital_Helper.average_breasts;
 | 
			
		||||
 | 
			
		||||
                default: return Genital_Helper.generic_breasts;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static bool PawnStillNeedsGenitalia(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            // There is the issue that the genes fire in a pseudo-random order 
 | 
			
		||||
| 
						 | 
				
			
			@ -89,5 +119,10 @@ namespace RJW_Genes
 | 
			
		|||
                return !pawn_has_any_genitalia;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static bool IsBreasts(Hediff candidate)
 | 
			
		||||
        {
 | 
			
		||||
            return candidate.def.defName.ToLower().Contains("breast");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,6 +49,12 @@
 | 
			
		|||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="GeneDefOf.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_ExtraBreasts.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_ExtraAnus.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_ExtraVagina.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_NoBreasts.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_NoAnus.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_NoVagina.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_NoPenis.cs" />
 | 
			
		||||
    <Compile Include="Genes\ExtraGenitalia\Gene_ExtraPenis.cs" />
 | 
			
		||||
    <Compile Include="Genes\Genitalia\Gene_SlimeGenitalia.cs" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue