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