示例#1
0
        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)));
            }
        }
示例#4
0
 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);
 }
示例#5
0
        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
             });
         }
     }
 }
示例#7
0
        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}");
            }
        }
示例#10
0
        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;
        }