public static PawnKindDef resultingXenomorph(this PawnKindDef p) { PawnKindDef kindDef = null; if (!p.isPotentialHost() || p.RaceProps.baseBodySize > 0.63f) { return(null); } bool human = p.race.defName.Contains("Human") || HMSUtility.GetMark(p) == YautjaDefOf.HMS_Hediff_BloodedMHuman; bool yautja = p.race.defName.Contains("Yautja"); bool thrumbo = p.race.defName.Contains("Human") || HMSUtility.GetMark(p) == YautjaDefOf.HMS_Hediff_BloodedMThrumbo; bool hound = HMSUtility.GetMark(p).defName.Contains("BloodedMHound"); bool humanlike = p.RaceProps.Humanlike; bool large = humanlike ? p.RaceProps.baseBodySize > 1f : p.RaceProps.baseBodySize > 4f; bool small = p.RaceProps.baseBodySize > 1f; if (humanlike) { if (human) { if (large) { kindDef = XenomorphDefOf.RRY_Xenomorph_Warrior; } else { if (small) { kindDef = XenomorphDefOf.RRY_Xenomorph_Drone; } else { kindDef = p.isFighter ? XenomorphDefOf.RRY_Xenomorph_Warrior : XenomorphDefOf.RRY_Xenomorph_Drone; } } } else { if (yautja) { kindDef = XenomorphDefOf.RRY_Xenomorph_Predalien; } else { if (large) { kindDef = XenomorphDefOf.RRY_Xenomorph_Warrior; } else { if (small) { kindDef = XenomorphDefOf.RRY_Xenomorph_Drone; } else { kindDef = p.RaceProps.predator ? XenomorphDefOf.RRY_Xenomorph_Warrior : XenomorphDefOf.RRY_Xenomorph_Drone; } } } } } else { if (large) { if (thrumbo) { kindDef = XenomorphDefOf.RRY_Xenomorph_Thrumbomorph; } else { kindDef = XenomorphDefOf.RRY_Xenomorph_Warrior; } } else { if (hound) { kindDef = XenomorphDefOf.RRY_Xenomorph_Runner; } else { if (small) { kindDef = XenomorphDefOf.RRY_Xenomorph_Runner; } else { kindDef = XenomorphDefOf.RRY_Xenomorph_Drone; } } } } return(kindDef); }
public static PawnKindDef resultingXenomorph(this Pawn p) { PawnKindDef kindDef = null; if (!p.isPotentialHost() || p.BodySize > 0.63f) { return(null); } bool human = p.def.defName.Contains("Human") || HMSUtility.GetMark(p.kindDef) == YautjaDefOf.HMS_Hediff_BloodedMHuman; bool yautja = p.def.defName.Contains("Yautja"); bool thrumbo = p.def.defName.Contains("Human") || HMSUtility.GetMark(p.kindDef) == YautjaDefOf.HMS_Hediff_BloodedMThrumbo; bool hound = HMSUtility.GetMark(p.kindDef) == YautjaDefOf.HMS_Hediff_BloodedMHound; bool humanlike = p.RaceProps.Humanlike; bool large = humanlike ? p.BodySize > 1f : p.BodySize > 4f; bool small = p.BodySize > 1f; bool predalienEmbryo = p.health.hediffSet.hediffs.Any(x => x.def.defName.Contains("XenomorphImpregnation")) && ((XenoHediffWithComps)p.health.hediffSet.hediffs.Find(x => x.def.defName.Contains("XenomorphImpregnation"))).TryGetComp <HediffComp_XenoSpawner>().predalienImpregnation; bool royaleEmbryo = p.health.hediffSet.hediffs.Any(x => x.def.defName.Contains("XenomorphImpregnation")) && ((XenoHediffWithComps)p.health.hediffSet.hediffs.Find(x => x.def.defName.Contains("XenomorphImpregnation"))).TryGetComp <HediffComp_XenoSpawner>().RoyaleEmbryo; if (humanlike) { if (human) { if (predalienEmbryo) { kindDef = p.kindDef.isFighter ? XenomorphDefOf.RRY_Xenomorph_Warrior : XenomorphDefOf.RRY_Xenomorph_Drone; } else { if (royaleEmbryo) { kindDef = XenomorphDefOf.RRY_Xenomorph_Queen; } else { if (large) { kindDef = XenomorphDefOf.RRY_Xenomorph_Warrior; } else { if (small) { kindDef = XenomorphDefOf.RRY_Xenomorph_Drone; } else { kindDef = p.kindDef.isFighter ? XenomorphDefOf.RRY_Xenomorph_Warrior : XenomorphDefOf.RRY_Xenomorph_Drone; } } } } } else { if (yautja) { kindDef = XenomorphDefOf.RRY_Xenomorph_Predalien; } else { if (royaleEmbryo) { kindDef = XenomorphDefOf.RRY_Xenomorph_Queen; } else { if (large) { kindDef = XenomorphDefOf.RRY_Xenomorph_Warrior; } else { if (small) { kindDef = XenomorphDefOf.RRY_Xenomorph_Drone; } else { kindDef = p.kindDef.RaceProps.predator ? XenomorphDefOf.RRY_Xenomorph_Warrior : XenomorphDefOf.RRY_Xenomorph_Drone; } } } } } } else { if (large) { if (thrumbo) { kindDef = XenomorphDefOf.RRY_Xenomorph_Thrumbomorph; } else { kindDef = XenomorphDefOf.RRY_Xenomorph_Warrior; } } else { if (hound) { kindDef = XenomorphDefOf.RRY_Xenomorph_Runner; } else { if (small) { kindDef = XenomorphDefOf.RRY_Xenomorph_Runner; } else { kindDef = XenomorphDefOf.RRY_Xenomorph_Drone; } } } } bool selected = Find.Selector.SingleSelectedThing == p; if (selected && Prefs.DevMode) { // Log.Message(string.Format("{0} will spawn from {1}", kindDef, p.LabelShortCap)); } return(kindDef); }