From d65b910118e88c4f45ba9e4f0a975ce503fb796c Mon Sep 17 00:00:00 2001 From: FaDeOkno <143940725+FaDeOkno@users.noreply.github.com> Date: Wed, 7 Aug 2024 00:18:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=83=D0=BC=D0=B5=D1=80=D0=B5=D1=87?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B8=20(#179)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR Перенос сумеречников на новую сборку И НАКОНЕЦ-ТО они названы Shadekin вместо Shadowkin **Медиа** ![ezgif-2-2197192745](https://github.com/user-attachments/assets/1d34ecf4-417f-4126-a171-31ff009cc7db) **Проверки** - [x] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [x] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: - add: Добавлено иное отображение одежды на сумеречниках --------- Co-authored-by: Schrodinger71 Co-authored-by: Schrödinger <132720404+Schrodinger71@users.noreply.github.com> --- .../Shadekin/Systems/ShadekinSystem.Tint.cs | 112 +++++++++ .../ADT/Shaders/ColorTintOverlay.cs | 64 ++++++ .../Shadekin/Components/ShadekinComponent.cs | 121 ++++++++++ .../Locale/ru-RU/ADT/Languages/languages.ftl | 40 +++- .../Entities/Objects/Device/translators.ftl | 2 +- .../Entities/Objects/Misc/implanters.ftl | 2 +- .../ru-RU/ADT/prototypes/Species/shadekin.ftl | 1 + .../Locale/ru-RU/ADT/reagents/biological.ftl | 2 + .../Prototypes/ADT/Body/Parts/shadekin.yml | 155 +++++++++++++ .../ADT/Body/Prototypes/shadekin.yml | 49 ++++ .../Prototypes/ADT/Damage/ADTmodifiers.yml | 3 +- .../ADT/Datasets/first_shadekin.yml | 60 +++++ .../Customization/Markings/shadekin_ears.yml | 19 ++ .../Customization/Markings/shadekin_tails.yml | 44 ++++ .../ADT/Entities/Mobs/Player/shadekin.yml | 5 + .../ADT/Entities/Mobs/Species/shadekin.yml | 214 ++++++++++++++++++ .../ADT/Entities/Objects/Device/handheld.yml | 10 +- .../Entities/Objects/Devices/translators.yml | 0 .../ADT/Entities/Objects/Misc/implanters.yml | 9 +- .../Objects/Misc/subdermal_implants.yml | 8 +- .../Prototypes/ADT/Languages/languages.yml | 4 +- .../Prototypes/ADT/Reagents/biological.yml | 12 + .../ADT/Recipes/Lathes/translators.yml | 8 +- .../Prototypes/ADT/Research/translators.yml | 4 +- Resources/Prototypes/ADT/Shaders/shaders.yml | 4 + Resources/Prototypes/ADT/Species/shadekin.yml | 166 ++++++++++++++ .../Entities/Structures/Machines/lathe.yml | 4 +- .../Shadekin/shadekin_ears.rsi/meta.json | 19 ++ .../Shadekin/shadekin_ears.rsi/shadekin.png | Bin 0 -> 9242 bytes .../shadekin_ears.rsi/shadekin_stripes.png | Bin 0 -> 789 bytes .../shadekin_tails_32x32.rsi/meta.json | 19 ++ .../shadekin_medium.png | Bin 0 -> 807 bytes .../shadekin_shorter.png | Bin 0 -> 630 bytes .../shadekin_tails_64x32.rsi/meta.json | 23 ++ .../shadekin_tails_64x32.rsi/shadekin.png | Bin 0 -> 4674 bytes .../shadekin_tails_64x32.rsi/shadekin_big.png | Bin 0 -> 5277 bytes .../shadekin_big_fluff.png | Bin 0 -> 1785 bytes .../Shadekin/displacement.rsi/hand.png | Bin 0 -> 223 bytes .../Shadekin/displacement.rsi/head.png | Bin 0 -> 254 bytes .../Shadekin/displacement.rsi/jumpsuit.png | Bin 0 -> 423 bytes .../Shadekin/displacement.rsi/meta.json | 30 +++ .../Shadekin/displacement.rsi/shoes.png | Bin 0 -> 235 bytes .../Mobs/Species/Shadekin/parts.rsi/eyes.png | Bin 0 -> 1643 bytes .../Mobs/Species/Shadekin/parts.rsi/full.png | Bin 0 -> 8794 bytes .../Species/Shadekin/parts.rsi/head_f.png | Bin 0 -> 849 bytes .../Species/Shadekin/parts.rsi/head_m.png | Bin 0 -> 849 bytes .../Mobs/Species/Shadekin/parts.rsi/l_arm.png | Bin 0 -> 614 bytes .../Species/Shadekin/parts.rsi/l_foot.png | Bin 0 -> 1867 bytes .../Species/Shadekin/parts.rsi/l_hand.png | Bin 0 -> 450 bytes .../Mobs/Species/Shadekin/parts.rsi/l_leg.png | Bin 0 -> 3086 bytes .../Mobs/Species/Shadekin/parts.rsi/meta.json | 67 ++++++ .../Mobs/Species/Shadekin/parts.rsi/r_arm.png | Bin 0 -> 605 bytes .../Species/Shadekin/parts.rsi/r_foot.png | Bin 0 -> 1876 bytes .../Species/Shadekin/parts.rsi/r_hand.png | Bin 0 -> 460 bytes .../Mobs/Species/Shadekin/parts.rsi/r_leg.png | Bin 0 -> 3090 bytes .../Species/Shadekin/parts.rsi/torso_f.png | Bin 0 -> 1442 bytes .../Species/Shadekin/parts.rsi/torso_m.png | Bin 0 -> 1432 bytes .../Textures/ADT/Shaders/color_tint.swsl | 56 +++++ 58 files changed, 1307 insertions(+), 29 deletions(-) create mode 100644 Content.Client/ADT/Shadekin/Systems/ShadekinSystem.Tint.cs create mode 100644 Content.Client/ADT/Shaders/ColorTintOverlay.cs create mode 100644 Content.Shared/ADT/Shadekin/Components/ShadekinComponent.cs create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Species/shadekin.ftl create mode 100644 Resources/Locale/ru-RU/ADT/reagents/biological.ftl create mode 100644 Resources/Prototypes/ADT/Body/Parts/shadekin.yml create mode 100644 Resources/Prototypes/ADT/Body/Prototypes/shadekin.yml create mode 100644 Resources/Prototypes/ADT/Datasets/first_shadekin.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_ears.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_tails.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Player/shadekin.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Species/shadekin.yml create mode 100644 Resources/Prototypes/ADT/Entities/Objects/Devices/translators.yml create mode 100644 Resources/Prototypes/ADT/Reagents/biological.yml create mode 100644 Resources/Prototypes/ADT/Species/shadekin.yml create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/meta.json create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin.png create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin_stripes.png create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/meta.json create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_medium.png create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_shorter.png create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/meta.json create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin.png create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big.png create mode 100644 Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big_fluff.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/hand.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/head.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/jumpsuit.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/meta.json create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/shoes.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/eyes.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/full.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_f.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_m.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_arm.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_foot.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_hand.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_leg.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/meta.json create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_arm.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_foot.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_hand.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_leg.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_f.png create mode 100644 Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_m.png create mode 100644 Resources/Textures/ADT/Shaders/color_tint.swsl diff --git a/Content.Client/ADT/Shadekin/Systems/ShadekinSystem.Tint.cs b/Content.Client/ADT/Shadekin/Systems/ShadekinSystem.Tint.cs new file mode 100644 index 00000000000..ed4b6cb1a79 --- /dev/null +++ b/Content.Client/ADT/Shadekin/Systems/ShadekinSystem.Tint.cs @@ -0,0 +1,112 @@ +using Robust.Client.Graphics; +using Robust.Client.Player; +using Content.Client.ADT.Overlays; +using Content.Client.ADT.Overlays.Shaders; +using Content.Shared.ADT.Shadekin.Components; +using Robust.Client.GameObjects; +using Content.Shared.GameTicking; +using Content.Shared.Humanoid; +using Robust.Shared.Player; + +namespace Content.Client.ADT.Shadekin.Systems; + +public sealed class ShadekinTintSystem : EntitySystem +{ + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IEntityManager _entity = default!; + + private ColorTintOverlay _tintOverlay = default!; + + public override void Initialize() + { + base.Initialize(); + + _tintOverlay = new ColorTintOverlay + { + TintColor = new Vector3(0.5f, 0f, 0.5f), + TintAmount = 0.25f, + Comp = new ShadekinComponent() + }; + + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + SubscribeLocalEvent(OnRoundRestart); + } + + private void OnStartup(EntityUid uid, ShadekinComponent component, ComponentStartup args) + { + if (_player.LocalPlayer?.ControlledEntity != uid) + return; + + _overlay.AddOverlay(_tintOverlay); + } + + private void OnShutdown(EntityUid uid, ShadekinComponent component, ComponentShutdown args) + { + if (_player.LocalPlayer?.ControlledEntity != uid) + return; + + _overlay.RemoveOverlay(_tintOverlay); + } + + private void OnPlayerAttached(EntityUid uid, ShadekinComponent component, PlayerAttachedEvent args) + { + _overlay.AddOverlay(_tintOverlay); + } + + private void OnPlayerDetached(EntityUid uid, ShadekinComponent component, PlayerDetachedEvent args) + { + _overlay.RemoveOverlay(_tintOverlay); + } + + private void OnRoundRestart(RoundRestartCleanupEvent args) + { + _overlay.RemoveOverlay(_tintOverlay); + } + + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var uid = _player.LocalPlayer?.ControlledEntity; + if (uid == null || + !_entity.TryGetComponent(uid, out ShadekinComponent? comp) || + !_entity.TryGetComponent(uid, out SpriteComponent? sprite) || + !sprite.LayerMapTryGet(HumanoidVisualLayers.Eyes, out var index) || + !sprite.TryGetLayer(index, out var layer)) + return; + + // Eye color + comp.TintColor = new Vector3(layer.Color.R, layer.Color.G, layer.Color.B); + + // 1/3 = 0.333... + // intensity = min + (power / max) + // intensity = intensity / 0.333 + // intensity = clamp intensity min, max + const float min = 0.45f; + const float max = 0.75f; + comp.TintIntensity = Math.Clamp(min + (comp.PowerLevel / comp.PowerLevelMax) * 0.333f, min, max); + + UpdateShader(comp.TintColor, comp.TintIntensity); + } + + + private void UpdateShader(Vector3? color, float? intensity) + { + while (_overlay.HasOverlay()) + { + _overlay.RemoveOverlay(_tintOverlay); + } + + if (color != null) + _tintOverlay.TintColor = color; + if (intensity != null) + _tintOverlay.TintAmount = intensity; + + _overlay.AddOverlay(_tintOverlay); + } +} diff --git a/Content.Client/ADT/Shaders/ColorTintOverlay.cs b/Content.Client/ADT/Shaders/ColorTintOverlay.cs new file mode 100644 index 00000000000..9e08d0ee020 --- /dev/null +++ b/Content.Client/ADT/Shaders/ColorTintOverlay.cs @@ -0,0 +1,64 @@ +using System.Numerics; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Matrix3x2 = System.Numerics.Matrix3x2; +using Vector3 = Robust.Shared.Maths.Vector3; + +namespace Content.Client.ADT.Overlays.Shaders; + +/// +/// A simple overlay that applies a colored tint to the screen. +/// +public sealed class ColorTintOverlay : Overlay +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IEntityManager _entity = default!; + + public override bool RequestScreenTexture => true; + public override OverlaySpace Space => OverlaySpace.WorldSpace; + private readonly ShaderInstance _shader; + + /// + /// The color to tint the screen to as RGB on a scale of 0-1. + /// + public Vector3? TintColor = null; + /// + /// The percent to tint the screen by on a scale of 0-1. + /// + public float? TintAmount = null; + /// + /// Component required to be on the entity to tint the screen. + /// + public Component? Comp = null; + + public ColorTintOverlay() + { + IoCManager.InjectDependencies(this); + + _shader = _prototype.Index("ColorTint").InstanceUnique(); + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null || + _player.LocalPlayer?.ControlledEntity is not { Valid: true } player || + Comp != null && !_entity.HasComponent(player, Comp.GetType())) + return; + + _shader.SetParameter("SCREEN_TEXTURE", ScreenTexture); + if (TintColor != null) + _shader.SetParameter("tint_color", TintColor.Value); + if (TintAmount != null) + _shader.SetParameter("tint_amount", TintAmount.Value); + + var worldHandle = args.WorldHandle; + var viewport = args.WorldBounds; + worldHandle.SetTransform(Matrix3x2.Identity); + worldHandle.UseShader(_shader); + worldHandle.DrawRect(viewport, Color.White); + worldHandle.UseShader(null); + } +} diff --git a/Content.Shared/ADT/Shadekin/Components/ShadekinComponent.cs b/Content.Shared/ADT/Shadekin/Components/ShadekinComponent.cs new file mode 100644 index 00000000000..b6476353f95 --- /dev/null +++ b/Content.Shared/ADT/Shadekin/Components/ShadekinComponent.cs @@ -0,0 +1,121 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.ADT.Shadekin.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ShadekinComponent : Component +{ + #region Random occurrences + [ViewVariables(VVAccess.ReadWrite)] + public float MaxedPowerAccumulator = 0f; + + [ViewVariables(VVAccess.ReadWrite)] + public float MaxedPowerRoof = 0f; + + [ViewVariables(VVAccess.ReadWrite)] + public float MaxedPowerRateMin = 45f; + + [ViewVariables(VVAccess.ReadWrite)] + public float MaxedPowerRateMax = 150f; + + + [ViewVariables(VVAccess.ReadWrite)] + public float MinPowerAccumulator = 0f; + + [ViewVariables(VVAccess.ReadWrite)] + public float MinPowerRoof = 0f; + + [ViewVariables(VVAccess.ReadWrite)] + public float MinPowerMin = 15f; + + [ViewVariables(VVAccess.ReadWrite)] + public float MinPowerMax = 60f; + #endregion + + + #region Shader + /// + /// Automatically set to eye color. + /// + [ViewVariables(VVAccess.ReadOnly)] + public Vector3 TintColor = new(0.5f, 0f, 0.5f); + + /// + /// Based on PowerLevel. + /// + [ViewVariables(VVAccess.ReadWrite)] + public float TintIntensity = 0.65f; + #endregion + + + #region Power level + /// + /// Current amount of energy. + /// + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public float PowerLevel + { + get => _powerLevel; + set => _powerLevel = Math.Clamp(value, PowerLevelMin, PowerLevelMax); + } + public float _powerLevel = 150f; + + /// + /// Don't let PowerLevel go above this value. + /// + [ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] + public float PowerLevelMax = PowerThresholds[ShadekinPowerThreshold.Max]; + + /// + /// Blackeyes if PowerLevel is this value. + /// + [ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] + public float PowerLevelMin = PowerThresholds[ShadekinPowerThreshold.Min]; + + /// + /// How much energy is gained per second. + /// + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public float PowerLevelGain = 0.75f; + + /// + /// Power gain multiplier + /// + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public float PowerLevelGainMultiplier = 1f; + + /// + /// Whether to gain power or not. + /// + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public bool PowerLevelGainEnabled = true; + + /// + /// Whether they are a blackeye. + /// + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public bool Blackeye = false; + + + public static readonly Dictionary PowerThresholds = new() + { + { ShadekinPowerThreshold.Max, 250.0f }, + { ShadekinPowerThreshold.Great, 200.0f }, + { ShadekinPowerThreshold.Good, 150.0f }, + { ShadekinPowerThreshold.Okay, 100.0f }, + { ShadekinPowerThreshold.Tired, 50.0f }, + { ShadekinPowerThreshold.Min, 0.0f }, + }; + #endregion +} + +public enum ShadekinPowerThreshold : byte +{ + Max = 1 << 4, + Great = 1 << 3, + Good = 1 << 2, + Okay = 1 << 1, + Tired = 1 << 0, + Min = 0, +} diff --git a/Resources/Locale/ru-RU/ADT/Languages/languages.ftl b/Resources/Locale/ru-RU/ADT/Languages/languages.ftl index 5e8317f1bad..2939f765e54 100644 --- a/Resources/Locale/ru-RU/ADT/Languages/languages.ftl +++ b/Resources/Locale/ru-RU/ADT/Languages/languages.ftl @@ -92,8 +92,8 @@ language-Urs-description = Басистый и рычащий язык, на к language-Arkane-name = Каукиттен language-Arkane-description = Протяжный, чем-то напоминающий Солнечный язык, на котором говорят арканы. -language-Shadowkin-name = Миар -language-Shadowkin-description = Загадочный язык, на котором говорят сумеречники. +language-Shadekin-name = Миар +language-Shadekin-description = Загадочный язык, на котором говорят сумеречники. language-Dwarf-name = Шахт language-Dwarf-description = Rock and stone! @@ -103,3 +103,39 @@ language-Dev-description = Больше звучит как ругань пок language-CintaTaj-name = Синта’Тайр language-CintaTaj-description = Язык, разработанный таярами и унатхами для общения между двумя расами, представляет собой смесь шипений и слов. + +language-GalacticCommon = Общ. +language-Bubblish = Пузырчатый +language-RootSpeak = Песнь корней +language-CodeSpeak = Кодовый +language-Nekomimetic = Неко +language-Draconic = Синта'унати +language-Canilunzt = Канилунц +language-SikTaj = Сик'тайр +language-Nian = Ткачий +language-Fire = Огненный +language-SolCommon = Солнечный +language-Cat = Кошачий +language-Dog = Собачий +language-Mothroach = Молиный +language-Xeno = Ксено +language-RobotTalk = Троичный +language-Monkey = Обезьяний +language-Bee = Пчелиный +language-Mouse = Мышиный +language-Drask = Орлуум +# These ones are half-assed because these creatures are almost never played as. +language-Chicken = Animal chicken +language-Duck = Animal duck +language-Cow = Animal cow +language-Sheep = Animal sheep +language-Kangaroo = Animal kangaroo +language-Pig = Animal pig +language-Moffic = Паучий +language-BorgTalk = Двоичный +language-Urs = Рыкрур +language-Arkane = Каукиттен +language-Shadekin = Миар +language-Dev = Разраб +language-Dwarf = Шахт +language-CintaTaj = Синта’тайр diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/translators.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/translators.ftl index 24d0c528470..933bc3d250c 100644 --- a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/translators.ftl +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/translators.ftl @@ -51,7 +51,7 @@ ent-CintaTajTranslator = переводчик Синта’Тайр ent-ArkaneTranslator = переводчик языка Каукиттен .desc = Используется для взаимного перевода Общегалактического языка и Каукиттен. -ent-ShadowkinTranslator = переводчик языка Миар +ent-ShadekinTranslator = переводчик языка Миар .desc = Используется для взаимного перевода Общегалактического языка и Миар. ent-NianTranslator = переводчик Ткачьего языка diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Misc/implanters.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Misc/implanters.ftl index 49672aa2322..8122fb5e0f8 100644 --- a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Misc/implanters.ftl +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Misc/implanters.ftl @@ -51,7 +51,7 @@ ent-UrsTranslatorImplanter = полноценный языковой импла ent-ArkaneTranslatorImplanter = полноценный языковой имплант Каукиттен .desc = Имплант, позволяющий понимать и общаться на языке Каукиттен. -ent-ShadowkinTranslatorImplanter = полноценный языковой имплант Миар +ent-ShadekinTranslatorImplanter = полноценный языковой имплант Миар .desc = Имплант, позволяющий понимать и общаться на языке Миар. ent-BorgTranslatorImplanter = полноценный языковой имплант двоичного кода diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Species/shadekin.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Species/shadekin.ftl new file mode 100644 index 00000000000..b2e4f123c6b --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Species/shadekin.ftl @@ -0,0 +1 @@ +species-name-shadekin = Сумеречник diff --git a/Resources/Locale/ru-RU/ADT/reagents/biological.ftl b/Resources/Locale/ru-RU/ADT/reagents/biological.ftl new file mode 100644 index 00000000000..289e4d89993 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/reagents/biological.ftl @@ -0,0 +1,2 @@ +reagent-name-shadekin-blood = фиолетовая кровь +reagent-desc-shadekin-blood = Я надеюсь, что ботаники просто раздавили блюспейс помидор. diff --git a/Resources/Prototypes/ADT/Body/Parts/shadekin.yml b/Resources/Prototypes/ADT/Body/Parts/shadekin.yml new file mode 100644 index 00000000000..ed24599b477 --- /dev/null +++ b/Resources/Prototypes/ADT/Body/Parts/shadekin.yml @@ -0,0 +1,155 @@ +- type: entity + id: PartShadekin + parent: BaseItem + name: Shadekin body part + abstract: true + components: + - type: Sprite + netsync: false + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + - type: Icon + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + - type: Damageable + damageContainer: Biological + - type: BodyPart + - type: ContainerContainer + containers: + bodypart: !type:Container + ents: [] + +- type: entity + id: TorsoShadekin + name: Shadekin torso + parent: PartShadekin + components: + - type: Sprite + state: torso_m + - type: Icon + state: torso_m + - type: BodyPart + partType: Torso + +- type: entity + id: HeadShadekin + name: Shadekin head + parent: PartShadekin + components: + - type: Sprite + state: head_m + - type: Icon + state: head_m + - type: BodyPart + partType: Head + - type: Input + context: "ghost" + - type: MovementSpeedModifier + baseWalkSpeed: 0 + baseSprintSpeed: 0 + - type: InputMover + - type: GhostOnMove + +- type: entity + id: LeftArmShadekin + name: left Shadekin arm + parent: PartShadekin + components: + - type: Sprite + state: l_arm + - type: Icon + state: l_arm + - type: BodyPart + partType: Arm + symmetry: Left + +- type: entity + id: RightArmShadekin + name: right Shadekin arm + parent: PartShadekin + components: + - type: Sprite + state: r_arm + - type: Icon + state: r_arm + - type: BodyPart + partType: Arm + symmetry: Right + +- type: entity + id: LeftHandShadekin + name: left Shadekin hand + parent: PartShadekin + components: + - type: Sprite + state: l_hand + - type: Icon + state: l_hand + - type: BodyPart + partType: Hand + symmetry: Left + +- type: entity + id: RightHandShadekin + name: right Shadekin hand + parent: PartShadekin + components: + - type: Sprite + state: r_hand + - type: Icon + state: r_hand + - type: BodyPart + partType: Hand + symmetry: Right + +- type: entity + id: LeftLegShadekin + name: left Shadekin leg + parent: PartShadekin + components: + - type: Sprite + state: l_leg + - type: Icon + state: l_leg + - type: BodyPart + partType: Leg + symmetry: Left + - type: MovementBodyPart + +- type: entity + id: RightLegShadekin + name: right Shadekin leg + parent: PartShadekin + components: + - type: Sprite + state: r_leg + - type: Icon + state: r_leg + - type: BodyPart + partType: Leg + symmetry: Right + - type: MovementBodyPart + +- type: entity + id: LeftFootShadekin + name: left Shadekin foot + parent: PartShadekin + components: + - type: Sprite + state: l_foot + - type: Icon + state: l_foot + - type: BodyPart + partType: Foot + symmetry: Left + +- type: entity + id: RightFootShadekin + name: right Shadekin foot + parent: PartShadekin + components: + - type: Sprite + state: r_foot + - type: Icon + state: r_foot + - type: BodyPart + partType: Foot + symmetry: Right diff --git a/Resources/Prototypes/ADT/Body/Prototypes/shadekin.yml b/Resources/Prototypes/ADT/Body/Prototypes/shadekin.yml new file mode 100644 index 00000000000..a10d4a50881 --- /dev/null +++ b/Resources/Prototypes/ADT/Body/Prototypes/shadekin.yml @@ -0,0 +1,49 @@ +- type: body + id: Shadekin + name: Shadekin + root: torso + slots: + head: + part: HeadShadekin + connections: + - torso + organs: + brain: OrganHumanBrain + eyes: OrganHumanEyes + torso: + part: TorsoShadekin + connections: + - left arm + - right arm + - left leg + - right leg + organs: + heart: OrganHumanHeart + lungs: OrganHumanLungs + stomach: OrganHumanStomach + liver: OrganHumanLiver + kidneys: OrganHumanKidneys + right arm: + part: RightArmShadekin + connections: + - right hand + left arm: + part: LeftArmShadekin + connections: + - left hand + right hand: + part: RightHandShadekin + left hand: + part: LeftHandShadekin + right leg: + part: RightLegShadekin + connections: + - right foot + left leg: + part: LeftLegShadekin + connections: + - left foot + right foot: + part: RightFootShadekin + left foot: + part: LeftFootShadekin diff --git a/Resources/Prototypes/ADT/Damage/ADTmodifiers.yml b/Resources/Prototypes/ADT/Damage/ADTmodifiers.yml index 841fd6c945a..a81fe618e2a 100644 --- a/Resources/Prototypes/ADT/Damage/ADTmodifiers.yml +++ b/Resources/Prototypes/ADT/Damage/ADTmodifiers.yml @@ -31,7 +31,7 @@ Cellular: 1.5 - type: damageModifierSet - id: Shadowkin # пупупу + id: Shadekin # пупупу coefficients: Blunt: 1.2 Piercing: 1.2 @@ -100,7 +100,6 @@ Piercing: 5 Heat: 5 - - type: damageModifierSet id: CyborgMetallicStrong coefficients: diff --git a/Resources/Prototypes/ADT/Datasets/first_shadekin.yml b/Resources/Prototypes/ADT/Datasets/first_shadekin.yml new file mode 100644 index 00000000000..0b03c1924be --- /dev/null +++ b/Resources/Prototypes/ADT/Datasets/first_shadekin.yml @@ -0,0 +1,60 @@ +- type: dataset + id: names_shadekin + values: + + # Грустные + - Хрупкий + - разбитое сердце + - Неполноценный + - Одинокий + - Одинокий + - Потеря + - Одиночество + - Одиночество + - Печаль + - Тень + + # Злые + - Страх + - Боязливый + - Ярость + - Боль + - Ярость + - Ярость + - Гнев + + # Счасливые + - Спокойствие + - Содержательный + - Содержательный + - Счастливый + - Надеющийся + - Радостный + - Любящий + - Мир + - Мирный + - Тихий + - Безмятежный + - Безмятежность + - Спокойный + - Спокойствие + + # Памятные + - Заблуждение + - Забытый + - Бессмысленный + - Потерянный + - Память + - Воспоминание + - Воспоминание + - Воспоминание + - Реминисценция + + # Другие + - Апатия + - Собранность + - Любопытство + - Свободный + - Интерес + - Еще + - Непривязанность diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_ears.yml b/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_ears.yml new file mode 100644 index 00000000000..295396c7ce4 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_ears.yml @@ -0,0 +1,19 @@ +- type: marking + id: EarsShadekin + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Shadekin] + sprites: + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi + state: shadekin + +- type: marking + id: EarsShadekinStriped + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Shadekin] + sprites: + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi + state: shadekin + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi + state: shadekin_stripes diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_tails.yml b/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_tails.yml new file mode 100644 index 00000000000..a6c95ecd2ae --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/shadekin_tails.yml @@ -0,0 +1,44 @@ +- type: marking + id: TailShadekin + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadekin] + sprites: + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi + state: shadekin + +- type: marking + id: TailShadekinBig + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadekin] + sprites: + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi + state: shadekin_big + +- type: marking + id: TailShadekinBigFluff + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadekin] + sprites: + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi + state: shadekin_big_fluff + +- type: marking + id: TailShadekinShorter + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadekin] + sprites: + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi + state: shadekin_shorter + +- type: marking + id: TailShadekinMedium + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadekin] + sprites: + - sprite: ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi + state: shadekin_medium diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Player/shadekin.yml b/Resources/Prototypes/ADT/Entities/Mobs/Player/shadekin.yml new file mode 100644 index 00000000000..9de6f7c3040 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Player/shadekin.yml @@ -0,0 +1,5 @@ +- type: entity + save: false + parent: BaseMobShadekin + id: MobShadekin + name: Урист МакСумеречник diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Species/shadekin.yml b/Resources/Prototypes/ADT/Entities/Mobs/Species/shadekin.yml new file mode 100644 index 00000000000..b183ac3c62e --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Species/shadekin.yml @@ -0,0 +1,214 @@ +- type: entity + save: false + parent: BaseMobHuman + id: BaseMobShadekin + abstract: true + name: Урист МакСумеречник + components: + - type: HumanoidAppearance + species: Shadekin + - type: Hunger + - type: Thirst + - type: Icon + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: full + - type: Body + prototype: Shadekin + requiredLegs: 2 + - type: MobState + - type: MobThresholds + thresholds: + 0: Alive + 90: Critical + 150: Dead + - type: SlowOnDamage + speedModifierThresholds: + 48: 0.85 + 64: 0.65 + - type: Damageable + damageContainer: Biological # Shadekin + damageModifierSet: Shadekin + - type: Barotrauma + damage: + types: + Blunt: 1 # В секунду. + - type: Bloodstream + bloodReagent: ShadekinBlood + bloodlossDamage: + types: + Bloodloss: + 1 + bloodlossHealDamage: + types: + Bloodloss: + -0.25 + - type: Tag + tags: + - CanPilot + - FootstepSound + - DoorBumpOpener + - type: Temperature + heatDamageThreshold: 330 + coldDamageThreshold: 200 + currentTemperature: 310.15 + specificHeat: 46 + coldDamage: + types: + Cold : 0.05 #per second, scales with temperature & other constants + heatDamage: + types: + Heat : 0.25 #per second, scales with temperature & other constants + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 130 #lower density + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer + - type: Respirator + damage: + types: + Asphyxiation: 0.0 + damageRecovery: + types: + Asphyxiation: 0.0 + - type: Sprite + scale: 0.95, 0.95 + - type: MeleeWeapon + soundHit: + collection: Punch + animation: WeaponArcClaw + damage: + types: + Blunt: 2 + Slash: 3 + Piercing: 1 + - type: Shadekin + - type: Vocal + sounds: + Male: MaleHuman + Female: FemaleHuman + Unsexed: MaleHuman + - type: CombatMode + canDisarm: true + - type: MindContainer + showExamineInfo: true + - type: Input + context: "human" + - type: MobMover + - type: InputMover + - type: Alerts + - type: Actions + - type: CameraRecoil + - type: Examiner + - type: CanHostGuardian + - type: NpcFactionMember + factions: + - NanoTrasen + - type: InteractionPopup + successChance: 0.75 + interactFailureString: petting-failure-generic + interactSuccessString: petting-success-soft-floofy + interactSuccessSound: /Audio/Effects/thudswoosh.ogg + messagePerceivedByOthers: petting-success-soft-floofy-others + - type: MovementSpeedModifier + baseWalkSpeed : 4.5 + baseSprintSpeed : 2.7 + # Frontier - languages mechanic + - type: LanguageSpeaker + speaks: + - GalacticCommon + - Shadekin + understands: + - GalacticCommon + - Shadekin + # - type: SizeAttributeWhitelist # Frontier + # tall: true + # tallscale: 1 + # short: true + # shortscale: 0.85 + - type: Inventory + displacements: + jumpsuit: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: jumpsuit + copyToShaderParameters: + # Value required, provide a dummy. Gets overridden when applied. + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + shoes: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: shoes + copyToShaderParameters: + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + gloves: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: hand + copyToShaderParameters: + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + head: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: head + copyToShaderParameters: + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + +- type: entity + save: false + parent: MobHumanDummy + id: MobShadekinDummy + noSpawn: true + description: A dummy shadekin meant to be used in character setup. + components: + - type: HumanoidAppearance + species: Shadekin + - type: Inventory + displacements: + jumpsuit: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: jumpsuit + copyToShaderParameters: + # Value required, provide a dummy. Gets overridden when applied. + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + shoes: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: shoes + copyToShaderParameters: + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + gloves: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: hand + copyToShaderParameters: + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + outerClothing: + layer: + sprite: ADT/Mobs/Species/Shadekin/displacement.rsi + state: outerClothing + copyToShaderParameters: + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV diff --git a/Resources/Prototypes/ADT/Entities/Objects/Device/handheld.yml b/Resources/Prototypes/ADT/Entities/Objects/Device/handheld.yml index 657da893ded..10e1631db98 100644 --- a/Resources/Prototypes/ADT/Entities/Objects/Device/handheld.yml +++ b/Resources/Prototypes/ADT/Entities/Objects/Device/handheld.yml @@ -300,21 +300,21 @@ price: 1500 - type: entity - id: ShadowkinTranslator + id: ShadekinTranslator parent: [ Translator ] - name: Shadowkin translator + name: Shadekin translator description: "Translates speech." components: - type: HandheldTranslator toSpeak: - GalacticCommon - - Shadowkin + - Shadekin toUnderstand: - GalacticCommon - - Shadowkin + - Shadekin required: - GalacticCommon - - Shadowkin + - Shadekin - type: StaticPrice price: 1500 diff --git a/Resources/Prototypes/ADT/Entities/Objects/Devices/translators.yml b/Resources/Prototypes/ADT/Entities/Objects/Devices/translators.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Resources/Prototypes/ADT/Entities/Objects/Misc/implanters.yml b/Resources/Prototypes/ADT/Entities/Objects/Misc/implanters.yml index ce6cd783578..0c174df0e90 100644 --- a/Resources/Prototypes/ADT/Entities/Objects/Misc/implanters.yml +++ b/Resources/Prototypes/ADT/Entities/Objects/Misc/implanters.yml @@ -120,12 +120,13 @@ implant: ArkaneTranslatorImplant - type: entity - id: ShadowkinTranslatorImplanter - name: Shadowkin Translator implanter + id: ShadekinTranslatorImplanter parent: BaseImplantOnlyImplanter + name: Shadekin translator implant + description: "An implant giving the ability to understand and speak Shadekin language." components: - type: Implanter - implant: ShadowkinTranslatorImplant + implant: ShadekinTranslatorImplant - type: entity id: DwarfTranslatorImplanter @@ -169,7 +170,7 @@ - type: entity id: NianTranslatorImplanter - name: Universal Translator implanter + name: Nian Translator implanter parent: BaseImplantOnlyImplanter components: - type: Implanter diff --git a/Resources/Prototypes/ADT/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/ADT/Entities/Objects/Misc/subdermal_implants.yml index 213569bd78d..d8612f968f2 100644 --- a/Resources/Prototypes/ADT/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/ADT/Entities/Objects/Misc/subdermal_implants.yml @@ -206,16 +206,16 @@ - type: entity parent: BaseTranslatorImplant - id: ShadowkinTranslatorImplant + id: ShadekinTranslatorImplant name: translator implant description: This implant grants language knowledge. noSpawn: true components: - type: TranslatorImplant toSpeak: - - Shadowkin + - Shadekin toUnderstand: - - Shadowkin + - Shadekin - type: entity parent: BaseTranslatorImplant @@ -253,7 +253,7 @@ - type: TranslatorImplant toUnderstand: - RobotTalk - - Shadowkin + - Shadekin - Arkane - Urs - Drask diff --git a/Resources/Prototypes/ADT/Languages/languages.yml b/Resources/Prototypes/ADT/Languages/languages.yml index 480c4d57a4d..13a8b98c4b3 100644 --- a/Resources/Prototypes/ADT/Languages/languages.yml +++ b/Resources/Prototypes/ADT/Languages/languages.yml @@ -753,9 +753,9 @@ - риина - ин -# Spoken by the Shadowkin race. +# Spoken by the Shadekin race. - type: language - id: Shadowkin + id: Shadekin obfuscateSyllables: true color: "#c048f7" whisperColor: "#a68bb3" diff --git a/Resources/Prototypes/ADT/Reagents/biological.yml b/Resources/Prototypes/ADT/Reagents/biological.yml new file mode 100644 index 00000000000..486fe2bec57 --- /dev/null +++ b/Resources/Prototypes/ADT/Reagents/biological.yml @@ -0,0 +1,12 @@ +#NES кровь сумеречника +- type: reagent + parent: Blood + id: ShadekinBlood + name: reagent-name-shadekin-blood + group: Biological + desc: reagent-desc-shadekin-blood + flavor: metallic + color: "#2e0f24" + recognizable: true + physicalDesc: reagent-physical-desc-ferrous + slippery: false diff --git a/Resources/Prototypes/ADT/Recipes/Lathes/translators.yml b/Resources/Prototypes/ADT/Recipes/Lathes/translators.yml index 7ce2d0195b7..37fe4604871 100644 --- a/Resources/Prototypes/ADT/Recipes/Lathes/translators.yml +++ b/Resources/Prototypes/ADT/Recipes/Lathes/translators.yml @@ -308,8 +308,8 @@ Silver: 50 - type: latheRecipe - id: ShadowkinTranslatorImplanter - result: ShadowkinTranslatorImplanter + id: ShadekinTranslatorImplanter + result: ShadekinTranslatorImplanter completetime: 2 materials: Steel: 500 @@ -350,8 +350,8 @@ Gold: 50 - type: latheRecipe - id: ShadowkinTranslator - result: ShadowkinTranslator + id: ShadekinTranslator + result: ShadekinTranslator completetime: 2 materials: Steel: 500 diff --git a/Resources/Prototypes/ADT/Research/translators.yml b/Resources/Prototypes/ADT/Research/translators.yml index 35e3cf616ce..285b4aa134f 100644 --- a/Resources/Prototypes/ADT/Research/translators.yml +++ b/Resources/Prototypes/ADT/Research/translators.yml @@ -20,7 +20,7 @@ - DraskTranslator - UrsTranslator # Закомменчено до раундстарт урсов # И никто не раскомментил, молодцы - ArkaneTranslator - - ShadowkinTranslator + - ShadekinTranslator - NianTranslator - FireTranslator - SikTajTranslator @@ -56,7 +56,7 @@ - DraskTranslatorImplanter - UrsTranslatorImplanter # Закомменчено до раундстарт урсов # И никто не раскомментил, молодцы - ArkaneTranslatorImplanter - - ShadowkinTranslatorImplanter + - ShadekinTranslatorImplanter - CintaTajTranslatorImplanter - IPCTranslatorImplanter - BorgTranslatorImplanter diff --git a/Resources/Prototypes/ADT/Shaders/shaders.yml b/Resources/Prototypes/ADT/Shaders/shaders.yml index 060c64503c3..9e46e3b949e 100644 --- a/Resources/Prototypes/ADT/Shaders/shaders.yml +++ b/Resources/Prototypes/ADT/Shaders/shaders.yml @@ -1,4 +1,8 @@ # Simple Station +- type: shader + id: ColorTint + kind: source + path: "/Textures/ADT/Shaders/color_tint.swsl" - type: shader id: SeeingStatic diff --git a/Resources/Prototypes/ADT/Species/shadekin.yml b/Resources/Prototypes/ADT/Species/shadekin.yml new file mode 100644 index 00000000000..541328e018a --- /dev/null +++ b/Resources/Prototypes/ADT/Species/shadekin.yml @@ -0,0 +1,166 @@ +- type: species + id: Shadekin + name: species-name-shadekin + roundStart: true + prototype: MobShadekin + sprites: MobShadekinSprites + defaultSkinTone: "#FFFFFF" + markingLimits: MobShadekinMarkingLimits + dollPrototype: MobShadekinDummy + skinColoration: Hues + maleFirstNames: names_shadekin + femaleFirstNames: names_shadekin + maleLastNames: names_arachnid_last # Corvax-LastnameGender + femaleLastNames: names_arachnid_last # Corvax-LastnameGender + minAge: 18 + maxAge: 80 + youngAge: 30 + oldAge: 50 + sexes: + - Male + - Female + - Unsexed + +- type: speciesBaseSprites + id: MobShadekinSprites + sprites: + Head: MobShadekinHead + Snout: MobShadekinAnyMarkingFollowSkin + HeadTop: MobShadekinAnyMarkingFollowSkin + HeadSide: MobShadekinAnyMarkingFollowSkin + Tail: MobShadekinAnyMarkingFollowSkin + Chest: MobShadekinTorso + Eyes: MobShadekinEyes + LArm: MobShadekinLArm + RArm: MobShadekinRArm + LHand: MobShadekinLHand + RHand: MobShadekinRHand + LLeg: MobShadekinLLeg + RLeg: MobShadekinRLeg + LFoot: MobShadekinLFoot + RFoot: MobShadekinRFoot + +- type: markingPoints + id: MobShadekinMarkingLimits + onlyWhitelisted: true + points: + Hair: + points: 0 + required: false + FacialHair: + points: 0 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [TailShadekin] + HeadTop: + points: 1 + required: true + defaultMarkings: [EarsShadekin] + Chest: + points: 0 + required: false + Legs: + points: 0 + required: false + Arms: + points: 0 + required: false + +- type: humanoidBaseSprite + id: MobShadekinAnyMarking + +- type: humanoidBaseSprite + id: MobShadekinAnyMarkingFollowSkin + markingsMatchSkin: true + +- type: humanoidBaseSprite + id: MobShadekinHead + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobShadekinHeadMale + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobShadekinHeadFemale + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobShadekinTorso + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobShadekinTorsoMale + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobShadekinTorsoFemale + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobShadekinLLeg + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobShadekinLHand + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobShadekinEyes + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: eyes + +- type: humanoidBaseSprite + id: MobShadekinLArm + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobShadekinLFoot + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobShadekinRLeg + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobShadekinRHand + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobShadekinRArm + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobShadekinRFoot + baseSprite: + sprite: ADT/Mobs/Species/Shadekin/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 19619610109..f54e7d31e91 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -358,14 +358,14 @@ - DraskTranslatorImplanter - UrsTranslatorImplanter - ArkaneTranslatorImplanter - - ShadowkinTranslatorImplanter + - ShadekinTranslatorImplanter - CintaTajTranslatorImplanter - IPCTranslatorImplanter - BorgTranslatorImplanter - DwarfTranslatorImplanter - UrsTranslator - ArkaneTranslator - - ShadowkinTranslator + - ShadekinTranslator - NianTranslator - FireTranslator - SikTajTranslator diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/meta.json b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/meta.json new file mode 100644 index 00000000000..4d2a580d31d --- /dev/null +++ b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made team Adventure Time", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "shadekin", + "directions": 4 + }, + { + "name": "shadekin_stripes", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin.png b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin.png new file mode 100644 index 0000000000000000000000000000000000000000..3aec926c5e273471968944a48d6306c1cbf5d59d GIT binary patch literal 9242 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 N@^tlcS?83{1OSASL8brz literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/meta.json b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/meta.json new file mode 100644 index 00000000000..4af0caebe8a --- /dev/null +++ b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made team Adventure Time", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "shadekin_medium", + "directions": 4 + }, + { + "name": "shadekin_shorter", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_medium.png b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..ca162bb1b05a50446fb54dbae2e84e4cea5876b5 GIT binary patch literal 807 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0N3h)VWy>{)|yLa#2zI}V>(4p6_U%z_wYXAQImo8m;_Uzg1+qXAu+VuSS z^GA;!-MxEv`}XZmo;R0Bytse={)Gz{HgDd% zd-v{LyLLT({P^L+hnFv3K5*c``t|Gg?Afzp$Br{+&TQDQVcoiQYu2nec<|u9efu_U z+_-k_+VkhnKYjZ2i-&i-WB){j6Arsu!!~tre8~=DNMdc9)VxJiU7O9RGE)1FL#v>+ zMqPY=;X#$()AQc1sn#%f#PahD^O9IOUe(36Q{O)45|JomddzyrZvD2YUZG33OMQ_n zY%0&-UwQRv|M|avh3`2E^&b28Zpvns!U9I|fE^9o8ZjG`H?*iN5zgQeThe6WG*H+)pLa^n-8;}dtQPCDgsL3yp_ zvfsZFUaW8Lf5gvTWv_e5{hgrWG&z~3z*3WWGXK5{t?)UPQq}OnODUjh(e%0J{#5R0 z;B=2{DXup=Ta^^3$h7=%);FV|!dlkH?vYnFO6lgFeQV)jVA>QYGHLU4mc!}}%T^_t zaP?>kKIl~ORKNds8f&E4&(r=tx5sE4_`&U!qg}dtcB}(1vKTyF{an^LB{Ts52cyJN literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_shorter.png b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_shorter.png new file mode 100644 index 0000000000000000000000000000000000000000..979e4e6b26c4f0f65d39fb7b1789af3e7c6cc35a GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qt-3{2dfE{-7;ac^(=p4Lp1VE>Tqa>OZc+o|OT z{JhHcG2QRUPgJ%xi`Y1M&wkO)JyUkb|KI)b%bar->~oDS|NQ?d^GwCEb+3!0yZ`ID zz`&Py!!wH?f2p#4`uXRR5-U#~vFhFY(<@7+MXQi#(ZfX@-xQkqlqz_S-KV6HI^nt()n$Jj+00k4eXJwh8B-_hxOaGW5@7 zdDecAZqi}8X0jU8vF%a_~DSDor5x%sA#d0q5BBe{N6 zxqjvmY|;S1vc?JP5Y*1ZeVKYtOQ7ATb0=b~g) z>-wkXfneTs8A02-lXF;hbzBsfr{wITBDDW%{!HFS^3Ol-?3?@ktn>2A8~^>yotSWy!5++6#kLYOJ|YVDTr`_?yt1@6{*M zHcvCP_h~O=&T|v%=j?M+wv_Atl@V^A?Q(X7tgTI!+&_u_=S7yvlTS*VxI6KH*@C3>FcUdQ!-Hk003$Yb!9{R9FFHVXA4oN9Qa6p(5rDhBP zFRx!4(P$XZ^)$4deR39?sLcNeNH@=-ApM7VEpQWM%2pdQ=Xf$3yk_j27l;(aea>ui zcTW6sovs%olOaE>xl+Qucuseq*Y|oq=au11hD|aE)9`0~ev^%OcOd zF?q^Z=<}Wa6Kj)wg zelBqOh}&5sPWt|#d7^Bl{xNCfwishQY3A};cNF<|IWa4~T4?CPoec19btw~j zIOjU11{n_l@7H4wOW3!+^3*=wKCX*`U6>tX@YW}J)rPm8BmexFZx5BKrp^YTPudTD z&*ZOM)s^Zdl)Ff`HDkz4bGGWHKs*X=$$LiigLD7#Ir%0S!D&RLpZUOm=j+>=a_azp z=sg?%h7#C@v0+Mi6AhQSMDj+9sTa7vx*;p;WM_Uj{k7)8x?sE1-2gdttvSFmDHud81f5J?WYf#? z4I6)~l7Z$du}Y}_wFhcB$Jrt3E2it%qN+~Wm`o2Aj0Kh4y49q2m!mcxV8UQW>-2jJ zq^46c2enaDd!cSdD^K4{m>wb(^4crnKDtWmL5Ti;!D zYiQRwtyI)cPE;oc0QaG1-b_>ZG4VCwrQx9U+3aK4sdg>>=Yhxh&(>X#{*u{sRhJzI zPFBkh8Krl`^zT~8xlKs*<|r57*p+t(RreUsH@*@!aI&q}dA5E1v{-OWB=ysHmdftp ze#mKBczl+oYFb3@Cz3MqGcEGh_Rc1g5K-Ca6eY6f1FGL@QS*>OU=Blhl81xKX9}hO~8Ep%>~~ z*8*tMV?%zZI{#W7C7tAXqWi9M`EF9T(wIE8IijPZbJC%Rf$hIBB=hE3@$!G5XK&mzK5f|3MQQ<&r$hLhwaZ(CG&58T41uL#KOMcWuEm=^MGGyF<86Q zoJ0gk1+j^_a<^|XGjw9a&v4aPQ2pP4JbnG>;gRzX8ro+!xnei)nvXJDE!twAKf7O? zb}TL2vM-Pa(O7U>TJBZ(QR3vSlC%M;)W~L9$AgA!loC98b@l$^Xrf*a9LSw{X6NS< zRS@Ii1yxj=Z#>w)X9t{IW_bXtsO-0PFy~a4i2RRs5t{Q%$ZV6f2~IZWcdFG=mcBgI zymKsK@V;b@_p3K|%460Of37TwVTc1OF*D+Pg(+#@4AzJaW|Mfq=CY5B_KgPNlC#NP zCfFtL6zH?=aQqE&=~&H7x8nx4a3@+Hx30A=KAF95 z_nqy-YXoopY_Ah3k^Qu2{aUe3Mgo6Rx_XjVJ>+TV*muoJp}{5WsPR|Suq0L<0*%zP zN{sQAnBv&Fu{6etD^}`heo%_Dxb>qVwW^cm zvJO&v(g7n|G`VB+B$~C9M&C$}lOzJITh_4ecqz>|>`k?u5H6EKtzJoTYemCg=EY%+ z-rNGp5X1>T0j-wb@0lerzvg-5)r3hC@1h8hEPM)boULs*YH-$+Vj}-ekyZ?0AhFdk zOqp3%%jC*UBH`vJvFD2c67_wz-ptVuizRjh{p`J~?k+?-WdMa&FpvrLh?umGbl}@w zP}5x~Sr2P*K_}21Tx8NWBR8@vE`}ST7UXKJP|!cJ8W#U+5Y3(=uGS^I!I|3i(+b&0 z+VPB`@WbxF1Lm*l6=04py@83y>Sf1V2>D6GEN*MoMXv&3iu%THw-*`OG4

Bf?!# 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 uhn<6_LDDV~o{hlc|I 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 bVY2fd@2#J`H)&^900000NkvXXu0mjfPZv=2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/hand.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/hand.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f4e53b378341e874bdd6a37b93024551eef4f7 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-+0X`wF4Gj#94Ggsn4D~=pBSU>7gXm5XNuVrefk$L90|Vay5N6D}*2xJJ z4D)nx4DmRgEWx@sL8PbYAOnkrS>wcp!XBm_l>rA_PVl9%Nin;HtYbLrz~GqDr)b97 zRM2iHJ$WTVUZ-IgtIi27rVSbiE@24`p^THHH)u+*PGMkUV`y2*vXyJ*9TlJr44$rj JF6*2Ung9mCJT(9S literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/head.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/head.png new file mode 100644 index 0000000000000000000000000000000000000000..fd75194b0317e500dfd250220184f51564a92c8a GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6=10X`wF4Gj#94Gi@_)X31-$Z+iF%!xoL&H|6fVg?4j10c+pb*+;VC|Kd? z;uzv_JXwM@gtf=vOiQ~xm)pSv=AMK}oa*u{EDIePJUO{8@GOjB^x^bjG@GuZ9iR}* z*wY!y=y;%INp~QF@1&ay!OY#vo0yW>97TM6ym<8Zc$)b+l!`YTZB;lV@8gxC>Cn&Z o=4isIbAoF_%Nq@egabe))I0H7K6a6L1#|<0r>mdKI;Vst0An6T*8l(j literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/jumpsuit.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/jumpsuit.png new file mode 100644 index 0000000000000000000000000000000000000000..81d4db70a71b15909ae7b5f862a0d2377b582781 GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwHZ(BQH!w6dFf=qWG}JTHH!?If0_7M28b!N+6h}#rU+{kjV7S-3 zHxekuS>O>_%)r2R0E8K{u61$(En@L>aSVxYe>>^6P_qJ$%ha&H|LyfSt(hKfT6=9} znGL_wjnu0L3W|%Zjs>zmFVRT+wZ1Ze=gHIqU+yw)+O)uv`<2MD*G{*dMmhM0m&qsp z>NK5E7kf-}<-AV?g6sZ=H$?1V3~G4&oa@6>^Ax^y>TK~V6iW;4N{DnYUEj}Bq#Vi5 zwBg#pZ6}s9GHqk?VbEcD6Z(lkLgL2i9IhX>YyGFnzcTWjA@EF6__PY=tsP>wj_;Hd zc)^}!lvI6-$0X`wF4Gj$S4GazS42=y84_4&y0>wECJR*x382Ao=Fk{xWPEMd;hNp{T zh{y4_QyjS(40u?sKVv@W&-L^F{WW3PyA+yU=oWMHr0PYhcz$X+D%HjG!|myA?q#e( zEd}*z0nLSn2g>s9gmx1fJ(@7c!{ZzaA*Y+rf4X<~t00q37a8}2&}hhmpp Y7d;)O_40VHILJE;p00i_>zopr0M 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 F{{Xzh?l}Me literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_f.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_f.png new file mode 100644 index 0000000000000000000000000000000000000000..9d99bd189030125d36e50c692b0627ca98a3ebb8 GIT binary patch literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|PU& zr;B4q#hkaZ&U+g<${d@otJ|ybR)iyV*Oi0L6B@f7-gPedd_{AK{YvM0hyM-V1GECH zmu`4*vRPruioi_!=WiwN)xP|3?nz$zO!l@&(eFRcrKhKh&*MB;5XoQ=bBjSwU;pT# zLrih;@e|Lc$+E18{F%*IQC%%O`DBajv**vBJ}Z?Z{KUVhm|M_$9rF4G* zZ*T8U-}mmdy{|Ckbn46V2dl*!_H}o6Z&Ldgry(-s&s2sT>$E#BPjKaFcRupCkhAgl z+cN38ECY!J_unVy=KAu@`}Aw~ZtKYARZ|#bWMwUZen?7BcW;V_jh*_MVfllzXL-Gr zPFlac;raf(dwU~v)UL~)JCwJ*J8bpRr|b8y$;iuFFJHb~X{Jw7YAWmFj}m9ogw@s6 z8+DrQ|F!(QR0o(UJGx?*D7fE&VGu;baO^{kPwWztuPn zr!pP@2b&lJ&vaG>oZNS(@JHS z^Nz>$X8Ym9n-yoaCKMM7i;IgZ%|HK}sqy(TcJ|Y~g7w>vpLlk42}tEPm3@2m{L!EH zOzFssKMx-|W=}r!zw7zC5-X!=&+oDD+el|8<*o{1D<~*XSg*HS>Ak&F^{cN{8e-l1 z?lQHvx1am@bEk)j(2o84r{6EMeUQ6gc38GOTjhFlDc+qNPl|RPkZZip7`{66;nhXe y`{eg>ynXlX-z&Ms$cF9tO$IRp0+WH~x_n6G0s-Tto*uwF!rZ?Z{KUVhm|M_$9rF4G* zZ*T8U-}mmdy{|Ckbn46V2dl*!_H}o6Z&Ldgry(-s&s2sT>$E#BPjKaFcRupCkhAgl z+cN38ECY!J_unVy=KAu@`}Aw~ZtKYARZ|#bWMwUZen?7BcW;V_jh*_MVfllzXL-Gr zPFlac;raf(dwU~v)UL~)JCwJ*J8bpRr|b8y$;iuFFJHb~X{Jw7YAWmFj}m9ogw@s6 z8+DrQ|F!(QR0o(UJGx?*D7fE&VGu;baO^{kPwWztuPn zr!pP@2b&lJ&vaG>oZNS(@JHS z^Nz>$X8Ym9n-yoaCKMM7i;IgZ%|HK}sqy(TcJ|Y~g7w>vpLlk42}tEPm3@2m{L!EH zOzFssKMx-|W=}r!zw7zC5-X!=&+oDD+el|8<*o{1D<~*XSg*HS>Ak&F^{cN{8e-l1 z?lQHvx1am@bEk)j(2o84r{6EMeUQ6gc38GOTjhFlDc+qNPl|RPkZZip7`{66;nhXe y`{eg>ynXlX-z&Ms$cF9tO$IRp0+WH~x_n6G0s-Tto*uwF!rJPv-nPv#~t!+Ar0~E3ZvA-M{ngnKkhWeB2C$5eyxNnH*%q7#?k45OCkw z@U=?!(Z?OWrSIzYi%;}$sa#jYxG;cY@=2GJ&5@~R`;I3kZoj>d`6-j$bnZnLS6n(1 zq0{#IE0?T>=!KUhM}F40DF_@Wun_rK^Y8I$hi7}@^kw?pmG|Gx)85NFg=@mu(%rEW zPd}aDp)w`q)SSyNTV9rMU1iq~tm8J3;=P@;QQ-V@;pT%5B3!Ni^P;Yup0j`Fg@$R@ zAC&EOwVK;@_FLrnO>uUAQs(Jx;mFt;<)JotMTnOC(<@n~%IP~}oW!G8-jrEazH(g| z^6Q1r1WS9SBlB%^Gom?HW$n8EKHIv2Q@_;_>d|)A1`8dABZ-WdVQ}1t$!+n(55NC< zEDc&_w>aAAz{3Iopl{>Wi+}zZlVUWpe%gnxOlGrtKYGW_tKEJ(Hz(~!731ccJP!+Q zNSrFLkg2edTlQ*yoWstTZC|Tw1$o#Weyk|ieb?t|{a%L7%P&oq1+@rFxU7=4p@m`o z`SdsU-uo$F<^vNBgQu&X%Q~loCIEgx3!MM} literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_foot.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..30ad69dc3f0463bd7436d5c0dd40d2762822e7cf GIT binary patch literal 1867 zcmV-R2ekN!P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ck|ZY#{O1%t0zycF;~+p0zJZVLr1~+lJ8gT{ z>+n|>(*vy*dL<-O+JF2W={G!uYDrbBX;;m7YOlQv3|jtp_Py^p#~D|A=q{tD7Nu`~ zc#H_`mAs&5^n4RO{qZrxpC;(Dr&n^4@8tY+Q@)9)Jq#7JPx4i=<s?W>_@S}bI09Y8Q&^l#qNN{AonQ)us{Fy8)C4z6HS$1A(l>LQ2_6F(TBl0iS`$3#VEf5Rgb&h_X~>1vsr7-!N2m9E`->%ETwrvsJ;W{)-?@Z#*%#nsK5cOMhWXVxiGr_DC|9BGxs zt1el(Y_-+b*tD^fcHOdd+itt>5m;)$QA0w*qD7DKMD0Q~eS_Io{UlpTO8m_FV=hbSmAIprA=ktOB^IA6XfleqiG3DK32tHKp=D3-h(E>!5!!* zD2|Wtx_!2dTh+M2f7z$oV7t$A*R+UMCxVJ&2AqG=U7e?25i4!gSj!!xMu=|3QU{xd zr>sl2@3}m7Ju0+t(aN-?A|2lQgr{&Ydp^eY>axu@?ktEmCQg%3++T3@s|a4;!6$O= z${^Td&>%V$-m!}Bj;g@9Ds-w{bw@d2cH2s4>#Y~8@E)j z$;{gDa=h6F)NwiNOJd@6FT5Q>I+TMO9EglTc70p$jc`C&%NxEqWZU}6*-{s|0?+x! zd)dRmkHrGHxd!a6)bYg+pV|=fyc~?Tt0JkX$e_h$1Ygg2)r&T;b160G@F(beH+IwO zI9e?C0}B-1n@u&m)1IGNb#S>rnL;ZJM86KLvOvnGl9vI;n=%R!X`BR${{>8-Wz;?W z33HeOX>Q;w_y7O_hG|1XP)S2WAaHVTW@&6?004NLeUUv#!%!53PgA8L6%jj#IAo|! z7DPn^mr}(dSSW3URvk=U`Ug!Kk`xz5!L{Jv&tlcV#aUMeS3wZ`0daM4Qgo3L?@J0T zV!ZHpALre3c<(+yXjGVLc1-}PW*Mn?Ow8t1#lR~B1mVK~<|Jn7iS%Lyp7nK4om6)b zp5@*5XZ0z0lL0=FILdUxBHkdL*|c=d`@|tuk`&@|;&Fp6Nc_lk+2uFRMTZ5R88R}d zdEyYUSnOcAgIUQ?iKmIfimFk*kabz%yv13q)L84D{Dr~1wvy&Ltr5hrganchA)|&e zDzFftT_eRriq2ym{$a-)kq~_kr8`?LJ#?;(srom*uNKFj{yP@U?yEx-U z|961*ps3190ssI2000000002|u4x*3KA$#@qj~S`$}aD{jpJyK$HSVY`AXN%rvWJ? z#TX??RaNP#A$aetswzp+aU4o1eI+;lG+^I%4a1yvZ(KS-S2nRb$vUN^#&W}e8YTy%ZdO1002ovPDHLk FV1g6-alrrp literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_hand.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbc7371d14bd73a3bb5d33ed1f9e467fc12f881 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R4; zr;B4q#hkad7OrawU^w=%zxR=_1+$;@Tz3PD`v+1s%((N!lc#J`?;D;lxr1kKnn+z) z(6_UgUHa*}yz)Z_4}Aa2C35cE&%+8bF%yCraG~4Gd1lg=Uw^%jwe`Z=vbkExM+~N+cvVXJ=9!zL)}HzO_gK=#4gY?m zXH{~xC1&Jq3RV8+9?yu&acJTu2lBQX&wKu`z#_p!s&>ot4ATR3`_1>gzrJhc&)a3Y zP3QWtpMSpj%GWUFIp@=BZa*z@+$K6-^D}?rRfgt+4_24k8_V_2{aTgV_1S-Y{t@d1 mXAW`qas;$8HOzsbJNyn45~Pj< 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/meta.json b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/meta.json new file mode 100644 index 00000000000..11752d51403 --- /dev/null +++ b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/meta.json @@ -0,0 +1,67 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/5bc3ea02ce03a551c85017f1ddd411315a19a5ca#diff-519788fa2ca74299d1686a44d3ab2098b49ed5ab65d293ec742bead7d49f0b8d", + "states": [ + { + "name": "full", + "directions": 4 + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "eyes", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_arm.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..c294120942cf5eed679cf4306018857a95c18f09 GIT binary patch literal 605 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|OJk zr;B4q#hkadd|w*|N*w=q|B0WbbmD2Jh=>zWUY?)$_Apv|om#!&i<{1r6z{OER^Ej< zwoff57XLr5dAj<{oxkE~>t06(n;FM`o|!yr)=%a~h729Y85HE08!C7hK%8`mguQXx z`|q!RczU+qawVZoiFua=9M)eK=4)pTJMsGKqWkZ=Q;ae>4hlFJNE~@saA3Rn?6XHc zR=6k#80Jwhj8>61O3E>36vYsNO5e%chYvgKq7lXmFZFv0GlJZIN(f3Ukyv~$am zPxb20|IUn-m>DhZAon1>Su}fV)c)@>3C|@MjwCY(^fNlxurYkZ$~p7SK&to1%MvH8 zshh6sZmLh^O0baWs<2siPa@Y$`r+rFI{gV;2c8x^{92{Su#@ZA=bap_PSe~BSPS;w zzuGQT6umaANc6y~nM@PH|5fdMRAZOC{r18Djfh{bPWv#P(06SSc*V`L{4%F?3fF_O z-7Bjb&b%!<%r}$i#PiQlyYGrUERZ;wBv|%hzg&yfRIWFZGJ$p^EdCKFf$DB${tx0+ X*88+ucF0=;(+h*AtDnm{r-UW|r#lO; literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_foot.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..390e0a27ee3c31b36740b4d14c49fc5461cf57cb GIT binary patch literal 1876 zcmV-a2dnsrP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|cmMbR={AU$e0+JAdRw3JP`FfBhNh4?IkTQ&DTR*P8K^UOEqST7G}_P4=AQ^b0<8)6v6<(x)Hp zJwkh?XGnpRH|1kKIgaGRfclX1Oi%hnFOO;XQ$+3Vh|xai7iY^KpZ5NVSS_&TbgauL z75S;RMctQj^Bsr+iqCr9Xl9MJvEWFtu znJ3GoYhv7aN*0omq)4G)lP*h|uuR?}(DEY|y5{ZIbdwq;UIa@fI3tX>TDo`sZ+q$} zVxANcR)5bG;$l89(8;2l|F8le6!(3kSAy^D>jPlnq`>N=xnY4L`RQ?b&phlYw4Rjq2;wCku+OVwJd)pHhyi4{|;X4b6RXwpj4 zR-3ifdK;;87o1h?wOen!_c1W(faihHqYWsWUA(w@b@S%k$HexTW$LWcW}AJEw0OxX zOIKaC+Ujd;+Sp3FY~6L+ZoBUh*lHnBLZgO7iyq^F+J$QRgxPoG{uwp8p$5Rxg;{~o z9W|)U?k?!ii5|>=7#9NKb`ZdZ=7U*oR0<#D(!nfu#;H(7lzPBfbPxlAWfN=A1G{(R zzTuW|?*A)p{1Lfyp!*%jr32j)t;+Gw~kH;IH>;Mjr~Y)^|?aNhBKE6AsNSltmICL!4A*rocO1X>y4 zQX^2-bb-+{o0_wA75E8n#|fAzjs#amI2f<*XwxzNXme|*jXajbUY4ScKscB$Dt!j-ltVc>d}1Vr?<=A`>lSL@t;G(!%h3(cYdieeb+;I{hn|#U z-KHnm63wa2YHPTaI=o+bgdWt39N~+OmSsyF?90$;2n6LBa=7KTTP3Vlr*H*x_yl|Qx=^DXP62=RLp?hdJLRH@+i2}VtaKMee_Q5^QAG4Z+w%7!W-c&9x-wc@zC6vlKY*E#w{uDpEClgZ10<4qZf zh&0Xu*?$2O?o8x8{S6*e{0(5$8@&Jk0fuQqLr_UWLm+T+Z)Rz1WdHzpoPCi!NW)MR zg-=tZA{7xkh&W`ZP8LK(1ea39B3LMGg;pI*Uit@38j=(jN5Qq=;Ll>!!Nplu2UkH5 z`~h)waZ+@V67Ne2En>XzcpvB8b9nDQKxkB$YIaQks%9CfcudUZR>i<81O(y30OllS z>WTDX2A=hGPn}eE5uWAU_hE=c^y zb=l=N&P9g>o*6PSsd?fMu~_V2xr15BP>H9B!-}d=zL0fU;k?CJt<+fSp8SQuytb0& zI;|1Jv4jMY5Fw+6GAghTp$?=2#!SC6cg{et5 zDHsE~Uu^qh6bS4B&AM%WAKP~G1n@rtS6bU&Z2+^Mq}SV8_z39V1}?7Kn!E>G?f^qi zx@1U>4?5<5S>o`L`X0O?6YK~#9!?b@M^g+L62;d2)Z0*mLZcthq52*Kh}K!PDb z0Tw~ROw!dWA)6b-|LK`dr%hcY0000000000006*WbzR#uP1g6lm1Svf$f+z#8-~HA zX|lSmZ|C%L=ks}HY zbIv__KYntlD2k7B&W__yk|Z*-uP#ii>#8`8wQZZ)wpE&@DvILsB-StK1bo9B1R=!$ O0000XhvZ!BQeyxZ7OypHo7SH)?>RDJ^{CTqbMEwcD3^-838phL4FU|2&Kl8l!%Ii|@{5%t> znMoTtju#rt^tq5>5_ElzlmZ7+v5nls(@z7mrhedjWZ}21{V-#qL|UIeZ^7Igv)PLC z&nIub`9Szh+3u9HPm3gmG{eTzrD97t(MinkC7Pk&Njh9M(TR$#;COcD?{ww?SGihf0r>(WMP0t zf{onlsI}iNaa?|RrDERqEyed_6ZYRfyzOmD{qDPuu3mfnHTd~%YlqD@x3D!g{=9j- yJ9PEc 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_m.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_m.png new file mode 100644 index 0000000000000000000000000000000000000000..dafc83b65eb84c863c1f67ff31c90ef59b130ced GIT binary patch literal 1432 zcmV;J1!ww+P)afqZvo(H z7%XPqX0uUhYAQd+&oD%aqE|@Zy_oIC$43@DI5-%d$NUiE{r#OVIja1A34oUt78cUO z!vhn82&#vLg)uP({`B<3f5+!M2)GD%FWfvNBm^$c*X!#m-=CkKIUF1g2Y=4P?e}~A z5&(noyjWCMSJTwg6vfBK)BXKD#~+ON`ubweXm4+q1_X5Q$oAXY+XVjU>1oQ(&u76g z^Wct-j;5276aFkdr?NWu9Rl)&`}_MMJw2Tc4-d(1x6{tf4te5^PESvH;412?as#`& zyCNeagFZh$IUHhRV|fzx_V&EO2iyaE5f>LnDJdzex+f`7QBe_x1l->U$gq_dRo)>hIRNWN`tZTz!mN621)$#6QI{A^@oMERY{A%JDB zzP_I3=H@v5;Q>ueP5fN%e~diKpiS;cundF0wzihJ|6eBc-3rV70PZCvB{VTHAv!xd znH0~-0LZ~MHa61W;2_P<&wD38%Mz^Y0lu>=2M@p~qafFNh#;YL0s?j*@*DpW2Lk`x ziO`?&jMn_~&j}D{SOSpAVF^Gcha~`+9F_oNa##Y8$zcgVCWj@!Prm%y{Q-fnL6ZP8 zGc%&6r-%L);G7T#w$07W`ko0&fXMB3i|+33Uu%#6z>TB0p`jrh)EajnvbMG+a&vQO zb#;}G$5FR;I2?wGu)e-7WMv8`)3B+cqC$TUfa)%ni%(%kM@P9do|cwIo12@WtgOrs z5x`YkT+Hj(BT}1!~xKNBm zQAQ3P6Vlh$N2R5uO7Bw^Ko%qc5W^6ZsL{NDBB|a0$Hm13p-%|hzQ^&tw)qQX0XjN5 zxHNWte$MfS;v{N>D3v>%PTfNQ9G+!Qpf(8Z;o)Ja0Ag%wYfFF-7pk=} zF){1~Mgd&lL`35mOyZ0;Aqw;C@4UmkT^R# zqw@0dz_!UrWM^l4yFz4Z9A*O9*N7EB0$kt(H*E0rM%btVB>^z&fXx1wiH3#-Ze2s8 zq)`ADyso9Cg%%eVz3p7nq!! zWC2v%A5cz$AXr#f@CH1{joJcB)Ya87pX?R^&?ls2AEId$kVJYkMXJEJF;n&lslqxD mB9p@sfJ_cc05UmDFTj5?`Q@6?Q 0.05 && hsvTint.z != 0.0) + { + hsvColor.x = hsvTint.x; + } + // Modify saturation based on tint color saturation, + // Halving it if it's higher and capping it at the original. + hsvColor.y = (hsvColor.y < hsvTint.y) ? + mix(hsvColor.y, hsvTint.y, 0.75) : mix(hsvColor.y, hsvTint.y, 0.35); + + // Modify value based on tint color value, but only if it's darker. + hsvColor.z = (mix(hsvColor.z, hsvTint.z, 0.85) <= hsvColor.z) ? + mix(hsvColor.z, hsvTint.z, 0.85) : hsvColor.z; + + // Convert back to RGB. + highp vec3 rgbColorMod = hsv2rgb(hsvColor); + + // Mix the final RGB product with the original color to the intensity of the tint. + color.rgb = mix(color.rgb, rgbColorMod, tint_amount); + + COLOR = color; +}