diff --git a/Content.Client/GameObjects/Components/Nutrition/BurnStateVisualizer.cs b/Content.Client/GameObjects/Components/Nutrition/BurnStateVisualizer.cs new file mode 100644 index 0000000000..d70adb82d6 --- /dev/null +++ b/Content.Client/GameObjects/Components/Nutrition/BurnStateVisualizer.cs @@ -0,0 +1,66 @@ +using Content.Shared.GameObjects.Components; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Shared.Utility; +using YamlDotNet.RepresentationModel; + +namespace Content.Client.GameObjects.Components.Nutrition +{ + [UsedImplicitly] + public class BurnStateVisualizer : AppearanceVisualizer + { + private string _burntIcon = "burnt-icon"; + private string _litIcon = "lit-icon"; + private string _unlitIcon = "icon"; + + public override void LoadData(YamlMappingNode node) + { + base.LoadData(node); + + if (node.TryGetNode("unlitIcon", out var unlitIcon)) + { + _unlitIcon = unlitIcon.AsString(); + } + + if (node.TryGetNode("litIcon", out var litIcon)) + { + _litIcon = litIcon.AsString(); + } + + if (node.TryGetNode("burntIcon", out var burntIcon)) + { + _burntIcon = burntIcon.AsString(); + } + } + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (component.TryGetData(SmokingVisuals.Smoking, out var smoking)) + { + SetState(component, smoking); + } + } + + private void SetState(AppearanceComponent component, SharedBurningStates burnState) + { + if (component.Owner.TryGetComponent(out var sprite)) + { + switch (burnState) + { + case SharedBurningStates.Lit: + sprite.LayerSetState(0, _litIcon); + break; + case SharedBurningStates.Burnt: + sprite.LayerSetState(0, _burntIcon); + break; + default: + sprite.LayerSetState(0, _unlitIcon); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index d9a2babe36..3570c3b374 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -169,6 +169,9 @@ namespace Content.Client "Flammable", "CreamPie", "CreamPied", + "Smoking", + "Matchstick", + "Matchbox", "BlockGameArcade", "KitchenSpike", "Butcherable", diff --git a/Content.Server/GameObjects/Components/Interactable/MatchboxComponent.cs b/Content.Server/GameObjects/Components/Interactable/MatchboxComponent.cs new file mode 100644 index 0000000000..d7a883fbb3 --- /dev/null +++ b/Content.Server/GameObjects/Components/Interactable/MatchboxComponent.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Content.Shared.GameObjects.Components; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Interactable +{ + // TODO make changes in icons when different threshold reached + // e.g. different icons for 10% 50% 100% + [RegisterComponent] + public class MatchboxComponent : Component, IInteractUsing + { + public override string Name => "Matchbox"; + + public int Priority => 1; + + public async Task InteractUsing(InteractUsingEventArgs eventArgs) + { + if (eventArgs.Using.TryGetComponent(out var matchstick) + && matchstick.CurrentState == SharedBurningStates.Unlit) + { + matchstick.Ignite(eventArgs.User); + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Content.Server/GameObjects/Components/Interactable/MatchstickComponent.cs b/Content.Server/GameObjects/Components/Interactable/MatchstickComponent.cs new file mode 100644 index 0000000000..3bf112b9ff --- /dev/null +++ b/Content.Server/GameObjects/Components/Interactable/MatchstickComponent.cs @@ -0,0 +1,105 @@ +#nullable enable +using System.Threading.Tasks; +using Content.Shared.Audio; +using Content.Shared.GameObjects.Components; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.ComponentDependencies; +using Robust.Shared.GameObjects.Components.Timers; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Interactable +{ + [RegisterComponent] + [ComponentReference(typeof(IHotItem))] + public class MatchstickComponent : Component, IHotItem, IInteractUsing + { + public override string Name => "Matchstick"; + + private SharedBurningStates _currentState = SharedBurningStates.Unlit; + + /// + /// How long will matchstick last in seconds. + /// + [ViewVariables(VVAccess.ReadOnly)] private int _duration; + + /// + /// Sound played when you ignite the matchstick. + /// + private string? _igniteSound; + + /// + /// Point light component. Gives matches a glow in dark effect. + /// + [ComponentDependency] + private readonly PointLightComponent? _pointLightComponent = default!; + + /// + /// Current state to matchstick. Can be Unlit, Lit or Burnt. + /// + [ViewVariables] + public SharedBurningStates CurrentState + { + get => _currentState; + private set + { + _currentState = value; + + if (_pointLightComponent != null) + { + _pointLightComponent.Enabled = _currentState == SharedBurningStates.Lit; + } + + if (Owner.TryGetComponent(out AppearanceComponent? appearance)) + { + appearance.SetData(SmokingVisuals.Smoking, _currentState); + } + } + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref _duration, "duration", 10); + serializer.DataField(ref _igniteSound, "igniteSound", null); + } + + bool IHotItem.IsCurrentlyHot() + { + return CurrentState == SharedBurningStates.Lit; + } + + public void Ignite(IEntity user) + { + // Play Sound + if (!string.IsNullOrEmpty(_igniteSound)) + { + EntitySystem.Get().PlayFromEntity(_igniteSound, Owner, + AudioHelpers.WithVariation(0.125f).WithVolume(-0.125f)); + } + + // Change state + CurrentState = SharedBurningStates.Lit; + Owner.SpawnTimer(_duration * 1000, () => CurrentState = SharedBurningStates.Burnt); + } + + public async Task InteractUsing(InteractUsingEventArgs eventArgs) + { + if (eventArgs.Target.TryGetComponent(out var hotItem) + && hotItem.IsCurrentlyHot() + && CurrentState == SharedBurningStates.Unlit) + { + Ignite(eventArgs.User); + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index ac0a8b1bb7..21776ab4e8 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -28,7 +28,8 @@ namespace Content.Server.GameObjects.Components.Interactable [RegisterComponent] [ComponentReference(typeof(ToolComponent))] [ComponentReference(typeof(IToolComponent))] - public class WelderComponent : ToolComponent, IExamine, IUse, ISuicideAct, ISolutionChange + [ComponentReference(typeof(IHotItem))] + public class WelderComponent : ToolComponent, IExamine, IUse, ISuicideAct, ISolutionChange, IHotItem { [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; @@ -73,6 +74,11 @@ namespace Content.Server.GameObjects.Components.Interactable } } + bool IHotItem.IsCurrentlyHot() + { + return WelderLit; + } + public override void Initialize() { base.Initialize(); @@ -285,5 +291,7 @@ namespace Content.Server.GameObjects.Components.Interactable { Dirty(); } + + } } diff --git a/Content.Server/GameObjects/Components/Nutrition/SmokingComponent.cs b/Content.Server/GameObjects/Components/Nutrition/SmokingComponent.cs new file mode 100644 index 0000000000..ad650d2906 --- /dev/null +++ b/Content.Server/GameObjects/Components/Nutrition/SmokingComponent.cs @@ -0,0 +1,107 @@ +#nullable enable +using System.Threading.Tasks; +using Content.Server.GameObjects.Components.Items.Clothing; +using Content.Shared.GameObjects.Components; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.ComponentDependencies; +using Robust.Shared.GameObjects.Components.Timers; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Nutrition +{ + /// + /// This item acts as a representation for smokable consumables. + /// + /// To smoke a cigar, you need: + /// + /// a hot item (implements IHotItem interface) + /// that's a alight. + /// for the target cigar be Unlit. Lit cigars are already lit and butt's don't have any "fuel" left. + /// + /// TODO: Add reagents that interact when smoking + /// TODO: Allow suicide via excessive Smoking + /// + [RegisterComponent] + public class SmokingComponent : Component, IInteractUsing, IHotItem + { + public override string Name => "Smoking"; + + private SharedBurningStates _currentState = SharedBurningStates.Unlit; + + [ComponentDependency] private readonly ClothingComponent? _clothingComponent = default!; + [ComponentDependency] private readonly AppearanceComponent? _appearanceComponent = default!; + + /// + /// Duration represents how long will this item last. + /// Generally it ticks down whether it's time-based + /// or consumption-based. + /// + [ViewVariables] private int _duration; + + /// + /// What is the temperature of the cigar? + /// + /// For a regular cigar, the temp approaches around 400°C or 580°C + /// dependant on where you measure. + /// + [ViewVariables] private float _temperature; + + [ViewVariables] + private SharedBurningStates CurrentState + { + get => _currentState; + set + { + _currentState = value; + + if (_clothingComponent != null) + { + switch (_currentState) + { + case SharedBurningStates.Lit: + _clothingComponent.EquippedPrefix = "lit"; + _clothingComponent.ClothingEquippedPrefix = "lit"; + break; + default: + _clothingComponent.EquippedPrefix = "unlit"; + _clothingComponent.ClothingEquippedPrefix = "unlit"; + break; + } + } + + _appearanceComponent?.SetData(SmokingVisuals.Smoking, _currentState); + } + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _duration, "duration", 30); + serializer.DataField(ref _temperature, "temperature", 673.15f); + } + + public async Task InteractUsing(InteractUsingEventArgs eventArgs) + { + if (eventArgs.Using.TryGetComponent(out IHotItem? lighter) + && lighter.IsCurrentlyHot() + && CurrentState == SharedBurningStates.Unlit + ) + { + CurrentState = SharedBurningStates.Lit; + // TODO More complex handling of cigar consumption + Owner.SpawnTimer(_duration * 1000, () => CurrentState = SharedBurningStates.Burnt); + return true; + } + + return false; + } + + bool IHotItem.IsCurrentlyHot() + { + return _currentState == SharedBurningStates.Lit; + } + } +} \ No newline at end of file diff --git a/Content.Shared/GameObjects/Components/SharedBurningStates.cs b/Content.Shared/GameObjects/Components/SharedBurningStates.cs new file mode 100644 index 0000000000..d371943d62 --- /dev/null +++ b/Content.Shared/GameObjects/Components/SharedBurningStates.cs @@ -0,0 +1,13 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components +{ + [Serializable, NetSerializable] + public enum SharedBurningStates : byte + { + Unlit, + Lit, + Burnt, + } +} diff --git a/Content.Shared/GameObjects/Components/SmokingVisuals.cs b/Content.Shared/GameObjects/Components/SmokingVisuals.cs new file mode 100644 index 0000000000..851a510d6d --- /dev/null +++ b/Content.Shared/GameObjects/Components/SmokingVisuals.cs @@ -0,0 +1,11 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components +{ + [Serializable, NetSerializable] + public enum SmokingVisuals : byte + { + Smoking, + } +} diff --git a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IHotItem.cs b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IHotItem.cs new file mode 100644 index 0000000000..a86fee8c51 --- /dev/null +++ b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IHotItem.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using Robust.Shared.GameObjects; + +namespace Content.Shared.Interfaces.GameObjects.Components +{ + /// + /// This interface gives components hot quality when they are used. + /// E.g if you hold a lit match or a welder then it will be hot, + /// presuming match is lit or the welder is on respectively. + /// However say you hold an item that is always hot like lava rock, + /// it will be permanently hot. + /// + public interface IHotItem + { + bool IsCurrentlyHot(); + } +} diff --git a/Resources/Audio/Items/match_strike.ogg b/Resources/Audio/Items/match_strike.ogg new file mode 100644 index 0000000000..8bf23316e1 Binary files /dev/null and b/Resources/Audio/Items/match_strike.ogg differ diff --git a/Resources/Prototypes/Catalog/VendingMachines/cigs.yml b/Resources/Prototypes/Catalog/VendingMachines/cigs.yml index d591447f8d..bf1a001aa1 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/cigs.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/cigs.yml @@ -4,3 +4,6 @@ description: A vending machine containing smoking supplies. animationDuration: 2.1 spriteName: cigs + startingInventory: + CigarettePack: 20 + Matchbox: 10 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/fancy.yml b/Resources/Prototypes/Entities/Objects/Consumable/fancy.yml new file mode 100644 index 0000000000..fcf5d0dc31 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Consumable/fancy.yml @@ -0,0 +1,42 @@ +- type: entity + name: "Base Cigarette" + id: BaseCigarette + parent: BaseItem + abstract: true + components: + - type: Sprite + sprite: Objects/Consumable/Fancy/mask_cig.rsi + netsync: false + state: icon + - type: Clothing + sprite: Objects/Consumable/Fancy/mask_cig.rsi + Slots: [ mask ] + HeldPrefix: unlit + size: 1 + - type: Smoking + duration: 30 + - type: Appearance + visuals: + - type: BurnStateVisualizer + +- type: entity + id: Cigarette + parent: BaseCigarette + name: cigarette + description: "If you want to get cancer, might as well do it in style." + +- type: entity + id: CigarettePack + parent: SmallboxItem + name: cigarette pack + description: "Pack of cigarettes" + components: + - type: Sprite + sprite: Objects/Consumable/Fancy/cigarettes.rsi + layers: + - state: cig + - type: StorageFill + contents: + - name: Cigarette + amount: 6 + diff --git a/Resources/Prototypes/Entities/Objects/Tools/matches.yml b/Resources/Prototypes/Entities/Objects/Tools/matches.yml new file mode 100644 index 0000000000..3c9c337b6c --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Tools/matches.yml @@ -0,0 +1,53 @@ +- type: entity + id: SmallboxItem + parent: BaseItem + abstract: true + components: + - type: Storage + capacity: 10 + - type: Item + size: 6 + +- type: entity + name: match stick + parent: BaseItem + id: Matchstick + description: "A simple match stick, used for lighting fine smokables." + components: + - type: Sprite + netsync: false + sprite: Objects/Tools/matches.rsi + layers: + - state: match_unlit + - type: Item + size: 1 + sprite: Objects/Tools/matches.rsi + - type: Matchstick + duration: 10 + igniteSound: /Audio/Items/match_strike.ogg + - type: PointLight + enabled: false + radius: 1.1 + color: darkorange + - type: Appearance + visuals: + - type: BurnStateVisualizer + unlitIcon: match_unlit + litIcon: match_lit + burntIcon: match_burnt + +- type: entity + name: match box + parent: SmallboxItem + id: Matchbox + description: "A small box of Almost But Not Quite Plasma Premium Matches." + components: + - type: Matchbox + - type: Sprite + sprite: Objects/Tools/matches.rsi + layers: + - state: matchbox + - type: StorageFill + contents: + - name: Matchstick + amount: 6 diff --git a/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig.png b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig.png new file mode 100644 index 0000000000..845968ae9f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig.png differ diff --git a/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_empty.png b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_empty.png new file mode 100644 index 0000000000..42abce58e0 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_open.png b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_open.png new file mode 100644 index 0000000000..45bf3c6cc0 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_open.png differ diff --git a/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/meta.json b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/meta.json new file mode 100644 index 0000000000..1f2a383e97 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bfc9c6ba8126ee8c41564d68c4bfb9ce37faa8f8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cig", + "directions": 1 + }, + { + "name": "cig_empty", + "directions": 1 + }, + { + "name": "cig_open", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/burnt-icon.png b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/burnt-icon.png new file mode 100644 index 0000000000..ac2321b995 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/burnt-icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/icon.png b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/icon.png new file mode 100644 index 0000000000..03c18368f8 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-equipped-MASK.png b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-equipped-MASK.png new file mode 100644 index 0000000000..3c5cad56f2 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-equipped-MASK.png differ diff --git a/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-icon.png b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-icon.png new file mode 100644 index 0000000000..4012b0cca8 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/meta.json b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/meta.json new file mode 100644 index 0000000000..936bdef739 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/meta.json @@ -0,0 +1,85 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bfc9c6ba8126ee8c41564d68c4bfb9ce37faa8f8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "unlit-equipped-MASK", + "directions": 4 + }, + { + "name": "lit-equipped-MASK", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "burnt-icon", + "directions": 1 + }, + { + "name": "icon", + "directions": 1 + }, + { + "name": "lit-icon", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/unlit-equipped-MASK.png b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/unlit-equipped-MASK.png new file mode 100644 index 0000000000..7524035609 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/unlit-equipped-MASK.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/match_burnt.png b/Resources/Textures/Objects/Tools/matches.rsi/match_burnt.png new file mode 100644 index 0000000000..de3e0b1e58 Binary files /dev/null and b/Resources/Textures/Objects/Tools/matches.rsi/match_burnt.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/match_lit.png b/Resources/Textures/Objects/Tools/matches.rsi/match_lit.png new file mode 100644 index 0000000000..c307e67472 Binary files /dev/null and b/Resources/Textures/Objects/Tools/matches.rsi/match_lit.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/match_unlit.png b/Resources/Textures/Objects/Tools/matches.rsi/match_unlit.png new file mode 100644 index 0000000000..32cc706734 Binary files /dev/null and b/Resources/Textures/Objects/Tools/matches.rsi/match_unlit.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/matchbox.png b/Resources/Textures/Objects/Tools/matches.rsi/matchbox.png new file mode 100644 index 0000000000..dfd12b3a08 Binary files /dev/null and b/Resources/Textures/Objects/Tools/matches.rsi/matchbox.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostempty.png b/Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostempty.png new file mode 100644 index 0000000000..3d3035ea85 Binary files /dev/null and b/Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostempty.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostfull.png b/Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostfull.png new file mode 100644 index 0000000000..b7a9a6e846 Binary files /dev/null and b/Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostfull.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/matchbox_e.png b/Resources/Textures/Objects/Tools/matches.rsi/matchbox_e.png new file mode 100644 index 0000000000..ba9a9fe405 Binary files /dev/null and b/Resources/Textures/Objects/Tools/matches.rsi/matchbox_e.png differ diff --git a/Resources/Textures/Objects/Tools/matches.rsi/meta.json b/Resources/Textures/Objects/Tools/matches.rsi/meta.json new file mode 100644 index 0000000000..55a8383b55 --- /dev/null +++ b/Resources/Textures/Objects/Tools/matches.rsi/meta.json @@ -0,0 +1,46 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bfc9c6ba8126ee8c41564d68c4bfb9ce37faa8f8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "match_burnt", + "directions": 1 + }, + { + "name": "match_lit", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "match_unlit", + "directions": 1 + }, + { + "name": "matchbox", + "directions": 1 + }, + { + "name": "matchbox_almostempty", + "directions": 1 + }, + { + "name": "matchbox_almostfull", + "directions": 1 + }, + { + "name": "matchbox_e", + "directions": 1 + } + ] +}