diff --git a/Content.Client/_Wega/Barks/BarkSystem.cs b/Content.Client/_Wega/Barks/BarkSystem.cs
new file mode 100644
index 0000000000..3243d54442
--- /dev/null
+++ b/Content.Client/_Wega/Barks/BarkSystem.cs
@@ -0,0 +1,104 @@
+using Content.Client.Audio;
+using Content.Shared.CCVar;
+using Content.Shared.Chat;
+using Content.Shared.Speech.Synthesis;
+using Robust.Client.Audio;
+using Robust.Client.ResourceManagement;
+using Robust.Client.Player;
+using Robust.Shared.Audio;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Configuration;
+using Robust.Shared.Timing;
+using Robust.Shared.Utility;
+using Content.Shared.SoundInsolation;
+
+namespace Content.Client.Speech.Synthesis.System;
+
+///
+/// Система отвечающая за прогрышь звука для каждого калиента
+///
+public sealed class BarkSystem : EntitySystem
+{
+ [Dependency] private readonly AudioSystem _audio = default!;
+ [Dependency] private readonly IConfigurationManager _cfg = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+ [Dependency] private readonly IPlayerManager _player = default!;
+ [Dependency] private readonly SoundInsulationSystem _soundInsulation = default!;
+
+ private const float MinimalVolume = -10f;
+ private const float WhisperFade = 4f;
+
+ public override void Initialize()
+ {
+ SubscribeNetworkEvent(OnPlayBark);
+ }
+
+ public void RequestPreviewBark(string barkVoiceId)
+ {
+ RaiseNetworkEvent(new RequestPreviewBarkEvent(barkVoiceId));
+ }
+
+ private void OnPlayBark(PlayBarkEvent ev)
+ {
+ var sourceEntity = _entityManager.GetEntity(ev.SourceUid);
+ if (!_entityManager.EntityExists(sourceEntity) || _entityManager.Deleted(sourceEntity) || !HasComp(sourceEntity))
+ return;
+
+ float volumeMultiplier = 1f;
+ if (_player.LocalEntity != null && HasComp(_player.LocalEntity.Value))
+ {
+ var sourceTransform = Transform(sourceEntity);
+ var playerTransform = Transform(_player.LocalEntity.Value);
+
+ if (sourceTransform.Coordinates.TryDistance(EntityManager, playerTransform.Coordinates, out var distance) &&
+ distance > SharedChatSystem.VoiceRange)
+ return;
+
+ var insulation = _soundInsulation.GetSoundInsulation(sourceEntity, _player.LocalEntity.Value);
+ if (insulation >= 0.95f)
+ return;
+
+ if (insulation > 0.1f && insulation < 0.95f)
+ {
+ volumeMultiplier = 1f - MathHelper.Lerp(0.1f, 0.9f, insulation);
+ volumeMultiplier = Math.Clamp(volumeMultiplier, 0.1f, 0.9f);
+ }
+ }
+
+ var userVolume = _cfg.GetCVar(WegaCVars.BarksVolume);
+ var baseVolume = SharedAudioSystem.GainToVolume(userVolume * ContentAudioSystem.BarksMultiplier);
+
+ float volume = MinimalVolume + baseVolume * volumeMultiplier;
+ if (ev.Obfuscated)
+ volume -= WhisperFade;
+
+ var audioParams = new AudioParams
+ {
+ Volume = volume,
+ Variation = 0.125f
+ };
+
+ int messageLength = ev.Message.Length;
+ float totalDuration = messageLength * 0.05f;
+ float soundInterval = 0.15f / ev.PlaybackSpeed;
+
+ int soundCount = (int)(totalDuration / soundInterval);
+ soundCount = Math.Max(soundCount, 1);
+
+ var audioResource = new AudioResource();
+ audioResource.Load(IoCManager.Instance!, new ResPath(ev.SoundPath));
+
+ var soundSpecifier = new ResolvedPathSpecifier(ev.SoundPath);
+
+ for (int i = 0; i < soundCount; i++)
+ {
+ Timer.Spawn(TimeSpan.FromSeconds(i * soundInterval), () =>
+ {
+ if (!_entityManager.EntityExists(sourceEntity) || _entityManager.Deleted(sourceEntity))
+ return;
+
+ _audio.PlayEntity(audioResource.AudioStream, sourceEntity, soundSpecifier, audioParams);
+ });
+ }
+ }
+}
diff --git a/Content.Client/_Wega/Barks/HumanoidProfileEditor.Barks.cs b/Content.Client/_Wega/Barks/HumanoidProfileEditor.Barks.cs
new file mode 100644
index 0000000000..70a15e9846
--- /dev/null
+++ b/Content.Client/_Wega/Barks/HumanoidProfileEditor.Barks.cs
@@ -0,0 +1,63 @@
+using System.Linq;
+using Content.Client.Lobby;
+using Content.Shared.Speech.Synthesis;
+using Content.Client.Speech.Synthesis.System;
+
+namespace Content.Client.Lobby.UI;
+
+public sealed partial class HumanoidProfileEditor
+{
+ private List _barkVoiceList = new();
+
+ private void InitializeBarkVoice()
+ {
+ _barkVoiceList = _prototypeManager
+ .EnumeratePrototypes()
+ .Where(o => o.RoundStart)
+ .OrderBy(o => Loc.GetString(o.Name))
+ .ToList();
+
+ BarkVoiceButton.OnItemSelected += args =>
+ {
+ BarkVoiceButton.SelectId(args.Id);
+ SetBarkVoice(_barkVoiceList[args.Id].ID);
+ };
+
+ BarkVoicePlayButton.OnPressed += _ => PlayPreviewBark();
+ }
+
+ private void UpdateBarkVoicesControls()
+ {
+ if (Profile is null)
+ return;
+
+ BarkVoiceButton.Clear();
+
+ var firstVoiceChoiceId = 1;
+ for (var i = 0; i < _barkVoiceList.Count; i++)
+ {
+ var voice = _barkVoiceList[i];
+
+ var name = Loc.GetString(voice.Name);
+ BarkVoiceButton.AddItem(name, i);
+
+ if (firstVoiceChoiceId == 1)
+ firstVoiceChoiceId = i;
+ }
+
+ var voiceChoiceId = _barkVoiceList.FindIndex(x => x.ID == Profile.BarkVoice);
+ if (!BarkVoiceButton.TrySelectId(voiceChoiceId) &&
+ BarkVoiceButton.TrySelectId(firstVoiceChoiceId))
+ {
+ SetBarkVoice(_barkVoiceList[firstVoiceChoiceId].ID);
+ }
+ }
+
+ private void PlayPreviewBark()
+ {
+ if (Profile is null)
+ return;
+
+ _entManager.System().RequestPreviewBark(Profile.BarkVoice);
+ }
+}
diff --git a/Content.Client/_Wega/Ghost/GhostRespawnSystem.cs b/Content.Client/_Wega/Ghost/GhostRespawnSystem.cs
new file mode 100644
index 0000000000..07cd403da4
--- /dev/null
+++ b/Content.Client/_Wega/Ghost/GhostRespawnSystem.cs
@@ -0,0 +1,20 @@
+using Content.Shared.Wega.Ghost.Respawn;
+
+namespace Content.Client.Wega.Ghost.Respawn;
+
+public sealed class GhostRespawnSystem : EntitySystem
+{
+ public TimeSpan? GhostRespawnTime { get; private set; }
+ public event Action? GhostRespawn;
+
+ public override void Initialize()
+ {
+ SubscribeNetworkEvent(OnGhostRespawnReset);
+ }
+
+ private void OnGhostRespawnReset(GhostRespawnEvent e)
+ {
+ GhostRespawnTime = e.Time;
+ GhostRespawn?.Invoke();
+ }
+}
diff --git a/Content.Server/_WL/AddHeightItem/AddHeightItemComponent.cs b/Content.Server/_WL/AddHeightItem/AddHeightItemComponent.cs
new file mode 100644
index 0000000000..c10d6afee1
--- /dev/null
+++ b/Content.Server/_WL/AddHeightItem/AddHeightItemComponent.cs
@@ -0,0 +1,7 @@
+namespace Content.Server._WL.AddHeightItem;
+
+[RegisterComponent]
+public sealed partial class AddHeightItemComponent : Component
+{
+
+}
diff --git a/Content.Server/_WL/AddHeightItem/AddHeightItemSystem.cs b/Content.Server/_WL/AddHeightItem/AddHeightItemSystem.cs
new file mode 100644
index 0000000000..ddf4dea56a
--- /dev/null
+++ b/Content.Server/_WL/AddHeightItem/AddHeightItemSystem.cs
@@ -0,0 +1,43 @@
+using Content.Server.Resist;
+using Content.Shared.Humanoid;
+using Content.Shared.Item;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server._WL.AddHeightItem
+{
+ public sealed partial class AddHeightItemSystem : EntitySystem
+ {
+ [Dependency] private readonly SharedItemSystem _item = default!;
+ [Dependency] private readonly IPrototypeManager _proto = default!;
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnADHI);
+ }
+ ///
+ /// Add item component depending on height
+ ///
+ private void OnADHI(EntityUid uid, AddHeightItemComponent com, ComponentInit args)
+ {
+ if (!TryComp(uid, out var humanoid))
+ return;
+
+ if (!_proto.TryIndex(humanoid.Species, out var speciesProto))
+ return;
+
+ if (speciesProto.MaxItemHeight >= humanoid.Height)
+ {
+ var size1 = "Ginormous";
+
+ var item = EnsureComp(uid);
+ _item.SetSize(uid, size1, item);
+
+ EnsureComp(uid);
+
+ var escape = EnsureComp(uid);
+ escape.BaseResistTime = 1f;
+ }
+ }
+ }
+}
diff --git a/Content.Server/_WL/Administration/Commands/DayNightCommand.cs b/Content.Server/_WL/Administration/Commands/DayNightCommand.cs
new file mode 100644
index 0000000000..11379249f7
--- /dev/null
+++ b/Content.Server/_WL/Administration/Commands/DayNightCommand.cs
@@ -0,0 +1,127 @@
+using Content.Server._WL.DayNight;
+using Content.Server.Administration;
+using Content.Shared.Administration;
+using Robust.Server.GameObjects;
+using Robust.Shared.Console;
+using Robust.Shared.Map;
+using System.Linq;
+using System.Numerics;
+
+namespace Content.Server._WL.Administration.Commands
+{
+ [AdminCommand(AdminFlags.Mapping)]
+ public sealed partial class DayNightCommand : LocalizedCommands
+ {
+ [Dependency] private readonly IEntityManager _entMan = default!;
+ [Dependency] private readonly IMapManager _mapMan = default!;
+
+ public override string Command => "daynight";
+ public override string Description
+ =>
+ """
+ Добавляет карте смену дня и ночи.
+ Желательно, чтоб это была планета.
+ Также желательно, чтобы эта команда использовалась только с неинициализированными картами.
+ """;
+
+ public override string Help => "daynight ";
+
+ public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
+ {
+ if (args.Length == 1)
+ {
+ return CompletionResult.FromHintOptions(_mapMan.GetAllMapIds().Select(x => x.ToString()), "MapId");
+ }
+ else if (args.Length == 2)
+ {
+ return CompletionResult.FromHint("FullCycle in seconds");
+ }
+ else if (args.Length == 3)
+ {
+ return CompletionResult.FromHint("Day ratio an integer");
+ }
+ else if (args.Length == 4)
+ {
+ return CompletionResult.FromHint("Night ration an integer");
+ }
+ else if (args.Length == 5)
+ {
+ return CompletionResult.FromHint("Day Hex");
+ }
+ else if (args.Length == 6)
+ {
+ return CompletionResult.FromHint("Night Hex");
+ }
+
+ return CompletionResult.Empty;
+ }
+
+ public override void Execute(IConsoleShell shell, string argStr, string[] args)
+ {
+ if (args.Length != 6 && args.Length != 4)
+ {
+ shell.WriteError(LocalizationManager.GetString("shell-wrong-arguments-number"));
+ return;
+ }
+
+ var mapSys = _entMan.System();
+
+ if (!int.TryParse(args[0], out var mapIntegerId))
+ {
+ shell.WriteError("MapId должно быть числом!");
+ return;
+ }
+
+ var mapId = new MapId(mapIntegerId);
+
+ if (!mapSys.MapExists(mapId))
+ {
+ shell.WriteError($"Карты с ID равнм {mapIntegerId} не существует!");
+ return;
+ }
+
+ if (!int.TryParse(args[1], out var fullCycleTime) || fullCycleTime <= 0)
+ {
+ shell.WriteError("fullCycleTime должен представлять целое число большее нуля!");
+ return;
+ }
+
+ if (!int.TryParse(args[2], out var dayRatio) || dayRatio <= 0)
+ {
+ shell.WriteError("dayRatio должен представлять целое число большее нуля!");
+ return;
+ }
+
+ if (!int.TryParse(args[3], out var nightRatio) || nightRatio <= 0)
+ {
+ shell.WriteError("nightRatio должен представлять целое число большее нуля!");
+ return;
+ }
+
+ if (!mapSys.TryGetMap(mapId, out var mapUid) || mapUid == null)
+ {
+ shell.WriteError("Неизвестная ошибка.");
+ return;
+ }
+
+ var dayNnightComp = _entMan.EnsureComponent(mapUid.Value);
+
+ dayNnightComp.DayNightRatio = new Vector2(dayRatio, nightRatio);
+ dayNnightComp.FullCycle = TimeSpan.FromSeconds(fullCycleTime);
+
+ if (args.Length != 6)
+ return;
+
+ var dayColor = Color.TryFromHex(args[4]);
+ var nightColor = Color.TryFromHex(args[5]);
+ if (dayColor != null)
+ {
+ dayNnightComp.DayHex = args[4];
+ }
+ if (nightColor != null)
+ {
+ dayNnightComp.NightHex = args[5];
+ }
+ }
+ }
+}
diff --git a/Content.Server/_WL/DayNight/DayNightComponent.cs b/Content.Server/_WL/DayNight/DayNightComponent.cs
new file mode 100644
index 0000000000..40492c87bc
--- /dev/null
+++ b/Content.Server/_WL/DayNight/DayNightComponent.cs
@@ -0,0 +1,30 @@
+using System.Numerics;
+
+namespace Content.Server._WL.DayNight
+{
+ [RegisterComponent]
+ public sealed partial class DayNightComponent : Component
+ {
+ [ViewVariables(VVAccess.ReadOnly)]
+ [DataField]
+ public TimeSpan FullCycle = TimeSpan.FromSeconds(1200);
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ [DataField("ratio")]
+ public Vector2 DayNightRatio = new(6, 4);
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ [DataField("day")]
+ public string DayHex = "#F7CA68FF";
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ [DataField("night")]
+ public string NightHex = "#0f1026";
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ public bool WasInit = false;
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ public TimeSpan NextCycle;
+ }
+}
diff --git a/Content.Server/_WL/DayNight/DayNightSystem.cs b/Content.Server/_WL/DayNight/DayNightSystem.cs
new file mode 100644
index 0000000000..61fa54d358
--- /dev/null
+++ b/Content.Server/_WL/DayNight/DayNightSystem.cs
@@ -0,0 +1,97 @@
+using Robust.Server.GameObjects;
+using Robust.Shared.Map.Components;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Timing;
+using System.Linq;
+using System.Numerics;
+
+namespace Content.Server._WL.DayNight
+{
+ public sealed partial class DayNightSystem : EntitySystem
+ {
+ [Dependency] private readonly IGameTiming _gameTime = default!;
+ [Dependency] private readonly IPrototypeManager _protoMan = default!;
+ [Dependency] private readonly MapSystem _mapSys = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnMapInit, after: [typeof(SharedMapSystem)]);
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out var map, out var dayNightComp))
+ {
+ if (!TryComp(map, out var mapLightComp))
+ continue;
+
+ if (!TryComp(map, out var mapComponent))
+ continue;
+
+ if (!dayNightComp.WasInit || mapComponent.MapPaused)
+ continue;
+
+ if (_gameTime.CurTime >= dayNightComp.NextCycle)
+ dayNightComp.NextCycle += dayNightComp.FullCycle;
+
+ var color = CalculateColor(
+ _gameTime.CurTime,
+ dayNightComp.FullCycle,
+ dayNightComp.NextCycle,
+ Color.FromHex(dayNightComp.DayHex),
+ Color.FromHex(dayNightComp.NightHex),
+ dayNightComp.DayNightRatio);
+
+ if (color == mapLightComp.AmbientLightColor) //Оптимизация для случаев, если цикл дня и ночи огромен.
+ continue;
+
+ _mapSys.SetAmbientLight(mapComponent.MapId, color);
+ }
+ }
+
+ private void OnMapInit(EntityUid station, DayNightComponent comp, MapInitEvent args)
+ {
+ if (!TryComp(station, out var mapComponent))
+ return;
+
+ _mapSys.SetAmbientLight(mapComponent.MapId, Color.FromHex(comp.DayHex));
+ comp.NextCycle = _gameTime.CurTime + comp.FullCycle;
+ comp.WasInit = true;
+ }
+
+ public static Color CalculateColor(TimeSpan currentTime, TimeSpan fullCycle, TimeSpan nextCycle, Color dayColor, Color nightColor, Vector2 dayNightRatio)
+ {
+ currentTime = currentTime - (nextCycle - fullCycle);
+
+ var pair = dayNightRatio.X + dayNightRatio.Y;
+
+ var dayTime = fullCycle.TotalMinutes / pair * dayNightRatio.X;
+ var nightTime = fullCycle.TotalMinutes / pair * dayNightRatio.Y;
+
+ var isDay = currentTime.TotalMinutes <= dayTime;
+
+ var filledPercentage = isDay
+ ? currentTime.TotalMinutes / dayTime
+ : (currentTime.TotalMinutes - dayTime) / nightTime;
+
+ var r = isDay
+ ? dayColor.R + (nightColor.R - dayColor.R) * filledPercentage
+ : nightColor.R + (dayColor.R - nightColor.R) * filledPercentage;
+ var g = isDay
+ ? dayColor.G + (nightColor.G - dayColor.G) * filledPercentage
+ : nightColor.G + (dayColor.G - nightColor.G) * filledPercentage;
+ var b = isDay
+ ? dayColor.B + (nightColor.B - dayColor.B) * filledPercentage
+ : nightColor.B + (dayColor.B - nightColor.B) * filledPercentage;
+
+ var result = new Color((float) r, (float) g, (float) b);
+
+ return result;
+ }
+ }
+}
diff --git a/Content.Server/_WL/Destructible/Components/FrozenComponent.cs b/Content.Server/_WL/Destructible/Components/FrozenComponent.cs
new file mode 100644
index 0000000000..a6a3baad93
--- /dev/null
+++ b/Content.Server/_WL/Destructible/Components/FrozenComponent.cs
@@ -0,0 +1,19 @@
+using Content.Shared.Damage.Prototypes;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server._WL.Destructible.Components
+{
+ [RegisterComponent]
+ public sealed partial class FrozenComponent : Component
+ {
+ [DataField] public LocId FrozenPrefix = "frozen-entity-prefix";
+
+ [DataField] public LocId FrozenPopup = "frozen-entity-popup";
+ [DataField] public LocId FrozenHealthString = "frozen-entity-health-string";
+
+ [DataField] public string BaseName;
+ [DataField] public Color BaseSkinColor;
+
+ [DataField] public ProtoId FrozenDamage = "Cold";
+ }
+}
diff --git a/Content.Server/_WL/Destructible/Systems/FrozenSystem.cs b/Content.Server/_WL/Destructible/Systems/FrozenSystem.cs
new file mode 100644
index 0000000000..ba42dcaa31
--- /dev/null
+++ b/Content.Server/_WL/Destructible/Systems/FrozenSystem.cs
@@ -0,0 +1,62 @@
+using Content.Server._WL.Destructible.Components;
+using Content.Server.Humanoid;
+using Content.Shared.Cloning;
+using Content.Shared.Cloning.Events;
+using Content.Shared.Damage;
+using Content.Shared.Damage.Events;
+using Content.Shared.Damage.Systems;
+using Content.Shared.HealthExaminable;
+using Content.Shared.NameModifier.EntitySystems;
+using Content.Shared.Rejuvenate;
+
+namespace Content.Server._WL.Destructible.Systems
+{
+ public sealed partial class FrozenSystem : EntitySystem
+ {
+ [Dependency] private readonly MetaDataSystem _metaData = default!;
+ [Dependency] private readonly HumanoidAppearanceSystem _appearance = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnRefreshName);
+ SubscribeLocalEvent(BeforeDamageChanged);
+ SubscribeLocalEvent(OnClone);
+ SubscribeLocalEvent(OnHealthExamine);
+ SubscribeLocalEvent(OnRejuvenate);
+ }
+
+ private void OnRefreshName(EntityUid ent, FrozenComponent comp, RefreshNameModifiersEvent args)
+ {
+ args.AddModifier(comp.FrozenPrefix);
+ args.AddModifier(comp.BaseName, int.MinValue);
+ }
+
+ private void BeforeDamageChanged(EntityUid ent, FrozenComponent comp, ref BeforeDamageChangedEvent args)
+ {
+ args.Damage.DamageDict[comp.FrozenDamage.Id] = 0f;
+ args.Damage.TrimZeros();
+ }
+
+ private void OnClone(EntityUid ent, FrozenComponent comp, ref CloningEvent args)
+ {
+ var target = args.CloneUid;
+ _metaData.SetEntityName(target, comp.BaseName, raiseEvents: true);
+ _appearance.SetSkinColor(target, comp.BaseSkinColor);
+ }
+
+ private void OnHealthExamine(EntityUid ent, FrozenComponent comp, HealthBeingExaminedEvent args)
+ {
+ args.Message.AddMarkupOrThrow("\n" + Loc.GetString(comp.FrozenHealthString));
+ }
+
+ private void OnRejuvenate(EntityUid ent, FrozenComponent comp, RejuvenateEvent args)
+ {
+ _metaData.SetEntityName(ent, comp.BaseName, raiseEvents: true);
+ _appearance.SetSkinColor(ent, comp.BaseSkinColor);
+
+ RemComp(ent);
+ }
+ }
+}
diff --git a/Content.Server/_WL/Destructible/Thresholds/Behaviors/FrozeBodyBehavior.cs b/Content.Server/_WL/Destructible/Thresholds/Behaviors/FrozeBodyBehavior.cs
new file mode 100644
index 0000000000..3401ebce12
--- /dev/null
+++ b/Content.Server/_WL/Destructible/Thresholds/Behaviors/FrozeBodyBehavior.cs
@@ -0,0 +1,81 @@
+using Content.Server._WL.Destructible.Components;
+using Content.Server.Destructible;
+using Content.Server.Destructible.Thresholds.Behaviors;
+using Content.Server.Humanoid;
+using Content.Shared.Atmos.Rotting;
+using Content.Shared.Chemistry.Components.SolutionManager;
+using Content.Shared.Humanoid;
+using Content.Shared.IdentityManagement;
+using Content.Shared.NameModifier.Components;
+using Content.Shared.NameModifier.EntitySystems;
+using Content.Shared.Popups;
+using JetBrains.Annotations;
+using Robust.Server.GameObjects;
+using Robust.Shared.Enums;
+
+namespace Content.Server._WL.Destructible.Thresholds.Behaviors
+{
+ [UsedImplicitly]
+ [DataDefinition]
+ public sealed partial class FrozeBodyBehavior : IThresholdBehavior
+ {
+ public const float InterpolateStrength = 0.88f;
+ public static readonly Color InterpolateColor = Color.CadetBlue;
+
+ public void Execute(EntityUid bodyId, DestructibleSystem system, EntityUid? cause = null)
+ {
+ var entMan = system.EntityManager;
+ var humanoidAppearanceSys = entMan.System();
+ var transformSys = entMan.System();
+ var popupSys = entMan.System();
+ var metaDataSys = entMan.System();
+
+ var frozenComp = entMan.EnsureComponent(bodyId);
+
+ //Обновляем цвет кожи
+ if (!entMan.TryGetComponent(bodyId, out var humanoidAppearnceComp))
+ return;
+
+ var curColor = humanoidAppearnceComp.SkinColor;
+ frozenComp.BaseSkinColor = curColor;
+
+ humanoidAppearanceSys.SetSkinColor(
+ bodyId,
+ Color.InterpolateBetween(curColor, InterpolateColor, InterpolateStrength),
+ sync: true,
+ verify: false
+ );
+
+ //Устанавливаем префикс
+ var baseName = Identity.Name(bodyId, entMan);
+ frozenComp.BaseName = baseName;
+
+ var genderString = humanoidAppearnceComp.Gender switch
+ {
+ Gender.Male => "male",
+ Gender.Female => "female",
+ _ => "other"
+ };
+
+ var newName = $"{Loc.GetString(frozenComp.FrozenPrefix, ("gender", genderString))} {baseName}";
+
+ metaDataSys.SetEntityName(bodyId, newName);
+
+ //Запрещаем хил тела и разрешаем клонирование, убрав компонент гниения
+ entMan.RemoveComponent(bodyId);
+ entMan.RemoveComponent(bodyId);
+
+ //Поп-ап
+ var msg = Loc.GetString(frozenComp.FrozenPopup,
+ ("name", baseName),
+ ("gender", genderString));
+
+ popupSys.PopupCoordinates(
+ msg,
+ transformSys.GetMoverCoordinates(bodyId),
+ Robust.Shared.Player.Filter.Pvs(bodyId),
+ true,
+ PopupType.LargeCaution);
+ }
+ }
+}
diff --git a/Content.Server/_WL/Nutrition/Components/GolemHeatComponent.cs b/Content.Server/_WL/Nutrition/Components/GolemHeatComponent.cs
new file mode 100644
index 0000000000..e4df6d8ac4
--- /dev/null
+++ b/Content.Server/_WL/Nutrition/Components/GolemHeatComponent.cs
@@ -0,0 +1,6 @@
+namespace Content.Server._WL.Nutrition.Components;
+[RegisterComponent]
+public sealed partial class GolemHeatComponent : Component
+{
+
+}
diff --git a/Content.Server/_WL/Nutrition/Components/SuckableFoodComponent.cs b/Content.Server/_WL/Nutrition/Components/SuckableFoodComponent.cs
new file mode 100644
index 0000000000..36b58eb069
--- /dev/null
+++ b/Content.Server/_WL/Nutrition/Components/SuckableFoodComponent.cs
@@ -0,0 +1,39 @@
+using Content.Server._WL.Nutrition.Systems;
+using Content.Shared.Clothing.Components;
+using Content.Shared.FixedPoint;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server._WL.Nutrition.Components;
+
+[RegisterComponent]
+public sealed partial class SuckableFoodComponent : Component
+{
+ [DataField]
+ public string Solution { get; set; } = "food";
+
+ ///
+ /// Количество поглощаемой из контейнера жидкости в секунду.
+ ///
+ [DataField]
+ public FixedPoint2 DissolveAmount { get; set; } = FixedPoint2.New(0.05f);
+
+ ///
+ /// Не указывайте сущности в прототипе, у которых есть , иначе будет runtime-ошибочка.
+ ///
+ [DataField("entityOnDissolve")]
+ public EntProtoId? EquippedEntityOnDissolve { get; set; }
+
+ [DataField]
+ public ComponentRegistry? ComponentsOverride { get; set; }
+
+ [DataField]
+ public bool CanSuck { get; set; } = true;
+
+ [DataField]
+ public bool DeleteOnEmpty { get; set; } = true;
+
+ public bool IsSucking => SuckingEntity != null && CanSuck;
+
+ [Access(typeof(SuckableFoodSystem))]
+ public EntityUid? SuckingEntity;
+}
diff --git a/Content.Server/_WL/Nutrition/Events/SuckableFoodDissolvedEvent.cs b/Content.Server/_WL/Nutrition/Events/SuckableFoodDissolvedEvent.cs
new file mode 100644
index 0000000000..1e02888c7a
--- /dev/null
+++ b/Content.Server/_WL/Nutrition/Events/SuckableFoodDissolvedEvent.cs
@@ -0,0 +1,19 @@
+using Content.Server._WL.Nutrition.Components;
+using Robust.Shared.Containers;
+
+namespace Content.Server._WL.Nutrition.Events;
+
+public sealed partial class SuckableFoodDissolvedEvent : EntityEventArgs
+{
+ public Entity Suckable { get; }
+ public BaseContainer Container { get; }
+
+ public EntityUid Sucker { get; }
+
+ public SuckableFoodDissolvedEvent(Entity suckable, BaseContainer container, EntityUid sucker)
+ {
+ Suckable = suckable;
+ Container = container;
+ Sucker = sucker;
+ }
+}
diff --git a/Content.Server/_WL/Nutrition/Systems/GolemHeatSystem.cs b/Content.Server/_WL/Nutrition/Systems/GolemHeatSystem.cs
new file mode 100644
index 0000000000..906905c320
--- /dev/null
+++ b/Content.Server/_WL/Nutrition/Systems/GolemHeatSystem.cs
@@ -0,0 +1,57 @@
+using Content.Server._WL.Nutrition.Components;
+using Content.Server.Temperature.Components;
+using Content.Server.Temperature.Systems;
+using Content.Shared.Body.Systems;
+using Content.Shared.Temperature.Components;
+using Content.Shared.Movement.Components;
+using Content.Shared.Movement.Systems;
+using Content.Shared.Nutrition.Components;
+using JetBrains.Annotations;
+
+namespace Content.Server._WL.Nutrition.Systems;
+
+[UsedImplicitly]
+public sealed class GolemHeatSystem : EntitySystem
+{
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+ [Dependency] private readonly IEntitySystemManager _systemManager = default!;
+ [Dependency] private readonly MovementSpeedModifierSystem _movement = default!;
+ [Dependency] private readonly SharedBodySystem _bodySystem = default!;
+
+ private const int HeatChangeAmount = 4000;
+ private const float SprintSpeed = 3.24f;
+ private const float WalkSpeed = 1.8f;
+ private const int Acceleration = 20;
+
+ private void ChangeGolemHeat(EntityUid uid)
+ {
+ if (!_entityManager.TryGetComponent(uid, out HungerComponent? hungerComponent))
+ return;
+
+ if (hungerComponent.CurrentThreshold != HungerThreshold.Overfed)
+ {
+ _bodySystem.UpdateMovementSpeed(uid);
+ return;
+ }
+
+ if (!TryComp(uid, out TemperatureComponent? temperatureComponent))
+ return;
+
+ var temperatureSystem = _systemManager.GetEntitySystem();
+ temperatureSystem.ChangeHeat(uid, HeatChangeAmount, true, temperatureComponent);
+
+ var movementSpeed = EnsureComp(uid);
+ _movement.ChangeBaseSpeed(uid, WalkSpeed, SprintSpeed, Acceleration, movementSpeed);
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out var uid, out var comp))
+ {
+ ChangeGolemHeat(uid);
+ }
+ }
+}
diff --git a/Content.Server/_WL/Nutrition/Systems/SuckableFoodSystem.cs b/Content.Server/_WL/Nutrition/Systems/SuckableFoodSystem.cs
new file mode 100644
index 0000000000..cfe49d37ee
--- /dev/null
+++ b/Content.Server/_WL/Nutrition/Systems/SuckableFoodSystem.cs
@@ -0,0 +1,189 @@
+using Content.Server._WL.Nutrition.Components;
+using Content.Server._WL.Nutrition.Events;
+using Content.Server.Body.Systems;
+using Content.Server.Chemistry.Containers.EntitySystems;
+using Content.Server.Forensics;
+using Content.Server.Popups;
+using Content.Shared.Body.Components;
+using Content.Shared.Chemistry;
+using Content.Shared.Chemistry.Components;
+using Content.Shared.Chemistry.Components.SolutionManager;
+using Content.Shared.Chemistry.EntitySystems;
+using Content.Shared.FixedPoint;
+using Content.Shared.IdentityManagement;
+using Content.Shared.Inventory;
+using Content.Shared.Inventory.Events;
+using Content.Shared.Mobs.Systems;
+using Content.Shared.Nutrition.EntitySystems;
+using Content.Shared.Prototypes;
+using Robust.Server.Containers;
+using Robust.Shared.Player;
+using Robust.Shared.Prototypes;
+using System.Diagnostics.CodeAnalysis;
+
+namespace Content.Server._WL.Nutrition.Systems;
+
+public sealed partial class SuckableFoodSystem : EntitySystem
+{
+ [Dependency] private readonly ReactiveSystem _reactiveSystem = default!;
+ [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
+ [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!;
+ [Dependency] private readonly InventorySystem _inventory = default!;
+ [Dependency] private readonly ContainerSystem _container = default!;
+ [Dependency] private readonly ForensicsSystem _forensics = default!;
+ [Dependency] private readonly MobStateSystem _mobState = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly IPrototypeManager _protoMan = default!;
+ [Dependency] private readonly IComponentFactory _componentFactory = default!;
+ [Dependency] private readonly FlavorProfileSystem _flavor = default!;
+
+ private const float UpdatePeriod = 2f; // in seconds
+ private float _updateTimer = 0f;
+
+ private static readonly LocId PutInMouthLoc = "food-sweets-put-in-mouth-popup-message";
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnEquip);
+ SubscribeLocalEvent(ResetSucker);
+
+ SubscribeLocalEvent(ResetSucker);
+
+ SubscribeLocalEvent(OnDissolved);
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ _updateTimer += frameTime;
+
+ var isNewLoop = _updateTimer >= UpdatePeriod;
+
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out var food, out var suckableComp, out var solContainerManComp))
+ {
+ if (!Exists(suckableComp.SuckingEntity))
+ {
+ suckableComp.SuckingEntity = null;
+ continue;
+ }
+
+ if (isNewLoop)
+ {
+ var sucker = suckableComp.SuckingEntity.Value;
+
+ if (!TryComp(sucker, out var bloodstreamComp))
+ continue;
+
+ suckableComp.CanSuck = _mobState.IsAlive(sucker); // TODO: вынести в отдельное событие
+ if (!suckableComp.IsSucking)
+ continue;
+
+ if (!EnsureSolutionEntity((food, suckableComp, solContainerManComp), out var solutionEntity, out var solution))
+ continue;
+
+ var dissolvedSol = _solutionContainerSystem.SplitSolution(solutionEntity.Value, suckableComp.DissolveAmount * UpdatePeriod);
+
+ if (solution.Volume == FixedPoint2.Zero)
+ {
+ if (_container.TryGetContainingContainer(food, out var container))
+ {
+ var ev = new SuckableFoodDissolvedEvent((food, suckableComp), container, sucker);
+
+ RaiseLocalEvent(food, ev);
+ RaiseLocalEvent(ev);
+ }
+
+ continue;
+ }
+
+ _reactiveSystem.DoEntityReaction(sucker, dissolvedSol, ReactionMethod.Ingestion);
+ _bloodstreamSystem.TryAddToChemicals((sucker, bloodstreamComp), dissolvedSol);
+ }
+ }
+
+ if (isNewLoop)
+ _updateTimer -= UpdatePeriod;
+ }
+
+ public void SetState(Entity foodEnt, EntityUid? sucker)
+ {
+ var (food, comp) = foodEnt;
+
+ comp.SuckingEntity = sucker;
+ }
+
+ public bool EnsureSolutionEntity(
+ Entity foodEnt,
+ [NotNullWhen(true)] out Entity? solEnt,
+ [NotNullWhen(true)] out Solution? solution)
+ {
+ solEnt = null;
+ solution = null;
+
+ if (!Resolve(foodEnt, ref foodEnt.Comp2, false))
+ return false;
+
+ if (!_solutionContainerSystem.EnsureSolutionEntity((foodEnt, foodEnt.Comp2), foodEnt.Comp1.Solution, out var ent))
+ return false;
+
+ solEnt = ent;
+ solution = ent.Value.Comp.Solution;
+
+ return true;
+ }
+
+ private void OnEquip(EntityUid food, SuckableFoodComponent comp, GotEquippedEvent ev)
+ {
+ if (ev.SlotFlags.HasFlag(SlotFlags.MASK))
+ _forensics.TransferDna(food, ev.Equipee);
+
+ SetState((food, comp), ev.Equipee);
+
+ if (!EnsureSolutionEntity((food, comp), out _, out var sol))
+ return;
+
+ var flavor = _flavor.GetLocalizedFlavorsMessage(food, ev.Equipee, sol);
+ if (string.IsNullOrEmpty(flavor))
+ return;
+
+ var msg = Loc.GetString(PutInMouthLoc, ("flavor", flavor), ("entity", Identity.Name(food, EntityManager, ev.Equipee)));
+
+ _popup.PopupEntity(msg, ev.Equipee, Filter.Entities(ev.Equipee), false);
+ }
+
+ private void ResetSucker(EntityUid food, SuckableFoodComponent comp, T ev)
+ {
+ SetState((food, comp), null);
+ }
+
+
+ private void OnDissolved(EntityUid food, SuckableFoodComponent comp, SuckableFoodDissolvedEvent ev)
+ {
+ if (comp.DeleteOnEmpty)
+ {
+ _inventory.TryUnequip(ev.Sucker, ev.Container.ID, true, true);
+
+ var msg = Loc.GetString("food-sweets-got-dissolved-popup-message", ("entity", Identity.Name(food, EntityManager)));
+ _popup.PopupEntity(msg, ev.Sucker, Filter.Entities(ev.Sucker), true, Shared.Popups.PopupType.Medium);
+
+ TryQueueDel(food);
+ }
+
+ if (comp.EquippedEntityOnDissolve != null)
+ {
+ if (_protoMan.TryIndex(comp.EquippedEntityOnDissolve.Value, out var proto)
+ && proto.HasComponent(_componentFactory))
+ {
+ Log.Error($"EquippedEntityOnDissolve {comp.EquippedEntityOnDissolve.Value} on entity {ToPrettyString(food)} has {nameof(SuckableFoodComponent)}!");
+ return;
+ }
+
+ var ent = SpawnNextToOrDrop(comp.EquippedEntityOnDissolve.Value, ev.Sucker, overrides: comp.ComponentsOverride);
+ _inventory.TryEquip(ev.Sucker, ent, ev.Container.ID, true);
+ }
+ }
+}
diff --git a/Content.Server/_Wega/Barks/BarkSystem.cs b/Content.Server/_Wega/Barks/BarkSystem.cs
new file mode 100644
index 0000000000..e7aeb67f2d
--- /dev/null
+++ b/Content.Server/_Wega/Barks/BarkSystem.cs
@@ -0,0 +1,60 @@
+using Content.Shared.CCVar;
+using Content.Shared.Speech.Synthesis;
+using Content.Shared.Speech.Synthesis.Components;
+using Robust.Server.Audio;
+using Robust.Shared.Audio;
+using Robust.Shared.Configuration;
+using Robust.Shared.Prototypes;
+using Content.Shared.Chat;
+
+namespace Content.Server.Speech.Synthesis.System;
+
+///
+/// Обрабатывает барки для сущностей.
+///
+public sealed class BarkSystem : EntitySystem
+{
+ [Dependency] private readonly AudioSystem _audio = default!;
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IConfigurationManager _configurationManager = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnEntitySpoke);
+
+ SubscribeNetworkEvent(OnRequestPreviewBark);
+ }
+
+ private void OnEntitySpoke(EntityUid uid, SpeechSynthesisComponent comp, EntitySpokeEvent args)
+ {
+ if (comp.VoicePrototypeId is null ||
+ !_prototypeManager.TryIndex(comp.VoicePrototypeId, out var barkProto) ||
+ !_configurationManager.GetCVar(WegaCVars.BarksEnabled))
+ return;
+
+ bool isObfuscated = args.ObfuscatedMessage != null;
+ var sourceEntity = _entityManager.GetNetEntity(uid);
+ var soundPath = barkProto.SoundFiles[new Random().Next(barkProto.SoundFiles.Count)];
+ RaiseNetworkEvent(new PlayBarkEvent(soundPath, sourceEntity, args.Message, comp.PlaybackSpeed, isObfuscated));
+ }
+
+ private async void OnRequestPreviewBark(RequestPreviewBarkEvent ev, EntitySessionEventArgs args)
+ {
+ if (string.IsNullOrEmpty(ev.BarkVoiceId) || !_prototypeManager.TryIndex(ev.BarkVoiceId, out var barkProto)
+ || !_configurationManager.GetCVar(WegaCVars.BarksEnabled))
+ return;
+
+ var soundPath = barkProto.SoundFiles[new Random().Next(barkProto.SoundFiles.Count)];
+ var soundSpecifier = new SoundPathSpecifier(soundPath);
+
+ var audioParams = new AudioParams
+ {
+ Pitch = 1.0f,
+ Volume = 4f,
+ Variation = 0.125f
+ };
+
+ _audio.PlayGlobal(soundSpecifier, args.SenderSession, audioParams);
+ }
+}
diff --git a/Content.Server/_Wega/Commands/GhostRespawnCommand.cs b/Content.Server/_Wega/Commands/GhostRespawnCommand.cs
new file mode 100644
index 0000000000..8b8941bda2
--- /dev/null
+++ b/Content.Server/_Wega/Commands/GhostRespawnCommand.cs
@@ -0,0 +1,67 @@
+using Content.Server.GameTicking;
+using Content.Server.Mind;
+using Content.Shared.Administration;
+using Content.Shared.CCVar;
+using Content.Shared.Ghost;
+using Robust.Shared.Configuration;
+using Robust.Shared.Console;
+using Robust.Shared.Timing;
+
+namespace Content.Server.Wega.Commands;
+
+[AnyCommand()]
+public sealed class GhostRespawnCommand : IConsoleCommand
+{
+ [Dependency] private readonly IGameTiming _gameTiming = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+ [Dependency] private readonly IConfigurationManager _configurationManager = default!;
+
+ public string Command => "ghostrespawn";
+ public string Description => "Allows the player to return to the lobby if they've been dead long enough, allowing re-entering the round AS ANOTHER CHARACTER.";
+ public string Help => $"{Command}";
+
+ public void Execute(IConsoleShell shell, string argStr, string[] args)
+ {
+ if (!_configurationManager.GetCVar(WegaCVars.GhostRespawnEnabled))
+ {
+ shell.WriteLine("Respawning is disabled, ask an admin to respawn you.");
+ return;
+ }
+
+ if (shell.Player is null)
+ {
+ shell.WriteLine("You cannot run this from the console!");
+ return;
+ }
+
+ if (shell.Player.AttachedEntity is null)
+ {
+ shell.WriteLine("You cannot run this in the lobby, or without an entity.");
+ return;
+ }
+
+ if (!_entityManager.TryGetComponent(shell.Player.AttachedEntity, out var ghost))
+ {
+ shell.WriteLine("You are not a ghost.");
+ return;
+ }
+
+ var mindSystem = _entityManager.EntitySysManager.GetEntitySystem();
+ if (!mindSystem.TryGetMind(shell.Player, out _, out _))
+ {
+ shell.WriteLine("You have no mind.");
+ return;
+ }
+ var time = (_gameTiming.CurTime - ghost.TimeOfDeath);
+ var respawnTime = _configurationManager.GetCVar(WegaCVars.GhostRespawnTime);
+
+ if (respawnTime > time.TotalSeconds)
+ {
+ shell.WriteLine($"You haven't been dead long enough. You have been dead {time.TotalSeconds} seconds of the required {respawnTime}.");
+ return;
+ }
+
+ var gameTicker = _entityManager.EntitySysManager.GetEntitySystem();
+ gameTicker.Respawn(shell.Player);
+ }
+}
diff --git a/Content.Server/_Wega/FriendlyFaction/FriendlyFactionSystem.cs b/Content.Server/_Wega/FriendlyFaction/FriendlyFactionSystem.cs
new file mode 100644
index 0000000000..e39b321056
--- /dev/null
+++ b/Content.Server/_Wega/FriendlyFaction/FriendlyFactionSystem.cs
@@ -0,0 +1,41 @@
+using System.Linq;
+using Content.Shared.Friendly.Faction;
+using Content.Shared.Mobs.Components;
+using Content.Shared.Weapons.Melee.Events;
+
+namespace Content.Server.Friendly.Faction
+{
+ public sealed partial class FriendlyFactionSystem : EntitySystem
+ {
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnMeleeHit);
+ }
+
+ private void OnMeleeHit(EntityUid uid, FriendlyFactionComponent component, MeleeHitEvent args)
+ {
+ if (!TryComp(args.User, out _))
+ return;
+
+ if (!args.HitEntities.Any())
+ return;
+
+ foreach (var entity in args.HitEntities)
+ {
+ if (args.User == entity)
+ continue;
+
+ if (!TryComp(entity, out _))
+ continue;
+
+ if (TryComp(entity, out var friendlyFaction)
+ && friendlyFaction.Faction == component.Faction)
+ {
+ args.BonusDamage = -args.BaseDamage;
+ }
+ }
+ }
+ }
+}
diff --git a/Content.Server/_Wega/Ghost/GhostRespawnSystem.cs b/Content.Server/_Wega/Ghost/GhostRespawnSystem.cs
new file mode 100644
index 0000000000..1544476e4c
--- /dev/null
+++ b/Content.Server/_Wega/Ghost/GhostRespawnSystem.cs
@@ -0,0 +1,76 @@
+using System.Runtime.InteropServices;
+using Content.Shared.Wega.Ghost.Respawn;
+using Content.Shared.GameTicking;
+using Content.Shared.Mind.Components;
+using Content.Shared.Mobs;
+using Content.Shared.Mobs.Components;
+using Robust.Server.Player;
+using Robust.Shared.Player;
+using Robust.Shared.Timing;
+
+namespace Content.Server.Wega.Ghost.Respawn;
+
+public sealed class GhostRespawnSystem : EntitySystem
+{
+ [Dependency] private readonly IPlayerManager _player = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
+
+ private readonly Dictionary _respawnResetTimes = [];
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnMobStateChanged);
+ SubscribeLocalEvent(OnMindRemoved);
+ SubscribeLocalEvent(OnRoundRestartCleanup);
+ _player.PlayerStatusChanged += OnPlayerStatusChanged;
+ }
+
+ private void OnMobStateChanged(MobStateChangedEvent e)
+ {
+ if (e.NewMobState != MobState.Dead)
+ return;
+ if (!_player.TryGetSessionByEntity(e.Target, out var session))
+ return;
+ ResetRespawnTime(e.Target, session);
+ }
+
+ private void OnMindRemoved(EntityUid entity, MindContainerComponent component, MindRemovedMessage e)
+ {
+ if (e.Mind.Comp.UserId is null)
+ return;
+ if (TryComp(entity, out var state) && state.CurrentState == MobState.Dead)
+ return;
+ if (!_player.TryGetSessionById(e.Mind.Comp.UserId.Value, out var session))
+ return;
+
+ ResetRespawnTime(entity, session);
+ }
+
+ private void OnRoundRestartCleanup(RoundRestartCleanupEvent e)
+ {
+ _respawnResetTimes.Clear();
+ }
+
+ private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e)
+ {
+ if (e.NewStatus == Robust.Shared.Enums.SessionStatus.Connected)
+ SendRespawnResetTime(e.Session, GetRespawnResetTime(e.Session));
+ }
+
+ private void ResetRespawnTime(EntityUid entity, ICommonSession session)
+ {
+ ref var respawnTime = ref CollectionsMarshal.GetValueRefOrAddDefault(_respawnResetTimes, session, out _);
+ respawnTime = _timing.CurTime;
+ SendRespawnResetTime(session, _timing.CurTime);
+ }
+
+ private void SendRespawnResetTime(ICommonSession session, TimeSpan? time)
+ {
+ RaiseNetworkEvent(new GhostRespawnEvent(time), session);
+ }
+
+ public TimeSpan? GetRespawnResetTime(ICommonSession session)
+ {
+ return _respawnResetTimes.TryGetValue(session, out var time) ? time : null;
+ }
+}
diff --git a/Content.Server/_Wega/Interaction/DeleteOnDropSystem.cs b/Content.Server/_Wega/Interaction/DeleteOnDropSystem.cs
new file mode 100644
index 0000000000..03a5f692ff
--- /dev/null
+++ b/Content.Server/_Wega/Interaction/DeleteOnDropSystem.cs
@@ -0,0 +1,45 @@
+using Content.Shared.Hands;
+using Content.Shared.Interaction.Components;
+using Content.Shared.Interaction.Events;
+using Content.Shared.Inventory.Events;
+
+namespace Content.Server.Interaction;
+
+public sealed class DeleteOnDropSystem : EntitySystem
+{
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnUnequip);
+ SubscribeLocalEvent(OnUnequipHand);
+ SubscribeLocalEvent(OnDropped);
+ }
+
+ private void OnUnequip(EntityUid uid, DeleteOnDropComponent item, GotUnequippedEvent args)
+ {
+ if (!item.DeleteOnDrop || !_entityManager.EntityExists(uid))
+ return;
+
+ QueueDel(uid);
+ }
+
+ private void OnUnequipHand(EntityUid uid, DeleteOnDropComponent item, GotUnequippedHandEvent args)
+ {
+ if (!item.DeleteOnDrop || !_entityManager.EntityExists(uid))
+ return;
+
+ QueueDel(uid);
+ }
+
+ private void OnDropped(EntityUid uid, DeleteOnDropComponent item, DroppedEvent args)
+ {
+ if (!item.DeleteOnDrop || !_entityManager.EntityExists(uid))
+ return;
+
+ QueueDel(uid);
+ }
+}
+
diff --git a/Content.Server/_Wega/NullRod/NullRodSystem.cs b/Content.Server/_Wega/NullRod/NullRodSystem.cs
new file mode 100644
index 0000000000..8b6a0d30b2
--- /dev/null
+++ b/Content.Server/_Wega/NullRod/NullRodSystem.cs
@@ -0,0 +1,51 @@
+using Content.Server.Bible.Components;
+using Content.Shared.Hands;
+using Content.Shared.Inventory.Events;
+using Content.Shared.NullRod.Components;
+
+namespace Content.Server.NullRod;
+
+public sealed class NullRodSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnDidEquip);
+ SubscribeLocalEvent(OnHandEquipped);
+ SubscribeLocalEvent(OnDidUnequip);
+ SubscribeLocalEvent(OnHandUnequipped);
+ }
+
+ private void OnDidEquip(Entity ent, ref GotEquippedEvent args)
+ {
+ if (!HasComp(args.Equipee) || HasComp(args.Equipee))
+ return;
+
+ EnsureComp(args.Equipee);
+ }
+
+ private void OnHandEquipped(Entity ent, ref GotEquippedHandEvent args)
+ {
+ if (!HasComp(args.User) || HasComp(args.User))
+ return;
+
+ EnsureComp(args.User);
+ }
+
+ private void OnDidUnequip(Entity ent, ref GotUnequippedEvent args)
+ {
+ if (!HasComp(args.Equipee))
+ return;
+
+ RemComp(args.Equipee);
+ }
+
+ private void OnHandUnequipped(Entity ent, ref GotUnequippedHandEvent args)
+ {
+ if (!HasComp(args.User))
+ return;
+
+ RemComp(args.User);
+ }
+}
\ No newline at end of file
diff --git a/Content.Shared/_WL/Sleep/SleepOnBuckleComponent.cs b/Content.Shared/_WL/Sleep/SleepOnBuckleComponent.cs
new file mode 100644
index 0000000000..4d79b8a1b2
--- /dev/null
+++ b/Content.Shared/_WL/Sleep/SleepOnBuckleComponent.cs
@@ -0,0 +1,22 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._WL.Sleep;
+
+///
+/// Allows entities buckled to this strap to sleep.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class SleepOnBuckleComponent : Component
+{
+ ///
+ /// The sleep action entity that will be granted to buckled entities.
+ ///
+ [DataField, AutoNetworkedField]
+ public EntityUid? SleepAction;
+
+ ///
+ /// Who unbuckle entity
+ ///
+ [DataField]
+ public EntityUid? User;
+}
diff --git a/Content.Shared/_WL/Sleep/SleepOnBuckleSystem.cs b/Content.Shared/_WL/Sleep/SleepOnBuckleSystem.cs
new file mode 100644
index 0000000000..65ea45aa13
--- /dev/null
+++ b/Content.Shared/_WL/Sleep/SleepOnBuckleSystem.cs
@@ -0,0 +1,66 @@
+using Content.Shared.Actions;
+using Content.Shared.Standing;
+using Content.Shared.Buckle.Components;
+using Content.Shared.Stunnable;
+using Content.Shared.Bed.Sleep;
+using Content.Shared.Actions.Components;
+
+namespace Content.Shared._WL.Sleep;
+
+public sealed class SleepOnBuckleSystem : EntitySystem
+{
+ [Dependency] private readonly ActionContainerSystem _actConts = default!;
+ [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
+ [Dependency] private readonly SleepingSystem _sleepingSystem = default!;
+ [Dependency] protected readonly StandingStateSystem _standing = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnMapInit);
+ SubscribeLocalEvent(OnStrapped);
+ SubscribeLocalEvent(OnUnstrapped);
+ SubscribeLocalEvent(OnUnstrapAttempt);
+ }
+
+ private void OnMapInit(Entity ent, ref MapInitEvent args)
+ {
+ _actConts.EnsureAction(ent.Owner, ref ent.Comp.SleepAction, SleepingSystem.SleepActionId);
+ Dirty(ent);
+ }
+
+ private void OnStrapped(Entity ent, ref StrappedEvent args)
+ {
+ if (TryComp(args.Buckle, out var standing)
+ && standing.SleepAction != null
+ && TryComp(standing.SleepAction.Value, out var actionComp)
+ && actionComp.AttachedEntity == args.Buckle.Owner)
+ _actionsSystem.RemoveAction(args.Buckle.Owner, standing.SleepAction);
+
+ _actionsSystem.AddAction(args.Buckle, ref ent.Comp.SleepAction, SleepingSystem.SleepActionId, ent);
+ Dirty(ent);
+ }
+
+ private void OnUnstrapped(Entity ent, ref UnstrappedEvent args)
+ {
+ if (!Terminating(args.Buckle.Owner))
+ {
+ _actionsSystem.RemoveAction(args.Buckle.Owner, ent.Comp.SleepAction);
+ _sleepingSystem.TryWaking(args.Buckle.Owner);
+
+ if (ent.Comp.User == args.Buckle.Owner)
+ {
+ RemComp(args.Buckle.Owner);
+ RemComp(args.Buckle.Owner);
+
+ _standing.Stand(args.Buckle.Owner, force: true);
+ }
+ }
+ }
+
+ private void OnUnstrapAttempt(Entity ent, ref UnstrapAttemptEvent args)
+ {
+ ent.Comp.User = args.User;
+ }
+}
diff --git a/Content.Shared/_Wega/Barks/BarkPrototype.cs b/Content.Shared/_Wega/Barks/BarkPrototype.cs
new file mode 100644
index 0000000000..e85a7a7e74
--- /dev/null
+++ b/Content.Shared/_Wega/Barks/BarkPrototype.cs
@@ -0,0 +1,31 @@
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Speech.Synthesis;
+
+///
+/// Прототип для доступных барков.
+///
+[Prototype("bark")]
+public sealed class BarkPrototype : IPrototype
+{
+ [IdDataField]
+ public string ID { get; } = default!;
+
+ ///
+ /// Название голоса.
+ ///
+ [DataField("name")]
+ public string Name { get; } = string.Empty;
+
+ ///
+ /// Набор звуков, используемых для речи.
+ ///
+ [DataField("soundFiles", required: true)]
+ public List SoundFiles { get; } = new();
+
+ ///
+ /// Доступен ли на старте раунда.
+ ///
+ [DataField("roundStart")]
+ public bool RoundStart { get; } = true;
+}
diff --git a/Content.Shared/_Wega/Barks/RequestBarkEvents.cs b/Content.Shared/_Wega/Barks/RequestBarkEvents.cs
new file mode 100644
index 0000000000..8512dc748d
--- /dev/null
+++ b/Content.Shared/_Wega/Barks/RequestBarkEvents.cs
@@ -0,0 +1,28 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Speech.Synthesis;
+
+[Serializable, NetSerializable]
+public sealed class RequestPreviewBarkEvent(string barkVoiceId) : EntityEventArgs
+{
+ public string BarkVoiceId { get; } = barkVoiceId;
+}
+
+[Serializable, NetSerializable]
+public sealed class PlayBarkEvent : EntityEventArgs
+{
+ public string SoundPath { get; }
+ public NetEntity SourceUid { get; }
+ public string Message { get; }
+ public float PlaybackSpeed { get; }
+ public bool Obfuscated { get; }
+
+ public PlayBarkEvent(string soundPath, NetEntity sourceUid, string message, float playbackSpeed, bool obfuscated)
+ {
+ SoundPath = soundPath;
+ SourceUid = sourceUid;
+ Message = message;
+ PlaybackSpeed = playbackSpeed;
+ Obfuscated = obfuscated;
+ }
+}
diff --git a/Content.Shared/_Wega/Barks/SpeechSynthesis.cs b/Content.Shared/_Wega/Barks/SpeechSynthesis.cs
new file mode 100644
index 0000000000..d560eaea2c
--- /dev/null
+++ b/Content.Shared/_Wega/Barks/SpeechSynthesis.cs
@@ -0,0 +1,39 @@
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.Speech.Synthesis.Components;
+
+///
+/// Применяет звуки барков для сущности.
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class SpeechSynthesisComponent : Component
+{
+ ///
+ /// Прототип голоса для барков.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("voice", customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string? VoicePrototypeId { get; set; }
+
+ ///
+ /// Скорость воспроизведения звука.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("playbackSpeed")]
+ public float PlaybackSpeed { get; set; } = 1.0f;
+
+ ///
+ /// Тональность звука.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("pitch")]
+ public float Pitch { get; set; } = 1.0f;
+
+ ///
+ /// Выразительность речи.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("expression")]
+ public float Expression { get; set; } = 1.0f;
+}
diff --git a/Content.Shared/_Wega/CCCVars/CCVars.cs b/Content.Shared/_Wega/CCCVars/CCVars.cs
new file mode 100644
index 0000000000..759ad714de
--- /dev/null
+++ b/Content.Shared/_Wega/CCCVars/CCVars.cs
@@ -0,0 +1,121 @@
+using Robust.Shared.Configuration;
+
+namespace Content.Shared.CCVar;
+
+[CVarDefs]
+public sealed class WegaCVars
+{
+ /*
+ Ghost Respawn CVars
+ */
+ ///
+ /// Whether or not respawning is enabled.
+ ///
+ public static readonly CVarDef GhostRespawnEnabled =
+ CVarDef.Create("wega.respawn_enabled", false, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Respawn time, how long the player has to wait in seconds after death.
+ ///
+ public static readonly CVarDef GhostRespawnTime =
+ CVarDef.Create("wega.respawn_time", 1200.0f, CVar.SERVER | CVar.REPLICATED);
+
+ /*
+ Barks CVars
+ */
+ ///
+ /// Responsible for turning on and off the bark system.
+ ///
+ public static readonly CVarDef BarksEnabled =
+ CVarDef.Create("wega.barks_enabled", false, CVar.SERVER | CVar.REPLICATED | CVar.ARCHIVE);
+
+ ///
+ /// Default volume setting of Barks sound.
+ ///
+ public static readonly CVarDef BarksVolume =
+ CVarDef.Create("wega.barks_volume", 0f, CVar.CLIENTONLY | CVar.ARCHIVE);
+
+ /*
+ Night Light System CVars
+ */
+ ///
+ /// Responsible for switching the night light system.
+ ///
+ public static readonly CVarDef NightLightEnabled =
+ CVarDef.Create("wega.night_light_enabled", false, CVar.SERVER | CVar.REPLICATED | CVar.ARCHIVE);
+
+ ///
+ /// Switching adjusts all the lamps to the holiday mode according to the logic of updating the night lighting.
+ ///
+ public static readonly CVarDef PartyEnabled =
+ CVarDef.Create("wega.party_enabled", false, CVar.SERVER | CVar.REPLICATED | CVar.ARCHIVE);
+
+ /*
+ Sound insulation CVars
+ */
+ ///
+ /// If you enable this mode, it will process the sound with sound isolation.
+ ///
+ public static readonly CVarDef SoundInsulationEnabled =
+ CVarDef.Create("wega.sound_insulation_enabled", false, CVar.SERVER | CVar.REPLICATED | CVar.ARCHIVE);
+
+ /*
+ Vote CVars
+ */
+ ///
+ /// If enabled forcibly, it will trigger a vote for the mode at the end of the round.
+ ///
+ public static readonly CVarDef VoteRoundEndEnabled =
+ CVarDef.Create("wega.roundend_vote_enabled", false, CVar.SERVERONLY);
+
+ /*
+ Ic Flavors
+ */
+ ///
+ /// Sets the maximum length for OOC flavor text.
+ ///
+ public static readonly CVarDef OOCMaxFlavorTextLength =
+ CVarDef.Create("ic.oocflavor_text_length", 2048, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Sets the maximum length for character description text.
+ ///
+ public static readonly CVarDef CharacterDescriptionLength =
+ CVarDef.Create("ic.character_description_length", 2048, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Sets the maximum length for green preferences text.
+ ///
+ public static readonly CVarDef GreenPreferencesLength =
+ CVarDef.Create("ic.green_preferences_length", 256, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Sets the maximum length for yellow preferences text.
+ ///
+ public static readonly CVarDef YellowPreferencesLength =
+ CVarDef.Create("ic.yellow_preferences_length", 256, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Sets the maximum length for red preferences text.
+ ///
+ public static readonly CVarDef RedPreferencesLength =
+ CVarDef.Create("ic.red_preferences_length", 256, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Sets the maximum length for tags text.
+ ///
+ public static readonly CVarDef TagsLength =
+ CVarDef.Create("ic.tags_length", 128, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Sets the maximum length for links text.
+ ///
+ public static readonly CVarDef LinksLength =
+ CVarDef.Create("ic.links_length", 512, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Sets the maximum length for NSFW preferences text.
+ ///
+ public static readonly CVarDef NSFWPreferencesLength =
+ CVarDef.Create("ic.nsfw_preferences_length", 1024, CVar.SERVER | CVar.REPLICATED);
+}
diff --git a/Content.Shared/_Wega/Food/EdibleMatterComponent.cs b/Content.Shared/_Wega/Food/EdibleMatterComponent.cs
new file mode 100644
index 0000000000..5f2349211d
--- /dev/null
+++ b/Content.Shared/_Wega/Food/EdibleMatterComponent.cs
@@ -0,0 +1,11 @@
+namespace Content.Shared.Edible.Matter;
+
+[RegisterComponent]
+public sealed partial class EdibleMatterComponent : Component
+{
+ [DataField("nutritionValue")]
+ public float NutritionValue = 5f;
+
+ [DataField("canBeEaten")]
+ public bool CanBeEaten = true;
+}
diff --git a/Content.Shared/_Wega/FriendlyFaction/FriendlyFactionComponent.cs b/Content.Shared/_Wega/FriendlyFaction/FriendlyFactionComponent.cs
new file mode 100644
index 0000000000..a93f0ab579
--- /dev/null
+++ b/Content.Shared/_Wega/FriendlyFaction/FriendlyFactionComponent.cs
@@ -0,0 +1,11 @@
+using Content.Shared.NPC.Prototypes;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Friendly.Faction;
+
+[RegisterComponent]
+public sealed partial class FriendlyFactionComponent : Component
+{
+ [DataField]
+ public ProtoId? Faction;
+}
diff --git a/Content.Shared/_Wega/Ghost/GhostRespawnEvent.cs b/Content.Shared/_Wega/Ghost/GhostRespawnEvent.cs
new file mode 100644
index 0000000000..84b2fd6608
--- /dev/null
+++ b/Content.Shared/_Wega/Ghost/GhostRespawnEvent.cs
@@ -0,0 +1,9 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Wega.Ghost.Respawn;
+
+[Serializable, NetSerializable]
+public sealed class GhostRespawnEvent(TimeSpan? time) : EntityEventArgs
+{
+ public readonly TimeSpan? Time = time;
+}
diff --git a/Content.Shared/_Wega/Interaction/DeleteOnDropComponent.cs b/Content.Shared/_Wega/Interaction/DeleteOnDropComponent.cs
new file mode 100644
index 0000000000..0f4649f886
--- /dev/null
+++ b/Content.Shared/_Wega/Interaction/DeleteOnDropComponent.cs
@@ -0,0 +1,11 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Interaction.Components
+{
+ [RegisterComponent, NetworkedComponent]
+ public sealed partial class DeleteOnDropComponent : Component
+ {
+ [DataField("deleteOnDrop")]
+ public bool DeleteOnDrop = true;
+ }
+}
diff --git a/Content.Shared/_Wega/NullRod/NullRodComponent.cs b/Content.Shared/_Wega/NullRod/NullRodComponent.cs
new file mode 100644
index 0000000000..8305f5255e
--- /dev/null
+++ b/Content.Shared/_Wega/NullRod/NullRodComponent.cs
@@ -0,0 +1,13 @@
+using Content.Shared.FixedPoint;
+
+namespace Content.Shared.NullRod.Components;
+
+[RegisterComponent]
+public sealed partial class NullRodComponent : Component
+{
+ [DataField]
+ public FixedPoint2 FirstNullDamage = 30;
+
+ [DataField]
+ public FixedPoint2 NullDamage = 15;
+}
diff --git a/Content.Shared/_Wega/NullRod/NullRodOwnerComponent.cs b/Content.Shared/_Wega/NullRod/NullRodOwnerComponent.cs
new file mode 100644
index 0000000000..fd6c351fcc
--- /dev/null
+++ b/Content.Shared/_Wega/NullRod/NullRodOwnerComponent.cs
@@ -0,0 +1,6 @@
+using Content.Shared.FixedPoint;
+
+namespace Content.Shared.NullRod.Components;
+
+[RegisterComponent]
+public sealed partial class NullRodOwnerComponent : Component;
diff --git a/Resources/Audio/_Wega/Voice/Barks/aa_blip.ogg b/Resources/Audio/_Wega/Voice/Barks/aa_blip.ogg
new file mode 100644
index 0000000000..960a0508d5
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/aa_blip.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/aa_blip_typewriter.ogg b/Resources/Audio/_Wega/Voice/Barks/aa_blip_typewriter.ogg
new file mode 100644
index 0000000000..af4a6631c7
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/aa_blip_typewriter.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/aa_dd_blip.ogg b/Resources/Audio/_Wega/Voice/Barks/aa_dd_blip.ogg
new file mode 100644
index 0000000000..0da94316c3
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/aa_dd_blip.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/aa_tgaa_blip.ogg b/Resources/Audio/_Wega/Voice/Barks/aa_tgaa_blip.ogg
new file mode 100644
index 0000000000..0c257f38ed
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/aa_tgaa_blip.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/ahuh.ogg b/Resources/Audio/_Wega/Voice/Barks/ahuh.ogg
new file mode 100644
index 0000000000..fbade63d6d
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/ahuh.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bark1.ogg b/Resources/Audio/_Wega/Voice/Barks/bark1.ogg
new file mode 100644
index 0000000000..9e3850ef38
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bark1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/birdwhistle.ogg b/Resources/Audio/_Wega/Voice/Barks/birdwhistle.ogg
new file mode 100644
index 0000000000..f970f8af45
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/birdwhistle.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/birdwhistle2.ogg b/Resources/Audio/_Wega/Voice/Barks/birdwhistle2.ogg
new file mode 100644
index 0000000000..61fd3e850b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/birdwhistle2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bleat_bark.ogg b/Resources/Audio/_Wega/Voice/Barks/bleat_bark.ogg
new file mode 100644
index 0000000000..a996bc6ab3
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bleat_bark.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bloop.ogg b/Resources/Audio/_Wega/Voice/Barks/bloop.ogg
new file mode 100644
index 0000000000..cfe1c24426
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bloop.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/blub.ogg b/Resources/Audio/_Wega/Voice/Barks/blub.ogg
new file mode 100644
index 0000000000..ee6de6ede4
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/blub.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bottalk_1.ogg b/Resources/Audio/_Wega/Voice/Barks/bottalk_1.ogg
new file mode 100644
index 0000000000..b727224998
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bottalk_1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bottalk_2.ogg b/Resources/Audio/_Wega/Voice/Barks/bottalk_2.ogg
new file mode 100644
index 0000000000..745b1a4edc
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bottalk_2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bottalk_3.ogg b/Resources/Audio/_Wega/Voice/Barks/bottalk_3.ogg
new file mode 100644
index 0000000000..e91f6bc156
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bottalk_3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bottalk_4.ogg b/Resources/Audio/_Wega/Voice/Barks/bottalk_4.ogg
new file mode 100644
index 0000000000..3cf58966f7
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bottalk_4.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/bulletflyby.ogg b/Resources/Audio/_Wega/Voice/Barks/bulletflyby.ogg
new file mode 100644
index 0000000000..ce9405a577
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/bulletflyby.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/buwoo.ogg b/Resources/Audio/_Wega/Voice/Barks/buwoo.ogg
new file mode 100644
index 0000000000..45bcbd50c6
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/buwoo.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/c2.ogg b/Resources/Audio/_Wega/Voice/Barks/c2.ogg
new file mode 100644
index 0000000000..bae8047c5d
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/c2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/c3.ogg b/Resources/Audio/_Wega/Voice/Barks/c3.ogg
new file mode 100644
index 0000000000..9ae6f9004d
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/c3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/c4.ogg b/Resources/Audio/_Wega/Voice/Barks/c4.ogg
new file mode 100644
index 0000000000..c1411e3de0
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/c4.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/caw.ogg b/Resources/Audio/_Wega/Voice/Barks/caw.ogg
new file mode 100644
index 0000000000..21181b6519
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/caw.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/caw2.ogg b/Resources/Audio/_Wega/Voice/Barks/caw2.ogg
new file mode 100644
index 0000000000..e4e4645034
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/caw2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/caw3.ogg b/Resources/Audio/_Wega/Voice/Barks/caw3.ogg
new file mode 100644
index 0000000000..8339440d77
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/caw3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/chitter.ogg b/Resources/Audio/_Wega/Voice/Barks/chitter.ogg
new file mode 100644
index 0000000000..393d021efe
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/chitter.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/cn3.ogg b/Resources/Audio/_Wega/Voice/Barks/cn3.ogg
new file mode 100644
index 0000000000..6ef414d9d0
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/cn3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/cn4.ogg b/Resources/Audio/_Wega/Voice/Barks/cn4.ogg
new file mode 100644
index 0000000000..4a26a6741d
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/cn4.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/cow.ogg b/Resources/Audio/_Wega/Voice/Barks/cow.ogg
new file mode 100644
index 0000000000..db6c0a63ca
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/cow.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/cry.ogg b/Resources/Audio/_Wega/Voice/Barks/cry.ogg
new file mode 100644
index 0000000000..b34b8d0c49
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/cry.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/dwoop.ogg b/Resources/Audio/_Wega/Voice/Barks/dwoop.ogg
new file mode 100644
index 0000000000..785a18431f
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/dwoop.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/ehh.ogg b/Resources/Audio/_Wega/Voice/Barks/ehh.ogg
new file mode 100644
index 0000000000..c0b5591ed5
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/ehh.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/ehh2.ogg b/Resources/Audio/_Wega/Voice/Barks/ehh2.ogg
new file mode 100644
index 0000000000..830bb1e29e
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/ehh2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/ehh3.ogg b/Resources/Audio/_Wega/Voice/Barks/ehh3.ogg
new file mode 100644
index 0000000000..bb0925b68b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/ehh3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/ehh4.ogg b/Resources/Audio/_Wega/Voice/Barks/ehh4.ogg
new file mode 100644
index 0000000000..5797b13179
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/ehh4.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/ehh5.ogg b/Resources/Audio/_Wega/Voice/Barks/ehh5.ogg
new file mode 100644
index 0000000000..970a2040bc
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/ehh5.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/eugh.ogg b/Resources/Audio/_Wega/Voice/Barks/eugh.ogg
new file mode 100644
index 0000000000..6ba2440e0e
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/eugh.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/faucet.ogg b/Resources/Audio/_Wega/Voice/Barks/faucet.ogg
new file mode 100644
index 0000000000..56a98a8539
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/faucet.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/faucet2.ogg b/Resources/Audio/_Wega/Voice/Barks/faucet2.ogg
new file mode 100644
index 0000000000..02af88442a
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/faucet2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/growl.ogg b/Resources/Audio/_Wega/Voice/Barks/growl.ogg
new file mode 100644
index 0000000000..b6dd00a75c
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/growl.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/growl2.ogg b/Resources/Audio/_Wega/Voice/Barks/growl2.ogg
new file mode 100644
index 0000000000..5bd7219602
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/growl2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/haha.ogg b/Resources/Audio/_Wega/Voice/Barks/haha.ogg
new file mode 100644
index 0000000000..9ac43ce03c
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/haha.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/hoot.ogg b/Resources/Audio/_Wega/Voice/Barks/hoot.ogg
new file mode 100644
index 0000000000..316949652c
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/hoot.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/integration_cog_install.ogg b/Resources/Audio/_Wega/Voice/Barks/integration_cog_install.ogg
new file mode 100644
index 0000000000..554ec0707b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/integration_cog_install.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/lizard.ogg b/Resources/Audio/_Wega/Voice/Barks/lizard.ogg
new file mode 100644
index 0000000000..48638b0f23
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/lizard.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/merp.ogg b/Resources/Audio/_Wega/Voice/Barks/merp.ogg
new file mode 100644
index 0000000000..5350757a98
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/merp.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/moan1.ogg b/Resources/Audio/_Wega/Voice/Barks/moan1.ogg
new file mode 100644
index 0000000000..8c014e4de0
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/moan1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/moan2.ogg b/Resources/Audio/_Wega/Voice/Barks/moan2.ogg
new file mode 100644
index 0000000000..4e6077552c
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/moan2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/moan3.ogg b/Resources/Audio/_Wega/Voice/Barks/moan3.ogg
new file mode 100644
index 0000000000..d3193a5693
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/moan3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/mothsqueak.ogg b/Resources/Audio/_Wega/Voice/Barks/mothsqueak.ogg
new file mode 100644
index 0000000000..d9a6566f2c
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/mothsqueak.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/nomi.ogg b/Resources/Audio/_Wega/Voice/Barks/nomi.ogg
new file mode 100644
index 0000000000..f04b1cb20e
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/nomi.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/nya.ogg b/Resources/Audio/_Wega/Voice/Barks/nya.ogg
new file mode 100644
index 0000000000..1ca8cc08ea
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/nya.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/poyo.ogg b/Resources/Audio/_Wega/Voice/Barks/poyo.ogg
new file mode 100644
index 0000000000..6cda5a0f16
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/poyo.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/pug.ogg b/Resources/Audio/_Wega/Voice/Barks/pug.ogg
new file mode 100644
index 0000000000..86d50225a5
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/pug.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/pugg.ogg b/Resources/Audio/_Wega/Voice/Barks/pugg.ogg
new file mode 100644
index 0000000000..90fa070e8b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/pugg.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/raah1.ogg b/Resources/Audio/_Wega/Voice/Barks/raah1.ogg
new file mode 100644
index 0000000000..74e4781177
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/raah1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/raah2.ogg b/Resources/Audio/_Wega/Voice/Barks/raah2.ogg
new file mode 100644
index 0000000000..ba3ff4f698
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/raah2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/radio.ogg b/Resources/Audio/_Wega/Voice/Barks/radio.ogg
new file mode 100644
index 0000000000..0dcb87214f
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/radio.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/radio2.ogg b/Resources/Audio/_Wega/Voice/Barks/radio2.ogg
new file mode 100644
index 0000000000..a9364857a5
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/radio2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/radio_ai.ogg b/Resources/Audio/_Wega/Voice/Barks/radio_ai.ogg
new file mode 100644
index 0000000000..97eaf17417
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/radio_ai.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/ribbit.ogg b/Resources/Audio/_Wega/Voice/Barks/ribbit.ogg
new file mode 100644
index 0000000000..a4299d2a74
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/ribbit.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/roach.ogg b/Resources/Audio/_Wega/Voice/Barks/roach.ogg
new file mode 100644
index 0000000000..1bc765fa98
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/roach.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/skelly.ogg b/Resources/Audio/_Wega/Voice/Barks/skelly.ogg
new file mode 100644
index 0000000000..b8e1a2921a
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/skelly.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/slurp.ogg b/Resources/Audio/_Wega/Voice/Barks/slurp.ogg
new file mode 100644
index 0000000000..a8518068c1
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/slurp.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/speak_1.ogg b/Resources/Audio/_Wega/Voice/Barks/speak_1.ogg
new file mode 100644
index 0000000000..ab8ddde4a6
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/speak_1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/speak_2.ogg b/Resources/Audio/_Wega/Voice/Barks/speak_2.ogg
new file mode 100644
index 0000000000..a8c9444a52
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/speak_2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/speak_3.ogg b/Resources/Audio/_Wega/Voice/Barks/speak_3.ogg
new file mode 100644
index 0000000000..33ec079b84
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/speak_3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/speak_4.ogg b/Resources/Audio/_Wega/Voice/Barks/speak_4.ogg
new file mode 100644
index 0000000000..6de26114ae
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/speak_4.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/terminal_select.ogg b/Resources/Audio/_Wega/Voice/Barks/terminal_select.ogg
new file mode 100644
index 0000000000..fbf1642cbd
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/terminal_select.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/toysqueak1.ogg b/Resources/Audio/_Wega/Voice/Barks/toysqueak1.ogg
new file mode 100644
index 0000000000..11c655d641
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/toysqueak1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/tweet.ogg b/Resources/Audio/_Wega/Voice/Barks/tweet.ogg
new file mode 100644
index 0000000000..b784636e25
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/tweet.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/uhm.ogg b/Resources/Audio/_Wega/Voice/Barks/uhm.ogg
new file mode 100644
index 0000000000..857e99c7c5
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/uhm.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/uplinkerror.ogg b/Resources/Audio/_Wega/Voice/Barks/uplinkerror.ogg
new file mode 100644
index 0000000000..806a673d51
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/uplinkerror.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_alphys.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_alphys.ogg
new file mode 100644
index 0000000000..a430fbe488
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_alphys.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_asgore.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_asgore.ogg
new file mode 100644
index 0000000000..c068208625
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_asgore.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_flowey_1.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_flowey_1.ogg
new file mode 100644
index 0000000000..275e32682c
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_flowey_1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_flowey_2.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_flowey_2.ogg
new file mode 100644
index 0000000000..6439622af6
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_flowey_2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_gaster_1.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_1.ogg
new file mode 100644
index 0000000000..1301f1fabd
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_gaster_2.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_2.ogg
new file mode 100644
index 0000000000..e6fa2fd4d5
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_gaster_3.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_3.ogg
new file mode 100644
index 0000000000..1d6bc2cfc6
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_3.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_gaster_4.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_4.ogg
new file mode 100644
index 0000000000..047d33aa37
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_4.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_gaster_5.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_5.ogg
new file mode 100644
index 0000000000..e5d2e73970
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_5.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_gaster_6.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_6.ogg
new file mode 100644
index 0000000000..85211ad135
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_6.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_gaster_7.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_7.ogg
new file mode 100644
index 0000000000..ad584a52e6
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_gaster_7.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_metta_1.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_metta_1.ogg
new file mode 100644
index 0000000000..0d4acf2b63
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_metta_1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_monster1.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_monster1.ogg
new file mode 100644
index 0000000000..27c471e444
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_monster1.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_monster2.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_monster2.ogg
new file mode 100644
index 0000000000..15839c5062
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_monster2.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_papyrus.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_papyrus.ogg
new file mode 100644
index 0000000000..37096fc69b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_papyrus.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_ralsei.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_ralsei.ogg
new file mode 100644
index 0000000000..8aaaf3968b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_ralsei.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_sans.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_sans.ogg
new file mode 100644
index 0000000000..41b55dab6d
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_sans.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_susie.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_susie.ogg
new file mode 100644
index 0000000000..0c184c7be2
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_susie.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_temmie.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_temmie.ogg
new file mode 100644
index 0000000000..6e1b72dee2
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_temmie.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_toriel.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_toriel.ogg
new file mode 100644
index 0000000000..f1e5189c19
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_toriel.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/voice_undyne.ogg b/Resources/Audio/_Wega/Voice/Barks/voice_undyne.ogg
new file mode 100644
index 0000000000..8c0101be1b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/voice_undyne.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/weh.ogg b/Resources/Audio/_Wega/Voice/Barks/weh.ogg
new file mode 100644
index 0000000000..9867651bc2
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/weh.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/wilson_bark.ogg b/Resources/Audio/_Wega/Voice/Barks/wilson_bark.ogg
new file mode 100644
index 0000000000..23c7b845ca
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/wilson_bark.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/wolfgang_bark.ogg b/Resources/Audio/_Wega/Voice/Barks/wolfgang_bark.ogg
new file mode 100644
index 0000000000..dc0a6c931b
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/wolfgang_bark.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/woodie_bark.ogg b/Resources/Audio/_Wega/Voice/Barks/woodie_bark.ogg
new file mode 100644
index 0000000000..4ec03c9948
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/woodie_bark.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/wurt_bark.ogg b/Resources/Audio/_Wega/Voice/Barks/wurt_bark.ogg
new file mode 100644
index 0000000000..344c199f0c
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/wurt_bark.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/wx78_bark.ogg b/Resources/Audio/_Wega/Voice/Barks/wx78_bark.ogg
new file mode 100644
index 0000000000..9f1203eaf1
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/wx78_bark.ogg differ
diff --git a/Resources/Audio/_Wega/Voice/Barks/zap.ogg b/Resources/Audio/_Wega/Voice/Barks/zap.ogg
new file mode 100644
index 0000000000..524c73b1cd
Binary files /dev/null and b/Resources/Audio/_Wega/Voice/Barks/zap.ogg differ
diff --git a/Resources/Locale/ru-RU/_WL/destructible/destructible.ftl b/Resources/Locale/ru-RU/_WL/destructible/destructible.ftl
new file mode 100644
index 0000000000..98d3acbf7f
--- /dev/null
+++ b/Resources/Locale/ru-RU/_WL/destructible/destructible.ftl
@@ -0,0 +1,12 @@
+frozen-entity-prefix = обмороженн{$gender ->
+ *[male] ый
+ [female] ая
+ [other] ое
+}
+frozen-entity-health-string = [color=blue]Оно превратилось в сосульку![/color]
+
+frozen-entity-popup = { CAPITALIZE($name) } превратил{$gender ->
+ *[male] ся
+ [female] ась
+ [other] ось
+} в сосульку!
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_WL/nutrition/sweets/sweets-popup.ftl b/Resources/Locale/ru-RU/_WL/nutrition/sweets/sweets-popup.ftl
new file mode 100644
index 0000000000..801b7558b2
--- /dev/null
+++ b/Resources/Locale/ru-RU/_WL/nutrition/sweets/sweets-popup.ftl
@@ -0,0 +1,2 @@
+food-sweets-got-dissolved-popup-message = {$entity} растворяется у вас во рту!
+food-sweets-put-in-mouth-popup-message = Вы кладёте {$entity} в рот. {$flavor}
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/gum_carton.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/gum_carton.yml
new file mode 100644
index 0000000000..46b41a4e5c
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/gum_carton.yml
@@ -0,0 +1,40 @@
+- type: entity
+ parent: BaseItem
+ id: FoodSweetsGumBox
+ components:
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.OpenableVisuals.Opened:
+ enum.OpenableVisuals.Layer:
+ True: {state: "gumpack_open"}
+ False: {state: "gumpack"}
+ - type: SpaceGarbage
+ - type: Openable
+ sound:
+ path: /Audio/Effects/unwrap.ogg
+ - type: SpawnItemsOnUse
+ uses: 5
+ sound: null
+ items:
+ - id: FoodSweetsGumBlue
+ orGroup: Gums
+ - id: FoodSweetsGumPink
+ orGroup: Gums
+ - id: FoodSweetsGumYellow
+ orGroup: Gums
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gum.rsi
+ scale: 0.75, 0.75
+ layers:
+ - state: gumpack
+ map: ["enum.OpenableVisuals.Layer"]
+ - type: Item
+ heldPrefix: gumpack
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gum.rsi
+ size: Normal
+ shape:
+ - 0,0,1,0
+ - type: Tag
+ tags:
+ - Trash
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/gummies_carton.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/gummies_carton.yml
new file mode 100644
index 0000000000..64ee17df30
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/gummies_carton.yml
@@ -0,0 +1,61 @@
+- type: entity
+ parent: BoxCardboard
+ id: FoodSweetsGummiesBox
+ components:
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi
+ scale: 0.75, 0.75
+ layers:
+ - state: gummies
+ visible: false
+ - state: gummies_empty
+ - type: Item
+ heldPrefix: gummies
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi
+ size: Normal
+ shape:
+ - 0,0,1,1
+ - type: Storage
+ grid:
+ - 0,0,3,2
+ whitelist:
+ tags:
+ - FoodSnack
+ - type: ItemMapper
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi
+ mapLayers:
+ gummies:
+ whitelist:
+ tags:
+ - FoodSnack
+ - type: Appearance
+ - type: StorageFill
+ contents:
+ - id: FoodSweetsGummyArachnid
+ prob: 0.7
+ - id: FoodSweetsGummyCischi
+ prob: 0.7
+ - id: FoodSweetsGummyFelinid
+ prob: 0.1
+ - id: FoodSweetsGummyHuman
+ prob: 0.7
+ - id: FoodSweetsGummyKidan
+ prob: 0.7
+ - id: FoodSweetsGummyMoth
+ prob: 0.7
+ - id: FoodSweetsGummyMurine
+ prob: 0.7
+ - id: FoodSweetsGummySareng
+ prob: 0.7
+ - id: FoodSweetsGummySlime
+ prob: 0.7
+ - id: FoodSweetsGummyTayara
+ prob: 0.7
+ - id: FoodSweetsGummyLizard
+ prob: 0.7
+ - id: FoodSweetsGummyVulpa
+ prob: 0.7
+ - type: Tag
+ tags:
+ - Trash
+ - type: SpaceGarbage
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/mint_sticks_carton.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/mint_sticks_carton.yml
new file mode 100644
index 0000000000..73f5484869
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/Cartons/mint_sticks_carton.yml
@@ -0,0 +1,39 @@
+- type: entity
+ id: FoodSweetsMintStickBox
+ parent: [ BoxCardboard, BaseBagOpenClose ]
+ components:
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi
+ scale: 0.75, 0.75
+ layers:
+ - state: box
+ map: ["closeLayer"]
+ - state: box_open
+ map: ["openLayer"]
+ visible: false
+ - type: Item
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi
+ size: Normal
+ shape:
+ - 0,0,2,1
+ - type: Storage
+ grid:
+ - 0,0,5,3
+ whitelist:
+ components:
+ - SuckableFood
+ - type: StorageFill
+ contents:
+ - id: FoodSweetsMintStickBlue
+ amount: 3
+ - id: FoodSweetsMintStickRed
+ amount: 3
+ - id: FoodSweetsMintStickYellow
+ amount: 3
+ - type: Tag
+ tags:
+ - Trash
+ - type: PhysicalComposition
+ materialComposition:
+ Plastic: 50
+ - type: SpaceGarbage
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/base.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/base.yml
new file mode 100644
index 0000000000..374886690a
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/base.yml
@@ -0,0 +1,113 @@
+- type: entity
+ abstract: true
+ parent: FoodInjectableBase
+ id: FoodSweetsBase
+ components:
+ - type: Tag
+ tags:
+ - FoodSnack
+ - type: Item
+ size: Tiny
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 10
+ reagents:
+ - ReagentId: Nutriment
+ Quantity: 5
+ - ReagentId: Sugar
+ Quantity: 5
+
+# Мятные палочки
+- type: entity
+ parent: FoodSweetsBase
+ id: FoodSweetsMintStickBase
+ abstract: true
+ components:
+ - type: SuckableFood
+ - type: Item
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi
+ shape:
+ - 0,0,0,1
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - minty
+ - cold
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi
+ scale: 0.5, 0.5
+ - type: Clothing
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi
+ slots:
+ - MASK
+
+# Чупа чупсы
+- type: entity
+ parent: FoodSweetsBase
+ id: FoodSweetsChupachupsBase
+ abstract: true
+ components:
+ - type: SuckableFood
+ entityOnDissolve: FoodSweetsChupachupsEaten
+ - type: Item
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi
+ shape:
+ - 0,0,0,0
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - sour
+ - fruity
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi
+ scale: 0.4, 0.4
+ - type: Clothing
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi
+ slots:
+ - MASK
+
+# Жвачка
+- type: entity
+ parent: FoodSweetsBase
+ id: FoodSweetsGumBase
+ abstract: true
+ components:
+ - type: SuckableFood
+ - type: Item
+ heldPrefix: gum
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gum.rsi
+ shape:
+ - 0,0,0,0
+ - type: FlavorProfile
+ flavors:
+ - chewy
+ - fruity
+ - sweet
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gum.rsi
+ scale: 0.7, 0.7
+ - type: Clothing
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gum.rsi
+ slots:
+ - MASK
+
+# Мишки
+- type: entity
+ parent: FoodSweetsBase
+ id: FoodSweetsGummyBase
+ abstract: true
+ components:
+ - type: Item
+ heldPrefix: gummy
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi
+ shape:
+ - 0,0,0,0
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - chewy
+ - fruity
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi
+ scale: 0.8, 0.8
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/chupachups.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/chupachups.yml
new file mode 100644
index 0000000000..ca354850d7
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/chupachups.yml
@@ -0,0 +1,101 @@
+- type: entity
+ parent: BaseItem
+ id: FoodSweetsChupachupsEaten
+ components:
+ - type: Clothing
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi
+ slots:
+ - MASK
+ - type: Tag
+ tags:
+ - Trash
+ - type: SpaceGarbage
+ - type: Sprite
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi
+ scale: 0.4, 0.4
+ state: eatn_loli
+ - type: Item
+ heldPrefix: eatn
+ sprite: _WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi
+ shape:
+ - 0,0,0,0
+
+- type: entity
+ parent: FoodSweetsChupachupsBase
+ id: FoodSweetsChupachupsBlue
+ components:
+ - type: Sprite
+ state: blue_loli
+ - type: Item
+ heldPrefix: blue
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - raspberry
+
+- type: entity
+ parent: FoodSweetsChupachupsBase
+ id: FoodSweetsChupachupsLime
+ components:
+ - type: Sprite
+ state: lime_loli
+ - type: Item
+ heldPrefix: lime
+ - type: FlavorProfile
+ flavors:
+ - sour
+ - fruity
+
+- type: entity
+ parent: FoodSweetsChupachupsBase
+ id: FoodSweetsChupachupsOrange
+ components:
+ - type: Sprite
+ state: orng_loli
+ - type: Item
+ heldPrefix: orng
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - orange
+ - fruity
+
+- type: entity
+ parent: FoodSweetsChupachupsBase
+ id: FoodSweetsChupachupsPink
+ components:
+ - type: Sprite
+ state: pink_loli
+ - type: Item
+ heldPrefix: pink
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - strawberry
+
+- type: entity
+ parent: FoodSweetsChupachupsBase
+ id: FoodSweetsChupachupsPurple
+ components:
+ - type: Sprite
+ state: prpl_loli
+ - type: Item
+ heldPrefix: prpl
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - grape
+
+- type: entity
+ parent: FoodSweetsChupachupsBase
+ id: FoodSweetsChupachupsYellow
+ components:
+ - type: Sprite
+ state: yelo_loli
+ - type: Item
+ heldPrefix: yelo
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - sour
+ - pineapple
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/gummies.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/gummies.yml
new file mode 100644
index 0000000000..78690f31c4
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/gummies.yml
@@ -0,0 +1,98 @@
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyArachnid
+ components:
+ - type: Sprite
+ state: arachn
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - slimy
+ - strange
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyCischi
+ components:
+ - type: Sprite
+ state: cischi
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyFelinid
+ components:
+ - type: Sprite
+ state: felin
+ - type: FlavorProfile
+ flavors:
+ - milk
+ - creamy
+ - fish
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyHuman
+ components:
+ - type: Sprite
+ state: human
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyKidan
+ components:
+ - type: Sprite
+ state: kidan
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyMoth
+ components:
+ - type: Sprite
+ state: moth
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyMurine
+ components:
+ - type: Sprite
+ state: murine
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummySareng
+ components:
+ - type: Sprite
+ state: sareng
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummySlime
+ components:
+ - type: Sprite
+ state: slime
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - slime
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyTayara
+ components:
+ - type: Sprite
+ state: tayara
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyLizard
+ components:
+ - type: Sprite
+ state: unath
+
+
+- type: entity
+ parent: FoodSweetsGummyBase
+ id: FoodSweetsGummyVulpa
+ components:
+ - type: Sprite
+ state: vulpa
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/gums.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/gums.yml
new file mode 100644
index 0000000000..8315bc7f2f
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/gums.yml
@@ -0,0 +1,38 @@
+- type: entity
+ parent: FoodSweetsGumBase
+ id: FoodSweetsGumBlue
+ components:
+ - type: Sprite
+ state: gum_blue
+ - type: Clothing
+ equippedPrefix: gumblue
+ - type: FlavorProfile
+ flavors:
+ - cold
+ - minty
+
+- type: entity
+ parent: FoodSweetsGumBase
+ id: FoodSweetsGumPink
+ components:
+ - type: Sprite
+ state: gum_pink
+ - type: Clothing
+ equippedPrefix: gumpink
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - strawberry
+
+- type: entity
+ parent: FoodSweetsGumBase
+ id: FoodSweetsGumYellow
+ components:
+ - type: Sprite
+ state: gum_yelo
+ - type: Clothing
+ equippedPrefix: gumyelo
+ - type: FlavorProfile
+ flavors:
+ - fruity
+ - sour
diff --git a/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/mint_sticks.yml b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/mint_sticks.yml
new file mode 100644
index 0000000000..ab34478708
--- /dev/null
+++ b/Resources/Prototypes/_WL/Entities/Objects/Consumable/Food/Sweets/mint_sticks.yml
@@ -0,0 +1,41 @@
+- type: entity
+ parent: FoodSweetsMintStickBase
+ id: FoodSweetsMintStickBlue
+ components:
+ - type: Sprite
+ state: blue_ms
+ - type: Clothing
+ equippedPrefix: blue
+ - type: Item
+ heldPrefix: blue
+
+- type: entity
+ parent: FoodSweetsMintStickBase
+ id: FoodSweetsMintStickRed
+ components:
+ - type: Sprite
+ state: red_ms
+ - type: Clothing
+ equippedPrefix: red
+ - type: Item
+ heldPrefix: red
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - strawberry
+
+- type: entity
+ parent: FoodSweetsMintStickBase
+ id: FoodSweetsMintStickYellow
+ components:
+ - type: Sprite
+ state: yelo_ms
+ - type: Clothing
+ equippedPrefix: yelo
+ - type: Item
+ heldPrefix: yelo
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - sour
+ - minty
diff --git a/Resources/Prototypes/_Wega/barks.yml b/Resources/Prototypes/_Wega/barks.yml
new file mode 100644
index 0000000000..eb20ebf55b
--- /dev/null
+++ b/Resources/Prototypes/_Wega/barks.yml
@@ -0,0 +1,665 @@
+#region Undertale
+
+- type: bark
+ id: BarksUndertaleAlphys
+ name: Alphys (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_alphys.ogg"
+
+- type: bark
+ id: BarksUndertaleAsgore
+ name: Asgore (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_asgore.ogg"
+
+- type: bark
+ id: BarksUndertaleFlowey
+ name: Flowey (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_flowey_1.ogg"
+
+- type: bark
+ id: BarksUndertaleFloweyEvil
+ name: Evil Flowey (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_flowey_2.ogg"
+
+- type: bark
+ id: BarksUndertaleGaster
+ name: Gaster (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_gaster_1.ogg"
+ - "/Audio/_Wega/Voice/Barks/voice_gaster_2.ogg"
+ - "/Audio/_Wega/Voice/Barks/voice_gaster_3.ogg"
+ - "/Audio/_Wega/Voice/Barks/voice_gaster_4.ogg"
+ - "/Audio/_Wega/Voice/Barks/voice_gaster_5.ogg"
+ - "/Audio/_Wega/Voice/Barks/voice_gaster_6.ogg"
+ - "/Audio/_Wega/Voice/Barks/voice_gaster_7.ogg"
+
+- type: bark
+ id: BarksUndertaleMettaton
+ name: Mettaton (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_metta_1.ogg"
+
+- type: bark
+ id: BarksUndertaleMonster1
+ name: Monster 1 (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_monster1.ogg"
+
+- type: bark
+ id: BarksUndertaleMonster2
+ name: Monster 2 (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_monster2.ogg"
+
+- type: bark
+ id: BarksUndertalePapyrus
+ name: Papyrus (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_papyrus.ogg"
+
+- type: bark
+ id: BarksUndertaleSans
+ name: Sans (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_sans.ogg"
+
+- type: bark
+ id: BarksUndertaleTemmie
+ name: Temmie (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_temmie.ogg"
+
+- type: bark
+ id: BarksUndertaleToriel
+ name: Toriel (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_toriel.ogg"
+
+- type: bark
+ id: BarksUndertaleUndyne
+ name: Undyne (Undertale)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_undyne.ogg"
+
+#region Deltarune
+
+- type: bark
+ id: BarksUndertaleRalsei
+ name: Ralsei (Deltarune)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_ralsei.ogg"
+
+- type: bark
+ id: BarksUndertaleSusie
+ name: Susie (Deltarune)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/voice_susie.ogg"
+
+#region Don't Starve
+
+- type: bark
+ id: BarksDontStarveWilson
+ name: Wilson (Don't Starve)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/wilson_bark.ogg"
+
+- type: bark
+ id: BarksDontStarveWolfgang
+ name: Wolfgang (Don't Starve)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/wolfgang_bark.ogg"
+
+- type: bark
+ id: BarksDontStarveWoodie
+ name: Woodie (Don't Starve)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/woodie_bark.ogg"
+
+- type: bark
+ id: BarksDontStarveWurt
+ name: Wurt (Don't Starve)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/wurt_bark.ogg"
+
+- type: bark
+ id: BarksDontStarveWX78
+ name: WX-78 (Don't Starve)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/wx78_bark.ogg"
+
+#region Goon Station
+
+- type: bark
+ id: BarksGoonBlub
+ name: Blub (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/blub.ogg"
+
+- type: bark
+ id: BarksGoonBottalk1
+ name: Bottalk 1 (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bottalk_1.ogg"
+
+- type: bark
+ id: BarksGoonBottalk2
+ name: Bottalk 2 (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bottalk_2.ogg"
+
+- type: bark
+ id: BarksGoonBottalk3
+ name: Bottalk 3 (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bottalk_3.ogg"
+
+- type: bark
+ id: BarksGoonBottalk4
+ name: Bottalk 4 (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bottalk_4.ogg"
+
+- type: bark
+ id: BarksGoonBuwoo
+ name: Buwoo (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/buwoo.ogg"
+
+- type: bark
+ id: BarksGoonCow
+ name: Cow (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/cow.ogg"
+
+- type: bark
+ id: BarksGoonLizard
+ name: Lizard (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/lizard.ogg"
+
+- type: bark
+ id: BarksGoonPug
+ name: Pug (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/pug.ogg"
+
+- type: bark
+ id: BarksGoonPugg
+ name: Pugg (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/pugg.ogg"
+
+- type: bark
+ id: BarksGoonRadio1
+ name: Radio 1 (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/radio.ogg"
+
+- type: bark
+ id: BarksGoonRadio2
+ name: Radio 2 (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/radio2.ogg"
+
+- type: bark
+ id: BarksGoonRadio3
+ name: Radio (AI) (Goon Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/radio_ai.ogg"
+
+- type: bark
+ id: BarksGoonRoach
+ name: Roach (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/roach.ogg"
+
+- type: bark
+ id: BarksGoonSkelly
+ name: Skelly (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/skelly.ogg"
+
+- type: bark
+ id: BarksGoonSpeak1
+ name: Speak 1 (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/speak_1.ogg"
+
+- type: bark
+ id: BarksGoonSpeak2
+ name: Speak 2 (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/speak_2.ogg"
+
+- type: bark
+ id: BarksGoonSpeak3
+ name: Speak 3 (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/speak_3.ogg"
+
+- type: bark
+ id: BarksGoonSpeak4
+ name: Speak 4 (Goon Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/speak_4.ogg"
+
+#region Ace Attorney
+
+- type: bark
+ id: BarksAceAttorneyTalk1
+ name: Ace Talk 1 (Ace Attorney)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/aa_blip.ogg"
+
+- type: bark
+ id: BarksAceAttorneyTalk2
+ name: Ace Talk 2 (Ace Attorney)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/aa_dd_blip.ogg"
+
+- type: bark
+ id: BarksAceAttorneyTalk3
+ name: Ace Talk 3 (Ace Attorney)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/aa_tgaa_blip.ogg"
+
+- type: bark
+ id: BarksAceAttorneyTalk4
+ name: Ace Typewriter (Ace Attorney)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/aa_blip_typewriter.ogg"
+
+#region Banjo-Kazooie
+
+- type: bark
+ id: BarksBanjoKazooieAhuh
+ name: Ahuh (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/ahuh.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieBirdwhistle1
+ name: Whistle 1 (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/birdwhistle.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieBirdwhistle2
+ name: Whistle 2 (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/birdwhistle2.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieCaw1
+ name: Caw 1 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/caw.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieCaw2
+ name: Caw 2 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/caw2.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieCaw3
+ name: Caw 3 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/caw3.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieDwoop
+ name: Dwoop (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/dwoop.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieEhh1
+ name: Ehh 1 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/ehh.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieEhh2
+ name: Ehh 2 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/ehh2.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieEhh3
+ name: Ehh 3 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/ehh3.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieEhh4
+ name: Ehh 4 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/ehh4.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieEhh5
+ name: Ehh 5 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/ehh5.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieEugh
+ name: Eugh (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/eugh.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieFaucet1
+ name: Faucet 1 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/faucet.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieFaucet2
+ name: Faucet 2 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/faucet2.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieGrowl1
+ name: Growl 1 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/growl.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieGrowl2
+ name: Growl 2 (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/growl2.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieHaha
+ name: Haha (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/haha.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieHoot
+ name: Hoot (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/hoot.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieMoan1
+ name: Moan 1 (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/moan1.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieMoan2
+ name: Moan 2 (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/moan2.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieMoan3
+ name: Moan 3 (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/moan3.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieRaah1
+ name: Raah 1 (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/raah1.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieRaah2
+ name: Raah 2 (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/raah2.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieRibbit
+ name: Ribbit (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/ribbit.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieSlurp
+ name: Slurp (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/slurp.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieTweet
+ name: Tweet (Banjo-Kazooie)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/tweet.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieUhm
+ name: Uhm (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/uhm.ogg"
+
+- type: bark
+ id: BarksBanjoKazooieZap
+ name: Zap (Banjo-Kazooie)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/zap.ogg"
+
+#region Citadel Station
+
+- type: bark
+ id: BarksCitadelMutedString1
+ name: Muted String Low (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/c2.ogg"
+
+- type: bark
+ id: BarksCitadelMutedString2
+ name: Muted String Medium (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/c3.ogg"
+
+- type: bark
+ id: BarksCitadelMutedString3
+ name: Muted String High (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/c4.ogg"
+
+- type: bark
+ id: BarksCitadelBanjo1
+ name: Banjo Medium (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/cn3.ogg"
+
+- type: bark
+ id: BarksCitadelBanjo2
+ name: Banjo High (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/cn4.ogg"
+
+- type: bark
+ id: BarksCitadelSqueaky
+ name: Squeaky (Citadel Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/toysqueak1.ogg"
+
+- type: bark
+ id: BarksCitadelBeepy
+ name: Beepy (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/terminal_select.ogg"
+
+- type: bark
+ id: BarksCitadelChittery
+ name: Chittery (Citadel Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/chitter.ogg"
+
+- type: bark
+ id: BarksCitadelSynthetic1
+ name: Synthetic Grunt (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bloop.ogg"
+
+- type: bark
+ id: BarksCitadelSynthetic2
+ name: Synthetic Normal (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/uplinkerror.ogg"
+
+- type: bark
+ id: BarksCitadelWindy
+ name: Windy (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bulletflyby.ogg"
+
+- type: bark
+ id: BarksCitadelBrassy
+ name: Brassy (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/integration_cog_install.ogg"
+
+- type: bark
+ id: BarksCitadelMerp
+ name: Merp (Citadel Station)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/merp.ogg"
+
+- type: bark
+ id: BarksCitadelBark
+ name: Bark (Citadel Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bark1.ogg"
+
+- type: bark
+ id: BarksCitadelNya
+ name: Nya (Citadel Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/nya.ogg"
+
+- type: bark
+ id: BarksCitadelWeh
+ name: Weh (Citadel Station)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/weh.ogg"
+
+#region Other
+
+- type: bark
+ id: BarksOtherBleat
+ name: Bleat (Other)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/bleat_bark.ogg"
+
+- type: bark
+ id: BarksOtherMoffSqueak
+ name: Moff Squeak (Other)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/mothsqueak.ogg"
+
+- type: bark
+ id: BarksOtherNomi
+ name: Nomi (Other)
+ roundStart: true
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/nomi.ogg"
+
+- type: bark
+ id: BarksOtherBelial
+ name: Belial (Other)
+ roundStart: false
+ soundFiles:
+ - "/Audio/_Wega/Voice/Barks/poyo.ogg"
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum-inhand-left.png
new file mode 100644
index 0000000000..1b8e7f0467
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum-inhand-right.png
new file mode 100644
index 0000000000..79755fb138
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_blue.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_blue.png
new file mode 100644
index 0000000000..dbbdaf7041
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_blue.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_pink.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_pink.png
new file mode 100644
index 0000000000..14429a3719
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_pink.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_yelo.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_yelo.png
new file mode 100644
index 0000000000..1c2d63250a
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gum_yelo.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumblue-equipped-MASK.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumblue-equipped-MASK.png
new file mode 100644
index 0000000000..687f21a3da
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumblue-equipped-MASK.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack-inhand-left.png
new file mode 100644
index 0000000000..67c33e032f
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack-inhand-right.png
new file mode 100644
index 0000000000..ae84640e79
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack.png
new file mode 100644
index 0000000000..ab5d881513
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack_open.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack_open.png
new file mode 100644
index 0000000000..70e5c47a44
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpack_open.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpink-equipped-MASK.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpink-equipped-MASK.png
new file mode 100644
index 0000000000..ba22f84943
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumpink-equipped-MASK.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumyelo-equipped-MASK.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumyelo-equipped-MASK.png
new file mode 100644
index 0000000000..557553ff3f
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/gumyelo-equipped-MASK.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/meta.json b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/meta.json
new file mode 100644
index 0000000000..ab6bab2e9e
--- /dev/null
+++ b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gum.rsi/meta.json
@@ -0,0 +1,156 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "copyright": "Maded by ReArtInt (discord id: 509460992518914048, username: reartint)",
+ "license": "CC-BY-SA-3.0",
+ "states": [
+ {
+ "name": "gum_blue"
+ },
+ {
+ "name": "gum_pink"
+ },
+ {
+ "name": "gum_yelo"
+ },
+ {
+ "name": "gumpack"
+ },
+ {
+ "name": "gumpack_open"
+ },
+ {
+ "name": "gum-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "gum-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "gumpack-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "gumpack-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "gumblue-equipped-MASK",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "gumpink-equipped-MASK",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "gumyelo-equipped-MASK",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.08,
+ 1
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/arachn.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/arachn.png
new file mode 100644
index 0000000000..4e6f051902
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/arachn.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/cischi.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/cischi.png
new file mode 100644
index 0000000000..a8ec3c9174
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/cischi.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/felin.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/felin.png
new file mode 100644
index 0000000000..ed156f2906
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/felin.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies-inhand-left.png
new file mode 100644
index 0000000000..e780f27ab8
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies-inhand-right.png
new file mode 100644
index 0000000000..25753e4ec3
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies.png
new file mode 100644
index 0000000000..93df4e2582
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies_empty.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies_empty.png
new file mode 100644
index 0000000000..8eb12d686d
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummies_empty.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummy-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummy-inhand-left.png
new file mode 100644
index 0000000000..1b8e7f0467
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummy-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummy-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummy-inhand-right.png
new file mode 100644
index 0000000000..79755fb138
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/gummy-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/human.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/human.png
new file mode 100644
index 0000000000..d4cc984342
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/human.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/kidan.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/kidan.png
new file mode 100644
index 0000000000..7bb8d2ea13
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/kidan.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/meta.json b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/meta.json
new file mode 100644
index 0000000000..293db8e690
--- /dev/null
+++ b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/meta.json
@@ -0,0 +1,69 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "copyright": "Made by ReArtInt (discord id: 509460992518914048, username: reartint)",
+ "license": "CC-BY-SA-3.0",
+ "states": [
+ {
+ "name": "arachn"
+ },
+ {
+ "name": "cischi"
+ },
+ {
+ "name": "felin"
+ },
+ {
+ "name": "human"
+ },
+ {
+ "name": "kidan"
+ },
+ {
+ "name": "moth"
+ },
+ {
+ "name": "murine"
+ },
+ {
+ "name": "sareng"
+ },
+ {
+ "name": "slime"
+ },
+ {
+ "name": "tayara"
+ },
+ {
+ "name": "unath"
+ },
+ {
+ "name": "vulpa"
+ },
+ {
+ "name": "gummies"
+ },
+ {
+ "name": "gummies_empty"
+ },
+ {
+ "name": "gummies-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "gummies-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "gummy-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "gummy-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/moth.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/moth.png
new file mode 100644
index 0000000000..410097960a
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/moth.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/murine.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/murine.png
new file mode 100644
index 0000000000..063ef52306
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/murine.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/sareng.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/sareng.png
new file mode 100644
index 0000000000..1274f9c117
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/sareng.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/slime.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/slime.png
new file mode 100644
index 0000000000..dad5676231
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/slime.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/tayara.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/tayara.png
new file mode 100644
index 0000000000..d42e171e6f
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/tayara.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/unath.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/unath.png
new file mode 100644
index 0000000000..e7b34b6ced
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/unath.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/vulpa.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/vulpa.png
new file mode 100644
index 0000000000..63cfcdc18b
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/gummy.rsi/vulpa.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue-inhand-left.png
new file mode 100644
index 0000000000..f1350b1970
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue-inhand-right.png
new file mode 100644
index 0000000000..7c046debe8
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue_loli.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue_loli.png
new file mode 100644
index 0000000000..47ebe5b110
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/blue_loli.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn-inhand-left.png
new file mode 100644
index 0000000000..91ad7a06ed
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn-inhand-right.png
new file mode 100644
index 0000000000..49091a8d07
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn_loli.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn_loli.png
new file mode 100644
index 0000000000..72364d9577
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/eatn_loli.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/equipped-MASK.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/equipped-MASK.png
new file mode 100644
index 0000000000..fd0c1d269d
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/equipped-MASK.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime-inhand-left.png
new file mode 100644
index 0000000000..f6388d165c
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime-inhand-right.png
new file mode 100644
index 0000000000..5f995f9485
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime_loli.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime_loli.png
new file mode 100644
index 0000000000..4402cd5867
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/lime_loli.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/meta.json b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/meta.json
new file mode 100644
index 0000000000..d641805926
--- /dev/null
+++ b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/meta.json
@@ -0,0 +1,92 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "copyright": "Maded by ReArtInt (discord id: 509460992518914048, username: reartint)",
+ "license": "CC-BY-SA-3.0",
+ "states": [
+ {
+ "name": "blue_loli"
+ },
+ {
+ "name": "lime_loli"
+ },
+ {
+ "name": "orng_loli"
+ },
+ {
+ "name": "pink_loli"
+ },
+ {
+ "name": "prpl_loli"
+ },
+ {
+ "name": "yelo_loli"
+ },
+ {
+ "name": "eatn_loli"
+ },
+ {
+ "name": "blue-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "blue-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "eatn-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "eatn-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "equipped-MASK",
+ "directions": 4
+ },
+ {
+ "name": "lime-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "lime-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "orng-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "orng-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "pink-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "pink-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "prpl-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "prpl-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "yelo-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "yelo-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng-inhand-left.png
new file mode 100644
index 0000000000..609fb6cfc3
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng-inhand-right.png
new file mode 100644
index 0000000000..a4fed0ed62
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng_loli.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng_loli.png
new file mode 100644
index 0000000000..6aedfd4840
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/orng_loli.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink-inhand-left.png
new file mode 100644
index 0000000000..f67efb1572
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink-inhand-right.png
new file mode 100644
index 0000000000..64e1531032
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink_loli.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink_loli.png
new file mode 100644
index 0000000000..49724d4e18
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/pink_loli.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl-inhand-left.png
new file mode 100644
index 0000000000..db8dfd0ae5
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl-inhand-right.png
new file mode 100644
index 0000000000..f17e2412d3
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl_loli.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl_loli.png
new file mode 100644
index 0000000000..10fa1bb226
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/prpl_loli.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo-inhand-left.png
new file mode 100644
index 0000000000..c46599d60d
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo-inhand-right.png
new file mode 100644
index 0000000000..6c46c2cb09
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo_loli.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo_loli.png
new file mode 100644
index 0000000000..52b970f27a
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/lolipop.rsi/yelo_loli.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/box.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/box.png
new file mode 100644
index 0000000000..19e5622ca0
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/box.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/box_open.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/box_open.png
new file mode 100644
index 0000000000..ebd913be81
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/box_open.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/inhand-left.png
new file mode 100644
index 0000000000..3de1e52ffe
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/inhand-right.png
new file mode 100644
index 0000000000..492dbdb394
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/meta.json b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/meta.json
new file mode 100644
index 0000000000..8cba4b8f1b
--- /dev/null
+++ b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/box.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "copyright": "Maded by ReArtInt (discord id: 509460992518914048, username: reartint)",
+ "license": "CC-BY-SA-3.0",
+ "states": [
+ {
+ "name": "box"
+ },
+ {
+ "name": "box_open"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-equipped-MASK.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-equipped-MASK.png
new file mode 100644
index 0000000000..d31b5dae2b
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-equipped-MASK.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-inhand-left.png
new file mode 100644
index 0000000000..b6fe39acc8
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-inhand-right.png
new file mode 100644
index 0000000000..ae6d29a2d5
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue_ms.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue_ms.png
new file mode 100644
index 0000000000..05f6c74ea8
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/blue_ms.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/meta.json b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/meta.json
new file mode 100644
index 0000000000..d4fff818f1
--- /dev/null
+++ b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/meta.json
@@ -0,0 +1,56 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "copyright": "Maded by ReArtInt (discord id: 509460992518914048, username: reartint)",
+ "license": "CC-BY-SA-3.0",
+ "states": [
+ {
+ "name": "blue_ms"
+ },
+ {
+ "name": "red_ms"
+ },
+ {
+ "name": "yelo_ms"
+ },
+ {
+ "name": "blue-equipped-MASK",
+ "directions": 4
+ },
+ {
+ "name": "blue-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "blue-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "red-equipped-MASK",
+ "directions": 4
+ },
+ {
+ "name": "red-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "red-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "yelo-equipped-MASK",
+ "directions": 4
+ },
+ {
+ "name": "yelo-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "yelo-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-equipped-MASK.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-equipped-MASK.png
new file mode 100644
index 0000000000..f55c5cad8b
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-equipped-MASK.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-inhand-left.png
new file mode 100644
index 0000000000..7cd8f794d5
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-inhand-right.png
new file mode 100644
index 0000000000..e79af6d921
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red_ms.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red_ms.png
new file mode 100644
index 0000000000..60f81cb0d6
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/red_ms.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-equipped-MASK.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-equipped-MASK.png
new file mode 100644
index 0000000000..9488d7dc36
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-equipped-MASK.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-inhand-left.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-inhand-left.png
new file mode 100644
index 0000000000..4df48500b2
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-inhand-left.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-inhand-right.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-inhand-right.png
new file mode 100644
index 0000000000..a81b8758da
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo-inhand-right.png differ
diff --git a/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo_ms.png b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo_ms.png
new file mode 100644
index 0000000000..ba3d02b788
Binary files /dev/null and b/Resources/Textures/_WL/Entities/Objects/Consumable/Food/sweets/mint_stick/sticks.rsi/yelo_ms.png differ