diff --git a/Content.Server/FloofStation/InteractionVerbs/Actions/ToggleLayersAction.cs b/Content.Server/FloofStation/InteractionVerbs/Actions/ToggleLayersAction.cs new file mode 100644 index 00000000000..bd80cd52436 --- /dev/null +++ b/Content.Server/FloofStation/InteractionVerbs/Actions/ToggleLayersAction.cs @@ -0,0 +1,47 @@ +using Content.Server.Humanoid; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; +using Content.Shared.InteractionVerbs; + +namespace Content.Server.FloofStation.InteractionVerbs.Actions; + +/// +/// Toggles a humanoid visual layer. +/// +[Serializable] +public sealed partial class ToggleLayersAction : InteractionAction +{ + [DataField] + public HumanoidVisualLayers? NeededMarkingCategory; + + [DataField] + public HashSet ToggleLayers; + + public override bool CanPerform(InteractionArgs args, InteractionVerbPrototype proto, bool isBefore, VerbDependencies deps) + { + if (NeededMarkingCategory == null) + return true; + + var markingCategory = MarkingCategoriesConversion.FromHumanoidVisualLayers(NeededMarkingCategory.Value); + + return deps.EntMan.TryGetComponent(args.Target, out HumanoidAppearanceComponent? bodyAppearance) + && bodyAppearance.MarkingSet.Markings.TryGetValue(markingCategory, out var markingList) + && markingList.Count > 0; // Check if at least one entry exists + } + + public override bool Perform(InteractionArgs args, InteractionVerbPrototype proto, VerbDependencies deps) + { + if (deps.EntMan.TryGetComponent(args.Target, out var humanoidAppearance)) + { + foreach (HumanoidVisualLayers layer in ToggleLayers) + { + deps.EntMan.System().SetLayerVisibility( + args.Target, + layer, humanoidAppearance.HiddenLayers.Contains(layer) + ); + } + } + + return true; + } +} diff --git a/Content.Shared/Floofstation/InteractionVerbs/Requirements/ClothingSlotBlacklistRequirement.cs b/Content.Shared/Floofstation/InteractionVerbs/Requirements/ClothingSlotBlacklistRequirement.cs new file mode 100644 index 00000000000..befc4e35174 --- /dev/null +++ b/Content.Shared/Floofstation/InteractionVerbs/Requirements/ClothingSlotBlacklistRequirement.cs @@ -0,0 +1,20 @@ +using Content.Shared.InteractionVerbs; +using Content.Shared.Inventory; +using Robust.Shared.Serialization; + +namespace Content.Shared.Floofstation.InteractionVerbs.Requirements; + + +/// +/// Requires a mob to not be wearing anything in this slot. +/// +[Serializable, NetSerializable] +public sealed partial class ClothingSlotBlacklistRequirement : InvertableInteractionRequirement +{ + [DataField] public string Slot; + + public override bool IsMet(InteractionArgs args, InteractionVerbPrototype proto, InteractionAction.VerbDependencies deps) + { + return !deps.EntMan.System().TryGetSlotEntity(args.Target, Slot, out _); + } +} diff --git a/Content.Shared/Humanoid/HumanoidVisualLayers.cs b/Content.Shared/Humanoid/HumanoidVisualLayers.cs index 8a2353d270e..3aa3f767057 100644 --- a/Content.Shared/Humanoid/HumanoidVisualLayers.cs +++ b/Content.Shared/Humanoid/HumanoidVisualLayers.cs @@ -11,6 +11,8 @@ public enum HumanoidVisualLayers : byte Hair, FacialHair, Chest, + Underwear, // Floof, add underwear + Undershirt, // Floof, add underwear Head, Snout, HeadSide, // side parts (i.e., frills) diff --git a/Content.Shared/Humanoid/Markings/MarkingCategories.cs b/Content.Shared/Humanoid/Markings/MarkingCategories.cs index 324c5463823..9e71da6764f 100644 --- a/Content.Shared/Humanoid/Markings/MarkingCategories.cs +++ b/Content.Shared/Humanoid/Markings/MarkingCategories.cs @@ -12,6 +12,8 @@ public enum MarkingCategories : byte HeadSide, Snout, Chest, + Underwear, // Floof, add underwear + Undershirt, // Floof, add underwear RightArm, RightHand, LeftArm, @@ -38,6 +40,8 @@ public static MarkingCategories FromHumanoidVisualLayers(HumanoidVisualLayers la HumanoidVisualLayers.HeadSide => MarkingCategories.HeadSide, HumanoidVisualLayers.Snout => MarkingCategories.Snout, HumanoidVisualLayers.Chest => MarkingCategories.Chest, + HumanoidVisualLayers.Underwear => MarkingCategories.Underwear, // Floof, add underwear + HumanoidVisualLayers.Undershirt => MarkingCategories.Undershirt, // Floof, add underwear HumanoidVisualLayers.RArm => MarkingCategories.RightArm, HumanoidVisualLayers.LArm => MarkingCategories.LeftArm, HumanoidVisualLayers.RHand => MarkingCategories.RightHand, diff --git a/Resources/Locale/en-US/Floof/interaction/verbs/underwear.ftl b/Resources/Locale/en-US/Floof/interaction/verbs/underwear.ftl new file mode 100644 index 00000000000..819ef8eb96b --- /dev/null +++ b/Resources/Locale/en-US/Floof/interaction/verbs/underwear.ftl @@ -0,0 +1,19 @@ +interaction-ToggleUndershirt-name = Toggle undershirt +interaction-ToggleUndershirt-description = Toggle the undershirt of this person! + +interaction-ToggleUndershirt-success-self-popup = You toggle {THE($target)}'s undershirt. +interaction-ToggleUndershirt-success-target-popup = {THE($user)} toggles your undershirt! +interaction-ToggleUndershirt-fail-self-popup = You fail to toggle the undershirt. + +interaction-ToggleUndershirt-delayed-self-popup = You try to toggle {THE($target)}'s undershirt. +interaction-ToggleUndershirt-delayed-target-popup = {THE($user)} is trying to toggle your undershirt! + +interaction-ToggleUnderwear-name = Toggle underwear +interaction-ToggleUnderwear-description = Toggle the underwear of this person! + +interaction-ToggleUnderwear-success-self-popup = You toggle {THE($target)}'s underwear. +interaction-ToggleUnderwear-success-target-popup = {THE($user)} toggles your underwear! +interaction-ToggleUnderwear-fail-self-popup = You fail to toggle the underwear. + +interaction-ToggleUnderwear-delayed-self-popup = You try to toggle {THE($target)}'s underwear. +interaction-ToggleUnderwear-delayed-target-popup = {THE($user)} is trying to toggle your underwear! diff --git a/Resources/Locale/en-US/Floof/markings/underwear.ftl b/Resources/Locale/en-US/Floof/markings/underwear.ftl new file mode 100644 index 00000000000..2caf959e76e --- /dev/null +++ b/Resources/Locale/en-US/Floof/markings/underwear.ftl @@ -0,0 +1,41 @@ +markings-category-Undershirt = Undershirt +markings-category-Underwear = Underwear + +marking-UndershirtStandard = Undershirt (Standard) +marking-UndershirtStandard-t_undershirt = Undershirt + +marking-UndershirtSleeveless = Undershirt (Sleeveless) +marking-UndershirtSleeveless-t_undershirt_sleeveless = Undershirt + +marking-UndershirtRolled = Undershirt (Rolled) +marking-UndershirtRolled-t_rolled_undershirt = Undershirt + +marking-UndershirtRolledSleeveless = Undershirt (Sleeveless Rolled) +marking-UndershirtRolledSleeveless-t_rolled_undershirt_sleeveless = Undershirt + +marking-UndershirtLong = Undershirt (Long) +marking-UndershirtLong-t_long_undershirt = Undershirt + +marking-UndershirtClassic = Bra (Classic) +marking-UndershirtClassic-snow_classic = Bra + +marking-UndershirtSports = Bra (Sport) +marking-UndershirtSports-snow_sports = Bra + +marking-UndershirtStrapless = Bra (Strapless) +marking-UndershirtStrapless-snow_strapless = Bra + +marking-UnderwearBoxers = Boxers +marking-UnderwearBoxers-snow_boxers = Boxers + +marking-UnderwearBriefs = Briefs +marking-UnderwearBriefs-snow_briefs = Briefs + +marking-UnderwearLowriders = Lowrides +marking-UnderwearLowriders-snow_lowriders = Lowrides + +marking-UnderwearSatin = Satin +marking-UnderwearSatin-snow_satin = Satin + +marking-UnderwearTanga = Tanga +marking-UnderwearTanga-snow_tanga = Tanga diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml index b82d6cad014..577d7b78d93 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml @@ -42,6 +42,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.Underwear" ] + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] - map: [ "jumpsuit" ] - map: [ "enum.HumanoidVisualLayers.LHand" ] - map: [ "enum.HumanoidVisualLayers.RHand" ] diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml index 51641dd0182..d4278a44819 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml @@ -33,6 +33,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.Underwear" ] + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] - map: [ "jumpsuit" ] - map: [ "enum.HumanoidVisualLayers.LHand" ] - map: [ "enum.HumanoidVisualLayers.RHand" ] diff --git a/Resources/Prototypes/DeltaV/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Species/rodentia.yml index 57c9cd89346..b7caa49cfbd 100644 --- a/Resources/Prototypes/DeltaV/Species/rodentia.yml +++ b/Resources/Prototypes/DeltaV/Species/rodentia.yml @@ -28,6 +28,8 @@ FacialHair: MobHumanoidAnyMarking Snout: MobHumanoidAnyMarking Chest: MobRodentiaTorso + Underwear: MobHumanoidAnyMarking + Undershirt: MobHumanoidAnyMarking HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking Tail: MobHumanoidAnyMarking @@ -45,6 +47,13 @@ - type: markingPoints id: MobRodentiaMarkingLimits points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] + Undershirt: + points: 1 + required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/DeltaV/Species/vulpkanin.yml b/Resources/Prototypes/DeltaV/Species/vulpkanin.yml index 520485ba9d4..9b4c356770f 100644 --- a/Resources/Prototypes/DeltaV/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Species/vulpkanin.yml @@ -21,6 +21,8 @@ FacialHair: MobHumanoidAnyMarking Snout: MobHumanoidAnyMarking Chest: MobVulpkaninTorso + Underwear: MobHumanoidAnyMarking + Undershirt: MobHumanoidAnyMarking HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking Tail: MobHumanoidAnyMarking @@ -38,6 +40,13 @@ - type: markingPoints id: MobVulpkaninMarkingLimits points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] + Undershirt: + points: 1 + required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachne.yml b/Resources/Prototypes/Entities/Mobs/Species/arachne.yml index ab4fba96311..fa8d6550f5f 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachne.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachne.yml @@ -34,6 +34,8 @@ color: "#e8b59b" sprite: Mobs/Species/Human/parts.rsi state: l_arm + - map: [ "enum.HumanoidVisualLayers.Underwear" ] # Floof, add underwear + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] # Floof, add underwear - map: [ "jumpsuit" ] - map: [ "enum.HumanoidVisualLayers.LHand" ] color: "#e8b59b" diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index e357f573f1e..7153fa8842a 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -92,6 +92,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.Underwear" ] # Floof, add underwear + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] # Floof, add underwear - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 02d3355b325..95b9cd7309d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -17,6 +17,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.Underwear" ] # Floof, add underwear + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] # Floof, add underwear - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] @@ -349,6 +351,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: ["enum.HumanoidVisualLayers.Undershirt"] # Floof, add underwear + - map: ["enum.HumanoidVisualLayers.Underwear"] # Floof, add underwear - shader: StencilClear sprite: Mobs/Species/Human/parts.rsi state: l_leg diff --git a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml index b3fcd565c4b..2105586b0f0 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml @@ -24,6 +24,8 @@ - map: [ "underpants" ] - map: [ "undershirt" ] - map: [ "socks" ] + - map: [ "enum.HumanoidVisualLayers.Underwear" ] # Floof, add underwear + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] # Floof, add underwear - map: [ "jumpsuit" ] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml index b9ce75978a8..d1f86f339a2 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml @@ -80,6 +80,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.Underwear" ] # Floof, add underwear + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] # Floof, add underwear - map: [ "jumpsuit" ] - map: [ "enum.HumanoidVisualLayers.LHand" ] - map: [ "enum.HumanoidVisualLayers.RHand" ] diff --git a/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml b/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml index 71dabd42ab6..ea8053ff8d3 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml @@ -160,6 +160,8 @@ - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] - map: ["socks"] + - map: [ "enum.HumanoidVisualLayers.Underwear" ] # Floof, add underwear + - map: [ "enum.HumanoidVisualLayers.Undershirt" ] # Floof, add underwear - map: ["underpants"] - map: ["undershirt"] - map: ["jumpsuit"] diff --git a/Resources/Prototypes/Floof/Entities/Mobs/Customization/Markings/undershirt.yml b/Resources/Prototypes/Floof/Entities/Mobs/Customization/Markings/undershirt.yml new file mode 100644 index 00000000000..38e2da8be3a --- /dev/null +++ b/Resources/Prototypes/Floof/Entities/Mobs/Customization/Markings/undershirt.yml @@ -0,0 +1,111 @@ +- type: marking + id: UndershirtStandard + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: t_undershirt + +- type: marking + id: UndershirtSleeveless + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: t_undershirt_sleeveless + +- type: marking + id: UndershirtRolled + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: t_rolled_undershirt + +- type: marking + id: UndershirtRolledSleeveless + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: t_rolled_undershirt_sleeveless + +- type: marking + id: UndershirtLong + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: t_long_undershirt + +- type: marking + id: UndershirtClassic + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: snow_bra + +- type: marking + id: UndershirtSports + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: snow_sports + +- type: marking + id: UndershirtStrapless + bodyPart: Undershirt + markingCategory: Undershirt + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/undershirt.rsi + state: snow_strapless diff --git a/Resources/Prototypes/Floof/Entities/Mobs/Customization/Markings/underwear.yml b/Resources/Prototypes/Floof/Entities/Mobs/Customization/Markings/underwear.yml new file mode 100644 index 00000000000..5b9b8cee2c2 --- /dev/null +++ b/Resources/Prototypes/Floof/Entities/Mobs/Customization/Markings/underwear.yml @@ -0,0 +1,69 @@ +- type: marking + id: UnderwearBoxers + bodyPart: Underwear + markingCategory: Underwear + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/underwear.rsi + state: snow_boxers + +- type: marking + id: UnderwearLowriders + bodyPart: Underwear + markingCategory: Underwear + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/underwear.rsi + state: snow_lowriders + +- type: marking + id: UnderwearBriefs + bodyPart: Underwear + markingCategory: Underwear + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/underwear.rsi + state: snow_briefs + +- type: marking + id: UnderwearSatin + bodyPart: Underwear + markingCategory: Underwear + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/underwear.rsi + state: snow_satin + +- type: marking + id: UnderwearTanga + bodyPart: Underwear + markingCategory: Underwear + speciesRestriction: [Shadowkin, Diona, Arachnid, Reptilian, Moth, SlimePerson, Resomi, Rodentia, Human, Rodentia, Felinid, Oni, Vulpkanin, Harpy] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Floof/Mobs/Customization/underwear.rsi + state: snow_tanga diff --git a/Resources/Prototypes/Floof/Interactions/underwear_interactions.yml b/Resources/Prototypes/Floof/Interactions/underwear_interactions.yml new file mode 100644 index 00000000000..c990aa5996e --- /dev/null +++ b/Resources/Prototypes/Floof/Interactions/underwear_interactions.yml @@ -0,0 +1,39 @@ +- type: Interaction + parent: [BaseGlobal, BaseHands] + id: ToggleUndershirt + priority: -11 + delay: 3 + allowSelfInteract: true + hideByRequirement: true + requirement: + !type:ComplexRequirement + requirements: + - !type:EntityWhitelistRequirement + whitelist: + components: [HumanoidAppearance] + - !type:ClothingSlotBlacklistRequirement + slot: jumpsuit + effectSuccess: + popup: Obvious + sound: {path: /Audio/Effects/thudswoosh.ogg} + soundPerceivedByOthers: false + action: + !type:ToggleLayersAction + neededMarkingCategory: Undershirt + toggleLayers: + - Undershirt + +- type: Interaction + parent: ToggleUndershirt + id: ToggleUnderwear + priority: -12 + delay: 2.2 + effectSuccess: + popup: Obvious + sound: {path: /Audio/Effects/thudswoosh.ogg} + soundPerceivedByOthers: false + action: + !type:ToggleLayersAction + neededMarkingCategory: Underwear + toggleLayers: + - Underwear diff --git a/Resources/Prototypes/Species/arachne.yml b/Resources/Prototypes/Species/arachne.yml index 7daf122a197..04e9fa634eb 100644 --- a/Resources/Prototypes/Species/arachne.yml +++ b/Resources/Prototypes/Species/arachne.yml @@ -18,6 +18,9 @@ - type: markingPoints id: MobArachneMarkingLimits points: + Undershirt: + points: 1 + required: false # Floof, add underwear Hair: points: 1 required: false @@ -59,6 +62,8 @@ Head: MobHumanHead Hair: MobHumanoidAnyMarking Chest: MobHumanTorso + Underwear: MobHumanoidAnyMarking + Undershirt: MobHumanoidAnyMarking Eyes: MobArachneEyes LArm: MobHumanLArm RArm: MobHumanRArm diff --git a/Resources/Prototypes/Species/arachnid.yml b/Resources/Prototypes/Species/arachnid.yml index a7965370639..66e9b3aacc0 100644 --- a/Resources/Prototypes/Species/arachnid.yml +++ b/Resources/Prototypes/Species/arachnid.yml @@ -21,6 +21,8 @@ Head: MobArachnidHead Snout: MobHumanoidAnyMarking Chest: MobArachnidTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking Tail: MobHumanoidAnyMarking @@ -45,6 +47,13 @@ id: MobArachnidMarkingLimits onlyWhitelisted: true points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 + required: false # Floof, add underwear Hair: points: 0 required: false diff --git a/Resources/Prototypes/Species/diona.yml b/Resources/Prototypes/Species/diona.yml index 2edd329103e..689b57018f5 100644 --- a/Resources/Prototypes/Species/diona.yml +++ b/Resources/Prototypes/Species/diona.yml @@ -21,6 +21,8 @@ HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking Chest: MobDionaTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear Eyes: MobDionaEyes LArm: MobDionaLArm RArm: MobDionaRArm @@ -37,6 +39,13 @@ id: MobDionaMarkingLimits onlyWhitelisted: true points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 + required: false # Floof, add underwear Head: points: 2 required: false diff --git a/Resources/Prototypes/Species/harpy.yml b/Resources/Prototypes/Species/harpy.yml index bb6e04fe372..55676f30d3f 100644 --- a/Resources/Prototypes/Species/harpy.yml +++ b/Resources/Prototypes/Species/harpy.yml @@ -23,6 +23,8 @@ FacialHair: MobHumanoidAnyMarking Snout: MobHumanoidAnyMarking Chest: MobHarpyTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking Tail: MobHumanoidAnyMarking @@ -41,6 +43,13 @@ - type: markingPoints id: MobHarpyMarkingLimits points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 # Floof, add underwear + required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Species/human.yml b/Resources/Prototypes/Species/human.yml index 012fc4ba42d..88433dedf6d 100644 --- a/Resources/Prototypes/Species/human.yml +++ b/Resources/Prototypes/Species/human.yml @@ -23,6 +23,8 @@ FacialHair: MobHumanoidAnyMarking Snout: MobHumanoidAnyMarking Chest: MobHumanTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear Eyes: MobHumanoidEyes LArm: MobHumanLArm RArm: MobHumanRArm @@ -40,6 +42,13 @@ - type: markingPoints id: MobHumanMarkingLimits points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 + required: false # Floof, add underwear Hair: points: 1 required: false diff --git a/Resources/Prototypes/Species/ipc.yml b/Resources/Prototypes/Species/ipc.yml index afebc7be190..10003dd2ad2 100644 --- a/Resources/Prototypes/Species/ipc.yml +++ b/Resources/Prototypes/Species/ipc.yml @@ -35,6 +35,8 @@ Wings: MobHumanoidAnyMarking Hair: MobHumanoidMarkingMatchSkin Chest: MobIPCTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear LArm: MobIPCLArm RArm: MobIPCRArm LHand: MobIPCLHand diff --git a/Resources/Prototypes/Species/moth.yml b/Resources/Prototypes/Species/moth.yml index 23dc9a98772..7254d605ced 100644 --- a/Resources/Prototypes/Species/moth.yml +++ b/Resources/Prototypes/Species/moth.yml @@ -19,6 +19,8 @@ Head: MobMothHead Snout: MobHumanoidAnyMarking Chest: MobMothTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking Tail: MobHumanoidAnyMarking @@ -42,6 +44,13 @@ id: MobMothMarkingLimits onlyWhitelisted: true points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 # Floof, add underwear + required: false Hair: points: 0 required: false diff --git a/Resources/Prototypes/Species/reptilian.yml b/Resources/Prototypes/Species/reptilian.yml index 0cfd6d89456..29d3270c463 100644 --- a/Resources/Prototypes/Species/reptilian.yml +++ b/Resources/Prototypes/Species/reptilian.yml @@ -25,6 +25,8 @@ Head: MobReptilianHead Snout: MobHumanoidAnyMarking Chest: MobReptilianTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking Tail: MobHumanoidAnyMarking @@ -43,6 +45,13 @@ id: MobReptilianMarkingLimits onlyWhitelisted: true points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 # Floof, add underwear + required: false Hair: points: 0 required: false diff --git a/Resources/Prototypes/Species/shadowkin.yml b/Resources/Prototypes/Species/shadowkin.yml index 7cbd752092f..dc6d23ef0b2 100644 --- a/Resources/Prototypes/Species/shadowkin.yml +++ b/Resources/Prototypes/Species/shadowkin.yml @@ -35,6 +35,8 @@ HeadSide: MobShadowkinAnyMarkingFollowSkin Tail: MobShadowkinAnyMarkingFollowSkin Chest: MobShadowkinTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear Eyes: MobShadowkinEyes LArm: MobShadowkinLArm RArm: MobShadowkinRArm @@ -48,6 +50,13 @@ - type: markingPoints id: MobShadowkinMarkingLimits points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 + required: false # Floof, add underwear Tail: points: 1 required: true diff --git a/Resources/Prototypes/Species/skeleton.yml b/Resources/Prototypes/Species/skeleton.yml index 1f2a95e9918..4c4066e18f1 100644 --- a/Resources/Prototypes/Species/skeleton.yml +++ b/Resources/Prototypes/Species/skeleton.yml @@ -16,6 +16,8 @@ sprites: Head: MobSkeletonHead Chest: MobSkeletonTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear LArm: MobSkeletonLArm RArm: MobSkeletonRArm LHand: MobSkeletonLHand diff --git a/Resources/Prototypes/Species/slime.yml b/Resources/Prototypes/Species/slime.yml index f7b8adf2eff..60c36c6fdc0 100644 --- a/Resources/Prototypes/Species/slime.yml +++ b/Resources/Prototypes/Species/slime.yml @@ -18,6 +18,8 @@ FacialHair: MobSlimeMarkingFollowSkin Snout: MobSlimeMarkingFollowSkin Chest: MobSlimeTorso + Underwear: MobHumanoidAnyMarking # Floof, add underwear + Undershirt: MobHumanoidAnyMarking # Floof, add underwear HeadTop: MobSlimeMarkingFollowSkin HeadSide: MobSlimeMarkingFollowSkin Tail: MobSlimeMarkingFollowSkin @@ -35,6 +37,13 @@ - type: markingPoints id: MobSlimeMarkingLimits points: + Underwear: + points: 1 + required: true + defaultMarkings: [ UnderwearBoxers ] # Floof, add underwear + Undershirt: + points: 1 + required: false # Floof, add underwear Hair: points: 1 required: false diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/meta.json b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/meta.json new file mode 100644 index 00000000000..a26b06084a8 --- /dev/null +++ b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken and modified from cmss13 at https://github.com/cmss13-devs/cmss13/blob/884ab172389b6fc54ef063f5fbea5e8b0a0a2235/icons/mob/humans/undershirt.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "t_undershirt", + "directions": 4 + }, + { + "name": "t_undershirt_sleeveless", + "directions": 4 + }, + { + "name": "t_rolled_undershirt", + "directions": 4 + }, + { + "name": "t_rolled_undershirt_sleeveless", + "directions": 4 + }, + { + "name": "t_long_undershirt", + "directions": 4 + }, + { + "name": "snow_bra", + "directions": 4 + }, + { + "name": "snow_sports", + "directions": 4 + }, + { + "name": "snow_strapless", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_bra.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_bra.png new file mode 100644 index 00000000000..5e1231602f6 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_bra.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_sports.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_sports.png new file mode 100644 index 00000000000..65bbeaefce9 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_sports.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_strapless.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_strapless.png new file mode 100644 index 00000000000..b27b44860e3 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/snow_strapless.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_long_undershirt.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_long_undershirt.png new file mode 100644 index 00000000000..3e16fc0a532 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_long_undershirt.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_rolled_undershirt.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_rolled_undershirt.png new file mode 100644 index 00000000000..786eb63f4d7 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_rolled_undershirt.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_rolled_undershirt_sleeveless.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_rolled_undershirt_sleeveless.png new file mode 100644 index 00000000000..59d93e8ef73 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_rolled_undershirt_sleeveless.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_undershirt.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_undershirt.png new file mode 100644 index 00000000000..9e953adc767 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_undershirt.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_undershirt_sleeveless.png b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_undershirt_sleeveless.png new file mode 100644 index 00000000000..96432de20d7 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/undershirt.rsi/t_undershirt_sleeveless.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/meta.json b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/meta.json new file mode 100644 index 00000000000..78d8f7eab41 --- /dev/null +++ b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Take from https://github.com/cmss13-devs/cmss13/blob/884ab172389b6fc54ef063f5fbea5e8b0a0a2235/icons/mob/humans/underwear.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "snow_boxers", + "directions": 4 + }, + { + "name": "snow_lowriders", + "directions": 4 + }, + { + "name": "snow_briefs", + "directions": 4 + }, + { + "name": "snow_satin", + "directions": 4 + }, + { + "name": "snow_tanga", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_boxers.png b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_boxers.png new file mode 100644 index 00000000000..e49b8b72773 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_boxers.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_briefs.png b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_briefs.png new file mode 100644 index 00000000000..2eab274ab7e Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_briefs.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_lowriders.png b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_lowriders.png new file mode 100644 index 00000000000..7bf2266a04f Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_lowriders.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_satin.png b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_satin.png new file mode 100644 index 00000000000..e7939ebc756 Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_satin.png differ diff --git a/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_tanga.png b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_tanga.png new file mode 100644 index 00000000000..0b6d238079b Binary files /dev/null and b/Resources/Textures/Floof/Mobs/Customization/underwear.rsi/snow_tanga.png differ