From 957f526bc7439174f3fe5a823de7f511eb427647 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 7 Mar 2026 15:58:58 -0600 Subject: [PATCH 1/6] make markings inheriting --- Content.Shared/Humanoid/Markings/MarkingPrototype.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs index 10da06d860..8e4366c102 100644 --- a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs +++ b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs @@ -1,14 +1,24 @@ using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; using Robust.Shared.Utility; namespace Content.Shared.Humanoid.Markings { [Prototype] - public sealed partial class MarkingPrototype : IPrototype + public sealed partial class MarkingPrototype : IPrototype, IInheritingPrototype // DEN: Make inheriting { [IdDataField] public string ID { get; private set; } = "uwu"; + // DEN start: Make markings inheriting + [ParentDataField(typeof(AbstractPrototypeIdArraySerializer))] + public string[]? Parents { get; private set; } + + [NeverPushInheritance] + [AbstractDataField] + public bool Abstract { get; private set; } + // End DEN + public string Name { get; private set; } = default!; [DataField("bodyPart", required: true)] From 604bca33db61f5f16213c9e4c26bfeaf9153e021 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 7 Mar 2026 17:05:40 -0600 Subject: [PATCH 2/6] inherit group whitelists also --- Content.Shared/Humanoid/Markings/MarkingPrototype.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs index 8e4366c102..0a348e467a 100644 --- a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs +++ b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs @@ -25,6 +25,7 @@ public sealed partial class MarkingPrototype : IPrototype, IInheritingPrototype public HumanoidVisualLayers BodyPart { get; private set; } = default!; [DataField] + [AlwaysPushInheritance] // DEN public List>? GroupWhitelist; [DataField("sexRestriction")] From 9386cb0e78eededcc90ff3a04112050f96b3306e Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 7 Mar 2026 17:10:01 -0600 Subject: [PATCH 3/6] reparent underwear --- .../Customization/Markings/undergarments.yml | 392 ++++++++++-------- .../Mobs/Customization/Markings/base.yml | 52 +++ .../Customization/Markings/base_groups.yml | 34 ++ 3 files changed, 297 insertions(+), 181 deletions(-) create mode 100644 Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml create mode 100644 Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml index e1de3807c1..112ceeee15 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml @@ -1,291 +1,321 @@ # These options are kept very sparse to not put emphasis on nudity, and to provide a base for players to feel comfortable with. -# It's unlikely more will be added to upstream for cosmetic reasons. +# It's unlikely more will be added to upstream for cosmetic reasons. + +# (DEN comment: Ignore the above two comments.) - type: marking + parent: BaseUndergarmentBottomGeneral # DEN id: UndergarmentBottomBoxers - bodyPart: UndergarmentBottom - groupWhitelist: [Arachnid, Diona, Human, Moth, Slime] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Arachnid, Diona, Human, Moth, Slime] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: boxers - type: marking + parent: BaseUndergarmentBottomGeneral # DEN id: UndergarmentBottomBriefs - bodyPart: UndergarmentBottom - groupWhitelist: [Arachnid, Diona, Human, Moth, Slime] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Arachnid, Diona, Human, Moth, Slime] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: briefs - type: marking + parent: BaseUndergarmentBottomGeneral # DEN id: UndergarmentBottomSatin - bodyPart: UndergarmentBottom - groupWhitelist: [Arachnid, Diona, Human, Moth, Slime] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Arachnid, Diona, Human, Moth, Slime] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: satin - type: marking + parent: BaseUndergarmentTopGeneral # DEN id: UndergarmentTopBra - bodyPart: UndergarmentTop - groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: classic - type: marking + parent: BaseUndergarmentTopGeneral # DEN id: UndergarmentTopSportsbra - bodyPart: UndergarmentTop - groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: sports - type: marking + parent: BaseUndergarmentTopGeneral # DEN id: UndergarmentTopBinder - bodyPart: UndergarmentTop - groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: binder - type: marking + parent: BaseUndergarmentTopGeneral # DEN id: UndergarmentTopTanktop - bodyPart: UndergarmentTop - groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Arachnid, Diona, Human, Moth, Reptilian, Slime] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: tanktop +# ======================================== +# DEN COMMENT: Vox markings start +# ======================================== + - type: marking + parent: BaseUndergarmentBottomVox # DEN id: UndergarmentBottomBoxersVox # Voxers. - bodyPart: UndergarmentBottom - groupWhitelist: [Vox] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Vox] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: boxers_vox - type: marking + parent: BaseUndergarmentBottomVox # DEN id: UndergarmentBottomBriefsVox - bodyPart: UndergarmentBottom - groupWhitelist: [Vox] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Vox] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: briefs_vox - type: marking + parent: BaseUndergarmentBottomVox # DEN id: UndergarmentBottomSatinVox - bodyPart: UndergarmentBottom - groupWhitelist: [Vox] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Vox] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: satin_vox - type: marking + parent: BaseUndergarmentTopVox # DEN id: UndergarmentTopBraVox - bodyPart: UndergarmentTop - groupWhitelist: [Vox] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Vox] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: classic_vox - type: marking + parent: BaseUndergarmentTopVox # DEN id: UndergarmentTopSportsbraVox - bodyPart: UndergarmentTop - groupWhitelist: [Vox] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Vox] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: sports_vox - type: marking + parent: BaseUndergarmentTopVox # DEN id: UndergarmentTopBinderVox - bodyPart: UndergarmentTop - groupWhitelist: [Vox] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Vox] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: binder_vox - type: marking + parent: BaseUndergarmentTopVox # DEN id: UndergarmentTopTanktopVox - bodyPart: UndergarmentTop - groupWhitelist: [Vox] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentTop + # groupWhitelist: [Vox] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: tanktop_vox +# ======================================== +# DEN COMMENT: Reptilian markings start +# ======================================== + - type: marking + parent: BaseUndergarmentBottomReptilian # DEN id: UndergarmentBottomBoxersReptilian - bodyPart: UndergarmentBottom - groupWhitelist: [Reptilian] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Reptilian] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: boxers_reptilian - type: marking + parent: BaseUndergarmentBottomReptilian # DEN id: UndergarmentBottomBriefsReptilian - bodyPart: UndergarmentBottom - groupWhitelist: [Reptilian] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Reptilian] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: briefs_reptilian - type: marking + parent: BaseUndergarmentBottomReptilian # DEN id: UndergarmentBottomSatinReptilian - bodyPart: UndergarmentBottom - groupWhitelist: [Reptilian] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' + # bodyPart: UndergarmentBottom + # groupWhitelist: [Reptilian] + # coloring: + # default: + # type: null + # fallbackColor: '#FFFFFF' sprites: - sprite: Mobs/Customization/undergarments.rsi state: satin_reptilian -- type: marking - id: UndergarmentBottomBoxersVulpkanin - bodyPart: UndergarmentBottom - groupWhitelist: [Vulpkanin] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' - sprites: - - sprite: Mobs/Customization/undergarments.rsi - state: boxers_vulpkanin +# DEN start: Comment out all of these, because we use Paradise sprites -- type: marking - id: UndergarmentBottomBriefsVulpkanin - bodyPart: UndergarmentBottom - groupWhitelist: [Vulpkanin] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' - sprites: - - sprite: Mobs/Customization/undergarments.rsi - state: briefs_vulpkanin +# - type: marking +# id: UndergarmentBottomBoxersVulpkanin +# bodyPart: UndergarmentBottom +# groupWhitelist: [Vulpkanin] +# coloring: +# default: +# type: null +# fallbackColor: '#FFFFFF' +# sprites: +# - sprite: Mobs/Customization/undergarments.rsi +# state: boxers_vulpkanin -- type: marking - id: UndergarmentBottomSatinVulpkanin - bodyPart: UndergarmentBottom - groupWhitelist: [Vulpkanin] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' - sprites: - - sprite: Mobs/Customization/undergarments.rsi - state: satin_vulpkanin +# - type: marking +# id: UndergarmentBottomBriefsVulpkanin +# bodyPart: UndergarmentBottom +# groupWhitelist: [Vulpkanin] +# coloring: +# default: +# type: null +# fallbackColor: '#FFFFFF' +# sprites: +# - sprite: Mobs/Customization/undergarments.rsi +# state: briefs_vulpkanin -- type: marking - id: UndergarmentTopBraVulpkanin - bodyPart: UndergarmentTop - groupWhitelist: [Vulpkanin] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' - sprites: - - sprite: Mobs/Customization/undergarments.rsi - state: classic_vulpkanin +# - type: marking +# id: UndergarmentBottomSatinVulpkanin +# bodyPart: UndergarmentBottom +# groupWhitelist: [Vulpkanin] +# coloring: +# default: +# type: null +# fallbackColor: '#FFFFFF' +# sprites: +# - sprite: Mobs/Customization/undergarments.rsi +# state: satin_vulpkanin -- type: marking - id: UndergarmentTopSportsbraVulpkanin - bodyPart: UndergarmentTop - groupWhitelist: [Vulpkanin] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' - sprites: - - sprite: Mobs/Customization/undergarments.rsi - state: sports_vulpkanin +# - type: marking +# id: UndergarmentTopBraVulpkanin +# bodyPart: UndergarmentTop +# groupWhitelist: [Vulpkanin] +# coloring: +# default: +# type: null +# fallbackColor: '#FFFFFF' +# sprites: +# - sprite: Mobs/Customization/undergarments.rsi +# state: classic_vulpkanin -- type: marking - id: UndergarmentTopBinderVulpkanin - bodyPart: UndergarmentTop - groupWhitelist: [Vulpkanin] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' - sprites: - - sprite: Mobs/Customization/undergarments.rsi - state: binder_vulpkanin +# - type: marking +# id: UndergarmentTopSportsbraVulpkanin +# bodyPart: UndergarmentTop +# groupWhitelist: [Vulpkanin] +# coloring: +# default: +# type: null +# fallbackColor: '#FFFFFF' +# sprites: +# - sprite: Mobs/Customization/undergarments.rsi +# state: sports_vulpkanin -- type: marking - id: UndergarmentTopTanktopVulpkanin - bodyPart: UndergarmentTop - groupWhitelist: [Vulpkanin] - coloring: - default: - type: null - fallbackColor: '#FFFFFF' - sprites: - - sprite: Mobs/Customization/undergarments.rsi - state: tanktop_vulpkanin - \ No newline at end of file +# - type: marking +# id: UndergarmentTopBinderVulpkanin +# bodyPart: UndergarmentTop +# groupWhitelist: [Vulpkanin] +# coloring: +# default: +# type: null +# fallbackColor: '#FFFFFF' +# sprites: +# - sprite: Mobs/Customization/undergarments.rsi +# state: binder_vulpkanin + +# - type: marking +# id: UndergarmentTopTanktopVulpkanin +# bodyPart: UndergarmentTop +# groupWhitelist: [Vulpkanin] +# coloring: +# default: +# type: null +# fallbackColor: '#FFFFFF' +# sprites: +# - sprite: Mobs/Customization/undergarments.rsi +# state: tanktop_vulpkanin + +# DEN end diff --git a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml new file mode 100644 index 0000000000..c4d95f32ba --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml @@ -0,0 +1,52 @@ +# Helper base markings + +- type: marking + abstract: true + id: BaseColorWhite + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + +# Marking types + +- type: marking + abstract: true + parent: BaseColorWhite + id: BaseUndergarmentBottom + bodyPart: UndergarmentBottom + +- type: marking + abstract: true + parent: BaseColorWhite + id: BaseUndergarmentTop + bodyPart: UndergarmentTop + +# Abstract inherited markings + +## Undergarments + +- type: marking + abstract: true + parent: [BaseUndergarmentBottom, BaseGroupsGeneralUndergarmentBottom] + id: BaseUndergarmentBottomGeneral + +- type: marking + abstract: true + parent: [BaseUndergarmentBottom, BaseGroupSingleReptilian] + id: BaseUndergarmentBottomReptilian + +- type: marking + abstract: true + parent: [BaseUndergarmentBottom, BaseGroupSingleVox] + id: BaseUndergarmentBottomVox + +- type: marking + abstract: true + parent: [BaseUndergarmentTop, BaseGroupsGeneralUndergarmentTop] + id: BaseUndergarmentTopGeneral + +- type: marking + abstract: true + parent: [BaseUndergarmentTop, BaseGroupSingleVox] + id: BaseUndergarmentTopVox diff --git a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml new file mode 100644 index 0000000000..fcad28a47b --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml @@ -0,0 +1,34 @@ +# NOTE!! groupWhitelist has partial inheritance. +# This means you can parent a marking with a group whitelist filled out, and then add more species to the groupWhitelist +# field, and the marking will use a combined list of species from those two group whitelists. + +- type: marking + abstract: true + id: BaseGroupsGeneralUndergarments + groupWhitelist: [Arachnid, Diona, Human, Moth, Slime, Vulpkanin] + +# Species that can wear generic underwear bottoms, but not tops +- type: marking + abstract: true + parent: BaseGroupsGeneralUndergarments + id: BaseGroupsGeneralUndergarmentBottom + +# Species that can wear generic underwear tops, but not bottoms +- type: marking + abstract: true + parent: BaseGroupsGeneralUndergarments + id: BaseGroupsGeneralUndergarmentTop + groupWhitelist: [Reptilian] + +# Single-species group +# TODO: "Preferred group" functionality + +- type: marking + abstract: true + id: BaseGroupSingleReptilian + groupWhitelist: [Reptilian] + +- type: marking + abstract: true + id: BaseGroupSingleVox + groupWhitelist: [Vox] From 353ec5b506c13c8f412b0470e4b3cf572bce40ca Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 7 Mar 2026 17:28:07 -0600 Subject: [PATCH 4/6] add marking categories --- .../Humanoid/Markings/MarkingPrototype.cs | 14 ++++++++++++++ .../Entities/Mobs/Customization/Markings/base.yml | 2 ++ 2 files changed, 16 insertions(+) diff --git a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs index 0a348e467a..1c45ceba98 100644 --- a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs +++ b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs @@ -47,6 +47,20 @@ public sealed partial class MarkingPrototype : IPrototype, IInheritingPrototype [DataField("sprites", required: true)] public List Sprites { get; private set; } = default!; + // DEN start: categorization of markings + + /// + /// A list of "categories" that this marking belongs to. + /// + /// + /// This will eventually be used for in-round marking customization - such as interactions that + /// can change your scars, tattoos, gauze wraps, or underwear in the middle of a round. + /// + [DataField] + public HashSet Categories = new(); + + // DEN end + public Marking AsMarking() { return new Marking(ID, Sprites.Count); diff --git a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml index c4d95f32ba..ba1b0600de 100644 --- a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml +++ b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml @@ -15,12 +15,14 @@ parent: BaseColorWhite id: BaseUndergarmentBottom bodyPart: UndergarmentBottom + categories: [Undergarment, UndergarmentBottom] - type: marking abstract: true parent: BaseColorWhite id: BaseUndergarmentTop bodyPart: UndergarmentTop + categories: [Undergarment, UndergarmentTop] # Abstract inherited markings From ebf0a32b5bf55d4791b2bc24e08bf39166d432ea Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 7 Mar 2026 21:32:17 -0600 Subject: [PATCH 5/6] reparent scars --- .../Mobs/Customization/Markings/scars.yml | 60 +++++++++++-------- .../Mobs/Customization/Markings/vox_scars.yml | 14 ++++- .../Mobs/Customization/Markings/base.yml | 27 +++++++++ .../Customization/Markings/base_groups.yml | 15 +++++ 4 files changed, 91 insertions(+), 25 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml index 26c223c223..ee12ee0551 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml @@ -1,97 +1,109 @@ - type: marking + parent: BaseScarEye # DEN id: ScarEyeRight - bodyPart: Head - groupWhitelist: [Human, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Head + # groupWhitelist: [Human] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_eye_right - type: marking + parent: BaseScarEye # DEN id: ScarEyeLeft - bodyPart: Head - groupWhitelist: [Human, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Head + # groupWhitelist: [Human] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_eye_left - type: marking + parent: BaseScarChest # DEN id: ScarTopSurgeryShort - bodyPart: Chest - groupWhitelist: [Human, Reptilian, Moth, Arachnid, Diona, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Chest + # groupWhitelist: [Human, Reptilian, Moth, Arachnid, Diona] sexRestriction: [Male] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_top_surgery_short - type: marking + parent: BaseScarChest # DEN id: ScarTopSurgeryLong - bodyPart: Chest - groupWhitelist: [Human, Reptilian, Moth, Arachnid, Diona, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Chest + # groupWhitelist: [Human, Reptilian, Moth, Arachnid, Diona] sexRestriction: [Male] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_top_surgery_long - type: marking + parent: BaseScarChest # DEN id: ScarChest - bodyPart: Chest - groupWhitelist: [Human, Reptilian, Moth, Arachnid, Diona, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Chest + # groupWhitelist: [Human, Reptilian, Moth, Arachnid, Diona] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_chest - type: marking + parent: BaseScarHead # DEN id: ScarNeck - bodyPart: Head - groupWhitelist: [Human, Reptilian, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Head + # groupWhitelist: [Human, Reptilian] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_neck - type: marking + parent: BaseScarChest # DEN id: ScarChestBullets - bodyPart: Chest - groupWhitelist: [Human, Reptilian, Moth, Arachnid, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Chest + # groupWhitelist: [Human, Reptilian, Moth, Arachnid] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_chest_bullets - type: marking + parent: BaseScarChest # DEN id: ScarStomachBullets - bodyPart: Chest - groupWhitelist: [Human, Reptilian, Moth, Arachnid, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Chest + # groupWhitelist: [Human, Reptilian, Moth, Arachnid] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_stomach_bullets - type: marking + parent: BaseScarHead # DEN id: ScarFace1 - bodyPart: Head - groupWhitelist: [Human, Reptilian, Moth, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Head + # groupWhitelist: [Human, Reptilian, Moth] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_face_1 - type: marking + parent: BaseScarHead # DEN id: ScarFace2 - bodyPart: Head - groupWhitelist: [Human, Reptilian, Moth, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Head + # groupWhitelist: [Human, Reptilian, Moth] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_face_2 - type: marking + parent: BaseScarEye # DEN id: ScarEyeRightSmall - bodyPart: Head - groupWhitelist: [Human, Reptilian, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Head + # groupWhitelist: [Human, Reptilian] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_eye_right_small - type: marking + parent: BaseScarEye # DEN id: ScarEyeLeftSmall - bodyPart: Head - groupWhitelist: [Human, Reptilian, Vulpkanin] # DEN - add Vulpkanin + # bodyPart: Head + # groupWhitelist: [Human, Reptilian] sprites: - sprite: Mobs/Customization/scars.rsi state: scar_eye_left_small diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_scars.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_scars.yml index ce48e869bb..91a3b9305f 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_scars.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_scars.yml @@ -1,4 +1,5 @@ - type: marking + parent: BaseScar # DEN id: VoxScarEyeRight bodyPart: Head groupWhitelist: [Vox] @@ -7,6 +8,7 @@ state: vox_scar_eye_right - type: marking + parent: BaseScar # DEN id: VoxScarEyeLeft bodyPart: Head groupWhitelist: [Vox] @@ -15,6 +17,7 @@ state: vox_scar_eye_left - type: marking + parent: BaseScar # DEN id: VoxScarTopSurgeryShort bodyPart: Chest groupWhitelist: [Vox] @@ -23,6 +26,7 @@ state: vox_top_surgery_short - type: marking + parent: BaseScar # DEN id: VoxScarTopSurgeryLong bodyPart: Chest groupWhitelist: [Vox] @@ -31,6 +35,7 @@ state: vox_top_surgery_long - type: marking + parent: BaseScar # DEN id: VoxScarChest bodyPart: Chest groupWhitelist: [Vox] @@ -39,6 +44,7 @@ state: vox_scar_chest - type: marking + parent: BaseScar # DEN id: VoxScarNeck bodyPart: Head groupWhitelist: [Vox] @@ -47,6 +53,7 @@ state: vox_scar_neck - type: marking + parent: BaseScar # DEN id: VoxScarChestBullets bodyPart: Chest groupWhitelist: [Vox] @@ -55,6 +62,7 @@ state: vox_scar_chest_bullets - type: marking + parent: BaseScar # DEN id: VoxScarStomachBullets bodyPart: Chest groupWhitelist: [Vox] @@ -63,6 +71,7 @@ state: vox_scar_stomach_bullets - type: marking + parent: BaseScar # DEN id: VoxScarFace1 bodyPart: Head groupWhitelist: [Vox] @@ -71,6 +80,7 @@ state: vox_scar_face_1 - type: marking + parent: BaseScar # DEN id: VoxScarFace2 bodyPart: Head groupWhitelist: [Vox] @@ -79,6 +89,7 @@ state: vox_scar_face_2 - type: marking + parent: BaseScar # DEN id: VoxScarEyeRightSmall bodyPart: Head groupWhitelist: [Vox] @@ -87,9 +98,10 @@ state: vox_scar_eye_right_small - type: marking + parent: BaseScar # DEN id: VoxScarEyeLeftSmall bodyPart: Head groupWhitelist: [Vox] sprites: - sprite: Mobs/Customization/vox_scars.rsi - state: vox_scar_eye_left_small \ No newline at end of file + state: vox_scar_eye_left_small diff --git a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml index ba1b0600de..53896956b1 100644 --- a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml +++ b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base.yml @@ -10,6 +10,33 @@ # Marking types +## Scars + +- type: marking + abstract: true + id: BaseScar + categories: [Scar] + +- type: marking + abstract: true + parent: BaseGroupsGeneralScarHead + id: BaseScarHead + bodyPart: Head + +- type: marking + abstract: true + parent: BaseGroupsGeneralScar + id: BaseScarEye + bodyPart: Head + +- type: marking + abstract: true + parent: BaseGroupsGeneralScarChest + id: BaseScarChest + bodyPart: Chest + +## Undergarments + - type: marking abstract: true parent: BaseColorWhite diff --git a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml index fcad28a47b..888b7570bf 100644 --- a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml +++ b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml @@ -2,6 +2,21 @@ # This means you can parent a marking with a group whitelist filled out, and then add more species to the groupWhitelist # field, and the marking will use a combined list of species from those two group whitelists. +- type: marking + abstract: true + id: BaseGroupsGeneralScar + groupWhitelist: [Human, Reptilian, Vulpkanin] + +- type: marking + abstract: true + id: BaseGroupsGeneralScarHead + groupWhitelist: [Moth] + +- type: marking + abstract: true + id: BaseGroupsGeneralScarChest + groupWhitelist: [Arachnid, Diona] + - type: marking abstract: true id: BaseGroupsGeneralUndergarments From e90f2adfe44a1c1606d9e6aa50de1fb4140f6b8e Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sun, 8 Mar 2026 13:06:50 -0500 Subject: [PATCH 6/6] reparent diona markings --- .../Mobs/Customization/Markings/diona.yml | 380 ++++++++++-------- .../Customization/Markings/base_groups.yml | 5 + 2 files changed, 213 insertions(+), 172 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/diona.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/diona.yml index 7d37edb795..01b6f7d937 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/diona.yml @@ -1,374 +1,410 @@ +# DEN start: base inheritor - type: marking + abstract: true + parent: [BaseColorWhite, BaseGroupSingleDiona] + id: BaseDiona +# end DEN + +- type: marking + parent: BaseDiona # DEN id: DionaThornsHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: thorns_head - type: marking + parent: BaseDiona # DEN id: DionaThornsBody bodyPart: Chest - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: thorns_body - type: marking + parent: BaseDiona # DEN id: DionaFlowersHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: flowers_head - type: marking + parent: BaseDiona # DEN id: DionaFlowersBody bodyPart: Chest - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: flowers_body - type: marking + parent: BaseDiona # DEN id: DionaLeafCover bodyPart: Chest - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SkinColoring + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SkinColoring sprites: - sprite: Mobs/Customization/diona.rsi state: leaf_cover - type: marking + parent: BaseDiona # DEN id: DionaBloomHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: bloom - type: marking + parent: BaseDiona # DEN id: DionaBracketHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: bracket - type: marking + parent: BaseDiona # DEN id: DionaBrushHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SkinColoring + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SkinColoring sprites: - sprite: Mobs/Customization/diona.rsi state: brush - type: marking + parent: BaseDiona # DEN id: DionaCornflowerHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: cornflower - type: marking + parent: BaseDiona # DEN id: DionaFicusHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: ficus - type: marking + parent: BaseDiona # DEN id: DionaGarlandHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: garland - type: marking + parent: BaseDiona # DEN id: DionaKingHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: king - type: marking + parent: BaseDiona # DEN id: DionaLaurelHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: laurel - type: marking + parent: BaseDiona # DEN id: DionaLeafyHeadTop bodyPart: HeadTop - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: leafy - type: marking + parent: BaseDiona # DEN id: DionaLotusHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: lotus - type: marking + parent: BaseDiona # DEN id: DionaMeadowHeadTop bodyPart: HeadTop - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: meadow - type: marking + parent: BaseDiona # DEN id: DionaOakHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: oak - type: marking + parent: BaseDiona # DEN id: DionaPalmHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: palm - type: marking + parent: BaseDiona # DEN id: DionaRootHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: root - type: marking + parent: BaseDiona # DEN id: DionaRoseHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: rose - type: marking + parent: BaseDiona # DEN id: DionaRoseyHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: rosey - type: marking + parent: BaseDiona # DEN id: DionaShrubHeadTop bodyPart: HeadTop - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: shrub - type: marking + parent: BaseDiona # DEN id: DionaSpinnerHeadSide bodyPart: HeadSide - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: spinner - type: marking + parent: BaseDiona # DEN id: DionaSproutHeadSide bodyPart: HeadSide - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: sprout - type: marking + parent: BaseDiona # DEN id: DionaVineHeadTop bodyPart: HeadTop - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: vine - type: marking + parent: BaseDiona # DEN id: DionaVinelHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: vinel - type: marking + parent: BaseDiona # DEN id: DionaVinesHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: vines - type: marking + parent: BaseDiona # DEN id: DionaWildflowerHead bodyPart: Head - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#FFFFFF" sprites: - sprite: Mobs/Customization/diona.rsi state: wildflower - type: marking + parent: BaseDiona # DEN id: DionaVineOverlay bodyPart: Overlay - groupWhitelist: [Diona] - coloring: - default: - type: - !type:SimpleColoring - color: "#5f7039" + # groupWhitelist: [Diona] + # coloring: + # default: + # type: + # !type:SimpleColoring + # color: "#5f7039" sprites: - sprite: Mobs/Customization/diona.rsi state: overlay diff --git a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml index 888b7570bf..c3d74958fe 100644 --- a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml +++ b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/base_groups.yml @@ -38,6 +38,11 @@ # Single-species group # TODO: "Preferred group" functionality +- type: marking + abstract: true + id: BaseGroupSingleDiona + groupWhitelist: [Diona] + - type: marking abstract: true id: BaseGroupSingleReptilian