public static SimDescription DGSMakeSSimDescription(SimBuilder builder, CASAgeGenderFlags age, CASAgeGenderFlags gender, ResourceKey skinTone, float skinToneIndex, Color[] hairColors, WorldName homeWorld, uint outfitCategoriesToBuild, bool isAlien) { if (age == CASAgeGenderFlags.None) { return(null); } if (builder == null) { builder = new SimBuilder(); builder.Age = age; builder.Gender = gender; builder.Species = CASAgeGenderFlags.Human; builder.SkinTone = skinTone; builder.SkinToneIndex = skinToneIndex; builder.TextureSize = 1024u; builder.UseCompression = true; } if (hairColors.Length == 9) { Color[] array = new Color[10]; hairColors.CopyTo(array, 0); array[9] = hairColors[0]; hairColors = array; } if (hairColors.Length != 10) { hairColors = Genetics.Black1; } Color[] array2 = new Color[4]; Array.Copy(hairColors, 5, array2, 0, 4); Color activeEyebrowColor = hairColors[4]; SimDescriptionCore simDescriptionCore = new SimDescriptionCore(); simDescriptionCore.HomeWorld = homeWorld; bool useDyeColor = age == CASAgeGenderFlags.Elder; GeneticColor[] hairColors2 = simDescriptionCore.HairColors; for (int i = 0; i < 4; i++) { hairColors2[i].UseDyeColor = useDyeColor; } simDescriptionCore.HairColors = hairColors2; simDescriptionCore.ActiveHairColors = hairColors; simDescriptionCore.EyebrowColor.UseDyeColor = useDyeColor; simDescriptionCore.ActiveEyebrowColor = activeEyebrowColor; simDescriptionCore.BodyHairColor.UseDyeColor = useDyeColor; simDescriptionCore.ActiveBodyHairColor = hairColors[9]; GeneticColor[] facialHairColors = simDescriptionCore.FacialHairColors; for (int j = 0; j < 4; j++) { facialHairColors[j].UseDyeColor = useDyeColor; } simDescriptionCore.FacialHairColors = facialHairColors; simDescriptionCore.ActiveFacialHairColors = array2; Dictionary <ResourceKey, float> dictionary = new Dictionary <ResourceKey, float>(); if (LocaleConstraints.GetFacialShape(ref dictionary, homeWorld)) { foreach (KeyValuePair <ResourceKey, float> keyValuePair in dictionary) { builder.SetFacialBlend(keyValuePair.Key, keyValuePair.Value); } } OutfitUtils.AddMissingParts(builder, (OutfitCategories)2097154u, true, simDescriptionCore, isAlien); Genetics.SleepIfPossible(); OutfitUtils.AddMissingParts(builder, OutfitCategories.Everyday, true, simDescriptionCore, isAlien); Genetics.SleepIfPossible(); ResourceKey key = default(ResourceKey); if (LocaleConstraints.GetUniform(ref key, homeWorld, age, gender, OutfitCategories.Everyday)) { OutfitUtils.SetOutfit(builder, new SimOutfit(key), simDescriptionCore); } OutfitUtils.SetAutomaticModifiers(builder); ResourceKey key2 = builder.CacheOutfit(string.Format("Genetics.MakeSim_{0}_{1}_{2}", builder.Age, Simulator.TicksElapsed(), OutfitCategories.Everyday)); if (key2.InstanceId == 0UL) { return(null); } OutfitCategories[] array3 = new OutfitCategories[] { OutfitCategories.Naked, OutfitCategories.Athletic, OutfitCategories.Formalwear, OutfitCategories.Sleepwear, OutfitCategories.Swimwear }; SimOutfit simOutfit = new SimOutfit(key2); SimDescription simDescription = new SimDescription(simOutfit); simDescription.HairColors = simDescriptionCore.HairColors; simDescription.FacialHairColors = simDescriptionCore.FacialHairColors; simDescription.EyebrowColor = simDescriptionCore.EyebrowColor; simDescription.BodyHairColor = simDescriptionCore.BodyHairColor; simDescription.AddOutfit(simOutfit, OutfitCategories.Everyday, true); foreach (OutfitCategories outfitCategories in array3) { if ((outfitCategoriesToBuild & (uint)outfitCategories) != 0u) { OutfitUtils.MakeCategoryAppropriate(builder, outfitCategories, simDescription); if (LocaleConstraints.GetUniform(ref key, homeWorld, age, gender, outfitCategories)) { OutfitUtils.SetOutfit(builder, new SimOutfit(key), simDescriptionCore); } ResourceKey key3 = builder.CacheOutfit(string.Format("Genetics.MakeSim_{0}_{1}_{2}", builder.Age, Simulator.TicksElapsed(), outfitCategories)); simDescription.AddOutfit(new SimOutfit(key3), outfitCategories); Genetics.SleepIfPossible(); } } simDescription.RandomizePreferences(); TraitNames cultureSpecificTrait = Genetics.GetCultureSpecificTrait(homeWorld); if (cultureSpecificTrait == TraitNames.FutureSim) { simDescription.TraitManager.AddHiddenElement(cultureSpecificTrait); Skill skill = simDescription.SkillManager.AddElement(SkillNames.Future); if ((skill.AvailableAgeSpecies & simDescription.GetCASAGSAvailabilityFlags()) != CASAGSAvailabilityFlags.None) { while (simDescription.SkillManager.GetSkillLevel(SkillNames.Future) < skill.MaxSkillLevel) { simDescription.SkillManager.ForceGainPointsForLevelUp(SkillNames.Future); } } } else if (cultureSpecificTrait != TraitNames.Unknown) { simDescription.TraitManager.AddHiddenElement(cultureSpecificTrait); } builder.Dispose(); builder = null; simDescription.HomeWorld = GameUtils.GetCurrentWorld(); return(simDescription); }