From c01b1d5c05cc545acdad75536a6b2e64d3149845 Mon Sep 17 00:00:00 2001 From: Ygg01 Date: Mon, 11 Jan 2021 00:17:28 +0100 Subject: [PATCH] Add cigarettes and matches to SS14 (#2522) * Add resources for cigs/matches * Add files for cigarettes * Remove Shared Components * Applied some of the suggestions * Change priority to allow matches to be set alight by matchbox * Added item for pack of cigars * Add swepts resources. Fix naming * Fix naming, implement suggestions. * Addressed Paul's suggestions * Remove unused resources * Fix Paul's suggestions --- .../Nutrition/BurnStateVisualizer.cs | 66 +++++++++++ Content.Client/IgnoredComponents.cs | 3 + .../Interactable/MatchboxComponent.cs | 29 +++++ .../Interactable/MatchstickComponent.cs | 105 +++++++++++++++++ .../Interactable/WelderComponent.cs | 10 +- .../Components/Nutrition/SmokingComponent.cs | 107 ++++++++++++++++++ .../Components/SharedBurningStates.cs | 13 +++ .../GameObjects/Components/SmokingVisuals.cs | 11 ++ .../Components/Interaction/IHotItem.cs | 17 +++ Resources/Audio/Items/match_strike.ogg | Bin 0 -> 25149 bytes .../Catalog/VendingMachines/cigs.yml | 3 + .../Entities/Objects/Consumable/fancy.yml | 42 +++++++ .../Entities/Objects/Tools/matches.yml | 53 +++++++++ .../Consumable/Fancy/cigarettes.rsi/cig.png | Bin 0 -> 249 bytes .../Fancy/cigarettes.rsi/cig_empty.png | Bin 0 -> 280 bytes .../Fancy/cigarettes.rsi/cig_open.png | Bin 0 -> 171 bytes .../Consumable/Fancy/cigarettes.rsi/meta.json | 23 ++++ .../Fancy/mask_cig.rsi/burnt-icon.png | Bin 0 -> 135 bytes .../Consumable/Fancy/mask_cig.rsi/icon.png | Bin 0 -> 140 bytes .../Fancy/mask_cig.rsi/lit-equipped-MASK.png | Bin 0 -> 429 bytes .../Fancy/mask_cig.rsi/lit-icon.png | Bin 0 -> 344 bytes .../Consumable/Fancy/mask_cig.rsi/meta.json | 85 ++++++++++++++ .../mask_cig.rsi/unlit-equipped-MASK.png | Bin 0 -> 133 bytes .../Objects/Tools/matches.rsi/match_burnt.png | Bin 0 -> 150 bytes .../Objects/Tools/matches.rsi/match_lit.png | Bin 0 -> 518 bytes .../Objects/Tools/matches.rsi/match_unlit.png | Bin 0 -> 194 bytes .../Objects/Tools/matches.rsi/matchbox.png | Bin 0 -> 532 bytes .../matches.rsi/matchbox_almostempty.png | Bin 0 -> 524 bytes .../Tools/matches.rsi/matchbox_almostfull.png | Bin 0 -> 524 bytes .../Objects/Tools/matches.rsi/matchbox_e.png | Bin 0 -> 511 bytes .../Objects/Tools/matches.rsi/meta.json | 46 ++++++++ 31 files changed, 612 insertions(+), 1 deletion(-) create mode 100644 Content.Client/GameObjects/Components/Nutrition/BurnStateVisualizer.cs create mode 100644 Content.Server/GameObjects/Components/Interactable/MatchboxComponent.cs create mode 100644 Content.Server/GameObjects/Components/Interactable/MatchstickComponent.cs create mode 100644 Content.Server/GameObjects/Components/Nutrition/SmokingComponent.cs create mode 100644 Content.Shared/GameObjects/Components/SharedBurningStates.cs create mode 100644 Content.Shared/GameObjects/Components/SmokingVisuals.cs create mode 100644 Content.Shared/Interfaces/GameObjects/Components/Interaction/IHotItem.cs create mode 100644 Resources/Audio/Items/match_strike.ogg create mode 100644 Resources/Prototypes/Entities/Objects/Consumable/fancy.yml create mode 100644 Resources/Prototypes/Entities/Objects/Tools/matches.yml create mode 100644 Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig.png create mode 100644 Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_empty.png create mode 100644 Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/cig_open.png create mode 100644 Resources/Textures/Objects/Consumable/Fancy/cigarettes.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/burnt-icon.png create mode 100644 Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-equipped-MASK.png create mode 100644 Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/lit-icon.png create mode 100644 Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Fancy/mask_cig.rsi/unlit-equipped-MASK.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/match_burnt.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/match_lit.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/match_unlit.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/matchbox.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostempty.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/matchbox_almostfull.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/matchbox_e.png create mode 100644 Resources/Textures/Objects/Tools/matches.rsi/meta.json 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 0000000000000000000000000000000000000000..8bf23316e1d382bb7d7f49599891574a42eea4cf GIT binary patch literal 25149 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 F0}j~eEI9xG literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..845968ae9f5585e402bdee93d3124c8ab7cb7921 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ1D-C9Ar*6y6C_v{Cy4YkP2`jC z43ycq<(s|U&Zig8s?20%);Xf3V`0X;{OJ@1wJeEAM^YWD*-c)%O;+(MWlz}5b8PgIepH-GpA2`hcU@O+!|=0!NBmk!G&q_?58V$eqr!*^>bP0l+XkKh1O!p literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..42abce58e0b40dbee205e36f4e2d28e11d767133 GIT binary patch literal 280 zcmV+z0q6dSP)qzGH?n z7@RXcOKXOg*Ma5vwOqMMvcU!Le_5pwDiy{E`Z;!0DYv*C-fFKC?{>c7i+$jK{ zP&=iRFCHc!O;Z2{jW&0!-rfN@+rzU; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..45bf3c6cc0c91e17aeaabc5ba642f69052511161 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJB2O2`kcv6U2@?ZWKOz7C literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ac2321b995142142b680822faac276180ed1ff37 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzKTj9Okcv6U2@p2Sa-Mn*n*`>{=APN dIucqK89p5sNS}LfttilB22WQ%mvv4FO#o!SF{S_j literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..03c18368f80ab5ef68394b2b9f570e446b40dd8d GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJU{4pvkcv6U2@*!A$%-*lcR itxs1B@}Qa}7#IZR@fNDjxXK7Lp25@A&t;ucLK6U*7%w3J literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3c5cad56f2028ebd79f6b3865a0ebbc6d07cdc59 GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zf+;U@Y-;aSW-L^Y*S|VVi*j%Y_q; ztnNGunAmqbZ0WjjfJN)YN}uXC3v=o|&1=+`ESvOjlO`*}f+;~>YrnqA)Vq_lcDlkP zmc%8TO&)Uugj5?CY^~dhYHv^b`0@6G8HYY!|M17w`oGolb>I1cHll$8@h>*1I(_I6 zv|Gd?z!0Z-uV21S9!(7c!vj~7W2I|a`}28^yg0)GXUsMbfO_uxy8P2We&hV3hZCaSW-L^Y*r(7qg=X+k@px z-8XPHxt>tWX_=xF5goyGt?;O@#D;A>y>sIZovYg*bi{2#-0zJBO@RiHC(;(x$>(h5 z`F(!R+`CzEEI?Bk7y>SROqk$(KJlf-sV3dvgVQthrX;Y7eAxM7rL<+K^7T^N!rs1Z zpYQ&xlatNc`l~6(zUY;{-v8Ha-l0!I&YIVk-fGzVupsr;jC;qb?%3P8=Wo7jQm=RG z)cn-9xzFk!i+?$PlObT%dI7LqAfnFb^2gWwFSUwXT+)}%+fiS;>35yW?}wUvdU?{e zn>+t(ny#!AcU`ah$@Y!^R{mw&{A2ZB#{H`DaQzGm_N4t~y!xZ&Pv*>j4Oir!-=A_a fzxf|XKB4g*gUae%+65EkSAh7Qu6{1-oD!MRVd(ZO;Oq{^Tz)-^{%lEe7*&=;fqS+oZDGCXAb( z-LY6>Ay{P2#bM0-9$@C|&1`nr11P1Gic6ViE_858Kz)rX!lzHYb1MIM%GI$R_DuCDCkD0T>0`|H9p1BMy?*LED<^W*P1W5Z6 zaBzi>{k4L~9QV?Hb4z&(Jd0Z0U( zm~B*5O)bH_2nhsWBuPTAK@C760L2iGu`lEa-~%w~Uvy4-1WGCsOxbFao6JlqOQj!L|uJ!^&U+0{{R307*qo IM6N<$f;l7JIsgCw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..32cc7067348e1981d5a43b7c3f1f9f1a5106909e GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJPEQxdkcv5PFK*;I4UzVbM7uxu*&mi=J9FmE{8)v#ikj9H{6c;OXk;vd$@?2>|TSO-BF# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..dfd12b3a08655998b560e4fe0976b133100cd8c5 GIT binary patch literal 532 zcmV+v0_**WP)gh0tbf_|ABxyR9q`KI2WN%H=zz9 zjzXn%a*`CSXhd|7I7q9dCi&*>bw~&X9893N+y`#E=bq<%cn<=BKp+qZ1OopV8ANn* z>Yzqeh^zqxu?FWA@4y%kJib}ST8l{!vz6^n@>D@5X69IXxJv$V z5rFrPUXj02#Cy+|r8PtZJ8U?7eS+orGUMl_i6Tqp{$pMqa6Rw!72wACf*zl_OJ#8d zq-_ka`*e<4t;WXkCjg8Zj+RdHV!q7&Q`1;$I8vHrVKU1Iqk{#weW9SmYjac?4k2zCK$gk_d}o{A!WagiaNLr9v7gEMx zI>|*9{o{^j1O==JZwdk^f)MW-LlvqYd(Ha`;1nammU9>&1*k~3Lg^d@oGQ)4BSx_z zIIn*-?<+vP(coP!K}0bIlEif;gjTBscvOA69f9xP+D$pHY;HGr`u5jAUp^4naee~^ WIkDWTJ1Hvw0000r4EW2+*$_>EK zrfiWDBBx*=PVvDA9#laHgmx3>9GV_sFOJZjllPwckL!KkXjt>wOvR?>=2?HZM(OGl z0Pi0?qg0(DguthzbwmU=q8z_I&GJHx=P%#&^^@fz1NDXqaPv~dPS4$=zPJj~H3m3* zu1KTNU~Bm!0BXwQ>{(V8YCNrP_VwjL9#tKvIk@`+cP>}#)a*R<#Z~ebN{pXBij#=Z zGX=8QEITWoi6kN;X(q0nWbMIiMvtA~VztVRZJ}Jqb7(C0%cKAG4BWjkVXbBxGYHmI z1~U}H`+zz}yVWF0rO0H`w8{3hyW3lg=W+mi*w|p{#m?|E5O<*XMo6imz2sts{d6X9 z00W!|uPOofTHpU{n& z35~1}Spy1U4bCgxfiWO>e5--A7Ly%hH;FKvCg&WB4{F`ssMqq@nUYRb7FfT#M)6`9 zfVcOaQoK~gd(Y$>99{?~ICa<34Np+5~Q|A~O%5t!@xk67I8Pb^KFa0`8)vc>UEZ%fA8Hu(uTr@kTC|+nOszVZ2Yyk%I9U7#0_q~J75odj2z3*>h&T$B zcB$eZsak)ehz=45X|>cOU+z5)3Bibi35d&m;BNOl?|Wa)g-9e4i9{li$bUvg5nZ1v zS>lAmDHw=Td@zCsRS*K9-NZSEj!m$aC1}sdd(WK*wZ3mMta){=Y%}uC(}Gc|!%bcD8IM=WkP6S_SDE0~|bE zpwVcsz48G7HD&tBEKe4ztk<^s`qGgpRCTlfH_w%=a(RK;(kfGDig@qYdHj*|)M3&z z<@2LW5=n3<$1YV^yL*GDznLGH%;SR}nETf|aO?bWYc<=LL9nhen4uWn2h=&*ttLq> z$N2adZPLDW_uDpy@_7K>*Xu05_&)p&WF07M3OQA@mt4%SU+x6P5EH#?6r9K`o~CLJ`(xo`~-I0u+;@I$xQ$N002ovPDHLkV1f${ B?eYKs literal 0 HcmV?d00001 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 + } + ] +}