mirror of
				https://gitgud.io/lutepickle/rjw_menstruation.git
				synced 2024-08-14 22:46:52 +00:00 
			
		
		
		
	Properly generate babies with mismatched pawn def and pawnkind
This commit is contained in:
		
							parent
							
								
									f89bdaad46
								
							
						
					
					
						commit
						76c2a67390
					
				
					 2 changed files with 30 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -451,6 +451,16 @@ namespace RJW_Menstruation
 | 
			
		|||
            return baby;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public PawnKindDef GetRacesPawnKind(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn == null) return null;
 | 
			
		||||
            if (pawn.kindDef?.race == pawn.def) return pawn.kindDef;
 | 
			
		||||
            return VariousDefOf.AllKinds.Find(kind => kind.race == pawn.def && kind.defName.Contains("Colonist")) ??
 | 
			
		||||
                VariousDefOf.AllKinds.Find(kind => kind.race == pawn.def) ??
 | 
			
		||||
                pawn.def.race?.AnyPawnKind ??
 | 
			
		||||
                pawn.kindDef;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Decide pawnkind from mother and father <para/>
 | 
			
		||||
        /// Come from RJW
 | 
			
		||||
| 
						 | 
				
			
			@ -460,7 +470,10 @@ namespace RJW_Menstruation
 | 
			
		|||
        /// <returns></returns>
 | 
			
		||||
        public PawnKindDef BabyPawnKindDecider(Pawn mother, Pawn father)
 | 
			
		||||
        {
 | 
			
		||||
            PawnKindDef spawn_kind_def = mother.kindDef;
 | 
			
		||||
            PawnKindDef motherKindDef = GetRacesPawnKind(mother);
 | 
			
		||||
            PawnKindDef fatherKindDef = GetRacesPawnKind(father);
 | 
			
		||||
 | 
			
		||||
            PawnKindDef spawn_kind_def = motherKindDef;
 | 
			
		||||
 | 
			
		||||
            int flag = 0;
 | 
			
		||||
            if (xxx.is_human(mother)) flag += 2;
 | 
			
		||||
| 
						 | 
				
			
			@ -474,18 +487,18 @@ namespace RJW_Menstruation
 | 
			
		|||
            switch (flag)
 | 
			
		||||
            {
 | 
			
		||||
                case 3:
 | 
			
		||||
                    if (!Rand.Chance(RJWPregnancySettings.humanlike_DNA_from_mother)) spawn_kind_def = father.kindDef;
 | 
			
		||||
                    if (!Rand.Chance(RJWPregnancySettings.humanlike_DNA_from_mother)) spawn_kind_def = fatherKindDef;
 | 
			
		||||
                    break;
 | 
			
		||||
                case 2:
 | 
			
		||||
                    if (RJWPregnancySettings.bestiality_DNA_inheritance == 0f) spawn_kind_def = father.kindDef;
 | 
			
		||||
                    else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef;
 | 
			
		||||
                    if (RJWPregnancySettings.bestiality_DNA_inheritance == 0f) spawn_kind_def = fatherKindDef;
 | 
			
		||||
                    else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = fatherKindDef;
 | 
			
		||||
                    break;
 | 
			
		||||
                case 1:
 | 
			
		||||
                    if (RJWPregnancySettings.bestiality_DNA_inheritance == 1f) spawn_kind_def = father.kindDef;
 | 
			
		||||
                    else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef;
 | 
			
		||||
                    if (RJWPregnancySettings.bestiality_DNA_inheritance == 1f) spawn_kind_def = fatherKindDef;
 | 
			
		||||
                    else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = fatherKindDef;
 | 
			
		||||
                    break;
 | 
			
		||||
                case 0:
 | 
			
		||||
                    if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef;
 | 
			
		||||
                    if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = fatherKindDef;
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -493,19 +506,19 @@ namespace RJW_Menstruation
 | 
			
		|||
            bool IsAndroidfather = AndroidsCompatibility.IsAndroid(father);
 | 
			
		||||
            if (IsAndroidmother && !IsAndroidfather)
 | 
			
		||||
            {
 | 
			
		||||
                spawn_kind_def = father.kindDef;
 | 
			
		||||
                spawn_kind_def = fatherKindDef;
 | 
			
		||||
            }
 | 
			
		||||
            else if (!IsAndroidmother && IsAndroidfather)
 | 
			
		||||
            {
 | 
			
		||||
                spawn_kind_def = mother.kindDef;
 | 
			
		||||
                spawn_kind_def = motherKindDef;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            string MotherRaceName = "";
 | 
			
		||||
            string FatherRaceName = "";
 | 
			
		||||
            MotherRaceName = mother.kindDef?.race?.defName;
 | 
			
		||||
            MotherRaceName = motherKindDef?.race?.defName;
 | 
			
		||||
            PawnKindDef non_hybrid_kind_def = spawn_kind_def;
 | 
			
		||||
            if (father != null)
 | 
			
		||||
                FatherRaceName = father.kindDef?.race?.defName;
 | 
			
		||||
                FatherRaceName = fatherKindDef?.race?.defName;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (FatherRaceName != "" && Configurations.UseHybridExtention)
 | 
			
		||||
| 
						 | 
				
			
			@ -530,9 +543,9 @@ namespace RJW_Menstruation
 | 
			
		|||
                        {
 | 
			
		||||
                            //ModLog.Message(" has hybridRaceParents");
 | 
			
		||||
                            if (t.hybridChildKindDef.Contains("MotherKindDef"))
 | 
			
		||||
                                spawn_kind_def = mother.kindDef;
 | 
			
		||||
                                spawn_kind_def = motherKindDef;
 | 
			
		||||
                            else if (t.hybridChildKindDef.Contains("FatherKindDef") && father != null)
 | 
			
		||||
                                spawn_kind_def = father.kindDef;
 | 
			
		||||
                                spawn_kind_def = fatherKindDef;
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                //ModLog.Message(" trying hybridChildKindDef " + t.defName);
 | 
			
		||||
| 
						 | 
				
			
			@ -550,7 +563,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            }
 | 
			
		||||
            else if (!Configurations.UseHybridExtention || spawn_kind_def == null)
 | 
			
		||||
            {
 | 
			
		||||
                spawn_kind_def = mother.RaceProps?.AnyPawnKind ?? mother.kindDef;
 | 
			
		||||
                spawn_kind_def = mother.RaceProps?.AnyPawnKind ?? motherKindDef;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (spawn_kind_def.defName.Contains("Nymph"))
 | 
			
		||||
| 
						 | 
				
			
			@ -560,10 +573,10 @@ namespace RJW_Menstruation
 | 
			
		|||
                spawn_kind_def_list.AddRange(DefDatabase<PawnKindDef>.AllDefs.Where(x => x.race == spawn_kind_def.race && !x.defName.Contains("Nymph")));
 | 
			
		||||
                //no other PawnKindDef found try mother
 | 
			
		||||
                if (spawn_kind_def_list.NullOrEmpty())
 | 
			
		||||
                    spawn_kind_def_list.AddRange(DefDatabase<PawnKindDef>.AllDefs.Where(x => x.race == mother.kindDef.race && !x.defName.Contains("Nymph")));
 | 
			
		||||
                    spawn_kind_def_list.AddRange(DefDatabase<PawnKindDef>.AllDefs.Where(x => x.race == motherKindDef.race && !x.defName.Contains("Nymph")));
 | 
			
		||||
                //no other PawnKindDef found try father
 | 
			
		||||
                if (spawn_kind_def_list.NullOrEmpty() && father != null)
 | 
			
		||||
                    spawn_kind_def_list.AddRange(DefDatabase<PawnKindDef>.AllDefs.Where(x => x.race == father.kindDef.race && !x.defName.Contains("Nymph")));
 | 
			
		||||
                    spawn_kind_def_list.AddRange(DefDatabase<PawnKindDef>.AllDefs.Where(x => x.race == fatherKindDef.race && !x.defName.Contains("Nymph")));
 | 
			
		||||
                //no other PawnKindDef found fallback to generic colonist
 | 
			
		||||
                if (spawn_kind_def_list.NullOrEmpty())
 | 
			
		||||
                    spawn_kind_def = PawnKindDefOf.Colonist;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ Version 1.0.7.0
 | 
			
		|||
 | 
			
		||||
 - Experimental support for multiple vaginas.
 | 
			
		||||
   - Super-experimental support for multiple concurrent pregnancies.
 | 
			
		||||
 - Properly generate a baby's race when using pawnkind diversification mods.
 | 
			
		||||
 - Overhauled many things under the hood.
 | 
			
		||||
 - Cycle randomization completely redone. Everyone now has a (hidden) cycle speed and cycle variability.
 | 
			
		||||
 - Ovary initialization redone. All pawns now get a total number of eggs based on their age and racial properties.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue