From 299d7e148e8a944df5859ba8be7b4c684cf077f7 Mon Sep 17 00:00:00 2001 From: mqole Date: Sun, 15 Mar 2026 14:17:02 +1100 Subject: [PATCH 1/5] no work yet --- Content.Client/Body/VisualBodySystem.cs | 10 ++++++++++ Content.Shared/Humanoid/Markings/MarkingPrototype.cs | 8 ++++++++ Resources/ConfigPresets/Build/development.toml | 3 ++- .../Entities/Mobs/Customization/Markings/moth.yml | 2 ++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Content.Client/Body/VisualBodySystem.cs b/Content.Client/Body/VisualBodySystem.cs index fba936ee58a..0209482850e 100644 --- a/Content.Client/Body/VisualBodySystem.cs +++ b/Content.Client/Body/VisualBodySystem.cs @@ -193,12 +193,22 @@ private void ApplyMarkings(Entity ent, EntityUid t var layer = _sprite.AddLayer(target, sprite, index + i + 1); _sprite.LayerMapSet(target, layerId, layer); _sprite.LayerSetSprite(target, layerId, rsi); + } if (marking.MarkingColors is not null && i < marking.MarkingColors.Count) _sprite.LayerSetColor(target, layerId, marking.MarkingColors[i]); else _sprite.LayerSetColor(target, layerId, Color.White); + + // MACRO START - marking layer shaders + if (proto.Shaders is not null && + proto.Shaders.TryGetValue(rsi.RsiState, out var shader)) + { + EnsureComp(target, out var spriteComp); // why is this method in the component????? + spriteComp.LayerSetShader(i, shader); + } + // MACRO END } applied.Add(marking); diff --git a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs index 10da06d8608..ca3780e457b 100644 --- a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs +++ b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs @@ -36,6 +36,14 @@ public sealed partial class MarkingPrototype : IPrototype [DataField("sprites", required: true)] public List Sprites { get; private set; } = default!; + // MACRO ADDITION + /// + /// Optional dictionary allowing assignment of shaders to sprite layers in a marking. + /// This implementation is very messy but unfortunately Robust doesn't like shaders in SpriteSpecifiers. + /// + [DataField] + public Dictionary Shaders { get; private set; } = default!; + public Marking AsMarking() { return new Marking(ID, Sprites.Count); diff --git a/Resources/ConfigPresets/Build/development.toml b/Resources/ConfigPresets/Build/development.toml index 092588ec100..a4567ffe5b9 100644 --- a/Resources/ConfigPresets/Build/development.toml +++ b/Resources/ConfigPresets/Build/development.toml @@ -42,7 +42,8 @@ see_own_notes = true new_player_threshold = 120 [ic] -random_characters = true +# MACRO - random_characters true -> false +random_characters = false random_species_weights = "" ssd_sleep_time = 3600 diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml index 03cd4ed6e5d..e579b2d6571 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml @@ -152,6 +152,8 @@ state: underwing_primary - sprite: Mobs/Customization/Moth/moth_antennas.rsi state: underwing_secondary + shaders: + underwing_secondary: unshaded # Wings - type: marking From 8a4ea44e8dc1381e2e2ff9d7d3b6dce62dc12451 Mon Sep 17 00:00:00 2001 From: mqole Date: Sun, 15 Mar 2026 19:06:08 +1100 Subject: [PATCH 2/5] might be stupid but its okay --- Content.Client/Body/VisualBodySystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/Body/VisualBodySystem.cs b/Content.Client/Body/VisualBodySystem.cs index 0209482850e..87bc9d5f6a8 100644 --- a/Content.Client/Body/VisualBodySystem.cs +++ b/Content.Client/Body/VisualBodySystem.cs @@ -206,7 +206,7 @@ private void ApplyMarkings(Entity ent, EntityUid t proto.Shaders.TryGetValue(rsi.RsiState, out var shader)) { EnsureComp(target, out var spriteComp); // why is this method in the component????? - spriteComp.LayerSetShader(i, shader); + spriteComp.LayerSetShader(index + i + 1, shader); } // MACRO END } From 48174753ccb07adbcf09ded985dc5d0b2e2da5f0 Mon Sep 17 00:00:00 2001 From: mqole Date: Sun, 15 Mar 2026 19:11:47 +1100 Subject: [PATCH 3/5] adding coauthor, removing debug additions Co-authored-by: widgetbeck <163376292+widgetbeck@users.noreply.github.com> --- .../Prototypes/Entities/Mobs/Customization/Markings/moth.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml index e579b2d6571..03cd4ed6e5d 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml @@ -152,8 +152,6 @@ state: underwing_primary - sprite: Mobs/Customization/Moth/moth_antennas.rsi state: underwing_secondary - shaders: - underwing_secondary: unshaded # Wings - type: marking From 14f1f5fc72215280598d3797dfcc360f7fb92186 Mon Sep 17 00:00:00 2001 From: mqole Date: Sun, 15 Mar 2026 19:12:56 +1100 Subject: [PATCH 4/5] how did that newline get there --- Content.Client/Body/VisualBodySystem.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Content.Client/Body/VisualBodySystem.cs b/Content.Client/Body/VisualBodySystem.cs index 87bc9d5f6a8..c1292d4bcc3 100644 --- a/Content.Client/Body/VisualBodySystem.cs +++ b/Content.Client/Body/VisualBodySystem.cs @@ -193,7 +193,6 @@ private void ApplyMarkings(Entity ent, EntityUid t var layer = _sprite.AddLayer(target, sprite, index + i + 1); _sprite.LayerMapSet(target, layerId, layer); _sprite.LayerSetSprite(target, layerId, rsi); - } if (marking.MarkingColors is not null && i < marking.MarkingColors.Count) From dfe922659d42e332e02d86c60202c8bf425ba1e0 Mon Sep 17 00:00:00 2001 From: mqole Date: Sun, 15 Mar 2026 23:00:42 +1100 Subject: [PATCH 5/5] my nullable --- Content.Shared/Humanoid/Markings/MarkingPrototype.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs index ca3780e457b..b5da92f784d 100644 --- a/Content.Shared/Humanoid/Markings/MarkingPrototype.cs +++ b/Content.Shared/Humanoid/Markings/MarkingPrototype.cs @@ -42,7 +42,7 @@ public sealed partial class MarkingPrototype : IPrototype /// This implementation is very messy but unfortunately Robust doesn't like shaders in SpriteSpecifiers. /// [DataField] - public Dictionary Shaders { get; private set; } = default!; + public Dictionary? Shaders { get; private set; } public Marking AsMarking() {