diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 58cc9ba4d20..9f9cc0bf554 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -77,7 +77,7 @@ jobs: with: host: ${{ secrets.BUILDS_HOST }} username: ${{ secrets.BUILDS_USERNAME }} - password: ${{ secrets.BUILD_PASSWORD }} + key: ${{ secrets.BUILDS_SSH_KEY }} port: ${{ secrets.BUILDS_PORT }} script: python3 ~/manifest.py --version ${{ github.sha }} diff --git a/ADT_STATION b/ADT_STATION index ed73f1253d5..1a9aaad8c86 160000 --- a/ADT_STATION +++ b/ADT_STATION @@ -1 +1 @@ -Subproject commit ed73f1253d585bbab612647b94eb4341b4344a09 +Subproject commit 1a9aaad8c86fd7c1865ba25bf968d8c44d9b869e diff --git a/Content.Client/Movement/Systems/ClientWaddleAnimationSystem.cs b/Content.Client/Movement/Systems/ClientWaddleAnimationSystem.cs new file mode 100644 index 00000000000..12288e20cf6 --- /dev/null +++ b/Content.Client/Movement/Systems/ClientWaddleAnimationSystem.cs @@ -0,0 +1,144 @@ +using System.Diagnostics.CodeAnalysis; +using System.Numerics; +using Content.Client.Buckle; +using Content.Client.Gravity; +using Content.Shared.ActionBlocker; +using Content.Shared.Mobs.Systems; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; +using Robust.Client.Animations; +using Robust.Client.GameObjects; +using Robust.Shared.Animations; + +namespace Content.Client.Movement.Systems; + +public sealed class ClientWaddleAnimationSystem : SharedWaddleAnimationSystem +{ + [Dependency] private readonly AnimationPlayerSystem _animation = default!; + [Dependency] private readonly GravitySystem _gravity = default!; + [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; + [Dependency] private readonly BuckleSystem _buckle = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + + public override void Initialize() + { + base.Initialize(); + + // Start waddling + SubscribeAllEvent((msg, args) => StartWaddling(args.SenderSession.AttachedEntity)); + + // Handle concluding animations + SubscribeLocalEvent(OnAnimationCompleted); + + // Stop waddling + SubscribeAllEvent((msg, args) => StopWaddling(args.SenderSession.AttachedEntity)); + } + + private void StartWaddling(EntityUid? uid) + { + if ( + !EntityIsValid(uid, out var entity, out var component) || + _animation.HasRunningAnimation(entity.Value, component.KeyName) || + _gravity.IsWeightless(entity.Value) || + _buckle.IsBuckled(entity.Value) || + _mobState.IsIncapacitated(entity.Value) || + !TryComp(entity, out var mover) || + !_actionBlocker.CanMove(entity.Value, mover) + ) + return; + + PlayWaddleAnimationUsing(entity.Value, component, CalculateAnimationLength(component, mover), CalculateTumbleIntensity(component)); + } + + private static float CalculateTumbleIntensity(WaddleAnimationComponent component) + { + return component.LastStep ? 360 - component.TumbleIntensity : component.TumbleIntensity; + } + + private static float CalculateAnimationLength(WaddleAnimationComponent component, InputMoverComponent mover) + { + return mover.Sprinting ? component.AnimationLength * component.RunAnimationLengthMultiplier : component.AnimationLength; + } + + private void OnAnimationCompleted(EntityUid uid, WaddleAnimationComponent component, AnimationCompletedEvent args) + { + if (args.Key != component.KeyName) + return; + + if (!TryComp(uid, out var mover)) + return; + + PlayWaddleAnimationUsing(uid, component, CalculateAnimationLength(component, mover), CalculateTumbleIntensity(component)); + } + + private void StopWaddling(EntityUid? uid) + { + if ( + !EntityIsValid(uid, out var entity, out var component) || + !_animation.HasRunningAnimation(entity.Value, component.KeyName) + ) + return; + + _animation.Stop(entity.Value, component.KeyName); + + if (!TryComp(entity.Value, out var sprite)) + return; + + // Note that this is a hard-write to this sprite, not some layer-based operation. If this is called whilst a sprite + // is lying down, it will make the sprite stand up, which usually looks wrong. + sprite.Offset = new Vector2(); + sprite.Rotation = Angle.FromDegrees(0); + } + + private bool EntityIsValid(EntityUid? uid, [NotNullWhen(true)] out EntityUid? entity, [NotNullWhen(true)] out WaddleAnimationComponent? component) + { + entity = null; + component = null; + + if (!uid.HasValue) + return false; + + entity = uid.Value; + + return TryComp(entity, out component); + } + + private void PlayWaddleAnimationUsing(EntityUid uid, WaddleAnimationComponent component, float len, float tumbleIntensity) + { + component.LastStep = !component.LastStep; + + var anim = new Animation() + { + Length = TimeSpan.FromSeconds(len), + AnimationTracks = + { + new AnimationTrackComponentProperty() + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Rotation), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), 0), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(tumbleIntensity), len/2), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), len/2), + } + }, + new AnimationTrackComponentProperty() + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Offset), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(new Vector2(), 0), + new AnimationTrackProperty.KeyFrame(component.HopIntensity, len/2), + new AnimationTrackProperty.KeyFrame(new Vector2(), len/2), + } + } + } + }; + + _animation.Play(uid, anim, component.KeyName); + } +} diff --git a/Content.Client/Movement/Systems/WaddleAnimationSystem.cs b/Content.Client/Movement/Systems/WaddleAnimationSystem.cs deleted file mode 100644 index fe010500c59..00000000000 --- a/Content.Client/Movement/Systems/WaddleAnimationSystem.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System.Numerics; -using Content.Client.Gravity; -using Content.Shared.Movement.Components; -using Content.Shared.Movement.Events; -using Robust.Client.Animations; -using Robust.Client.GameObjects; -using Robust.Shared.Animations; -using Robust.Shared.Timing; - -namespace Content.Client.Movement.Systems; - -public sealed class WaddleAnimationSystem : EntitySystem -{ - [Dependency] private readonly AnimationPlayerSystem _animation = default!; - [Dependency] private readonly GravitySystem _gravity = default!; - [Dependency] private readonly IGameTiming _timing = default!; - - public override void Initialize() - { - SubscribeLocalEvent(OnMovementInput); - SubscribeLocalEvent(OnStartedWalking); - SubscribeLocalEvent(OnStoppedWalking); - SubscribeLocalEvent(OnAnimationCompleted); - } - - private void OnMovementInput(EntityUid entity, WaddleAnimationComponent component, MoveInputEvent args) - { - // Prediction mitigation. Prediction means that MoveInputEvents are spammed repeatedly, even though you'd assume - // they're once-only for the user actually doing something. As such do nothing if we're just repeating this FoR. - if (!_timing.IsFirstTimePredicted) - { - return; - } - - if (!args.HasDirectionalMovement && component.IsCurrentlyWaddling) - { - component.IsCurrentlyWaddling = false; - - var stopped = new StoppedWaddlingEvent(entity); - - RaiseLocalEvent(entity, ref stopped); - - return; - } - - // Only start waddling if we're not currently AND we're actually moving. - if (component.IsCurrentlyWaddling || !args.HasDirectionalMovement) - return; - - component.IsCurrentlyWaddling = true; - - var started = new StartedWaddlingEvent(entity); - - RaiseLocalEvent(entity, ref started); - } - - private void OnStartedWalking(EntityUid uid, WaddleAnimationComponent component, StartedWaddlingEvent args) - { - if (_animation.HasRunningAnimation(uid, component.KeyName)) - { - return; - } - - if (!TryComp(uid, out var mover)) - { - return; - } - - if (_gravity.IsWeightless(uid)) - { - return; - } - - var tumbleIntensity = component.LastStep ? 360 - component.TumbleIntensity : component.TumbleIntensity; - var len = mover.Sprinting ? component.AnimationLength * component.RunAnimationLengthMultiplier : component.AnimationLength; - - component.LastStep = !component.LastStep; - component.IsCurrentlyWaddling = true; - - var anim = new Animation() - { - Length = TimeSpan.FromSeconds(len), - AnimationTracks = - { - new AnimationTrackComponentProperty() - { - ComponentType = typeof(SpriteComponent), - Property = nameof(SpriteComponent.Rotation), - InterpolationMode = AnimationInterpolationMode.Linear, - KeyFrames = - { - new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), 0), - new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(tumbleIntensity), len/2), - new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), len/2), - } - }, - new AnimationTrackComponentProperty() - { - ComponentType = typeof(SpriteComponent), - Property = nameof(SpriteComponent.Offset), - InterpolationMode = AnimationInterpolationMode.Linear, - KeyFrames = - { - new AnimationTrackProperty.KeyFrame(new Vector2(), 0), - new AnimationTrackProperty.KeyFrame(component.HopIntensity, len/2), - new AnimationTrackProperty.KeyFrame(new Vector2(), len/2), - } - } - } - }; - - _animation.Play(uid, anim, component.KeyName); - } - - private void OnStoppedWalking(EntityUid uid, WaddleAnimationComponent component, StoppedWaddlingEvent args) - { - _animation.Stop(uid, component.KeyName); - - if (!TryComp(uid, out var sprite)) - { - return; - } - - sprite.Offset = new Vector2(); - sprite.Rotation = Angle.FromDegrees(0); - component.IsCurrentlyWaddling = false; - } - - private void OnAnimationCompleted(EntityUid uid, WaddleAnimationComponent component, AnimationCompletedEvent args) - { - var started = new StartedWaddlingEvent(uid); - - RaiseLocalEvent(uid, ref started); - } -} diff --git a/Content.Server/Movement/Systems/ServerWaddleAnimationSystem.cs b/Content.Server/Movement/Systems/ServerWaddleAnimationSystem.cs new file mode 100644 index 00000000000..50f4bf2556c --- /dev/null +++ b/Content.Server/Movement/Systems/ServerWaddleAnimationSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.Movement.Systems; + +namespace Content.Server.Movement.Systems; + +public sealed class ServerWaddleAnimationSystem : SharedWaddleAnimationSystem; diff --git a/Content.Client/Clothing/Systems/WaddleClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/WaddleClothingSystem.cs similarity index 95% rename from Content.Client/Clothing/Systems/WaddleClothingSystem.cs rename to Content.Shared/Clothing/EntitySystems/WaddleClothingSystem.cs index b8ac3c207bf..b004cdc56bd 100644 --- a/Content.Client/Clothing/Systems/WaddleClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/WaddleClothingSystem.cs @@ -1,8 +1,8 @@ using Content.Shared.Clothing.Components; -using Content.Shared.Movement.Components; using Content.Shared.Inventory.Events; +using Content.Shared.Movement.Components; -namespace Content.Client.Clothing.Systems; +namespace Content.Shared.Clothing.EntitySystems; public sealed class WaddleClothingSystem : EntitySystem { diff --git a/Content.Shared/Movement/Components/WaddleAnimationComponent.cs b/Content.Shared/Movement/Components/WaddleAnimationComponent.cs index 712c511931c..110e4646330 100644 --- a/Content.Shared/Movement/Components/WaddleAnimationComponent.cs +++ b/Content.Shared/Movement/Components/WaddleAnimationComponent.cs @@ -1,31 +1,24 @@ -using System.Numerics; +using System.Numerics; +using Robust.Shared.Serialization; namespace Content.Shared.Movement.Components; /// /// Declares that an entity has started to waddle like a duck/clown. /// -/// The newly be-waddled. -[ByRefEvent] -public record struct StartedWaddlingEvent(EntityUid Entity) -{ - public EntityUid Entity = Entity; -} +[Serializable, NetSerializable] +public sealed class StartedWaddlingEvent : EntityEventArgs; /// /// Declares that an entity has stopped waddling like a duck/clown. /// -/// The former waddle-er. -[ByRefEvent] -public record struct StoppedWaddlingEvent(EntityUid Entity) -{ - public EntityUid Entity = Entity; -} +[Serializable, NetSerializable] +public sealed class StoppedWaddlingEvent : EntityEventArgs; /// /// Defines something as having a waddle animation when it moves. /// -[RegisterComponent] +[RegisterComponent, AutoGenerateComponentState] public sealed partial class WaddleAnimationComponent : Component { /// @@ -38,26 +31,26 @@ public sealed partial class WaddleAnimationComponent : Component /// /// How high should they hop during the waddle? Higher hop = more energy. /// - [DataField] + [DataField, AutoNetworkedField] public Vector2 HopIntensity = new(0, 0.25f); /// /// How far should they rock backward and forward during the waddle? /// Each step will alternate between this being a positive and negative rotation. More rock = more scary. /// - [DataField] + [DataField, AutoNetworkedField] public float TumbleIntensity = 20.0f; /// /// How long should a complete step take? Less time = more chaos. /// - [DataField] + [DataField, AutoNetworkedField] public float AnimationLength = 0.66f; /// /// How much shorter should the animation be when running? /// - [DataField] + [DataField, AutoNetworkedField] public float RunAnimationLengthMultiplier = 0.568f; /// @@ -66,7 +59,8 @@ public sealed partial class WaddleAnimationComponent : Component public bool LastStep; /// - /// Stores if we're currently waddling so we can start/stop as appropriate and can tell other systems our state. + /// Stores if we're currently waddling, so we can start/stop as appropriate and can tell other systems our state. /// + [DataField, AutoNetworkedField] public bool IsCurrentlyWaddling; } diff --git a/Content.Shared/Movement/Systems/SharedWaddleAnimationSystems.cs b/Content.Shared/Movement/Systems/SharedWaddleAnimationSystems.cs new file mode 100644 index 00000000000..da28e74d45f --- /dev/null +++ b/Content.Shared/Movement/Systems/SharedWaddleAnimationSystems.cs @@ -0,0 +1,103 @@ +using Content.Shared.Buckle.Components; +using Content.Shared.Gravity; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Events; +using Content.Shared.Standing; +using Content.Shared.Stunnable; +using Robust.Shared.Timing; + +namespace Content.Shared.Movement.Systems; + +public abstract class SharedWaddleAnimationSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + // Startup + SubscribeLocalEvent(OnComponentStartup); + + // Start moving possibilities + SubscribeLocalEvent(OnMovementInput); + SubscribeLocalEvent((uid, component, args) => OnStood(uid, component, args)); + + // Stop moving possibilities + SubscribeLocalEvent((uid, component, _) => StopWaddling(uid, component)); + SubscribeLocalEvent((uid, component, _) => StopWaddling(uid, component)); + SubscribeLocalEvent((uid, component, _) => StopWaddling(uid, component)); + SubscribeLocalEvent((uid, component, args) => + { + if (!args.HasGravity && component.IsCurrentlyWaddling) + StopWaddling(uid, component); + }); + } + + private void OnComponentStartup(EntityUid uid, WaddleAnimationComponent component, ComponentStartup args) + { + if (!TryComp(uid, out var moverComponent)) + return; + + // If the waddler is currently moving, make them start waddling + if ((moverComponent.HeldMoveButtons & MoveButtons.AnyDirection) == MoveButtons.AnyDirection) + { + RaiseNetworkEvent(new StartedWaddlingEvent()); + } + } + + private void OnMovementInput(EntityUid uid, WaddleAnimationComponent component, MoveInputEvent args) + { + // Prediction mitigation. Prediction means that MoveInputEvents are spammed repeatedly, even though you'd assume + // they're once-only for the user actually doing something. As such do nothing if we're just repeating this FoR. + if (!_timing.IsFirstTimePredicted) + { + return; + } + + if (!args.HasDirectionalMovement && component.IsCurrentlyWaddling) + { + StopWaddling(uid, component); + + return; + } + + // Only start waddling if we're not currently AND we're actually moving. + if (component.IsCurrentlyWaddling || !args.HasDirectionalMovement) + return; + + component.IsCurrentlyWaddling = true; + + RaiseNetworkEvent(new StartedWaddlingEvent()); + } + + private void OnStood(EntityUid uid, WaddleAnimationComponent component, StoodEvent args) + { + // Prediction mitigation. Prediction means that MoveInputEvents are spammed repeatedly, even though you'd assume + // they're once-only for the user actually doing something. As such do nothing if we're just repeating this FoR. + if (!_timing.IsFirstTimePredicted) + { + return; + } + + if (!TryComp(uid, out var mover)) + { + return; + } + + if ((mover.HeldMoveButtons & MoveButtons.AnyDirection) == MoveButtons.None) + return; + + if (component.IsCurrentlyWaddling) + return; + + component.IsCurrentlyWaddling = true; + + RaiseNetworkEvent(new StartedWaddlingEvent()); + } + + private void StopWaddling(EntityUid uid, WaddleAnimationComponent component) + { + component.IsCurrentlyWaddling = false; + + RaiseNetworkEvent(new StoppedWaddlingEvent()); + } +} diff --git a/Resources/Changelog/ChangelogADT.yml b/Resources/Changelog/ChangelogADT.yml index 7ed4e31f7cf..3f1943d235e 100644 --- a/Resources/Changelog/ChangelogADT.yml +++ b/Resources/Changelog/ChangelogADT.yml @@ -1692,12 +1692,13 @@ Entries: - author: Шрёдингер changes: + - {message: "NanoTrasen наладило производство чёрных беретов для обычных гражданских. Новая обновка будет помещена во все одеждоматы рядом с красными беретами.", type: Add} - {message: "Акты био терроризма резко упали в количестве до нуля.", type: Remove} id: 55734 time: '2024-04-22T08:20:00.0000000+00:00' - author: 1Stepka1 changes: - - {message: "Плазма в живых организмах непредвидено изменила свои свойства,в следствии чего живым существам состоящим из плазмы больше не нужно пить и частичные функции потребления жидкостей переключились на пищеварительную систему", type: Tweak} + - {message: "Плазма в живых организмах непредвидено изменила свои свойства, вследствии чего живым существам состоящим из плазмы больше не нужно пить и частичные функции потребления жидкостей переключились на пищеварительную систему", type: Tweak} id: 55735 time: '2024-04-24T16:30:00.0000000+00:00' diff --git a/Resources/Locale/ru-RU/ADT/Clothing/Head/hats.ftl b/Resources/Locale/ru-RU/ADT/Clothing/Head/hats.ftl index 62085f71128..63ed14cf47a 100644 --- a/Resources/Locale/ru-RU/ADT/Clothing/Head/hats.ftl +++ b/Resources/Locale/ru-RU/ADT/Clothing/Head/hats.ftl @@ -186,3 +186,6 @@ ent-ClothingNeckCloakCentcom = плащ Центком ent-ClothingHeadHatCentcomcap = фуражка Центком .desc = Экстравагантная причудливая фуражка центрального командира. + +ent-ADTClothingHeadHatBeretBlackCivilian = чёрный берет + .desc = Этот тёмный берет из мягкой ткани прилегает к голове как уютный оберег от холода. Его простой и классический дизайн делает его универсальным аксессуаром для любого стиля одежды. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/research/technologies.ftl b/Resources/Locale/ru-RU/research/technologies.ftl index 945b47435b3..ba2de7a165a 100644 --- a/Resources/Locale/ru-RU/research/technologies.ftl +++ b/Resources/Locale/ru-RU/research/technologies.ftl @@ -80,3 +80,6 @@ research-technology-advanced-anomaly-research = Продвинутые иссл research-technology-portable-fission = Эксперементальные батареи ADT-research-technology-doll-house = Кукольный домик +ADT-research-technology-gigax = боевой мех "Гайгэкс" +ADT-research-technology-odysseus = медицинский мех "Одиссей" +ADT-research-technology-medgun = медиган diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/misc.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/misc.ftl index 9b78a43e5d3..4c95affe4e2 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/misc.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/misc.ftl @@ -47,3 +47,5 @@ ent-ClothingOuterHospitalGown = больничный халат .desc = Изготовлена из шерсти забитых ягнят. За счет жестокости она приобрела мягкость. ent-ClothingOuterRedRacoon = костюм красного енота .desc = Пушистый костюм красного енота! +ent-ClothingOuterPonchoSindi = подозрительное пончо + .desc = Теплое и удобное пончо, пахнет железом. На внутренней стороне имеется ярлык: smf. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl index ba11c059a1f..6483eb204fe 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl @@ -334,3 +334,6 @@ ent-ADTPosterWorkUnderWay = Ведутся работы! ent-ADTPosterPlasmaMan = Плазма(мены) .desc = Плакат рассказывает о желании плазмаменов работать на станциях NT... вместо новакидов... + +ent-ADTPosterContrabandRoza = Роза + .desc = Символ Атмосии. diff --git a/Resources/Prototypes/ADT/Entities/Clothing/Head/Hats/hats.yml b/Resources/Prototypes/ADT/Entities/Clothing/Head/Hats/hats.yml index e0e74d5ad28..a6b2f88d877 100644 --- a/Resources/Prototypes/ADT/Entities/Clothing/Head/Hats/hats.yml +++ b/Resources/Prototypes/ADT/Entities/Clothing/Head/Hats/hats.yml @@ -711,3 +711,19 @@ sprite: ADT/Clothing/Head/Hats/redji_hat.rsi - type: Clothing sprite: ADT/Clothing/Head/Hats/redji_hat.rsi + +- type: entity + parent: ClothingHeadBase + id: ADTClothingHeadHatBeretBlackCivilian + name: black beret + description: A black beret. + components: + - type: Sprite + sprite: ADT/Clothing/Head/Hats/beret_black.rsi + - type: Clothing + sprite: ADT/Clothing/Head/Hats/beret_black.rsi + - type: Tag + tags: + - ClothMade + - HamsterWearable + - WhitelistChameleon \ No newline at end of file diff --git a/Resources/Prototypes/ADT/Entities/Clothing/OuterClothing/SindiPoncho.yml b/Resources/Prototypes/ADT/Entities/Clothing/OuterClothing/SindiPoncho.yml new file mode 100644 index 00000000000..b3c79a1e625 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Clothing/OuterClothing/SindiPoncho.yml @@ -0,0 +1,12 @@ +- type: entity + parent: ClothingOuterBase + id: ClothingOuterPonchoSindi + name: Sindi poncho + description: Sindicat poncho. + components: + - type: Sprite + sprite: ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi + - type: Clothing + sprite: ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi + - type: AddAccentClothing + accent: SpanishAccent \ No newline at end of file diff --git a/Resources/Prototypes/ADT/Entities/Structures/Wallmount/Signs/posters.yml b/Resources/Prototypes/ADT/Entities/Structures/Wallmount/Signs/posters.yml index 8416fcbe6d7..05fb28b87d4 100644 --- a/Resources/Prototypes/ADT/Entities/Structures/Wallmount/Signs/posters.yml +++ b/Resources/Prototypes/ADT/Entities/Structures/Wallmount/Signs/posters.yml @@ -776,3 +776,14 @@ components: - type: Sprite state: quadro_electronics + +- type: entity + parent: ADTPosterBaseKek + id: ADTPosterContrabandRoza + name: Roza + description: "A face of Atmosia." + components: + - type: Sprite + sprite: ADT/Structures/Wallmounts/128x128posters.rsi + state: roza + scale: 0.25, 0.25 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml index 40be8cf9789..d19c1e56933 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml @@ -23,6 +23,7 @@ ADTClothingBackpackLeatherLadySatchel: 2 # ADT сумки конец ClothingHeadHatBeret: 2 + ADTClothingHeadHatBeretBlackCivilian: 2 # ADT Кастомный чёрный берет ClothingHeadBandBlack: 1 ClothingHeadBandBlue: 1 ClothingHeadBandGreen: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml index d1927d9c777..d3b4cbc5a78 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml @@ -16,6 +16,7 @@ ClothingNeckScarfStripedSyndieRed: 2 ADTClothingNeckSyndicateCloak: 2 ClothingShoesBootsWinterSyndicate: 2 + ClothingOuterPonchoSindi: 3 emaggedInventory: ClothingOuterCoatSyndieCapArmored: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml index 4fb2b3c1007..45bf082545e 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml @@ -63,4 +63,5 @@ ClothingMaskSexyClown: 1 ClothingMaskSexyMime: 1 ClothingHeadHatCowboyBountyHunter: 1 + ClothingOuterPonchoSindi: 2 ClothingHeadHatCatEars: 1 diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index 3605471f81a..8594d1e9489 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -90,7 +90,7 @@ sprite: Objects/Misc/stock_parts.rsi state: advanced_matter_bin discipline: Experimental - tier: 2 + tier: 1 cost: 8500 recipeUnlocks: - CapacitorStockPart diff --git a/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/equipped-HELMET-hamster.png b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/equipped-HELMET-hamster.png new file mode 100644 index 00000000000..b81ca121fcb Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/equipped-HELMET-hamster.png differ diff --git a/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/equipped-HELMET.png b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..b5ca92a69f4 Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/icon.png new file mode 100644 index 00000000000..7cc18cd367e Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/icon.png differ diff --git a/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/inhand-left.png new file mode 100644 index 00000000000..b54cfae4f68 Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/inhand-left.png differ diff --git a/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/inhand-right.png new file mode 100644 index 00000000000..c4ec676c01a Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/inhand-right.png differ diff --git a/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/meta.json new file mode 100644 index 00000000000..2749b26796b --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Head/Hats/beret_black.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, resprite by discord: schrodinger71", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "equipped-HELMET-hamster", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..0f7fd16902e Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/icon.png new file mode 100644 index 00000000000..c04970046b8 Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/icon.png differ diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/inhand-left.png new file mode 100644 index 00000000000..f18c11a966f Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/inhand-left.png differ diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/inhand-right.png new file mode 100644 index 00000000000..ce56ecd719f Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/inhand-right.png differ diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/meta.json new file mode 100644 index 00000000000..e482264df5f --- /dev/null +++ b/Resources/Textures/ADT/Clothing/OuterClothing/Misc/poncho_sindi.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/beam_heal.png b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/beam_heal.png new file mode 100644 index 00000000000..161104c7351 Binary files /dev/null and b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/beam_heal.png differ diff --git a/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/impact_heal.png b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/impact_heal.png new file mode 100644 index 00000000000..f203282d2db Binary files /dev/null and b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/impact_heal.png differ diff --git a/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/meta.json b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/meta.json new file mode 100644 index 00000000000..466a810a8c3 --- /dev/null +++ b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/meta.json @@ -0,0 +1,56 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "not_so_big_chungus для Времени Приключений", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "muzzle_heal", + "delays": [ + [ + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12 + ] + ] + }, + { + "name": "beam_heal", + "delays": [ + [ + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12 + ] + ] + }, + { + "name": "impact_heal", + "delays": [ + [ + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12, + 0.12 + ] + ] + } + ] +} diff --git a/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/muzzle_heal.png b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/muzzle_heal.png new file mode 100644 index 00000000000..40eaac44ccf Binary files /dev/null and b/Resources/Textures/ADT/Objects/Weapons/Guns/Projectiles/medigun_projectiles.rsi/muzzle_heal.png differ diff --git a/Resources/Textures/ADT/Structures/Wallmounts/128x128posters.rsi/meta.json b/Resources/Textures/ADT/Structures/Wallmounts/128x128posters.rsi/meta.json new file mode 100644 index 00000000000..4a07d9a56f2 --- /dev/null +++ b/Resources/Textures/ADT/Structures/Wallmounts/128x128posters.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 128, + "y": 128 + }, + "license": "CC-BY-SA-3.0", + "copyright": "aginimoto, modified by not_so_big_chungus", + "states": [ + { + "name": "roza" + } + ] +} diff --git a/Resources/Textures/ADT/Structures/Wallmounts/128x128posters.rsi/roza.png b/Resources/Textures/ADT/Structures/Wallmounts/128x128posters.rsi/roza.png new file mode 100644 index 00000000000..6c68d9d106c Binary files /dev/null and b/Resources/Textures/ADT/Structures/Wallmounts/128x128posters.rsi/roza.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/equipped-OUTERCLOTHING.png index 3d5710bf1a0..e123bcf8234 100644 Binary files a/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/equipped-OUTERCLOTHING.png and b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/icon.png index ce159e8eda0..67369534009 100644 Binary files a/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/icon.png and b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/icon.png differ