static AMOMain() { List <string> blackTags = new List <string>() { "I", "C" }; List <ResearchProjectDef> blackProjects = new List <ResearchProjectDef>(); blackProjects.AddRange(ArmouryMain.ReseachImperial); blackProjects.AddRange(ArmouryMain.ReseachChaos); List <ResearchProjectDef> whiteProjects = new List <ResearchProjectDef>(OrkReseach); AlienRace.ThingDef_AlienRace Cybork = DefDatabase <ThingDef> .GetNamedSilentFail("OG_Alien_Cybork") as AlienRace.ThingDef_AlienRace; List <ThingDef> races = new List <ThingDef>() { AdeptusThingDefOf.OG_Alien_Ork, AdeptusThingDefOf.OG_Alien_Grot, AdeptusThingDefOf.OG_Snotling }; if (Cybork != null) { races.Add(Cybork); } List <ThingDef> animals = DefDatabase <ThingDef> .AllDefsListForReading.Where(x => x.race != null && x.race.Animal && x.isOrkoid()).ToList(); List <ThingDef> plants = new List <ThingDef>() { AdeptusThingDefOf.OG_Plant_Orkoid_Fungus, AdeptusThingDefOf.OG_Plant_Orkoid_Cocoon }; AlienRaceUtility.DoRacialRestrictionsFor(races, "O", blackTags, whiteProjects, blackProjects, whitePlants: plants, whiteAnimals: animals); }
private void SetSuppressable(AlienRace.ThingDef_AlienRace race) { // comps element? if (race.comps == null) { trace.AppendLine("* Adding missing comps list"); race.comps = new List <CompProperties>(); } // compclass CombatExtended.CompPawnGizmo if (!race.comps.Any(x => x.compClass == typeof(CompPawnGizmo))) { trace.AppendLine("* Adding CompPawnGizmo to comps list"); var gizmoProp = new CompProperties { compClass = typeof(CompPawnGizmo) }; trace.AppendLine("Initialized gizmo prop"); race.comps.Add(gizmoProp); trace.AppendLine("Added gizmo to comps"); } // CombatExtended.CompProperties_Suppressable if (!race.comps.OfType <CompProperties_Suppressable>().Any()) { trace.AppendLine("* Adding supressable to comps list"); var suppressableProps = new CompProperties_Suppressable(); trace.AppendLine("Initialized supressable prop"); race.comps.Add(suppressableProps); trace.AppendLine("Added supressable to comps"); } }
private void AddInventorySupport(AlienRace.ThingDef_AlienRace race) { // ThingDef/inspectorTabs/ li.ITab_Pawn_Gear -> li.CombatExtended.ITab_Inventory if (race.inspectorTabs == null) { race.inspectorTabs = new List <Type>(); } var newInventoryTab = typeof(CombatExtended.ITab_Inventory); var oldInventoryTab = race.inspectorTabs.FirstOrDefault(x => x.Name == "ITab_Pawn_Gear"); if (oldInventoryTab != null) { race.inspectorTabs.Remove(oldInventoryTab); } race.inspectorTabs.Add(newInventoryTab); // ThingDef/comps/CombatExtended.CompProperties_Inventory if (race.comps == null) { trace.AppendLine("* Adding missing comps list"); race.comps = new List <CompProperties>(); } if (!race.comps.Any(x => x.compClass == typeof(CombatExtended.CompProperties_Inventory))) { race.comps.Add(new CompProperties(typeof(CombatExtended.CompProperties_Inventory))); } }
public static float AlienAdult(Pawn pawn) { AlienRace.ThingDef_AlienRace race = pawn.def as AlienRace.ThingDef_AlienRace; if (race != null) { return(race.alienRace.generalSettings.minAgeForAdulthood); } return(-1); }
static void AlienRacesPatch(ref PawnRenderer __instance, Vector3 rootLoc, float angle, bool renderBody, Rot4 bodyFacing, Rot4 headFacing, out Mesh mesh, RotDrawMode bodyDrawType = RotDrawMode.Fresh, bool portrait = false, bool headStump = false) { mesh = null; Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>(); AlienRace.ThingDef_AlienRace alienDef = pawn.def as AlienRace.ThingDef_AlienRace; if (alienDef != null) { Mesh mesh2; if (bodyDrawType == RotDrawMode.Rotting) { if (__instance.graphics.dessicatedGraphic.ShouldDrawRotated) { mesh2 = MeshPool.GridPlane(portrait ? alienDef.alienRace.generalSettings.alienPartGenerator.customPortraitDrawSize : alienDef.alienRace.generalSettings.alienPartGenerator.customDrawSize); } else { Vector2 size = portrait ? alienDef.alienRace.generalSettings.alienPartGenerator.customPortraitDrawSize : alienDef.alienRace.generalSettings.alienPartGenerator.customDrawSize; if (bodyFacing.IsHorizontal) { size = size.Rotated(); } if (bodyFacing == Rot4.West && (__instance.graphics.dessicatedGraphic.data == null || __instance.graphics.dessicatedGraphic.data.allowFlip)) { mesh = MeshPool.GridPlaneFlip(size); } mesh = MeshPool.GridPlane(size); } } else { AlienRace.AlienPartGenerator.AlienComp comp = pawn.TryGetComp <AlienRace.AlienPartGenerator.AlienComp>(); if (comp != null) { mesh = (portrait ? comp.alienPortraitGraphics.bodySet.MeshAt(bodyFacing) : comp.alienGraphics.bodySet.MeshAt(bodyFacing)); } } } else { if (pawn.RaceProps.Humanlike) { mesh = MeshPool.humanlikeBodySet.MeshAt(bodyFacing); } else { mesh = __instance.graphics.nakedGraphic.MeshAt(bodyFacing); } } }
private void SetDefaultStatBases(AlienRace.ThingDef_AlienRace race) { // statbases @ 1 foreach (var statDef in combatExtendedStatBases) { var existing = race.statBases.FirstOrDefault(x => x.stat == statDef); if (existing == null) { trace.AppendLine($"* Adding default {statDef} stat"); race.statBases.Add(new RimWorld.StatModifier { stat = statDef, value = 1 }); } } }
static AMVMain() { List <string> blackTags = new List <string>() { "I", "C" }; List <ResearchProjectDef> blackProjects = new List <ResearchProjectDef>(); blackProjects.AddRange(ArmouryMain.ReseachImperial); blackProjects.AddRange(ArmouryMain.ReseachChaos); List <ResearchProjectDef> whiteProjects = new List <ResearchProjectDef>(VespidReseach); AlienRace.ThingDef_AlienRace vespid = AdeptusThingDefOf.OG_Alien_Vespid as AlienRace.ThingDef_AlienRace; AlienRaceUtility.DoRacialRestrictionsFor(vespid, "V", blackTags, whiteProjects, blackProjects); // ArmouryMain.DoRacialRestrictionsFor(vespid, "T", TauReseach); }
private void SetHumanoidBodyShape(AlienRace.ThingDef_AlienRace race) { // RaceDef CombatExtended.RacePropertiesExtensionCE bodyShape humanoid if (!race.HasModExtension <RacePropertiesExtensionCE>()) { trace.AppendLine("* Adding body shape mod extension"); var extension = new RacePropertiesExtensionCE { bodyShape = humanoidBodyShapeDef }; trace.AppendLine("Initialized mod extension"); if (race.modExtensions == null) { race.modExtensions = new List <DefModExtension>(); trace.AppendLine("Initialized mod extension list"); } race.modExtensions.Add(extension); trace.AppendLine($"Added humanoid body shape to race def"); } }
private void ReplaceTools(AlienRace.ThingDef_AlienRace race) { // tools - li Class CombatExtended.ToolCE / armorPenetration var oldTools = race.tools.ToList(); foreach (var tool in oldTools) { if (tool is ToolCE) { continue; } trace.AppendLine($"* Replacing race tool {tool}"); var newTool = new ToolCE { label = tool.label, untranslatedLabel = tool.untranslatedLabel, alwaysTreatAsWeapon = tool.alwaysTreatAsWeapon, capacities = tool.capacities, chanceFactor = tool.chanceFactor, cooldownTime = tool.cooldownTime, ensureLinkedBodyPartsGroupAlwaysUsable = tool.ensureLinkedBodyPartsGroupAlwaysUsable, id = tool.id, labelUsedInLogging = tool.labelUsedInLogging, linkedBodyPartsGroup = tool.linkedBodyPartsGroup, power = tool.power, surpriseAttack = tool.surpriseAttack, hediff = tool.hediff, armorPenetration = 0.10f, }; trace.AppendLine("Initialized new tool"); race.tools.Remove(tool); trace.AppendLine("Removed existing tool"); race.tools.Add(newTool); trace.AppendLine($"Added new tool {newTool}"); } }
public static void AlienRacesPatch(Pawn pawn, Rot4 bodyFacing, out Vector2 size, bool portrait) { AlienRace.ThingDef_AlienRace alienDef = pawn.def as AlienRace.ThingDef_AlienRace; Vector2 d; if (alienDef != null) { AlienRace.AlienPartGenerator.AlienComp comp = pawn.TryGetCompFast <AlienRace.AlienPartGenerator.AlienComp>(); if (comp != null) { // d = (portrait ? comp.alienPortraitGraphics.bodySet.MeshAt(bodyFacing).bounds.size : comp.alienGraphics.bodySet.MeshAt(bodyFacing).bounds.size); d = (portrait ? comp.customPortraitDrawSize : comp.customDrawSize); size = new Vector2(d.x * 1.5f, d.y * 1.5f); return; } } size = new Vector2(1.5f, 1.5f); return; }