mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 05:27:38 +03:00
# Description Added a ton of markings to the game, ported from other codebases: - All Goob LRP hairstyles - Wizden hairstyles (including Pulato https://github.com/space-wizards/space-station-14/pull/34117, Shaped and Long Bow https://github.com/space-wizards/space-station-14/pull/31010) - `HumanHairClassicLong2` and `HumanHairClassicLong3` have been upstreamed from DV to Wizden so I'm doing the same here. https://github.com/space-wizards/space-station-14/pull/30963 - Iron Jaw face augmentation from Adventure Time - Adventure Time hairstyles and facial hair - Some Corvax hairstyles and facial hair - IPC wings (https://github.com/Goob-Station/Goob-Station/pull/1145) - Plasmaman wings (from SimpleStation14) - _B-b-b-but they get set on fire by oxyg-_ Counterpoint: Plasmamen with wings look cool as heck. Also cherry-picked https://github.com/space-wizards/space-station-14/pull/30786 and https://github.com/space-wizards/space-station-14/pull/30852. I was initially going to include new Oni markings like horns, ears and tails from Adventure Time here but due to what I think is quality issues with some of them I've postponed adding them until I have the time to correct them. I gotta put out the markings I can put out now cause I know everyone's gonna want to immediately upstream merge all the other content we've added today. <details><summary><h1>Media</h1></summary> <p> **Pulato (from Wizden) + Iron Jaw (from Adventure Time)**  **Side Comb + Beard (Short) (all from Adventure Time)**  **Front Braids (Medium) (from Goob LRP) + Gauze Head Wrap (from Wizden)**  **IPC Wings (from SimpleStation) + Long Pompadour (from Goob LRP) + Moustache (Handlebar 2) (from Corvax)** <img width=394px src="https://github.com/user-attachments/assets/13ea3638-d9b8-4470-88b5-7b91ef671ded"> <img width=290px src="https://github.com/user-attachments/assets/c116ce27-d19f-49af-878c-75fb9f8b354b"> **Plasmaman Wings (from SimpleStation)** <img width=278px src="https://github.com/user-attachments/assets/82a767f2-cbe0-4f40-b585-4f496fafe51d"> <img width=250px src="https://github.com/user-attachments/assets/bee96e6d-c105-46ac-8a1e-dd103af145b9"> </p> </details> # Changelog 🆑 Skubman - add: New hairstyles have arrived, including all Goob LRP-original hairstyles, Pulato, new facial hair and more! - add: Added epic IPC wings and Plasmaman wings. - add: Added the Iron Jaw face marking. - tweak: Increased the maximum number of Reptilian chest markings to 3. - fix: Harpy, Arachne and Lamia can no longer pick the "No Ears" marking which had no effect as they had no default ear markings. --------- Co-authored-by: ~DreamlyJack~ <148849095+DreamlyJack@users.noreply.github.com> Co-authored-by: Арт <123451459+JustArt1m@users.noreply.github.com> Co-authored-by: ScyronX <166930367+ScyronX@users.noreply.github.com> (cherry picked from commit 91d14acb2be64da8193bb909623a053be73bc6b4)
152 lines
5.9 KiB
C#
152 lines
5.9 KiB
C#
using Content.Shared.Body.Components;
|
|
using Content.Shared.Body.Part;
|
|
|
|
namespace Content.Shared.Humanoid
|
|
{
|
|
public static class HumanoidVisualLayersExtension
|
|
{
|
|
public static bool HasSexMorph(HumanoidVisualLayers layer)
|
|
{
|
|
return layer switch
|
|
{
|
|
HumanoidVisualLayers.Chest => true,
|
|
HumanoidVisualLayers.Head => true,
|
|
_ => false
|
|
};
|
|
}
|
|
|
|
public static string GetSexMorph(HumanoidVisualLayers layer, Sex sex, string id)
|
|
{
|
|
if (!HasSexMorph(layer) || sex == Sex.Unsexed)
|
|
return id;
|
|
|
|
return $"{id}{sex}";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sublayers. Any other layers that may visually depend on this layer existing.
|
|
/// For example, the head has layers such as eyes, hair, etc. depending on it.
|
|
/// </summary>
|
|
/// <param name="layer"></param>
|
|
/// <returns>Enumerable of layers that depend on that given layer. Empty, otherwise.</returns>
|
|
/// <remarks>This could eventually be replaced by a body system implementation.</remarks>
|
|
public static IEnumerable<HumanoidVisualLayers> Sublayers(HumanoidVisualLayers layer)
|
|
{
|
|
switch (layer)
|
|
{
|
|
case HumanoidVisualLayers.Head:
|
|
yield return HumanoidVisualLayers.Head;
|
|
yield return HumanoidVisualLayers.Eyes;
|
|
yield return HumanoidVisualLayers.HeadSide;
|
|
yield return HumanoidVisualLayers.HeadTop;
|
|
yield return HumanoidVisualLayers.Hair;
|
|
yield return HumanoidVisualLayers.FacialHair;
|
|
yield return HumanoidVisualLayers.Snout;
|
|
break;
|
|
case HumanoidVisualLayers.LArm:
|
|
yield return HumanoidVisualLayers.LArm;
|
|
yield return HumanoidVisualLayers.LHand;
|
|
break;
|
|
case HumanoidVisualLayers.LHand:
|
|
yield return HumanoidVisualLayers.LHand;
|
|
break;
|
|
case HumanoidVisualLayers.RArm:
|
|
yield return HumanoidVisualLayers.RArm;
|
|
yield return HumanoidVisualLayers.RHand;
|
|
break;
|
|
case HumanoidVisualLayers.RHand:
|
|
yield return HumanoidVisualLayers.RHand;
|
|
break;
|
|
case HumanoidVisualLayers.LLeg:
|
|
yield return HumanoidVisualLayers.LLeg;
|
|
yield return HumanoidVisualLayers.LFoot;
|
|
break;
|
|
case HumanoidVisualLayers.LFoot:
|
|
yield return HumanoidVisualLayers.LFoot;
|
|
break;
|
|
case HumanoidVisualLayers.RLeg:
|
|
yield return HumanoidVisualLayers.RLeg;
|
|
yield return HumanoidVisualLayers.RFoot;
|
|
break;
|
|
case HumanoidVisualLayers.RFoot:
|
|
yield return HumanoidVisualLayers.RFoot;
|
|
break;
|
|
case HumanoidVisualLayers.Chest:
|
|
yield return HumanoidVisualLayers.Chest;
|
|
yield return HumanoidVisualLayers.Wings;
|
|
yield return HumanoidVisualLayers.Tail;
|
|
break;
|
|
default:
|
|
yield break;
|
|
}
|
|
}
|
|
|
|
public static HumanoidVisualLayers? ToHumanoidLayers(this BodyPartComponent part)
|
|
{
|
|
switch (part.PartType)
|
|
{
|
|
case BodyPartType.Other:
|
|
break;
|
|
case BodyPartType.Torso:
|
|
return HumanoidVisualLayers.Chest;
|
|
case BodyPartType.Tail:
|
|
return HumanoidVisualLayers.Tail;
|
|
case BodyPartType.Head:
|
|
// use the Sublayers method to hide the rest of the parts,
|
|
// if that's what you're looking for
|
|
return HumanoidVisualLayers.Head;
|
|
case BodyPartType.Arm:
|
|
switch (part.Symmetry)
|
|
{
|
|
case BodyPartSymmetry.None:
|
|
break;
|
|
case BodyPartSymmetry.Left:
|
|
return HumanoidVisualLayers.LArm;
|
|
case BodyPartSymmetry.Right:
|
|
return HumanoidVisualLayers.RArm;
|
|
}
|
|
|
|
break;
|
|
case BodyPartType.Hand:
|
|
switch (part.Symmetry)
|
|
{
|
|
case BodyPartSymmetry.None:
|
|
break;
|
|
case BodyPartSymmetry.Left:
|
|
return HumanoidVisualLayers.LHand;
|
|
case BodyPartSymmetry.Right:
|
|
return HumanoidVisualLayers.RHand;
|
|
}
|
|
|
|
break;
|
|
case BodyPartType.Leg:
|
|
switch (part.Symmetry)
|
|
{
|
|
case BodyPartSymmetry.None:
|
|
break;
|
|
case BodyPartSymmetry.Left:
|
|
return HumanoidVisualLayers.LLeg;
|
|
case BodyPartSymmetry.Right:
|
|
return HumanoidVisualLayers.RLeg;
|
|
}
|
|
|
|
break;
|
|
case BodyPartType.Foot:
|
|
switch (part.Symmetry)
|
|
{
|
|
case BodyPartSymmetry.None:
|
|
break;
|
|
case BodyPartSymmetry.Left:
|
|
return HumanoidVisualLayers.LFoot;
|
|
case BodyPartSymmetry.Right:
|
|
return HumanoidVisualLayers.RFoot;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|