diff --git a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs index 4682f302af..134f71fc27 100644 --- a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs +++ b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs @@ -217,23 +217,11 @@ namespace Content.Shared.Humanoid markingSet = new MarkingSet(appearance.Markings, speciesProto.MarkingPoints, markingManager, proto); markingSet.EnsureValid(markingManager); - switch (speciesProto.SkinColoration) + if (!Humanoid.SkinColor.VerifySkinColor(speciesProto.SkinColoration, skinColor)) { - case HumanoidSkinColor.HumanToned: - if (!Humanoid.SkinColor.VerifyHumanSkinTone(skinColor)) - { - skinColor = Humanoid.SkinColor.ValidHumanSkinTone; - } - - break; - case HumanoidSkinColor.TintedHues: - if (!Humanoid.SkinColor.VerifyTintedHues(skinColor)) - { - skinColor = Humanoid.SkinColor.ValidTintedHuesSkinTone(skinColor); - } - - break; + skinColor = Humanoid.SkinColor.ValidSkinTone(speciesProto.SkinColoration, skinColor); } + markingSet.EnsureSpecies(species, skinColor, markingManager); } diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index 4f436bbf40..0121e5adad 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -150,6 +150,16 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem if (!Resolve(uid, ref humanoid)) return; + if (!_prototypeManager.TryIndex(humanoid.Species, out var species)) + { + return; + } + + if (!SkinColor.VerifySkinColor(species.SkinColoration, skinColor)) + { + skinColor = SkinColor.ValidSkinTone(species.SkinColoration, skinColor); + } + humanoid.SkinColor = skinColor; if (sync) diff --git a/Content.Shared/Humanoid/SkinColor.cs b/Content.Shared/Humanoid/SkinColor.cs index c3c1fdb509..44f69bf6aa 100644 --- a/Content.Shared/Humanoid/SkinColor.cs +++ b/Content.Shared/Humanoid/SkinColor.cs @@ -133,6 +133,27 @@ public static class SkinColor // tinted hues just ensures saturation is always .1, or 10% saturation at all times return Color.ToHsv(color).Y != .1f; } + + public static bool VerifySkinColor(HumanoidSkinColor type, Color color) + { + return type switch + { + HumanoidSkinColor.HumanToned => VerifyHumanSkinTone(color), + HumanoidSkinColor.TintedHues => VerifyTintedHues(color), + HumanoidSkinColor.Hues => true, + _ => false, + }; + } + + public static Color ValidSkinTone(HumanoidSkinColor type, Color color) + { + return type switch + { + HumanoidSkinColor.HumanToned => ValidHumanSkinTone, + HumanoidSkinColor.TintedHues => ValidTintedHuesSkinTone(color), + _ => color + }; + } } public enum HumanoidSkinColor : byte