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 00000000000..3aec926c5e2 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin.png differ diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin_stripes.png b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin_stripes.png new file mode 100644 index 00000000000..ce1f04ce602 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_ears.rsi/shadekin_stripes.png differ 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 00000000000..ca162bb1b05 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_medium.png differ 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 00000000000..979e4e6b26c Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_32x32.rsi/shadekin_shorter.png differ diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/meta.json b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/meta.json new file mode 100644 index 00000000000..549db63464e --- /dev/null +++ b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "size": { + "x": 64, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/96703f76bccd8fe6a96b78524efb97a9af661767 Shadekin big fluff made by DSC@Cabbage#9633 (561159087765848084)", + "states": [ + { + "name": "shadekin", + "directions": 4 + }, + { + "name": "shadekin_big", + "directions": 4 + }, + { + "name": "shadekin_big_fluff", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin.png b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin.png new file mode 100644 index 00000000000..94ff21d9cbb Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin.png differ diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big.png b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big.png new file mode 100644 index 00000000000..988aa6e589f Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big.png differ diff --git a/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big_fluff.png b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big_fluff.png new file mode 100644 index 00000000000..20ad696ccee Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Customization/Shadekin/shadekin_tails_64x32.rsi/shadekin_big_fluff.png differ 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 00000000000..c2f4e53b378 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/hand.png differ 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 00000000000..fd75194b031 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/head.png differ 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 00000000000..81d4db70a71 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/jumpsuit.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/meta.json b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/meta.json new file mode 100644 index 00000000000..35f7cc1d4fd --- /dev/null +++ b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Displacement maps made by _kote", + "size": { + "x": 32, + "y": 32 + }, + "load": { + "srgb": false + }, + "states": [ + { + "name": "jumpsuit", + "directions": 4 + }, + { + "name": "shoes", + "directions": 4 + }, + { + "name": "hand", + "directions": 4 + }, + { + "name": "head", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/shoes.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/shoes.png new file mode 100644 index 00000000000..3124d9c1e71 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/displacement.rsi/shoes.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/eyes.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/eyes.png new file mode 100644 index 00000000000..20fd326f17f Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/eyes.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/full.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/full.png new file mode 100644 index 00000000000..8ebd75032e6 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/full.png differ 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 00000000000..9d99bd18903 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_f.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_m.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_m.png new file mode 100644 index 00000000000..9d99bd18903 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/head_m.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_arm.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_arm.png new file mode 100644 index 00000000000..078ca333f6d Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_arm.png differ 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 00000000000..30ad69dc3f0 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_foot.png differ 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 00000000000..0cbc7371d14 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_hand.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_leg.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_leg.png new file mode 100644 index 00000000000..b961dfc842a Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/l_leg.png differ 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 00000000000..c294120942c Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_arm.png differ 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 00000000000..390e0a27ee3 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_foot.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_hand.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_hand.png new file mode 100644 index 00000000000..331e33a587e Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_hand.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_leg.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_leg.png new file mode 100644 index 00000000000..6b0270f6343 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/r_leg.png differ diff --git a/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_f.png b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_f.png new file mode 100644 index 00000000000..83cc63cdd29 Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_f.png differ 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 00000000000..dafc83b65eb Binary files /dev/null and b/Resources/Textures/ADT/Mobs/Species/Shadekin/parts.rsi/torso_m.png differ diff --git a/Resources/Textures/ADT/Shaders/color_tint.swsl b/Resources/Textures/ADT/Shaders/color_tint.swsl new file mode 100644 index 00000000000..f95011cefab --- /dev/null +++ b/Resources/Textures/ADT/Shaders/color_tint.swsl @@ -0,0 +1,56 @@ +light_mode unshaded; + +uniform sampler2D SCREEN_TEXTURE; +uniform lowp vec3 tint_color; // RGB color between 0 and 1 +uniform lowp float tint_amount; // Number between 0 and 1 + +// Function to convert RGB to HSV. +highp vec3 rgb2hsv(highp vec3 c) +{ + highp vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + highp vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + highp vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + highp float d = q.x - min(q.w, q.y); + /* float e = 1.0e-10; */ + highp float e = 0.0000000001; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +// Function to convert HSV to RGB. +highp vec3 hsv2rgb(highp vec3 c) +{ + highp vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + highp vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void fragment() { + highp vec4 color = zTextureSpec(SCREEN_TEXTURE, FRAGCOORD.xy * SCREEN_PIXEL_SIZE); + + // Convert color to HSV. + highp vec3 hsvTint = rgb2hsv(tint_color); + highp vec3 hsvColor = rgb2hsv(color.rgb); + + // Set the original hue to the tint hue as long as it's not greyscale. + if (hsvTint.y > 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; +}