diff --git a/Content.Client/Command/CommunicationsConsoleMenu.cs b/Content.Client/Command/CommunicationsConsoleMenu.cs new file mode 100644 index 0000000000..0a6804264c --- /dev/null +++ b/Content.Client/Command/CommunicationsConsoleMenu.cs @@ -0,0 +1,80 @@ +using System.Threading; +using Content.Client.GameObjects.Components.Command; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Log; +using Robust.Shared.Maths; +using Timer = Robust.Shared.Timers.Timer; + +namespace Content.Client.Command +{ + public class CommunicationsConsoleMenu : SS14Window + { +#pragma warning disable 649 + [Dependency] private readonly ILocalizationManager _localizationManager; +#pragma warning restore 649 + + protected override Vector2? CustomSize => new Vector2(600, 400); + + private CommunicationsConsoleBoundUserInterface Owner { get; set; } + private readonly CancellationTokenSource _timerCancelTokenSource = new CancellationTokenSource(); + private readonly Button _emergencyShuttleButton; + private readonly RichTextLabel _countdownLabel; + + public CommunicationsConsoleMenu(CommunicationsConsoleBoundUserInterface owner) + { + IoCManager.InjectDependencies(this); + + Title = _localizationManager.GetString("Communications Console"); + Owner = owner; + + _countdownLabel = new RichTextLabel(){CustomMinimumSize = new Vector2(0, 200)}; + _emergencyShuttleButton = new Button(); + _emergencyShuttleButton.OnPressed += (e) => Owner.EmergencyShuttleButtonPressed(); + + var vbox = new VBoxContainer() {SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsVertical = SizeFlags.FillExpand}; + + vbox.AddChild(_countdownLabel); + vbox.AddChild(_emergencyShuttleButton); + + var hbox = new HBoxContainer() {SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsVertical = SizeFlags.FillExpand}; + hbox.AddChild(new Control(){CustomMinimumSize = new Vector2(100,0), SizeFlagsHorizontal = SizeFlags.FillExpand}); + hbox.AddChild(vbox); + hbox.AddChild(new Control(){CustomMinimumSize = new Vector2(100,0), SizeFlagsHorizontal = SizeFlags.FillExpand}); + + Contents.AddChild(hbox); + + UpdateCountdown(); + Timer.SpawnRepeating(1000, UpdateCountdown, _timerCancelTokenSource.Token); + } + + public void UpdateCountdown() + { + if (!Owner.CountdownStarted) + { + _countdownLabel.SetMessage(""); + _emergencyShuttleButton.Text = _localizationManager.GetString("Call emergency shuttle"); + return; + } + + _emergencyShuttleButton.Text = _localizationManager.GetString("Recall emergency shuttle"); + _countdownLabel.SetMessage($"Time remaining\n{Owner.Countdown.ToString()}s"); + } + + public override void Close() + { + base.Close(); + + _timerCancelTokenSource.Cancel(); + } + + protected override void Dispose(bool disposing) + { + if(disposing) + _timerCancelTokenSource.Cancel(); + } + } +} diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index e1b50b11e8..1cc3c720a0 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -134,6 +134,7 @@ namespace Content.Client "Paper", "Write", "Bloodstream", + "TransformableContainer", "Mind", "MovementSpeedModifier", "StorageFill" @@ -148,7 +149,7 @@ namespace Content.Client factory.Register(); factory.Register(); - factory.Register(); + factory.Register(); factory.Register(); factory.Register(); diff --git a/Content.Client/GameObjects/Components/Command/CommunicationsConsoleBoundUserInterface.cs b/Content.Client/GameObjects/Components/Command/CommunicationsConsoleBoundUserInterface.cs new file mode 100644 index 0000000000..c82ded4c7a --- /dev/null +++ b/Content.Client/GameObjects/Components/Command/CommunicationsConsoleBoundUserInterface.cs @@ -0,0 +1,83 @@ +using System; +using Content.Client.Command; +using Content.Shared.GameObjects.Components.Command; +using Robust.Client.GameObjects.Components.UserInterface; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.ViewVariables; + +namespace Content.Client.GameObjects.Components.Command +{ + public class CommunicationsConsoleBoundUserInterface : BoundUserInterface + { + [ViewVariables] + private CommunicationsConsoleMenu _menu; + + [Dependency] private IGameTiming _gameTiming; + + public bool CountdownStarted { get; private set; } + + public int Countdown => _expectedCountdownTime == null + ? 0 : Math.Max((int)_expectedCountdownTime.Value.Subtract(_gameTiming.CurTime).TotalSeconds, 0); + private TimeSpan? _expectedCountdownTime; + + public CommunicationsConsoleBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _menu = new CommunicationsConsoleMenu(this); + + _menu.OnClose += Close; + + _menu.OpenCentered(); + } + + public void EmergencyShuttleButtonPressed() + { + if(CountdownStarted) + RecallShuttle(); + else + CallShuttle(); + } + + public void CallShuttle() + { + SendMessage(new CommunicationsConsoleCallEmergencyShuttleMessage()); + } + + public void RecallShuttle() + { + SendMessage(new CommunicationsConsoleRecallEmergencyShuttleMessage()); + } + + protected override void ReceiveMessage(BoundUserInterfaceMessage message) + { + switch (message) + { + } + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + if (!(state is CommunicationsConsoleInterfaceState commsState)) + return; + + _expectedCountdownTime = commsState.ExpectedCountdownEnd; + CountdownStarted = commsState.CountdownStarted; + _menu?.UpdateCountdown(); + + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) return; + _menu?.Dispose(); + } + } +} diff --git a/Content.Client/GameObjects/Components/Research/LatheBoundUserInterface.cs b/Content.Client/GameObjects/Components/Research/LatheBoundUserInterface.cs index 3273cb79f3..9e318f04a6 100644 --- a/Content.Client/GameObjects/Components/Research/LatheBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Research/LatheBoundUserInterface.cs @@ -17,9 +17,9 @@ namespace Content.Client.GameObjects.Components.Research private IPrototypeManager _prototypeManager; #pragma warning restore [ViewVariables] - private LatheMenu menu; + private LatheMenu _menu; [ViewVariables] - private LatheQueueMenu queueMenu; + private LatheQueueMenu _queueMenu; public MaterialStorageComponent Storage { get; private set; } public SharedLatheComponent Lathe { get; private set; } @@ -48,30 +48,30 @@ namespace Content.Client.GameObjects.Components.Research Lathe = lathe; Database = database; - menu = new LatheMenu(this); - queueMenu = new LatheQueueMenu { Owner = this }; + _menu = new LatheMenu(this); + _queueMenu = new LatheQueueMenu { Owner = this }; - menu.OnClose += Close; + _menu.OnClose += Close; - menu.Populate(); - menu.PopulateMaterials(); + _menu.Populate(); + _menu.PopulateMaterials(); - menu.QueueButton.OnPressed += (args) => { queueMenu.OpenCentered(); }; + _menu.QueueButton.OnPressed += (args) => { _queueMenu.OpenCentered(); }; - menu.ServerConnectButton.OnPressed += (args) => + _menu.ServerConnectButton.OnPressed += (args) => { SendMessage(new SharedLatheComponent.LatheServerSelectionMessage()); }; - menu.ServerSyncButton.OnPressed += (args) => + _menu.ServerSyncButton.OnPressed += (args) => { SendMessage(new SharedLatheComponent.LatheServerSyncMessage()); }; - storage.OnMaterialStorageChanged += menu.PopulateDisabled; - storage.OnMaterialStorageChanged += menu.PopulateMaterials; + storage.OnMaterialStorageChanged += _menu.PopulateDisabled; + storage.OnMaterialStorageChanged += _menu.PopulateMaterials; - menu.OpenCentered(); + _menu.OpenCentered(); } public void Queue(LatheRecipePrototype recipe, int quantity = 1) @@ -85,10 +85,10 @@ namespace Content.Client.GameObjects.Components.Research { case SharedLatheComponent.LatheProducingRecipeMessage msg: if (!_prototypeManager.TryIndex(msg.ID, out LatheRecipePrototype recipe)) break; - queueMenu?.SetInfo(recipe); + _queueMenu?.SetInfo(recipe); break; case SharedLatheComponent.LatheStoppedProducingRecipeMessage _: - queueMenu?.ClearInfo(); + _queueMenu?.ClearInfo(); break; case SharedLatheComponent.LatheFullQueueMessage msg: _queuedRecipes.Clear(); @@ -97,7 +97,7 @@ namespace Content.Client.GameObjects.Components.Research if (!_prototypeManager.TryIndex(id, out LatheRecipePrototype recipePrototype)) break; _queuedRecipes.Enqueue(recipePrototype); } - queueMenu?.PopulateList(); + _queueMenu?.PopulateList(); break; } } @@ -106,8 +106,8 @@ namespace Content.Client.GameObjects.Components.Research { base.Dispose(disposing); if (!disposing) return; - menu?.Dispose(); - queueMenu?.Dispose(); + _menu?.Dispose(); + _queueMenu?.Dispose(); } } } diff --git a/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs b/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs index d4140d31f4..b0126dbd10 100644 --- a/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs @@ -65,19 +65,11 @@ namespace Content.Server.GameObjects.Components.Chemistry serializer.DataField(ref _initialMaxVolume, "initialMaxVolume", 15); serializer.DataField(ref _transferAmount, "transferAmount", 5); } - - public override void Initialize() + protected override void Startup() { - base.Initialize(); - - //Create and setup internal storage - _internalContents = new SolutionComponent(); - _internalContents.InitializeFromPrototype(); - _internalContents.Init(); - _internalContents.MaxVolume = _initialMaxVolume; - _internalContents.Owner = Owner; //Manually set owner to avoid crash when VV'ing this + base.Startup(); + _internalContents = Owner.GetComponent(); _internalContents.Capabilities |= SolutionCaps.Injector; - //Set _toggleState based on prototype _toggleState = _injectOnly ? InjectorToggleMode.Inject : InjectorToggleMode.Draw; } diff --git a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs index 6fb12aa337..ab39fcad69 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs @@ -30,7 +30,7 @@ namespace Content.Server.GameObjects.Components.Chemistry [RegisterComponent] [ComponentReference(typeof(IActivate))] [ComponentReference(typeof(IAttackBy))] - public class ReagentDispenserComponent : SharedReagentDispenserComponent, IActivate, IAttackBy + public class ReagentDispenserComponent : SharedReagentDispenserComponent, IActivate, IAttackBy, ISolutionChange { #pragma warning disable 649 [Dependency] private readonly IServerNotifyManager _notifyManager; @@ -161,7 +161,7 @@ namespace Content.Server.GameObjects.Components.Chemistry private bool PlayerCanUseDispenser(IEntity playerEntity) { //Need player entity to check if they are still able to use the dispenser - if (playerEntity == null) + if (playerEntity == null) return false; //Check if player can interact in their current state if (!ActionBlockerSystem.CanInteract(playerEntity) || !ActionBlockerSystem.CanUse(playerEntity)) @@ -207,7 +207,6 @@ namespace Content.Server.GameObjects.Components.Chemistry return; var beaker = _beakerContainer.ContainedEntity; - Solution.SolutionChanged -= HandleSolutionChangedEvent; _beakerContainer.Remove(_beakerContainer.ContainedEntity); UpdateUserInterface(); @@ -304,7 +303,6 @@ namespace Content.Server.GameObjects.Components.Chemistry else { _beakerContainer.Insert(activeHandEntity); - Solution.SolutionChanged += HandleSolutionChangedEvent; UpdateUserInterface(); } } @@ -317,10 +315,7 @@ namespace Content.Server.GameObjects.Components.Chemistry return true; } - private void HandleSolutionChangedEvent() - { - UpdateUserInterface(); - } + void ISolutionChange.SolutionChanged(SolutionChangeEventArgs eventArgs) => UpdateUserInterface(); private void ClickSound() { @@ -329,5 +324,7 @@ namespace Content.Server.GameObjects.Components.Chemistry sound.Play("/Audio/machines/machine_switch.ogg", AudioParams.Default.WithVolume(-2f)); } } + + } } diff --git a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs index 98b064bfc2..81f8656a0e 100644 --- a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs @@ -1,27 +1,34 @@ using System; using System.Collections.Generic; using System.ComponentModel.Design; +using System.Linq; using Content.Server.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.Nutrition; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Shared.Chemistry; using Content.Shared.GameObjects; +using Content.Shared.Utility; +using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.Maths; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Chemistry { /// - /// Shared ECS component that manages a liquid solution of reagents. + /// ECS component that manages a liquid solution of reagents. /// [RegisterComponent] - internal class SolutionComponent : Shared.GameObjects.Components.Chemistry.SolutionComponent, IExamine + internal class SolutionComponent : SharedSolutionComponent, IExamine { #pragma warning disable 649 [Dependency] private readonly IPrototypeManager _prototypeManager; @@ -31,27 +38,178 @@ namespace Content.Server.GameObjects.Components.Chemistry private IEnumerable _reactions; private AudioSystem _audioSystem; + private ChemistrySystem _chemistrySystem; + + private SpriteComponent _spriteComponent; + + private Solution _containedSolution = new Solution(); + private int _maxVolume; + private SolutionCaps _capabilities; + private string _fillInitState; + private int _fillInitSteps; + private string _fillPathString = "Objects/Chemistry/fillings.rsi"; + private ResourcePath _fillPath; + private SpriteSpecifier _fillSprite; + + /// + /// The maximum volume of the container. + /// + [ViewVariables(VVAccess.ReadWrite)] + public int MaxVolume + { + get => _maxVolume; + set => _maxVolume = value; // Note that the contents won't spill out if the capacity is reduced. + } + + /// + /// The total volume of all the of the reagents in the container. + /// + [ViewVariables] + public int CurrentVolume => _containedSolution.TotalVolume; + + /// + /// The volume without reagents remaining in the container. + /// + [ViewVariables] + public int EmptyVolume => MaxVolume - CurrentVolume; + + /// + /// The current blended color of all the reagents in the container. + /// + [ViewVariables(VVAccess.ReadWrite)] + public Color SubstanceColor { get; private set; } + + /// + /// The current capabilities of this container (is the top open to pour? can I inject it into another object?). + /// + [ViewVariables(VVAccess.ReadWrite)] + public SolutionCaps Capabilities + { + get => _capabilities; + set => _capabilities = value; + } + + [ViewVariables] + public Solution Solution + { + get => _containedSolution; + set => _containedSolution = value; + } + + public IReadOnlyList ReagentList => _containedSolution.Contents; + + /// + /// Shortcut for Capabilities PourIn flag to avoid binary operators. + /// + public bool CanPourIn => (Capabilities & SolutionCaps.PourIn) != 0; + /// + /// Shortcut for Capabilities PourOut flag to avoid binary operators. + /// + public bool CanPourOut => (Capabilities & SolutionCaps.PourOut) != 0; + /// + /// Shortcut for Capabilities Injectable flag + /// + public bool Injectable => (Capabilities & SolutionCaps.Injectable) != 0; + /// + /// Shortcut for Capabilities Injector flag + /// + public bool Injector => (Capabilities & SolutionCaps.Injector) != 0; + + /// + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref _maxVolume, "maxVol", 0); + serializer.DataField(ref _containedSolution, "contents", _containedSolution); + serializer.DataField(ref _capabilities, "caps", SolutionCaps.None); + serializer.DataField(ref _fillInitState, "fillingState", ""); + serializer.DataField(ref _fillInitSteps, "fillingSteps", 7); + } + + public override void Initialize() + { + base.Initialize(); + _audioSystem = _entitySystemManager.GetEntitySystem(); + _chemistrySystem = _entitySystemManager.GetEntitySystem(); + _reactions = _prototypeManager.EnumeratePrototypes(); + } protected override void Startup() { base.Startup(); - Init(); + RecalculateColor(); + if (!string.IsNullOrEmpty(_fillInitState)) + { + _spriteComponent = Owner.GetComponent(); + _fillPath = new ResourcePath(_fillPathString); + _fillSprite = new SpriteSpecifier.Rsi(_fillPath, _fillInitState + (_fillInitSteps - 1)); + _spriteComponent.AddLayerWithSprite(_fillSprite); + UpdateFillIcon(); + } } - public void Init() + public void RemoveAllSolution() { - _reactions = _prototypeManager.EnumeratePrototypes(); - _audioSystem = _entitySystemManager.GetEntitySystem(); + _containedSolution.RemoveAllSolution(); + OnSolutionChanged(false); + } + + public bool TryRemoveReagent(string reagentId, int quantity) + { + if (!ContainsReagent(reagentId, out var currentQuantity)) return false; + + _containedSolution.RemoveReagent(reagentId, quantity); + OnSolutionChanged(false); + return true; } /// - /// Initializes the SolutionComponent if it doesn't have an owner + /// Attempt to remove the specified quantity from this solution /// - public void InitializeFromPrototype() + /// Quantity of this solution to remove + /// Whether or not the solution was successfully removed + public bool TryRemoveSolution(int quantity) { - // Because Initialize needs an Owner, Startup isn't called, etc. - IoCManager.InjectDependencies(this); - _reactions = _prototypeManager.EnumeratePrototypes(); + if (CurrentVolume == 0) + return false; + + _containedSolution.RemoveSolution(quantity); + OnSolutionChanged(false); + return true; + } + + public Solution SplitSolution(int quantity) + { + var solutionSplit = _containedSolution.SplitSolution(quantity); + OnSolutionChanged(false); + return solutionSplit; + } + + protected void RecalculateColor() + { + if (_containedSolution.TotalVolume == 0) + { + SubstanceColor = Color.Transparent; + return; + } + + Color mixColor = default; + float runningTotalQuantity = 0; + + foreach (var reagent in _containedSolution) + { + runningTotalQuantity += reagent.Quantity; + + if(!_prototypeManager.TryIndex(reagent.ReagentId, out ReagentPrototype proto)) + continue; + if (mixColor == default) + mixColor = proto.SubstanceColor; + mixColor = Color.InterpolateBetween(mixColor, proto.SubstanceColor, + (1 / runningTotalQuantity) * reagent.Quantity); + } + + SubstanceColor = mixColor; } /// @@ -121,6 +279,10 @@ namespace Content.Server.GameObjects.Components.Chemistry void IExamine.Examine(FormattedMessage message) { message.AddText(_loc.GetString("Contains:\n")); + if (ReagentList.Count == 0) + { + message.AddText("Nothing.\n"); + } foreach (var reagent in ReagentList) { if (_prototypeManager.TryIndex(reagent.ReagentId, out ReagentPrototype proto)) @@ -236,12 +398,9 @@ namespace Content.Server.GameObjects.Components.Chemistry } _containedSolution.AddReagent(reagentId, acceptedQuantity); - if (!skipColor) { - RecalculateColor(); - } if(!skipReactionCheck) CheckForReaction(); - OnSolutionChanged(); + OnSolutionChanged(skipColor); return true; } @@ -251,12 +410,9 @@ namespace Content.Server.GameObjects.Components.Chemistry return false; _containedSolution.AddSolution(solution); - if (!skipColor) { - RecalculateColor(); - } if(!skipReactionCheck) CheckForReaction(); - OnSolutionChanged(); + OnSolutionChanged(skipColor); return true; } @@ -324,5 +480,63 @@ namespace Content.Server.GameObjects.Components.Chemistry //Play reaction sound client-side _audioSystem.Play("/Audio/effects/chemistry/bubbles.ogg", Owner.Transform.GridPosition); } + + /// + /// Check if the solution contains the specified reagent. + /// + /// The reagent to check for. + /// Output the quantity of the reagent if it is contained, 0 if it isn't. + /// Return true if the solution contains the reagent. + public bool ContainsReagent(string reagentId, out int quantity) + { + foreach (var reagent in _containedSolution.Contents) + { + if (reagent.ReagentId == reagentId) + { + quantity = reagent.Quantity; + return true; + } + } + quantity = 0; + return false; + } + + public string GetMajorReagentId() + { + if (_containedSolution.Contents.Count == 0) + { + return ""; + } + var majorReagent = _containedSolution.Contents.OrderByDescending(reagent => reagent.Quantity).First();; + return majorReagent.ReagentId; + } + + protected void UpdateFillIcon() + { + if (string.IsNullOrEmpty(_fillInitState)) return; + + var percentage = (double)CurrentVolume / MaxVolume; + var level = ContentHelpers.RoundToLevels(percentage * 100, 100, _fillInitSteps); + + //Transformed glass uses special fancy sprites so we don't bother + if (level == 0 || Owner.TryGetComponent(out var transformableContainerComponent) + && transformableContainerComponent.Transformed) + { + _spriteComponent.LayerSetColor(1, Color.Transparent); + return; + } + _fillSprite = new SpriteSpecifier.Rsi(_fillPath, _fillInitState+level); + _spriteComponent.LayerSetSprite(1, _fillSprite); + _spriteComponent.LayerSetColor(1,SubstanceColor); + } + + protected virtual void OnSolutionChanged(bool skipColor) + { + if (!skipColor) + RecalculateColor(); + + UpdateFillIcon(); + _chemistrySystem.HandleSolutionChange(Owner); + } } } diff --git a/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs b/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs new file mode 100644 index 0000000000..dec60171f8 --- /dev/null +++ b/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs @@ -0,0 +1,90 @@ +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.Chemistry; +using ICSharpCode.SharpZipLib.Zip.Compression; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.IoC; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.GameObjects.Components.Chemistry +{ + [RegisterComponent] + public class TransformableContainerComponent : Component, ISolutionChange + { +#pragma warning disable 649 + [Dependency] private readonly IPrototypeManager _prototypeManager; +#pragma warning restore 649 + + public override string Name => "TransformableContainer"; + + private bool _transformed = false; + public bool Transformed { get => _transformed; } + + private SpriteSpecifier _initialSprite; + private string _initialName; + private string _initialDescription; + private SpriteComponent _sprite; + + private ReagentPrototype _currentReagent; + + public override void Initialize() + { + base.Initialize(); + + _sprite = Owner.GetComponent(); + _initialSprite = new SpriteSpecifier.Rsi(new ResourcePath(_sprite.BaseRSIPath), "icon"); + _initialName = Owner.Name; + _initialDescription = Owner.Description; + } + + protected override void Startup() + { + base.Startup(); + Owner.GetComponent().Capabilities |= SolutionCaps.FitsInDispenser;; + } + + public void CancelTransformation() + { + _currentReagent = null; + _transformed = false; + _sprite.LayerSetSprite(0, _initialSprite); + Owner.Name = _initialName; + Owner.Description = _initialDescription; + } + + void ISolutionChange.SolutionChanged(SolutionChangeEventArgs eventArgs) + { + var solution = eventArgs.Owner.GetComponent(); + //Transform container into initial state when emptied + if (_currentReagent != null && solution.ReagentList.Count == 0) + { + CancelTransformation(); + } + + //the biggest reagent in the solution decides the appearance + var reagentId = solution.GetMajorReagentId(); + + //If biggest reagent didn't changed - don't change anything at all + if (_currentReagent != null && _currentReagent.ID == reagentId) + { + return; + } + + //Only reagents with spritePath property can change appearance of transformable containers! + if (!string.IsNullOrWhiteSpace(reagentId) && + _prototypeManager.TryIndex(reagentId, out ReagentPrototype proto) && + !string.IsNullOrWhiteSpace(proto.SpriteReplacementPath)) + { + var spriteSpec = new SpriteSpecifier.Rsi(new ResourcePath("Objects/Drinks/" + proto.SpriteReplacementPath),"icon"); + _sprite.LayerSetSprite(0, spriteSpec); + Owner.Name = proto.Name + " glass"; + Owner.Description = proto.Description; + _currentReagent = proto; + _transformed = true; + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs b/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs new file mode 100644 index 0000000000..a3ce594242 --- /dev/null +++ b/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs @@ -0,0 +1,76 @@ +using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameTicking; +using Content.Shared.GameObjects.Components.Command; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.Interfaces.GameObjects; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.GameObjects.Components.Command +{ + [RegisterComponent] + [ComponentReference(typeof(IActivate))] + public class CommunicationsConsoleComponent : SharedCommunicationsConsoleComponent, IActivate + { +#pragma warning disable 649 + [Dependency] private IEntitySystemManager _entitySystemManager; +#pragma warning restore 649 + + private BoundUserInterface _userInterface; + private PowerDeviceComponent _powerDevice; + private bool Powered => _powerDevice.Powered; + private RoundEndSystem RoundEndSystem => _entitySystemManager.GetEntitySystem(); + + public override void Initialize() + { + base.Initialize(); + + _userInterface = Owner.GetComponent().GetBoundUserInterface(CommunicationsConsoleUiKey.Key); + _userInterface.OnReceiveMessage += UserInterfaceOnOnReceiveMessage; + _powerDevice = Owner.GetComponent(); + + RoundEndSystem.OnRoundEndCountdownStarted += UpdateBoundInterface; + RoundEndSystem.OnRoundEndCountdownCancelled += UpdateBoundInterface; + RoundEndSystem.OnRoundEndCountdownFinished += UpdateBoundInterface; + } + + private void UpdateBoundInterface() + { + _userInterface.SetState(new CommunicationsConsoleInterfaceState(RoundEndSystem.ExpectedCountdownEnd)); + } + + private void UserInterfaceOnOnReceiveMessage(ServerBoundUserInterfaceMessage obj) + { + switch (obj.Message) + { + case CommunicationsConsoleCallEmergencyShuttleMessage _: + RoundEndSystem.RequestRoundEnd(); + break; + + case CommunicationsConsoleRecallEmergencyShuttleMessage _: + RoundEndSystem.CancelRoundEndCountdown(); + break; + } + } + + public void OpenUserInterface(IPlayerSession session) + { + _userInterface.Open(session); + } + + void IActivate.Activate(ActivateEventArgs eventArgs) + { + if (!eventArgs.User.TryGetComponent(out IActorComponent actor)) + return; + + if (!Powered) + { + return; + } + OpenUserInterface(actor.playerSession); + } + } +} diff --git a/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs b/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs index 0fa862ce82..9ce1dffacb 100644 --- a/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs +++ b/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs @@ -47,16 +47,11 @@ namespace Content.Server.GameObjects.Components.Metabolism serializer.DataField(ref _initialMaxVolume, "maxVolume", 250); } - public override void Initialize() + protected override void Startup() { - base.Initialize(); - - //Create and setup internal solution storage - _internalSolution = new SolutionComponent(); - _internalSolution.InitializeFromPrototype(); - _internalSolution.Init(); + base.Startup(); + _internalSolution = Owner.GetComponent(); _internalSolution.MaxVolume = _initialMaxVolume; - _internalSolution.Owner = Owner; //Manually set owner to avoid crash when VV'ing this } /// diff --git a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs index ab6f259b24..14356f8cea 100644 --- a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs @@ -42,9 +42,6 @@ namespace Content.Server.GameObjects.Components.Nutrition set => _contents.MaxVolume = value; } - private Solution _initialContents; // This is just for loading from yaml - private int _maxVolume; - private bool _despawnOnFinish; private bool _drinking; @@ -63,53 +60,21 @@ namespace Content.Server.GameObjects.Components.Nutrition public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); - serializer.DataField(ref _initialContents, "contents", null); - serializer.DataField(ref _maxVolume, "max_volume", 0); serializer.DataField(ref _useSound, "use_sound", "/Audio/items/drink.ogg"); // E.g. cola can when done or clear bottle, whatever - // Currently this will enforce it has the same volume but this may change. - serializer.DataField(ref _despawnOnFinish, "despawn_empty", true); + // Currently this will enforce it has the same volume but this may change. - TODO: this should be implemented in a separate component + serializer.DataField(ref _despawnOnFinish, "despawn_empty", false); serializer.DataField(ref _finishPrototype, "spawn_on_finish", null); } - public override void Initialize() - { - base.Initialize(); - if (_contents == null) - { - if (Owner.TryGetComponent(out SolutionComponent solutionComponent)) - { - _contents = solutionComponent; - } - else - { - _contents = Owner.AddComponent(); - //Ensure SolutionComponent supports click transferring if custom one not set - _contents.Capabilities = SolutionCaps.PourIn - | SolutionCaps.PourOut - | SolutionCaps.Injectable; - - var pourable = Owner.AddComponent(); - pourable.TransferAmount = 5; - } - } - - _drinking = false; - if (_maxVolume != 0) - _contents.MaxVolume = _maxVolume; - else - _contents.MaxVolume = _initialContents.TotalVolume; - _contents.SolutionChanged += HandleSolutionChangedEvent; - } - protected override void Startup() { base.Startup(); - if (_initialContents != null) - { - _contents.TryAddSolution(_initialContents, true, true); - } - _initialContents = null; + _contents = Owner.GetComponent(); + _contents.Capabilities = SolutionCaps.PourIn + | SolutionCaps.PourOut + | SolutionCaps.Injectable; + _drinking = false; Owner.TryGetComponent(out AppearanceComponent appearance); _appearanceComponent = appearance; _appearanceComponent?.SetData(SharedFoodComponent.FoodVisuals.MaxUses, MaxVolume); @@ -167,54 +132,6 @@ namespace Content.Server.GameObjects.Components.Nutrition } _drinking = false; } - - Finish(user); - } - - /// - /// Trigger finish behavior in the drink if applicable. - /// Depending on the drink this will either delete it, - /// or convert it to another entity, like an empty variant. - /// - /// The entity that is using the drink - public void Finish(IEntity user) - { - // Drink containers are mostly transient. - if (_drinking || !_despawnOnFinish || UsesLeft() > 0) - return; - - var gridPos = Owner.Transform.GridPosition; - _contents.SolutionChanged -= HandleSolutionChangedEvent; - Owner.Delete(); - - if (_finishPrototype == null || user == null) - return; - - var finisher = Owner.EntityManager.SpawnEntity(_finishPrototype, Owner.Transform.GridPosition); - if (user.TryGetComponent(out HandsComponent handsComponent) && finisher.TryGetComponent(out ItemComponent itemComponent)) - { - if (handsComponent.CanPutInHand(itemComponent)) - { - handsComponent.PutInHand(itemComponent); - return; - } - } - - finisher.Transform.GridPosition = gridPos; - if (finisher.TryGetComponent(out DrinkComponent drinkComponent)) - { - drinkComponent.MaxVolume = MaxVolume; - } - } - - /// - /// Updates drink state when the solution is changed by something other - /// than this component. Without this some drinks won't properly delete - /// themselves without additional clicks/uses after them being emptied. - /// - private void HandleSolutionChangedEvent() - { - Finish(null); } } } diff --git a/Content.Server/GameObjects/Components/Nutrition/StomachComponent.cs b/Content.Server/GameObjects/Components/Nutrition/StomachComponent.cs index 95353351f9..d8eb1a899c 100644 --- a/Content.Server/GameObjects/Components/Nutrition/StomachComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/StomachComponent.cs @@ -68,22 +68,15 @@ namespace Content.Server.GameObjects.Components.Nutrition serializer.DataField(ref _digestionDelay, "digestionDelay", 20); } - - public override void Initialize() + protected override void Startup() { - base.Initialize(); - //Doesn't use Owner.AddComponent<>() to avoid cross-contamination (e.g. with blood or whatever they holds other solutions) - _stomachContents = new SolutionComponent(); - _stomachContents.InitializeFromPrototype(); + _stomachContents = Owner.GetComponent(); _stomachContents.MaxVolume = _initialMaxVolume; - _stomachContents.Owner = Owner; //Manually set owner to avoid crash when VV'ing this - - //Ensure bloodstream in present if (!Owner.TryGetComponent(out _bloodstream)) { Logger.Warning(_localizationManager.GetString( - "StomachComponent entity does not have a BloodstreamComponent, which is required for it to function. Owner entity name: {0}", - Owner.Name)); + "StomachComponent entity does not have a BloodstreamComponent, which is required for it to function. Owner entity name: {0}", + Owner.Name)); } } diff --git a/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs b/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs new file mode 100644 index 0000000000..69bd555460 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs @@ -0,0 +1,42 @@ +using System; +using System.Linq; +using JetBrains.Annotations; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Server.GameObjects.EntitySystems +{ + /// + /// This interface gives components behavior on whether entities solution (implying SolutionComponent is in place) is changed + /// + public interface ISolutionChange + { + /// + /// Called when solution is mixed with some other solution, or when some part of the solution is removed + /// + void SolutionChanged(SolutionChangeEventArgs eventArgs); + } + + public class SolutionChangeEventArgs : EventArgs + { + public IEntity Owner { get; set; } + } + + [UsedImplicitly] + public class ChemistrySystem : EntitySystem + { + public void HandleSolutionChange(IEntity owner) + { + var eventArgs = new SolutionChangeEventArgs + { + Owner = owner, + }; + var solutionChangeArgs = owner.GetAllComponents().ToList(); + + foreach (var solutionChangeArg in solutionChangeArgs) + { + solutionChangeArg.SolutionChanged(eventArgs); + } + } + } +} diff --git a/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs b/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs new file mode 100644 index 0000000000..9077e94184 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs @@ -0,0 +1,65 @@ +using System; +using System.Threading; +using Content.Server.Interfaces.GameTicking; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Timer = Robust.Shared.Timers.Timer; + +namespace Content.Server.GameObjects.EntitySystems +{ + public class RoundEndSystem : EntitySystem + { +#pragma warning disable 649 + [Dependency] private IGameTicker _gameTicker; + [Dependency] private IGameTiming _gameTiming; +#pragma warning restore 649 + + private CancellationTokenSource _roundEndCancellationTokenSource = new CancellationTokenSource(); + public bool IsRoundEndCountdownStarted { get; private set; } + public TimeSpan RoundEndCountdownTime { get; set; } = TimeSpan.FromMinutes(4); + public TimeSpan? ExpectedCountdownEnd = null; + + public delegate void RoundEndCountdownStarted(); + public event RoundEndCountdownStarted OnRoundEndCountdownStarted; + + public delegate void RoundEndCountdownCancelled(); + public event RoundEndCountdownCancelled OnRoundEndCountdownCancelled; + + public delegate void RoundEndCountdownFinished(); + public event RoundEndCountdownFinished OnRoundEndCountdownFinished; + + public void RequestRoundEnd() + { + if (IsRoundEndCountdownStarted) + return; + + IsRoundEndCountdownStarted = true; + + ExpectedCountdownEnd = _gameTiming.CurTime + RoundEndCountdownTime; + Timer.Spawn(RoundEndCountdownTime, EndRound, _roundEndCancellationTokenSource.Token); + OnRoundEndCountdownStarted?.Invoke(); + } + + public void CancelRoundEndCountdown() + { + if (!IsRoundEndCountdownStarted) + return; + + IsRoundEndCountdownStarted = false; + + _roundEndCancellationTokenSource.Cancel(); + _roundEndCancellationTokenSource = new CancellationTokenSource(); + + ExpectedCountdownEnd = null; + + OnRoundEndCountdownCancelled?.Invoke(); + } + + private void EndRound() + { + OnRoundEndCountdownFinished?.Invoke(); + _gameTicker.EndRound(); + } + } +} diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 5f6542172c..b6e8c51492 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -13,6 +13,7 @@ using Content.Server.Mobs; using Content.Server.Mobs.Roles; using Content.Server.Players; using Content.Shared; +using Content.Shared.Chat; using Content.Shared.Jobs; using Content.Shared.Preferences; using Robust.Server.Interfaces.Maps; @@ -123,6 +124,8 @@ namespace Content.Server.GameTicking { Logger.InfoS("ticker", "Restarting round!"); + SendServerMessage("Restarting round..."); + RunLevel = GameRunLevel.PreRoundLobby; _resettingCleanup(); _preRoundSetup(); @@ -147,6 +150,8 @@ namespace Content.Server.GameTicking DebugTools.Assert(RunLevel == GameRunLevel.PreRoundLobby); Logger.InfoS("ticker", "Starting round!"); + SendServerMessage("The round is starting now..."); + RunLevel = GameRunLevel.InRound; var preset = MakeGamePreset(); @@ -191,6 +196,14 @@ namespace Content.Server.GameTicking _sendStatusToAll(); } + private void SendServerMessage(string message) + { + var msg = _netManager.CreateNetMessage(); + msg.Channel = ChatChannel.Server; + msg.Message = message; + IoCManager.Resolve().ServerSendToAll(msg); + } + private HumanoidCharacterProfile GetPlayerProfile(IPlayerSession p) => (HumanoidCharacterProfile) _prefsManager.GetPreferences(p.SessionId.Username).SelectedCharacter; @@ -200,6 +213,8 @@ namespace Content.Server.GameTicking Logger.InfoS("ticker", "Ending round!"); RunLevel = GameRunLevel.PostRound; + + SendServerMessage("The round has ended!"); } public void Respawn(IPlayerSession targetPlayer) diff --git a/Content.Shared/Chemistry/ReagentPrototype.cs b/Content.Shared/Chemistry/ReagentPrototype.cs index 65b4756047..2840ca4855 100644 --- a/Content.Shared/Chemistry/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/ReagentPrototype.cs @@ -21,6 +21,7 @@ namespace Content.Shared.Chemistry private string _description; private Color _substanceColor; private List _metabolism; + private string _spritePath; public string ID => _id; public string Name => _name; @@ -29,6 +30,8 @@ namespace Content.Shared.Chemistry //List of metabolism effects this reagent has, should really only be used server-side. public List Metabolism => _metabolism; + public string SpriteReplacementPath => _spritePath; + public ReagentPrototype() { IoCManager.InjectDependencies(this); @@ -42,6 +45,7 @@ namespace Content.Shared.Chemistry serializer.DataField(ref _name, "name", string.Empty); serializer.DataField(ref _description, "desc", string.Empty); serializer.DataField(ref _substanceColor, "color", Color.White); + serializer.DataField(ref _spritePath, "spritePath", string.Empty); if (_moduleManager.IsServerModule) serializer.DataField(ref _metabolism, "metabolism", new List {new DefaultMetabolizable()}); diff --git a/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs new file mode 100644 index 0000000000..232bea635e --- /dev/null +++ b/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using Content.Shared.Chemistry; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Maths; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Shared.GameObjects.Components.Chemistry +{ + public class SharedSolutionComponent : Component + { + public override string Name => "Solution"; + + /// + public sealed override uint? NetID => ContentNetIDs.SOLUTION; + + [Serializable, NetSerializable] + public class SolutionComponentState : ComponentState + { + public SolutionComponentState() : base(ContentNetIDs.SOLUTION) { } + } + + /// + public override ComponentState GetComponentState() + { + return new SolutionComponentState(); + } + + /// + public override void HandleComponentState(ComponentState curState, ComponentState nextState) + { + base.HandleComponentState(curState, nextState); + + if(curState == null) + return; + + var compState = (SolutionComponentState)curState; + + //TODO: Make me work! + } + + } +} diff --git a/Content.Shared/GameObjects/Components/Chemistry/SolutionComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/SolutionComponent.cs deleted file mode 100644 index 426daa0639..0000000000 --- a/Content.Shared/GameObjects/Components/Chemistry/SolutionComponent.cs +++ /dev/null @@ -1,238 +0,0 @@ -using System; -using System.Collections.Generic; -using Content.Shared.Chemistry; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Maths; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; - -namespace Content.Shared.GameObjects.Components.Chemistry -{ - public class SolutionComponent : Component - { -#pragma warning disable 649 - [Dependency] private readonly IPrototypeManager _prototypeManager; -#pragma warning restore 649 - - [ViewVariables] - protected Solution _containedSolution = new Solution(); - protected int _maxVolume; - private SolutionCaps _capabilities; - - /// - /// Triggered when the solution contents change. - /// - public event Action SolutionChanged; - - /// - /// The maximum volume of the container. - /// - [ViewVariables(VVAccess.ReadWrite)] - public int MaxVolume - { - get => _maxVolume; - set => _maxVolume = value; // Note that the contents won't spill out if the capacity is reduced. - } - - /// - /// The total volume of all the of the reagents in the container. - /// - [ViewVariables] - public int CurrentVolume => _containedSolution.TotalVolume; - - /// - /// The volume without reagents remaining in the container. - /// - [ViewVariables] - public int EmptyVolume => MaxVolume - CurrentVolume; - - /// - /// The current blended color of all the reagents in the container. - /// - [ViewVariables(VVAccess.ReadWrite)] - public Color SubstanceColor { get; private set; } - - /// - /// The current capabilities of this container (is the top open to pour? can I inject it into another object?). - /// - [ViewVariables(VVAccess.ReadWrite)] - public SolutionCaps Capabilities - { - get => _capabilities; - set => _capabilities = value; - } - - public IReadOnlyList ReagentList => _containedSolution.Contents; - - /// - /// Shortcut for Capabilities PourIn flag to avoid binary operators. - /// - public bool CanPourIn => (Capabilities & SolutionCaps.PourIn) != 0; - /// - /// Shortcut for Capabilities PourOut flag to avoid binary operators. - /// - public bool CanPourOut => (Capabilities & SolutionCaps.PourOut) != 0; - /// - /// Shortcut for Capabilities Injectable flag - /// - public bool Injectable => (Capabilities & SolutionCaps.Injectable) != 0; - /// - /// Shortcut for Capabilities Injector flag - /// - public bool Injector => (Capabilities & SolutionCaps.Injector) != 0; - - /// - public override string Name => "Solution"; - - /// - public sealed override uint? NetID => ContentNetIDs.SOLUTION; - - /// - public override void ExposeData(ObjectSerializer serializer) - { - base.ExposeData(serializer); - - serializer.DataField(ref _maxVolume, "maxVol", 0); - serializer.DataField(ref _containedSolution, "contents", _containedSolution); - serializer.DataField(ref _capabilities, "caps", SolutionCaps.None); - } - - /// - protected override void Startup() - { - base.Startup(); - - RecalculateColor(); - } - - /// - protected override void Shutdown() - { - base.Shutdown(); - - _containedSolution.RemoveAllSolution(); - _containedSolution = new Solution(); - } - - public void RemoveAllSolution() - { - _containedSolution.RemoveAllSolution(); - OnSolutionChanged(); - } - - public bool TryRemoveReagent(string reagentId, int quantity) - { - if (!ContainsReagent(reagentId, out var currentQuantity)) return false; - - _containedSolution.RemoveReagent(reagentId, quantity); - OnSolutionChanged(); - return true; - } - - /// - /// Attempt to remove the specified quantity from this solution - /// - /// Quantity of this solution to remove - /// Whether or not the solution was successfully removed - public bool TryRemoveSolution(int quantity) - { - if (CurrentVolume == 0) - return false; - - _containedSolution.RemoveSolution(quantity); - OnSolutionChanged(); - return true; - } - - public Solution SplitSolution(int quantity) - { - var solutionSplit = _containedSolution.SplitSolution(quantity); - OnSolutionChanged(); - return solutionSplit; - } - - protected void RecalculateColor() - { - if(_containedSolution.TotalVolume == 0) - SubstanceColor = Color.White; - - Color mixColor = default; - float runningTotalQuantity = 0; - - foreach (var reagent in _containedSolution) - { - runningTotalQuantity += reagent.Quantity; - - if(!_prototypeManager.TryIndex(reagent.ReagentId, out ReagentPrototype proto)) - continue; - - if (mixColor == default) - mixColor = proto.SubstanceColor; - - mixColor = BlendRGB(mixColor, proto.SubstanceColor, reagent.Quantity / runningTotalQuantity); - } - } - - private Color BlendRGB(Color rgb1, Color rgb2, float amount) - { - var r = (float)Math.Round(rgb1.R + (rgb2.R - rgb1.R) * amount, 1); - var g = (float)Math.Round(rgb1.G + (rgb2.G - rgb1.G) * amount, 1); - var b = (float)Math.Round(rgb1.B + (rgb2.B - rgb1.B) * amount, 1); - var alpha = (float)Math.Round(rgb1.A + (rgb2.A - rgb1.A) * amount, 1); - - return new Color(r, g, b, alpha); - } - - /// - public override ComponentState GetComponentState() - { - return new SolutionComponentState(); - } - - /// - public override void HandleComponentState(ComponentState curState, ComponentState nextState) - { - base.HandleComponentState(curState, nextState); - - if(curState == null) - return; - - var compState = (SolutionComponentState)curState; - - //TODO: Make me work! - } - - [Serializable, NetSerializable] - public class SolutionComponentState : ComponentState - { - public SolutionComponentState() : base(ContentNetIDs.SOLUTION) { } - } - - /// - /// Check if the solution contains the specified reagent. - /// - /// The reagent to check for. - /// Output the quantity of the reagent if it is contained, 0 if it isn't. - /// Return true if the solution contains the reagent. - public bool ContainsReagent(string reagentId, out int quantity) - { - foreach (var reagent in _containedSolution.Contents) - { - if (reagent.ReagentId == reagentId) - { - quantity = reagent.Quantity; - return true; - } - } - quantity = 0; - return false; - } - - protected virtual void OnSolutionChanged() - { - SolutionChanged?.Invoke(); - } - } -} diff --git a/Content.Shared/GameObjects/Components/Command/SharedCommunicationsConsoleComponent.cs b/Content.Shared/GameObjects/Components/Command/SharedCommunicationsConsoleComponent.cs new file mode 100644 index 0000000000..88fb0168fc --- /dev/null +++ b/Content.Shared/GameObjects/Components/Command/SharedCommunicationsConsoleComponent.cs @@ -0,0 +1,49 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components.Command +{ + public class SharedCommunicationsConsoleComponent : Component + { + public override string Name => "CommunicationsConsole"; + + } + + [Serializable, NetSerializable] + public class CommunicationsConsoleInterfaceState : BoundUserInterfaceState + { + public readonly TimeSpan? ExpectedCountdownEnd; + public readonly bool CountdownStarted; + + public CommunicationsConsoleInterfaceState(TimeSpan? expectedCountdownEnd = null) + { + ExpectedCountdownEnd = expectedCountdownEnd; + CountdownStarted = expectedCountdownEnd != null; + + } + } + + [Serializable, NetSerializable] + public class CommunicationsConsoleCallEmergencyShuttleMessage : BoundUserInterfaceMessage + { + public CommunicationsConsoleCallEmergencyShuttleMessage() + { + } + } + + [Serializable, NetSerializable] + public class CommunicationsConsoleRecallEmergencyShuttleMessage : BoundUserInterfaceMessage + { + public CommunicationsConsoleRecallEmergencyShuttleMessage() + { + } + } + + [Serializable, NetSerializable] + public enum CommunicationsConsoleUiKey + { + Key + } +} diff --git a/Resources/Prototypes/Entities/buildings/booze_dispenser.yml b/Resources/Prototypes/Entities/buildings/booze_dispenser.yml index 28010fe2b4..8e7f3ae2e8 100644 --- a/Resources/Prototypes/Entities/buildings/booze_dispenser.yml +++ b/Resources/Prototypes/Entities/buildings/booze_dispenser.yml @@ -18,3 +18,7 @@ - chem.Ale - chem.Wine - chem.Ice + - chem.Beer + - chem.Vodka + - chem.Cognac + - chem.Kahlua diff --git a/Resources/Prototypes/Entities/buildings/chem_dispenser.yml b/Resources/Prototypes/Entities/buildings/chem_dispenser.yml index a72263b277..21ba174a64 100644 --- a/Resources/Prototypes/Entities/buildings/chem_dispenser.yml +++ b/Resources/Prototypes/Entities/buildings/chem_dispenser.yml @@ -37,3 +37,4 @@ - chem.K - chem.Ra - chem.Na + - chem.U diff --git a/Resources/Prototypes/Entities/buildings/computers.yml b/Resources/Prototypes/Entities/buildings/computers.yml index fff70844a8..bc8dbf9fe4 100644 --- a/Resources/Prototypes/Entities/buildings/computers.yml +++ b/Resources/Prototypes/Entities/buildings/computers.yml @@ -176,3 +176,8 @@ - type: ComputerVisualizer2D key: generic_key screen: comm + - type: CommunicationsConsole + - type: UserInterface + interfaces: + - key: enum.CommunicationsConsoleUiKey.Key + type: CommunicationsConsoleBoundUserInterface diff --git a/Resources/Prototypes/Entities/buildings/soda_dispenser.yml b/Resources/Prototypes/Entities/buildings/soda_dispenser.yml index e52868a841..ce0bcebb75 100644 --- a/Resources/Prototypes/Entities/buildings/soda_dispenser.yml +++ b/Resources/Prototypes/Entities/buildings/soda_dispenser.yml @@ -19,3 +19,4 @@ - chem.Tea - chem.Ice - chem.H2O + - chem.Cream diff --git a/Resources/Prototypes/Entities/items/Consumables/drinks.yml b/Resources/Prototypes/Entities/items/Consumables/drinks.yml index cbae0e107f..bb5562b769 100644 --- a/Resources/Prototypes/Entities/items/Consumables/drinks.yml +++ b/Resources/Prototypes/Entities/items/Consumables/drinks.yml @@ -6,93 +6,37 @@ id: DrinkBase abstract: true components: + - type: Solution + maxVol: 50 + - type: Pourable + transferAmount: 5 - type: Drink - despawn_empty: true + despawn_empty: false - type: Sound - type: Sprite state: icon - netsync: false - type: Icon state: icon -# Drinks below here +# Transformable container - normal glass - type: entity + name: Drinking glass parent: DrinkBase - id: DrinkAbsintheglass - name: Absinthe glass - description: A anise-flavoured spirit derived from botanicals. + id: DrinkGlass components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite - sprite: Objects/Drinks/absintheglass.rsi + sprite: Objects/Drinks/glass_clear.rsi - type: Icon - sprite: Objects/Drinks/absintheglass.rsi - -- type: entity - parent: DrinkBase - id: DrinkAcidspitGlass - name: Acidspit glass - description: A drink for the daring, can be deadly if incorrectly prepared! - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/acidspitglass.rsi - - type: Icon - sprite: Objects/Drinks/acidspitglass.rsi - -- type: entity - parent: DrinkBase - id: DrinkAlco-blue - name: Miss Blue Curacao - description: A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic. - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - spawn_on_finish: TrashAlcoClear - - type: Sprite - sprite: Objects/Drinks/alco-blue.rsi - - type: Icon - sprite: Objects/Drinks/alco-blue.rsi - -#- type: entity -# parent: DrinkBase -# id: DrinkAlco-red -# name: Alco-red -# description: '' -# components: -# - type: Drink# -# contents: -# - water: 1 -# spawn_on_finish: TrashAlcoClear -# - type: Sprite -# sprite: Objects/Drinks/alco-red.rsi -# - type: Icon -# sprite: Objects/Drinks/alco-red.rsi -# -#- type: entity -# parent: DrinkBase -# id: DrinkAlco-white -# name: Alco-white -# description: '' -# components: -# - type: Drink# -# contents: -# - water: 1 -# - type: Sprite -# sprite: Objects/Drinks/alco-white.rsi -# - type: Icon -# sprite: Objects/Drinks/alco-white.rsi + sprite: Objects/Drinks/glass_clear.rsi + - type: Solution + fillingState: glass + maxVol: 50 + caps: 16 + - type: Drink + despawn_empty: false + - type: Pourable + transferAmount: 5 + - type: TransformableContainer - type: entity parent: DrinkBase @@ -100,91 +44,30 @@ name: Ale description: A dark alchoholic beverage made by malted barley and yeast. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Ale + Quantity: 20 - type: Sprite sprite: Objects/Drinks/aleglass.rsi - type: Icon sprite: Objects/Drinks/aleglass.rsi -- type: entity - parent: DrinkBase - id: DrinkAlliescocktail - name: Allies cocktail - description: A drink made from your allies, not as sweet as when made from your enemies. - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/alliescocktail.rsi - - type: Icon - sprite: Objects/Drinks/alliescocktail.rsi - -- type: entity - parent: DrinkBase - id: DrinkAloe - name: Aloe - description: So very, very, very good. - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/aloe.rsi - - type: Icon - sprite: Objects/Drinks/aloe.rsi - -- type: entity - parent: DrinkBase - id: DrinkAmasecglass - name: Amasec glass - description: Official drink of the Gun Club! - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/amasecglass.rsi - - type: Icon - sprite: Objects/Drinks/amasecglass.rsi - -- type: entity - parent: DrinkBase - id: DrinkAndalusia - name: Andalusia - description: A nice, strangely named drink. - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/andalusia.rsi - - type: Icon - sprite: Objects/Drinks/andalusia.rsi - - type: entity parent: DrinkBase id: DrinkAntifreeze name: Anti-freeze description: Ultimate refreshment. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Antifreeze + Quantity: 20 + - type: Drink - type: Sprite sprite: Objects/Drinks/antifreeze.rsi - type: Icon @@ -196,80 +79,36 @@ name: Atomic bomb glass description: Nuclear proliferation never tasted so good. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.AtomicBomb + Quantity: 20 + - type: Drink - type: Sprite sprite: Objects/Drinks/atomicbombglass.rsi - type: Icon sprite: Objects/Drinks/atomicbombglass.rsi -- type: entity - parent: DrinkBase - id: DrinkBarefootAndPregnant - name: Barefoot - description: Barefoot and pregnant - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/b&p.rsi - - type: Icon - sprite: Objects/Drinks/b&p.rsi - - type: entity parent: DrinkBase id: DrinkB52Glass name: B-52 glass description: Coffee, Irish Cream, and cognac. You will get bombed. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.B52 + Quantity: 20 + - type: Drink - type: Sprite sprite: Objects/Drinks/b52glass.rsi - type: Icon sprite: Objects/Drinks/b52glass.rsi -- type: entity - parent: DrinkBase - id: DrinkBahamaMama - name: Bahama mama - description: Tropical cocktail. - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/bahama_mama.rsi - - type: Icon - sprite: Objects/Drinks/bahama_mama.rsi - -- type: entity - parent: DrinkBase - id: DrinkBananaJuice - name: Banana juice - description: The raw essence of a banana. - components: - - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - - type: Sprite - sprite: Objects/Drinks/banana.rsi - - type: Icon - sprite: Objects/Drinks/banana.rsi - - type: entity parent: DrinkBase id: DrinkBananahonkglass @@ -277,10 +116,6 @@ description: A drink from Clown Heaven. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/bananahonkglass.rsi - type: Icon @@ -307,10 +142,6 @@ description: Deny drinking this and prepare for THE LAW. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/beepskysmashglass.rsi - type: Icon @@ -322,11 +153,12 @@ name: Beer # Beer it is. Coffee. Beer? COFF-EE? BE-ER? C-O... B-E description: An alcoholic beverage made from malted grains, hops, yeast, and water. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Beer + Quantity: 20 - type: Sprite sprite: Objects/Drinks/beer.rsi - type: Icon @@ -338,11 +170,12 @@ name: Beer glass description: An alcoholic beverage made from malted grains, hops, yeast, and water. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Beer + Quantity: 20 - type: Sprite sprite: Objects/Drinks/beerglass.rsi - type: Icon @@ -355,10 +188,6 @@ description: A delicious blend of several different kinds of berries. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/berryjuice.rsi - type: Icon @@ -385,10 +214,6 @@ description: For the lactose-intolerant. Still as classy as a White Russian. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/blackrussianglass.rsi - type: Icon @@ -401,10 +226,6 @@ description: A strange yet pleasurable mixture made of vodka, tomato and lime juice. Tastes like liquid murder components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/bloodymaryglass.rsi - type: Icon @@ -417,10 +238,6 @@ description: Ewww... components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/booger.rsi - type: Icon @@ -433,10 +250,6 @@ description: It's just as effective as Dutch-Courage! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/bravebullglass.rsi - type: Icon @@ -463,10 +276,6 @@ description: It's not what it sounds like... components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/brownstar.rsi - type: Icon @@ -479,10 +288,6 @@ description: A nice, strong and tasty beverage while you are reading. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/cafe_latte.rsi - type: Icon @@ -495,10 +300,6 @@ description: A handled glass pitcher. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/carafe.rsi state: icon-10 @@ -517,10 +318,6 @@ description: Has a uniquely sweet flavour of concentrated carrots. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/carrotjuice.rsi - type: Icon @@ -533,10 +330,6 @@ description: You take a tiny sip and feel a burning sensation... components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/changelingsting.rsi - type: Icon @@ -549,10 +342,6 @@ description: A heated drink consisting melted chocolate and heated milk. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/chocolateglass.rsi - type: Icon @@ -564,11 +353,12 @@ name: Coffee description: Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Coffee + Quantity: 20 - type: Sprite sprite: Objects/Drinks/coffee.rsi - type: Icon @@ -580,11 +370,12 @@ name: Cognac glass description: A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Cognac + Quantity: 20 - type: Sprite sprite: Objects/Drinks/cognacglass.rsi - type: Icon @@ -596,11 +387,12 @@ name: Space cola bottle description: Cola. in space components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Cola + Quantity: 20 - type: Sprite sprite: Objects/Drinks/colabottle.rsi - type: Icon @@ -612,11 +404,12 @@ name: Cream description: Dairy product composed of the higher-fat layer skimmed from the top of milk before homogenization. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Cream + Quantity: 20 - type: Sprite sprite: Objects/Drinks/cream.rsi - type: Icon @@ -628,11 +421,12 @@ name: Cuba libre glass description: Rum, mixed with cola. Viva la revolucion. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.CubaLibre + Quantity: 20 - type: Sprite sprite: Objects/Drinks/cubalibreglass.rsi - type: Icon @@ -645,10 +439,6 @@ description: Exotically blue, fruity drink, distilled from oranges. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/curacaoglass.rsi - type: Icon @@ -661,10 +451,6 @@ description: AHHHH!!!! # AAHHHHHH components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/demonsblood.rsi - type: Icon @@ -677,10 +463,6 @@ description: A metal flask with a leather band and golden badge belonging to the inspector. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/detflask.rsi - type: Icon @@ -693,10 +475,6 @@ description: Creepy time! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/devilskiss.rsi - type: Icon @@ -709,10 +487,6 @@ description: A gulp a day keeps the MediBot away. That's probably for the best. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/doctorsdelightglass.rsi - type: Icon @@ -725,10 +499,6 @@ description: Only for the experienced. You think you see sand floating in the glass. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/driestmartiniglass.rsi - type: Icon @@ -741,10 +511,6 @@ description: A delicious blend of 42 different flavours components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/dr_gibb.rsi - type: Icon @@ -757,10 +523,6 @@ description: A delicious blend of 42 different flavours components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/dr_gibb_glass.rsi - type: Icon @@ -773,10 +535,6 @@ description: A relatively sweet and fruity 46 proof liquor. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/emeraldglass.rsi - type: Icon @@ -789,10 +547,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/energy_drink.rsi - type: Icon @@ -805,10 +559,6 @@ description: The surprise is, it's green! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/erikasurprise.rsi - type: Icon @@ -821,10 +571,6 @@ description: A metal flask belonging to the captain components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/flask.rsi - type: Icon @@ -837,10 +583,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/flask_old.rsi - type: Icon @@ -853,10 +595,6 @@ description: Whoah, this stuff looks volatile! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/gargleblasterglass.rsi - type: Icon @@ -869,10 +607,6 @@ description: Refreshingly lemony, deliciously dry. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/ginfizzglass.rsi - type: Icon @@ -885,10 +619,6 @@ description: An all time classic, mild cocktail. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/gintonicglass.rsi - type: Icon @@ -901,10 +631,6 @@ description: 100 proof cinnamon schnapps, made for alcoholic teen girls on spring break. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/ginvodkaglass.rsi - type: Icon @@ -917,10 +643,6 @@ description: This appears to be beer mixed with milk. Disgusting. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/glass_brown.rsi - type: Icon @@ -933,10 +655,6 @@ description: Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that? components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/glass_brown2.rsi - type: Icon @@ -949,10 +667,6 @@ description: You've really hit rock bottom now... your liver packed its bags and left last night. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/glass_clear.rsi - type: Icon @@ -965,10 +679,6 @@ description: The sweet-sour juice of limes. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/glass_green.rsi - type: Icon @@ -981,10 +691,6 @@ description: Liquid extract of the orange tree fruit, produced by squeezing or reaming oranges. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/glass_orange.rsi - type: Icon @@ -997,10 +703,6 @@ description: Juice made from tomatoes, usually used as a beverage, either plain or in cocktails components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/glass_red.rsi - type: Icon @@ -1012,11 +714,12 @@ name: Milk description: An opaque white liquid produced by the mammary glands of mammals. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Milk + Quantity: 20 - type: Sprite sprite: Objects/Drinks/glass_white.rsi - type: Icon @@ -1030,10 +733,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/glass_yellow.rsi - type: Icon @@ -1046,10 +745,6 @@ description: 100 proof cinnamon schnapps, made for alcoholic teen girls on spring break. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/goldschlagerglass.rsi - type: Icon @@ -1062,10 +757,6 @@ description: The juice is often sold in stores or fermented and made into wine, brandy, or vinegar. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/grapejuice.rsi - type: Icon @@ -1078,10 +769,6 @@ description: Sweetened drink with a grape flavor and a deep purple color. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/grapesoda.rsi - type: Icon @@ -1094,10 +781,6 @@ description: Sweet and tangy, a bar syrup used to add color or flavor to drinks. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/grenadinebottle.rsi - type: Icon @@ -1110,10 +793,6 @@ description: Made in the modern day with proper pomegranate substitute. Who uses real fruit, anyways? components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/grenadineglass.rsi - type: Icon @@ -1126,10 +805,6 @@ description: Watered-down rum, pirate approved! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/grogglass.rsi - type: Icon @@ -1142,10 +817,6 @@ description: Sweetened drink with a grape flavor and a deep purple color. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/gsodaglass.rsi - type: Icon @@ -1158,10 +829,6 @@ description: The noodles are boiled, the flavors are artificial, just like being back in school. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/hell.rsi - type: Icon @@ -1174,10 +841,6 @@ description: You just don't get it maaaan. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/hippiesdelightglass.rsi - type: Icon @@ -1190,10 +853,6 @@ description: A heated drink consisting melted chocolate and heated milk. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/hot_coco.rsi - type: Icon @@ -1205,11 +864,12 @@ name: Coffee description: Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Coffee + Quantity: 20 - type: Sprite sprite: Objects/Drinks/hot_coffee.rsi - type: Icon @@ -1222,10 +882,6 @@ description: Coffee and ice, refreshing and cool. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/icedcoffeeglass.rsi - type: Icon @@ -1238,10 +894,6 @@ description: The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/icedteaglass.rsi - type: Icon @@ -1254,10 +906,6 @@ description: A beer which is so cold the air around it freezes. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/iced_beerglass.rsi - type: Icon @@ -1269,11 +917,12 @@ name: Ice glass description: Water frozen into a solid state. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 1 + - ReagentId: chem.Ice + Quantity: 20 - type: Sprite sprite: Objects/Drinks/iceglass.rsi - type: Icon @@ -1285,11 +934,12 @@ name: Irish car bomb description: Mmm, tastes like chocolate cake... components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.IrishCarBomb + Quantity: 20 - type: Sprite sprite: Objects/Drinks/irishcarbomb.rsi - type: Icon @@ -1301,11 +951,12 @@ name: Irish coffee glass description: Coffee, and alcohol. More fun than a Mimosa to drink in the morning. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.IrishCoffee + Quantity: 20 - type: Sprite sprite: Objects/Drinks/irishcoffeeglass.rsi - type: Icon @@ -1317,11 +968,12 @@ name: Irish cream glass description: Whiskey-imbued cream, what else would you expect from the Irish. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.IrishCream + Quantity: 20 - type: Sprite sprite: Objects/Drinks/irishcreamglass.rsi - type: Icon @@ -1334,10 +986,6 @@ description: The hipster's cup components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/jar.rsi - type: Icon @@ -1350,10 +998,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/jar_metroid.rsi - type: Icon @@ -1366,10 +1010,6 @@ description: You can't really tell what this is. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/jar_what.rsi - type: Icon @@ -1381,11 +1021,12 @@ name: Kahlua glass description: A widely known, Mexican coffee-flavoured liqueur. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Kahlua + Quantity: 20 - type: Sprite sprite: Objects/Drinks/kahluaglass.rsi - type: Icon @@ -1398,10 +1039,6 @@ description: Long live the guy who everyone had mistaken for a girl. Baka! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/kiraspecial.rsi - type: Icon @@ -1414,10 +1051,6 @@ description: Drink using lemon juice, water, and a sweetener such as cane sugar or honey. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/lemonade.rsi - type: Icon @@ -1430,10 +1063,6 @@ description: Drink using lemon juice, water, and a sweetener such as cane sugar or honey. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/lemonadeglass.rsi - type: Icon @@ -1446,10 +1075,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/lemonglass.rsi - type: Icon @@ -1462,10 +1087,6 @@ description: Used to make lemonade, soft drinks, and cocktails. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/lemonjuice.rsi - type: Icon @@ -1478,10 +1099,6 @@ description: A tangy substance made of lime and lemon. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/lemonlime.rsi - type: Icon @@ -1494,10 +1111,6 @@ description: The sweet-sour juice of limes. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/limejuice.rsi - type: Icon @@ -1510,10 +1123,6 @@ description: A flask with a Lithium Atom symbol on it. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/lithiumflask.rsi - type: Icon @@ -1526,10 +1135,6 @@ description: The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/longislandicedteaglass.rsi - type: Icon @@ -1542,10 +1147,6 @@ description: The Detective's undercover drink of choice. He never could stomach gin... components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/manhattanglass.rsi - type: Icon @@ -1557,11 +1158,12 @@ name: The manly dorf glass description: Beer and Ale, brought together in a delicious mix. Intended for true men only. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.ManlyDorf + Quantity: 20 - type: Sprite sprite: Objects/Drinks/manlydorfglass.rsi - type: Icon @@ -1574,10 +1176,6 @@ description: On the rocks with salt on the rim. Arriba~! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/margaritaglass.rsi - type: Icon @@ -1590,10 +1188,6 @@ description: Vodka with Gin. Not quite how 007 enjoyed it, but still delicious. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/martiniglass.rsi - type: Icon @@ -1606,10 +1200,6 @@ description: A Viking's drink, though a cheap one. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/meadglass.rsi - type: Icon @@ -1621,11 +1211,12 @@ name: Milk jug description: An opaque white liquid produced by the mammary glands of mammals. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Milk + Quantity: 20 - type: Sprite sprite: Objects/Drinks/milk.rsi - type: Icon @@ -1638,10 +1229,6 @@ description: Sweet, cold beverage that is usually made from milk components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/milkshake.rsi - type: Icon @@ -1654,10 +1241,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/mojito.rsi - type: Icon @@ -1670,10 +1253,6 @@ description: A strong neurotoxin that puts the subject into a death-like state. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/neurotoxinglass.rsi - type: Icon @@ -1686,10 +1265,6 @@ description: Absolutely nothing. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/nothing.rsi - type: Icon @@ -1702,10 +1277,6 @@ description: Fortified dessert wine made from cabernet sauvignon, saperavi and other grapes. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/ntcahors.rsi - type: Icon @@ -1718,10 +1289,6 @@ description: Cola, cola never changes. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/nuka_colaglass.rsi - type: Icon @@ -1734,10 +1301,6 @@ description: Liquid extract of the orange tree fruit, produced by squeezing or reaming oranges. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/orangejuice.rsi - type: Icon @@ -1750,10 +1313,6 @@ description: Tequila with silver in it, a favorite of alcoholic women in the club scene. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/patronglass.rsi - type: Icon @@ -1766,10 +1325,6 @@ description: A tasty juice blended from various kinds of very deadly and toxic berries. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/poisonberryjuice.rsi - type: Icon @@ -1782,10 +1337,6 @@ description: A scientist's drink of choice, for pondering ways to blow up the station. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/proj_manhattanglass.rsi - type: Icon @@ -1798,10 +1349,6 @@ description: Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/pwineglass.rsi - type: Icon @@ -1814,10 +1361,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/rag.rsi - type: Icon @@ -1830,10 +1373,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/rag_lit.rsi - type: Icon @@ -1846,10 +1385,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/rag_small.rsi - type: Icon @@ -1862,10 +1397,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/rag_small_lit.rsi - type: Icon @@ -1878,10 +1409,6 @@ description: Just add 10ml water, self heats! A taste that reminds you of your school years. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/ramen.rsi - type: Icon @@ -1894,10 +1421,6 @@ description: The true Viking's drink! Even though it has a strange red color. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/red_meadglass.rsi - type: Icon @@ -1910,10 +1433,6 @@ description: The secret of the sanctuary of the Libarian... components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/rewriter.rsi - type: Icon @@ -1926,10 +1445,6 @@ description: Distilled alcoholic drink made from saltwater. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/rumglass.rsi - type: Icon @@ -1942,10 +1457,6 @@ description: A spicy Vodka! Might be a little hot for the little guys! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/sbitenglass.rsi - type: Icon @@ -1958,10 +1469,6 @@ description: Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/screwdriverglass.rsi - type: Icon @@ -1974,10 +1481,6 @@ description: 'Comprised of: White soda, blue curacao, melon liquor.' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/sdreamglass.rsi - type: Icon @@ -1990,10 +1493,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shake-blue.rsi - type: Icon @@ -2007,10 +1506,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shake-empty.rsi - type: Icon @@ -2023,10 +1518,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shake-meat.rsi - type: Icon @@ -2039,10 +1530,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shake-robo.rsi - type: Icon @@ -2055,10 +1542,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shake-white.rsi - type: Icon @@ -2072,10 +1555,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shaker.rsi - type: Icon @@ -2088,10 +1567,6 @@ description: A shiny metal flask. It appears to have a Greek symbol inscribed on it. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shinyflask.rsi - type: Icon @@ -2104,10 +1579,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/shotglass.rsi - type: Icon @@ -2120,10 +1591,6 @@ description: A drink from Mime Heaven. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/silencerglass.rsi - type: Icon @@ -2136,10 +1603,6 @@ description: A blue-space beverage! components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/singulo.rsi - type: Icon @@ -2152,10 +1615,6 @@ description: A cold refreshment components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/snowwhite.rsi - type: Icon @@ -2168,10 +1627,6 @@ description: Water containing dissolved carbon dioxide gas. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/sodawater.rsi - type: Icon @@ -2184,10 +1639,6 @@ description: An opaque white liquid made from soybeans. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/soymilk.rsi - type: Icon @@ -2200,10 +1651,6 @@ description: A coffee drink made with espresso and steamed soy milk. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/soy_latte.rsi - type: Icon @@ -2216,10 +1663,6 @@ description: Tastes like a hull breach in your mouth. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/space-up_bottle.rsi - type: Icon @@ -2232,10 +1675,6 @@ description: Tastes like a hull breach in your mouth. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/space-up_glass.rsi - type: Icon @@ -2248,10 +1687,6 @@ description: Blows right through you like a space wind. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/space_mountain_wind_bottle.rsi - type: Icon @@ -2264,10 +1699,6 @@ description: Blows right through you like a space wind. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/space_mountain_wind_glass.rsi - type: Icon @@ -2279,11 +1710,12 @@ name: Syndicate bomb description: Tastes like terrorism! components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.SyndicateBomb + Quantity: 20 - type: Sprite sprite: Objects/Drinks/syndicatebomb.rsi - type: Icon @@ -2295,11 +1727,12 @@ name: Teacup description: A plain white porcelain teacup. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Tea + Quantity: 20 - type: Sprite sprite: Objects/Drinks/teacup.rsi state: icon-1 @@ -2317,11 +1750,12 @@ name: Tea glass description: Tasty black tea. Contains caffeine. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Tea + Quantity: 20 - type: Sprite sprite: Objects/Drinks/teaglass.rsi - type: Icon @@ -2333,11 +1767,12 @@ name: Teapot # Short and stout description: An elegant teapot. It simply oozes class. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Tea + Quantity: 20 - type: Sprite sprite: Objects/Drinks/teapot.rsi - type: Icon @@ -2350,10 +1785,6 @@ description: A strong and mildly flavoured, mexican produced spirit. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/tequillaglass.rsi - type: Icon @@ -2366,10 +1797,6 @@ description: Tequila and orange juice. Much like a Screwdriver, only Mexican~ components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/tequillasunriseglass.rsi - type: Icon @@ -2382,10 +1809,6 @@ description: A potent mixture of caffeine and alcohol. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/thirteen_loko_glass.rsi - type: Icon @@ -2398,10 +1821,6 @@ description: Made for a woman, strong enough for a man. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/threemileislandglass.rsi - type: Icon @@ -2414,10 +1833,6 @@ description: Juice made from tomatoes, usually used as a beverage, either plain or in cocktails components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/tomatojuice.rsi - type: Icon @@ -2430,10 +1845,6 @@ description: A carbonated soft drink in which quinine is dissolved. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/tonic.rsi - type: Icon @@ -2446,10 +1857,6 @@ description: This thing is ON FIRE! CALL THE DAMN SHUTTLE!" components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/toxinsspecialglass.rsi - type: Icon @@ -2462,10 +1869,6 @@ description: Keeping your drinks at the perfect temperature since 1892. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/vacuumflask.rsi - type: Icon @@ -2478,10 +1881,6 @@ description: Aromatized, fortified white wine flavored with various botanicals. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/vermouthglass.rsi - type: Icon @@ -2494,10 +1893,6 @@ description: For when a gin and tonic isn't russian enough. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/vodkatonicglass.rsi - type: Icon @@ -2510,10 +1905,6 @@ description: Stay hydrated components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/water.rsi - type: Icon @@ -2526,10 +1917,6 @@ description: Simple clean water of unknown origin. You think that maybe you dont want to know it. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/waterbottle.rsi - type: Icon @@ -2542,10 +1929,6 @@ description: Delicious juice made from watermelon. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/watermelon.rsi - type: Icon @@ -2558,10 +1941,6 @@ description: A paper water cup. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/water_cup.rsi state: icon-1 @@ -2579,11 +1958,12 @@ name: Whiskey cola glass description: Whiskey, mixed with cola. Surprisingly refreshing. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.WhiskeyCola + Quantity: 20 - type: Sprite sprite: Objects/Drinks/whiskeycolaglass.rsi - type: Icon @@ -2595,11 +1975,12 @@ name: Special blend whiskey glass description: Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Whiskey + Quantity: 20 - type: Sprite sprite: Objects/Drinks/whiskeyglass.rsi - type: Icon @@ -2612,10 +1993,6 @@ description: For the more refined griffon. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/whiskeysodaglass.rsi - type: Icon @@ -2628,10 +2005,6 @@ description: For the more refined griffon. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/whiskeysodaglass2.rsi - type: Icon @@ -2644,10 +2017,6 @@ description: That's just, like, your opinion, man... components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/whiterussianglass.rsi - type: Icon @@ -2659,11 +2028,12 @@ name: Wine glass description: An premium alchoholic beverage made from distilled grape juice. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Wine + Quantity: 20 - type: Sprite sprite: Objects/Drinks/wineglass.rsi - type: Icon diff --git a/Resources/Prototypes/Entities/items/Consumables/drinks_bottles.yml b/Resources/Prototypes/Entities/items/Consumables/drinks_bottles.yml index bfc997e01b..c719d7e7f5 100644 --- a/Resources/Prototypes/Entities/items/Consumables/drinks_bottles.yml +++ b/Resources/Prototypes/Entities/items/Consumables/drinks_bottles.yml @@ -5,12 +5,6 @@ description: One sip of this and you just know you're gonna have a good time. components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleAbsinthe - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/absinthebottle.rsi - type: Icon @@ -23,12 +17,6 @@ description: A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light. components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleAlcoClear - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/alco-green.rsi - type: Icon @@ -40,13 +28,12 @@ name: Magm-Ale description: A true dorf's drink of choice. components: - - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleAle + - type: Solution + maxVol: 80 contents: reagents: - - ReagentId: chem.H2O - Quantity: 10 + - ReagentId: chem.Ale + Quantity: 80 - type: Sprite sprite: Objects/Drinks/alebottle.rsi - type: Icon @@ -59,12 +46,6 @@ description: A bottle filled with nothing components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleAlcoClear - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/bottleofnothing.rsi - type: Icon @@ -76,13 +57,12 @@ name: Cognac bottle description: A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time. components: - - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleCognac + - type: Solution + maxVol: 80 contents: reagents: - - ReagentId: chem.H2O - Quantity: 10 + - ReagentId: chem.Cognac + Quantity: 80 - type: Sprite sprite: Objects/Drinks/cognacbottle.rsi - type: Icon @@ -95,12 +75,6 @@ description: A bottle of high quality gin, produced in the New London Space Station. components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleGin - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/ginbottle.rsi - type: Icon @@ -113,12 +87,6 @@ description: 100 proof cinnamon schnapps, made for alcoholic teen girls on spring break. components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleGoldschlager - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/goldschlagerbottle.rsi - type: Icon @@ -130,13 +98,12 @@ name: Kahlua bottle description: A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK components: - - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleKahlua + - type: Solution + maxVol: 80 contents: reagents: - ReagentId: chem.H2O - Quantity: 10 + Quantity: 80 - type: Sprite sprite: Objects/Drinks/kahluabottle.rsi - type: Icon @@ -149,12 +116,6 @@ description: Silver laced tequilla, served in space night clubs across the galaxy. components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottlePatron - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/patronbottle.rsi - type: Icon @@ -167,12 +128,6 @@ description: What a delightful packaging for a surely high quality wine! The vintage must be amazing! components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottlePoisonWine - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/pwinebottle.rsi - type: Icon @@ -185,12 +140,6 @@ description: This isn't just rum, oh no. It's practically GRIFF in a bottle. components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleRum - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/rumbottle.rsi - type: Icon @@ -203,12 +152,6 @@ description: Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients! components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleTequila - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/tequillabottle.rsi - type: Icon @@ -221,12 +164,6 @@ description: Sweet, sweet dryness~ components: - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleVermouth - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 10 - type: Sprite sprite: Objects/Drinks/vermouthbottle.rsi - type: Icon @@ -238,13 +175,12 @@ name: Vodka bottle description: Aah, vodka. Prime choice of drink AND fuel by Russians worldwide. components: - - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleVodka + - type: Solution + maxVol: 80 contents: reagents: - - ReagentId: chem.H2O - Quantity: 10 + - ReagentId: chem.Vodka + Quantity: 80 - type: Sprite sprite: Objects/Drinks/vodkabottle.rsi - type: Icon @@ -256,13 +192,12 @@ name: Uncle Git's special reserve description: A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES. components: - - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleWhiskey + - type: Solution + maxVol: 80 contents: reagents: - - ReagentId: chem.H2O - Quantity: 10 + - ReagentId: chem.Whiskey + Quantity: 80 - type: Sprite sprite: Objects/Drinks/whiskeybottle.rsi - type: Icon @@ -274,13 +209,12 @@ name: Doublebearded bearded special wine bottle description: A faint aura of unease and asspainery surrounds the bottle. components: - - type: Drink - max_volume: 10 - spawn_on_finish: DrinkBottleWine + - type: Solution + maxVol: 80 contents: reagents: - - ReagentId: chem.H2O - Quantity: 10 + - ReagentId: chem.Wine + Quantity: 80 - type: Sprite sprite: Objects/Drinks/winebottle.rsi - type: Icon diff --git a/Resources/Prototypes/Entities/items/Consumables/drinks_cans.yml b/Resources/Prototypes/Entities/items/Consumables/drinks_cans.yml index 4d776b2446..ba497f7751 100644 --- a/Resources/Prototypes/Entities/items/Consumables/drinks_cans.yml +++ b/Resources/Prototypes/Entities/items/Consumables/drinks_cans.yml @@ -30,11 +30,12 @@ name: Space cola description: A refreshing beverage. components: - - type: Drink + - type: Solution + maxVol: 20 contents: reagents: - - ReagentId: chem.H2O - Quantity: 4 + - ReagentId: chem.Cola + Quantity: 20 - type: Sprite sprite: Objects/Drinks/cola.rsi - type: Icon @@ -62,10 +63,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/ice_tea_can.rsi - type: Icon @@ -93,10 +90,6 @@ description: You wanted ORANGE. It gave you Lemon Lime. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/lemon-lime.rsi - type: Icon @@ -124,10 +117,6 @@ description: '' components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/purple_can.rsi - type: Icon @@ -155,10 +144,6 @@ description: Blows right through you like a space wind. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/space_mountain_wind.rsi - type: Icon @@ -186,10 +171,6 @@ description: Tastes like a hull breach in your mouth. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/space-up.rsi - type: Icon @@ -217,10 +198,6 @@ description: The taste of a star in liquid form. And, a bit of tuna...? components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/starkist.rsi - type: Icon @@ -248,10 +225,6 @@ description: The MBO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly. components: - type: Drink - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 4 - type: Sprite sprite: Objects/Drinks/thirteen_loko.rsi - type: Icon diff --git a/Resources/Prototypes/Entities/items/Consumables/drinks_cups.yml b/Resources/Prototypes/Entities/items/Consumables/drinks_cups.yml index 904dd9dc1d..0b29b551fa 100644 --- a/Resources/Prototypes/Entities/items/Consumables/drinks_cups.yml +++ b/Resources/Prototypes/Entities/items/Consumables/drinks_cups.yml @@ -5,8 +5,11 @@ name: Base cup abstract: true components: + - type: Solution + maxVol: 20 + - type: Pourable + transferAmount: 5 - type: Drink - max_volume: 4 despawn_empty: false - type: Sound - type: Sprite @@ -20,8 +23,8 @@ name: Golden cup description: A golden cup components: - - type: Drink - max_volume: 10 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/golden_cup.rsi - type: Icon @@ -33,8 +36,8 @@ name: Insulated pitcher description: A stainless steel insulated pitcher. Everyone's best friend in the morning. components: - - type: Drink - max_volume: 15 + - type: Solution + maxVol: 15 - type: Sprite sprite: Objects/Drinks/pitcher.rsi state: icon-6 @@ -52,8 +55,8 @@ name: Mug description: A plain white mug. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug.rsi state: icon-3 @@ -71,8 +74,8 @@ name: Mug Black description: A sleek black mug. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_black.rsi state: icon-3 @@ -90,8 +93,8 @@ name: Mug Blue description: A blue and black mug. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_blue.rsi state: icon-3 @@ -109,8 +112,8 @@ name: Mug Green description: A pale green and pink mug. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_green.rsi state: icon-3 @@ -128,8 +131,8 @@ name: Mug Heart description: A white mug, it prominently features a red heart. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_heart.rsi state: icon-3 @@ -147,8 +150,8 @@ name: Mug Metal description: A metal mug. You're not sure which metal. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_metal.rsi state: icon-3 @@ -166,8 +169,8 @@ name: Mug Moebius description: A mug with a Moebius Laboratories logo on it. Not even your morning coffee is safe from corporate advertising. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_moebius.rsi state: icon-3 @@ -185,8 +188,8 @@ name: "#1 mug" description: "A white mug, it prominently features a #1." components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_one.rsi state: icon-3 @@ -204,8 +207,8 @@ name: Mug Rainbow description: A rainbow mug. The colors are almost as blinding as a welder. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_rainbow.rsi state: icon-3 @@ -223,8 +226,8 @@ name: Mug Red description: A red and black mug. components: - - type: Drink - max_volume: 4 + - type: Solution + maxVol: 10 - type: Sprite sprite: Objects/Drinks/mug_red.rsi state: icon-3 diff --git a/Resources/Prototypes/Entities/items/Consumables/trash_drinks.yml b/Resources/Prototypes/Entities/items/Consumables/trash_drinks.yml index e180de55d2..cdba3d3ad6 100644 --- a/Resources/Prototypes/Entities/items/Consumables/trash_drinks.yml +++ b/Resources/Prototypes/Entities/items/Consumables/trash_drinks.yml @@ -10,13 +10,12 @@ state: icon - type: Icon state: icon + - type: Solution + maxVol: 10 + - type: Pourable + transferAmount: 5 - type: Drink despawn_empty: false - max_volume: 10 - contents: - reagents: - - ReagentId: chem.H2O - Quantity: 0 # Containers - type: entity @@ -89,19 +88,6 @@ - type: Icon sprite: Objects/TrashDrinks/ginbottle_empty.rsi -# Couldn't think of a nice place to put this -- type: entity - name: Empty glass - parent: DrinkBottleBase - id: DrinkEmptyGlass - components: - - type: Sprite - sprite: Objects/TrashDrinks/alebottle_empty.rsi - - type: Icon - sprite: Objects/TrashDrinks/alebottle_empty.rsi - - type: Solution - max_volume: 4 - - type: entity name: Goldschlager bottle parent: DrinkBottleBase diff --git a/Resources/Prototypes/Entities/items/chemistry.yml b/Resources/Prototypes/Entities/items/chemistry.yml index cca0065844..be043ad008 100644 --- a/Resources/Prototypes/Entities/items/chemistry.yml +++ b/Resources/Prototypes/Entities/items/chemistry.yml @@ -9,6 +9,7 @@ - type: Icon texture: Objects/Chemistry/chemicals.rsi/beaker.png - type: Solution + fillingState: beaker maxVol: 50 caps: 27 - type: Pourable @@ -25,6 +26,7 @@ - type: Icon texture: Objects/Chemistry/chemicals.rsi/beakerlarge.png - type: Solution + fillingState: beakerlarge maxVol: 100 caps: 27 - type: Pourable @@ -41,6 +43,8 @@ - type: Icon texture: Objects/Chemistry/chemicals.rsi/dropper.png - type: Solution + fillingState: dropper + fillingSteps: 2 maxVol: 5 caps: 19 - type: Pourable @@ -53,10 +57,12 @@ id: Syringe components: - type: Sprite - texture: Objects/Chemistry/chemicals.rsi/syringeproj.png + texture: Objects/Chemistry/syringe.rsi/0.png - type: Icon - texture: Objects/Chemistry/chemicals.rsi/syringeproj.png + texture: Objects/Chemistry/syringe.rsi/0.png - type: Solution + fillingState: syringe + fillingSteps: 5 maxVol: 15 caps: 19 - type: Injector diff --git a/Resources/Prototypes/Entities/mobs/human.yml b/Resources/Prototypes/Entities/mobs/human.yml index 50f789e8e0..fbe6939007 100644 --- a/Resources/Prototypes/Entities/mobs/human.yml +++ b/Resources/Prototypes/Entities/mobs/human.yml @@ -14,11 +14,14 @@ - type: Hunger - type: Thirst # Organs - - type: Stomach - maxVolume: 100 - digestionDelay: 20 + - type: Solution + maxVol: 250 - type: Bloodstream - maxVolume: 250 + max_volume: 100 + - type: Stomach + max_volume: 250 + digestionDelay: 20 + - type: Inventory - type: Constructor @@ -147,8 +150,6 @@ hands: - left - right - # Organs - - type: Stomach - type: Inventory - type: Sprite diff --git a/Resources/Prototypes/Reactions/drinks.yml b/Resources/Prototypes/Reactions/drinks.yml new file mode 100644 index 0000000000..d3dda3f121 --- /dev/null +++ b/Resources/Prototypes/Reactions/drinks.yml @@ -0,0 +1,103 @@ +- type: reaction + id: react.ManlyDorf + reactants: + chem.Beer: + amount: 1 + chem.Ale: + amount: 2 + products: + chem.ManlyDorf: 3 + +- type: reaction + id: react.CubaLibre + reactants: + chem.Cola: + amount: 1 + chem.Rum: + amount: 2 + products: + chem.CubaLibre: 3 + +- type: reaction + id: react.IrishCream + reactants: + chem.Cream: + amount: 1 + chem.Whiskey: + amount: 2 + products: + chem.IrishCream: 3 + +- type: reaction + id: react.IrishCoffee + reactants: + chem.IrishCream: + amount: 2 + chem.Coffee: + amount: 2 + products: + chem.IrishCoffee: 4 + +- type: reaction + id: react.IrishCarBomb + reactants: + chem.IrishCream: + amount: 1 + chem.Ale: + amount: 1 + products: + chem.IrishCarBomb: 2 + +- type: reaction + id: react.B52 + reactants: + chem.IrishCarBomb: + amount: 1 + chem.Kahlua: + amount: 1 + chem.Cognac: + amount: 1 + products: + chem.B52: 3 + +- type: reaction + id: react.AtomicBomb + reactants: + chem.B52: + amount: 10 + chem.U: + amount: 1 + products: + chem.AtomicBomb: 11 + +- type: reaction + id: react.WhiskeyCola + reactants: + chem.Whiskey: + amount: 2 + chem.Cola: + amount: 1 + products: + chem.WhiskeyCola: 3 + +- type: reaction + id: react.SyndicateBomb + reactants: + chem.WhiskeyCola: + amount: 1 + chem.Beer: + amount: 1 + products: + chem.SyndicateBomb: 2 + +- type: reaction + id: react.Antifreeze + reactants: + chem.Vodka: + amount: 2 + chem.Cream: + amount: 1 + chem.Ice: + amount: 1 + products: + chem.Antifreeze: 4 \ No newline at end of file diff --git a/Resources/Prototypes/Reagents/chemicals.yml b/Resources/Prototypes/Reagents/chemicals.yml index a5e29b8487..e8d0b18dd3 100644 --- a/Resources/Prototypes/Reagents/chemicals.yml +++ b/Resources/Prototypes/Reagents/chemicals.yml @@ -2,6 +2,7 @@ id: chem.Nutriment name: Nutriment desc: Generic nutrition + color: "#664330" metabolism: - !type:DefaultFood rate: 1 @@ -10,11 +11,13 @@ id: chem.H2SO4 name: Sulfuric Acid desc: A highly corrosive, oily, colorless liquid. + color: "#BF8C00" - type: reagent id: chem.H2O name: Water desc: A tasty colorless liquid. + color: "#808080" metabolism: - !type:DefaultDrink rate: 1 @@ -29,6 +32,7 @@ id: chem.Plasma name: Plasma desc: Funky, space-magic pixie dust. You probably shouldn't eat this, but we both know you will anyways. + color: "#500064" - type: reagent id: chem.Ethanol diff --git a/Resources/Prototypes/Reagents/drinks.yml b/Resources/Prototypes/Reagents/drinks.yml index eb804d8d8a..4cffd3be62 100644 --- a/Resources/Prototypes/Reagents/drinks.yml +++ b/Resources/Prototypes/Reagents/drinks.yml @@ -2,21 +2,126 @@ id: chem.Whiskey name: Whiskey desc: An alcoholic beverage made from fermented grain mash + color: "#664300" + spritePath: whiskeyglass.rsi - type: reagent id: chem.Ale name: Ale desc: A type of beer brewed using a warm fermentation method, resulting in a sweet, full-bodied and fruity taste. + color: "#664300" + spritePath: aleglass.rsi - type: reagent id: chem.Wine name: Wine desc: An alcoholic drink made from fermented grapes + color: "#7E4043" + spritePath: wineglass.rsi + +- type: reagent + id: chem.Beer + name: Beer + desc: A cold pint of pale lager. + color: "#664300" + spritePath: beerglass.rsi + +- type: reagent + id: chem.Vodka + name: Vodka + desc: The glass contain wodka. Xynta. + color: "#664300" + +- type: reagent + id: chem.Kahlua + name: Kahlua + desc: A widely known, Mexican coffee-flavoured liqueur. In production since 1936! + color: "#664300" + spritePath: kahluaglass.rsi + +- type: reagent + id: chem.Cognac + name: Cognac + desc: A sweet and strongly alcoholic drink, twice distilled and left to mature for several years. Classy as fornication. + color: "#AB3C05" + spritePath: cognacglass.rsi + +- type: reagent + id: chem.ManlyDorf + name: Manly Dorf + desc: A dwarfy concoction made from ale and beer. Intended for stout dwarves only. + color: "#664300" + spritePath: manlydorfglass.rsi + +- type: reagent + id: chem.CubaLibre + name: Cuba Libre + desc: A classic mix of rum and cola. + color: "#3E1B00" + spritePath: cubalibreglass.rsi + +- type: reagent + id: chem.IrishCarBomb + name: Irish Car Bomb + desc: A troubling mixture of irish cream and ale. + color: "#2E6671" + spritePath: irishcarbomb.rsi + +- type: reagent + id: chem.IrishCoffee + name: Irish Coffee + desc: Coffee served with irish cream. Regular cream just isn't the same! + color: "#664300" + spritePath: irishcoffeeglass.rsi + +- type: reagent + id: chem.IrishCream + name: Irish Cream + desc: Whiskey-imbued cream. What else could you expect from the Irish. + color: "#664300" + spritePath: irishcreamglass.rsi + +- type: reagent + id: chem.B52 + name: B-52 + desc: Coffee, irish cream, and cognac. You will get bombed. + color: "#664300" + spritePath: b52glass.rsi + +- type: reagent + id: chem.AtomicBomb + name: Atomic Bomb + desc: Nuclear proliferation never tasted so good. + color: "#666300" + spritePath: atomicbombglass.rsi + +- type: reagent + id: chem.WhiskeyCola + name: Whiskey Cola + desc: An innocent-looking mixture of cola and whiskey. Delicious. + color: "#3E1B00" + spritePath: whiskeycolaglass.rsi + +- type: reagent + id: chem.SyndicateBomb + name: Syndicate Bomb + desc: Somebody set us up the bomb! + color: "#2E6671" + spritePath: syndicatebomb.rsi + +- type: reagent + id: chem.Antifreeze + name: Antifreeze + desc: The ultimate refreshment. + color: "#664300" + spritePath: antifreeze.rsi + - type: reagent id: chem.Cola name: Cola desc: A sweet, carbonated soft drink. Caffeine free. + color: "#100800" metabolism: - !type:DefaultDrink rate: 1 @@ -25,6 +130,7 @@ id: chem.Coffee name: Coffee desc: A drink made from brewed coffee beans. Contains a moderate amount of caffeine. + color: "#664300" metabolism: - !type:DefaultDrink rate: 1 @@ -33,6 +139,25 @@ id: chem.Tea name: Tea desc: A made by boiling leaves of the tea tree, Camellia sinensis. + color: "#101000" metabolism: - !type:DefaultDrink rate: 1 + +- type: reagent + id: chem.Cream + name: Cream + desc: The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh? + color: "#DFD7AF" + metabolism: + - !type:DefaultDrink + rate: 1 + +- type: reagent + id: chem.Milk + name: Milk + desc: An opaque white liquid produced by the mammary glands of mammals. + color: "#DFDFDF" + metabolism: + - !type:DefaultDrink + rate: 1 \ No newline at end of file diff --git a/Resources/Prototypes/Reagents/elements.yml b/Resources/Prototypes/Reagents/elements.yml index 938a27a4c7..f60bb120d0 100644 --- a/Resources/Prototypes/Reagents/elements.yml +++ b/Resources/Prototypes/Reagents/elements.yml @@ -2,11 +2,13 @@ id: chem.H name: Hydrogen desc: A light, flammable gas. + color: "#808080" - type: reagent id: chem.O name: Oxygen desc: An oxidizing, colorless gas. + color: "#808080" - type: reagent id: chem.S @@ -36,6 +38,7 @@ id: chem.N name: Nitrogen desc: A colorless, odorless unreactive gas. Highly stable. + color: "#808080" - type: reagent id: chem.Fe @@ -47,6 +50,7 @@ id: chem.F name: Fluorine desc: A highly toxic pale yellow gas. Extremely reactive. + color: "#808080" - type: reagent id: chem.Si @@ -95,3 +99,9 @@ name: Sodium desc: A silvery-white alkali metal. Highly reactive in it's pure form. color: "#c6c8cc" + +- type: reagent + id: chem.U + name: Uranium + desc: A silvery-white metallic chemical element in the actinide series, weakly radioactive. + color: "#00ff06" \ No newline at end of file diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/backpack1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpack1.png new file mode 100644 index 0000000000..87af9277bb Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpack1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/backpack2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpack2.png new file mode 100644 index 0000000000..b77569d5ed Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpack2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/backpackmob1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpackmob1.png new file mode 100644 index 0000000000..1cc753cd78 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpackmob1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/backpackmob2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpackmob2.png new file mode 100644 index 0000000000..1a01ae51cf Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/backpackmob2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker1.png new file mode 100644 index 0000000000..ceb623570e Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker2.png new file mode 100644 index 0000000000..40209c2f66 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker3.png new file mode 100644 index 0000000000..62c4528ae1 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker4.png new file mode 100644 index 0000000000..489b48b78a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker5.png new file mode 100644 index 0000000000..ca719e883a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker6.png new file mode 100644 index 0000000000..581a50d15f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beaker6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge1.png new file mode 100644 index 0000000000..5ecf243047 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge2.png new file mode 100644 index 0000000000..05e647f110 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge3.png new file mode 100644 index 0000000000..0a464113d7 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge4.png new file mode 100644 index 0000000000..c16054a21a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge5.png new file mode 100644 index 0000000000..363e3a1bfc Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge6.png new file mode 100644 index 0000000000..64126589da Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/beakerlarge6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-1.png new file mode 100644 index 0000000000..aaed076693 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-2.png new file mode 100644 index 0000000000..2243651f0d Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-3.png new file mode 100644 index 0000000000..a58b538a81 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-4.png new file mode 100644 index 0000000000..a71c865d58 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-5.png new file mode 100644 index 0000000000..971eadab5f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-6.png new file mode 100644 index 0000000000..21e86f3d5f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-1-6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-1.png new file mode 100644 index 0000000000..ac1ecd5cff Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-2.png new file mode 100644 index 0000000000..c937cccb3a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-3.png new file mode 100644 index 0000000000..116ffb9bd3 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-4.png new file mode 100644 index 0000000000..925bf0a422 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-5.png new file mode 100644 index 0000000000..6764263d74 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-6.png new file mode 100644 index 0000000000..d82ea80c1f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-2-6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-1.png new file mode 100644 index 0000000000..aaed076693 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-2.png new file mode 100644 index 0000000000..3704a1363d Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-3.png new file mode 100644 index 0000000000..4e36539ba7 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-4.png new file mode 100644 index 0000000000..ee9ef2c432 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-5.png new file mode 100644 index 0000000000..6cb238455c Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-6.png new file mode 100644 index 0000000000..cbb8b6983f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-3-6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-1.png new file mode 100644 index 0000000000..aaed076693 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-2.png new file mode 100644 index 0000000000..6e62bae22c Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-3.png new file mode 100644 index 0000000000..dd1a77ce62 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-4.png new file mode 100644 index 0000000000..379c84c5bd Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-5.png new file mode 100644 index 0000000000..fb06bd67c8 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-6.png new file mode 100644 index 0000000000..e2563d0dec Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/bottle-4-6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/dropper1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/dropper1.png new file mode 100644 index 0000000000..999d333ab8 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/dropper1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/glass1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass1.png new file mode 100644 index 0000000000..d9ee584491 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/glass2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass2.png new file mode 100644 index 0000000000..6d5dc6152c Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/glass3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass3.png new file mode 100644 index 0000000000..2290157755 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/glass4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass4.png new file mode 100644 index 0000000000..f6d616da8a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/glass5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass5.png new file mode 100644 index 0000000000..6d5d981ab6 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/glass6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass6.png new file mode 100644 index 0000000000..384795d0b8 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/glass6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle1.png new file mode 100644 index 0000000000..c00df70a59 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle2.png new file mode 100644 index 0000000000..33d921d8f2 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle3.png new file mode 100644 index 0000000000..1f964fe37a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle4.png new file mode 100644 index 0000000000..61fd62c4db Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle5.png new file mode 100644 index 0000000000..7ef3ec2c2d Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle6.png new file mode 100644 index 0000000000..414c770679 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/largebottle6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/meta.json b/Resources/Textures/Objects/Chemistry/fillings.rsi/meta.json new file mode 100644 index 0000000000..6c606829b1 --- /dev/null +++ b/Resources/Textures/Objects/Chemistry/fillings.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "backpack1", "directions": 1, "delays": [[1.0]]}, {"name": "backpack2", "directions": 1, "delays": [[1.0]]}, {"name": "backpackmob1", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "backpackmob2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "beaker1", "directions": 1, "delays": [[1.0]]}, {"name": "beaker2", "directions": 1, "delays": [[1.0]]}, {"name": "beaker3", "directions": 1, "delays": [[1.0]]}, {"name": "beaker4", "directions": 1, "delays": [[1.0]]}, {"name": "beaker5", "directions": 1, "delays": [[1.0]]}, {"name": "beaker6", "directions": 1, "delays": [[1.0]]}, {"name": "beakerlarge1", "directions": 1, "delays": [[1.0]]}, {"name": "beakerlarge2", "directions": 1, "delays": [[1.0]]}, {"name": "beakerlarge3", "directions": 1, "delays": [[1.0]]}, {"name": "beakerlarge4", "directions": 1, "delays": [[1.0]]}, {"name": "beakerlarge5", "directions": 1, "delays": [[1.0]]}, {"name": "beakerlarge6", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-1-1", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-1-2", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-1-3", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-1-4", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-1-5", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-1-6", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-2-1", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-2-2", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-2-3", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-2-4", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-2-5", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-2-6", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-3-1", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-3-2", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-3-3", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-3-4", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-3-5", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-3-6", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-4-1", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-4-2", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-4-3", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-4-4", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-4-5", "directions": 1, "delays": [[1.0]]}, {"name": "bottle-4-6", "directions": 1, "delays": [[1.0]]}, {"name": "dropper1", "directions": 1, "delays": [[1.0]]}, {"name": "glass1", "directions": 1, "delays": [[1.0]]}, {"name": "glass2", "directions": 1, "delays": [[1.0]]}, {"name": "glass3", "directions": 1, "delays": [[1.0]]}, {"name": "glass4", "directions": 1, "delays": [[1.0]]}, {"name": "glass5", "directions": 1, "delays": [[1.0]]}, {"name": "glass6", "directions": 1, "delays": [[1.0]]}, {"name": "largebottle1", "directions": 1, "delays": [[1.0]]}, {"name": "largebottle2", "directions": 1, "delays": [[1.0]]}, {"name": "largebottle3", "directions": 1, "delays": [[1.0]]}, {"name": "largebottle4", "directions": 1, "delays": [[1.0]]}, {"name": "largebottle5", "directions": 1, "delays": [[1.0]]}, {"name": "largebottle6", "directions": 1, "delays": [[1.0]]}, {"name": "smallbottle1", "directions": 1, "delays": [[1.0]]}, {"name": "smallbottle2", "directions": 1, "delays": [[1.0]]}, {"name": "smallbottle3", "directions": 1, "delays": [[1.0]]}, {"name": "smallbottle4", "directions": 1, "delays": [[1.0]]}, {"name": "smallbottle5", "directions": 1, "delays": [[1.0]]}, {"name": "smallbottle6", "directions": 1, "delays": [[1.0]]}, {"name": "syringe1", "directions": 1, "delays": [[1.0]]}, {"name": "syringe2", "directions": 1, "delays": [[1.0]]}, {"name": "syringe3", "directions": 1, "delays": [[1.0]]}, {"name": "syringe4", "directions": 1, "delays": [[1.0]]}, {"name": "vial1", "directions": 1, "delays": [[1.0]]}, {"name": "vial2", "directions": 1, "delays": [[1.0]]}, {"name": "vial3", "directions": 1, "delays": [[1.0]]}, {"name": "vial4", "directions": 1, "delays": [[1.0]]}, {"name": "vial5", "directions": 1, "delays": [[1.0]]}, {"name": "vial6", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle1.png new file mode 100644 index 0000000000..bafddb3bdd Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle2.png new file mode 100644 index 0000000000..344e45c81d Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle3.png new file mode 100644 index 0000000000..7c6941e780 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle4.png new file mode 100644 index 0000000000..149f77ad9a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle5.png new file mode 100644 index 0000000000..78ebfcc3a4 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle6.png new file mode 100644 index 0000000000..4f392a2288 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/smallbottle6.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe1.png new file mode 100644 index 0000000000..74cfa72ab4 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe2.png new file mode 100644 index 0000000000..74cfa72ab4 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe3.png new file mode 100644 index 0000000000..9aa237b136 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe4.png new file mode 100644 index 0000000000..d8b7e8a701 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/syringe4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/vial1.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial1.png new file mode 100644 index 0000000000..3c1e8f3bf0 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial1.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/vial2.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial2.png new file mode 100644 index 0000000000..ee61d2a54b Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial2.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/vial3.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial3.png new file mode 100644 index 0000000000..997d2dae2f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial3.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/vial4.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial4.png new file mode 100644 index 0000000000..fdd0af6277 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial4.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/vial5.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial5.png new file mode 100644 index 0000000000..900d85422b Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial5.png differ diff --git a/Resources/Textures/Objects/Chemistry/fillings.rsi/vial6.png b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial6.png new file mode 100644 index 0000000000..d9e5ae957f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/fillings.rsi/vial6.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/0.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/0.png new file mode 100644 index 0000000000..9cf92274d4 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/0.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/1.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/1.png new file mode 100644 index 0000000000..2d455682f4 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/1.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/10.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/10.png new file mode 100644 index 0000000000..35e22c6454 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/10.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/15.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/15.png new file mode 100644 index 0000000000..834ae95f9f Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/15.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/5.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/5.png new file mode 100644 index 0000000000..b898840c30 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/5.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector.png new file mode 100644 index 0000000000..b54b0ee4cb Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector0.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector0.png new file mode 100644 index 0000000000..c19b268183 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector0.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_black.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_black.png new file mode 100644 index 0000000000..e5c55e28ca Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_black.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_black0.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_black0.png new file mode 100644 index 0000000000..700d31bfcd Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_black0.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_red.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_red.png new file mode 100644 index 0000000000..bbf23c5f9e Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_red.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_red0.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_red0.png new file mode 100644 index 0000000000..cc36291fba Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/autoinjector_red0.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/borghypo.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/borghypo.png new file mode 100644 index 0000000000..e96d92d793 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/borghypo.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/borghypo_s.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/borghypo_s.png new file mode 100644 index 0000000000..4adc13c448 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/borghypo_s.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/broken.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/broken.png new file mode 100644 index 0000000000..aee78e21a5 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/broken.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/combat_hypo.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/combat_hypo.png new file mode 100644 index 0000000000..022d0a1988 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/combat_hypo.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/draw.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/draw.png new file mode 100644 index 0000000000..1bc212413e Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/draw.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/hypo.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/hypo.png new file mode 100644 index 0000000000..cab29e5b0a Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/hypo.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/inject.png b/Resources/Textures/Objects/Chemistry/syringe.rsi/inject.png new file mode 100644 index 0000000000..e03bd1d144 Binary files /dev/null and b/Resources/Textures/Objects/Chemistry/syringe.rsi/inject.png differ diff --git a/Resources/Textures/Objects/Chemistry/syringe.rsi/meta.json b/Resources/Textures/Objects/Chemistry/syringe.rsi/meta.json new file mode 100644 index 0000000000..a07d2954f6 --- /dev/null +++ b/Resources/Textures/Objects/Chemistry/syringe.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "0", "directions": 1, "delays": [[1.0]]}, {"name": "1", "directions": 1, "delays": [[1.0]]}, {"name": "10", "directions": 1, "delays": [[1.0]]}, {"name": "15", "directions": 1, "delays": [[1.0]]}, {"name": "5", "directions": 1, "delays": [[1.0]]}, {"name": "autoinjector", "directions": 1, "delays": [[1.0]]}, {"name": "autoinjector0", "directions": 1, "delays": [[1.0]]}, {"name": "autoinjector_black", "directions": 1, "delays": [[1.0]]}, {"name": "autoinjector_black0", "directions": 1, "delays": [[1.0]]}, {"name": "autoinjector_red", "directions": 1, "delays": [[1.0]]}, {"name": "autoinjector_red0", "directions": 1, "delays": [[1.0]]}, {"name": "borghypo", "directions": 1, "delays": [[1.0]]}, {"name": "borghypo_s", "directions": 1, "delays": [[1.0]]}, {"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "combat_hypo", "directions": 1, "delays": [[1.0]]}, {"name": "draw", "directions": 1, "delays": [[1.0]]}, {"name": "hypo", "directions": 1, "delays": [[1.0]]}, {"name": "inject", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file