]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Candles (#21087)
authorEd <96445749+TheShuEd@users.noreply.github.com>
Sat, 4 Nov 2023 05:53:51 +0000 (08:53 +0300)
committerGitHub <noreply@github.com>
Sat, 4 Nov 2023 05:53:51 +0000 (22:53 -0700)
Co-authored-by: faint <46868845+ficcialfaint@users.noreply.github.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: ElectroJr <leonsfriedrich@gmail.com>
26 files changed:
Content.Client/Toggleable/ToggleableLightVisualsComponent.cs
Content.Client/Toggleable/ToggleableLightVisualsSystem.cs
Content.Server/Atmos/Components/FlammableComponent.cs
Content.Server/Atmos/EntitySystems/FlammableSystem.cs
Content.Shared/Atmos/Components/ExtinguishOnInteractComponent.cs [new file with mode: 0644]
Resources/Audio/Items/attributions.yml
Resources/Audio/Items/candle_blowing.ogg [new file with mode: 0644]
Resources/Locale/en-US/candle/extinguish-on-interact-component.ftl [new file with mode: 0644]
Resources/Locale/en-US/light/components/expendable-light-component.ftl
Resources/Prototypes/Catalog/Fills/Boxes/general.yml
Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml
Resources/Prototypes/Entities/Objects/Misc/candles.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Misc/torch.yml
Resources/Textures/Objects/Misc/candles.rsi/candle-big.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/candle-small.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/fire-big.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/fire-small.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/inhand-left-flame.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/inhand-left.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/inhand-right-flame.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/inhand-right.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/meta.json [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/stand-big.png [new file with mode: 0644]
Resources/Textures/Objects/Misc/candles.rsi/stand-small.png [new file with mode: 0644]
Resources/Textures/Objects/Storage/boxes.rsi/candle.png [new file with mode: 0644]
Resources/Textures/Objects/Storage/boxes.rsi/meta.json

index 8acdef1e05b24d3879e2cddffb2a2fbfd797e559..c42d5a7faa0ad73d8df7e60f47fa68aeade2bcd9 100644 (file)
@@ -16,7 +16,7 @@ public sealed partial class ToggleableLightVisualsComponent : Component
     ///     Sprite layer that will have its visibility toggled when this item is toggled.
     /// </summary>
     [DataField("spriteLayer")]
-    public string SpriteLayer = "light";
+    public string? SpriteLayer = "light";
 
     /// <summary>
     ///     Layers to add to the sprite of the player that is holding this entity (while the component is toggled on).
index e3c17a4fd5991aac7563f024ee2a273bf52814f7..3507c786b997df2d174213e122428423bb62270d 100644 (file)
@@ -30,7 +30,7 @@ public sealed class ToggleableLightVisualsSystem : VisualizerSystem<ToggleableLi
         var modulate = AppearanceSystem.TryGetData<Color>(uid, ToggleableLightVisuals.Color, out var color, args.Component);
 
         // Update the item's sprite
-        if (args.Sprite != null && args.Sprite.LayerMapTryGet(component.SpriteLayer, out var layer))
+        if (args.Sprite != null && component.SpriteLayer != null && args.Sprite.LayerMapTryGet(component.SpriteLayer, out var layer))
         {
             args.Sprite.LayerSetVisible(layer, enabled);
             if (modulate)
index 9891c55d4aca3c650c1c49620c1135922c6f05f3..94bc78318c2e179b3bd418d0beed03e66d931b79 100644 (file)
@@ -56,5 +56,11 @@ namespace Content.Server.Atmos.Components
         [ViewVariables(VVAccess.ReadWrite)]
         [DataField("firestacksOnIgnite")]
         public float FirestacksOnIgnite = 2.0f;
+
+        /// <summary>
+        /// Determines how quickly the object will fade out. With positive values, the object will flare up instead of going out.
+        /// </summary>
+        [DataField, ViewVariables(VVAccess.ReadWrite)]
+        public float FirestackFade = -0.1f;
     }
 }
index be3e5cd9341cfd2c9e766903af5d8b2326308d96..716c5b88e5b8f3998fcfff9615e18ffed6e5a19d 100644 (file)
@@ -1,24 +1,30 @@
 using Content.Server.Administration.Logs;
 using Content.Server.Atmos.Components;
+using Content.Server.Explosion.EntitySystems;
 using Content.Server.Stunnable;
 using Content.Server.Temperature.Components;
 using Content.Server.Temperature.Systems;
 using Content.Shared.ActionBlocker;
 using Content.Shared.Alert;
 using Content.Shared.Atmos;
+using Content.Shared.Atmos.Components;
 using Content.Shared.Damage;
 using Content.Shared.Database;
 using Content.Shared.Interaction;
+using Content.Shared.Interaction.Events;
 using Content.Shared.Physics;
 using Content.Shared.Popups;
 using Content.Shared.Rejuvenate;
 using Content.Shared.Temperature;
 using Content.Shared.Throwing;
+using Content.Shared.Timing;
+using Content.Shared.Toggleable;
 using Content.Shared.Weapons.Melee.Events;
 using Robust.Server.GameObjects;
 using Robust.Shared.Physics.Components;
 using Robust.Shared.Physics.Events;
 using Robust.Shared.Physics.Systems;
+using Robust.Shared.Random;
 
 namespace Content.Server.Atmos.EntitySystems
 {
@@ -36,6 +42,9 @@ namespace Content.Server.Atmos.EntitySystems
         [Dependency] private readonly IAdminLogManager _adminLogger = default!;
         [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
         [Dependency] private readonly SharedPopupSystem _popup = default!;
+        [Dependency] private readonly UseDelaySystem _useDelay = default!;
+        [Dependency] private readonly AudioSystem _audio = default!;
+        [Dependency] private readonly IRobustRandom _random = default!;
 
         public const float MinimumFireStacks = -10f;
         public const float MaximumFireStacks = 20f;
@@ -63,6 +72,9 @@ namespace Content.Server.Atmos.EntitySystems
             SubscribeLocalEvent<IgniteOnCollideComponent, LandEvent>(OnIgniteLand);
 
             SubscribeLocalEvent<IgniteOnMeleeHitComponent, MeleeHitEvent>(OnMeleeHit);
+
+            SubscribeLocalEvent<ExtinguishOnInteractComponent, UseInHandEvent>(OnExtinguishUsingInHand);
+            SubscribeLocalEvent<ExtinguishOnInteractComponent, ActivateInWorldEvent>(OnExtinguishActivateInWorld);
         }
 
         private void OnMeleeHit(EntityUid uid, IgniteOnMeleeHitComponent component, MeleeHitEvent args)
@@ -128,6 +140,35 @@ namespace Content.Server.Atmos.EntitySystems
             args.Handled = true;
         }
 
+        private void OnExtinguishActivateInWorld(EntityUid uid, ExtinguishOnInteractComponent component, ActivateInWorldEvent args)
+        {
+            TryHandExtinguish(uid, component);
+        }
+
+        private void OnExtinguishUsingInHand(EntityUid uid, ExtinguishOnInteractComponent component, UseInHandEvent args)
+        {
+            TryHandExtinguish(uid, component);
+        }
+
+        private void TryHandExtinguish(EntityUid uid, ExtinguishOnInteractComponent component)
+        {
+            if (!TryComp(uid, out FlammableComponent? flammable))
+                return;
+            if (!flammable.OnFire)
+                return;
+            if (TryComp(uid, out UseDelayComponent? useDelay) && _useDelay.ActiveDelay(uid, useDelay))
+                return;
+
+            _useDelay.BeginDelay(uid);
+            _audio.PlayPvs(component.ExtinguishAttemptSound, uid);
+            if (_random.Prob(component.Probability))
+            {
+                AdjustFireStacks(uid, component.StackDelta, flammable);
+            } else
+            {
+                _popup.PopupEntity(Loc.GetString(component.ExtinguishFailed), uid);
+            }
+        }
         private void OnCollide(EntityUid uid, FlammableComponent flammable, ref StartCollideEvent args)
         {
             var otherUid = args.OtherEntity;
@@ -208,6 +249,12 @@ namespace Content.Server.Atmos.EntitySystems
 
             _appearance.SetData(uid, FireVisuals.OnFire, flammable.OnFire, appearance);
             _appearance.SetData(uid, FireVisuals.FireStacks, flammable.FireStacks, appearance);
+
+            // Also enable toggleable-light visuals
+            // This is intended so that matches & candles can re-use code for un-shaded layers on in-hand sprites.
+            // However, this could cause conflicts if something is ACTUALLY both a toggleable light and flammable.
+            // if that ever happens, then fire visuals will need to implement their own in-hand sprite management.
+            _appearance.SetData(uid, ToggleableLightVisuals.Enabled, true, appearance);
         }
 
         public void AdjustFireStacks(EntityUid uid, float relativeFireStacks, FlammableComponent? flammable = null)
@@ -338,7 +385,7 @@ namespace Content.Server.Atmos.EntitySystems
 
                     _damageableSystem.TryChangeDamage(uid, flammable.Damage * damageScale);
 
-                    AdjustFireStacks(uid, -0.1f * (flammable.Resisting ? 10f : 1f), flammable);
+                    AdjustFireStacks(uid, flammable.FirestackFade * (flammable.Resisting ? 10f : 1f), flammable);
                 }
                 else
                 {
diff --git a/Content.Shared/Atmos/Components/ExtinguishOnInteractComponent.cs b/Content.Shared/Atmos/Components/ExtinguishOnInteractComponent.cs
new file mode 100644 (file)
index 0000000..02c1e3e
--- /dev/null
@@ -0,0 +1,29 @@
+using Robust.Shared.Audio;
+
+namespace Content.Shared.Atmos.Components;
+/// <summary>
+/// Allows you to extinguish an object by interacting with it
+/// </summary>
+[RegisterComponent]
+public sealed partial class ExtinguishOnInteractComponent : Component
+{
+    [DataField, ViewVariables(VVAccess.ReadWrite)]
+    public SoundSpecifier? ExtinguishAttemptSound = new SoundPathSpecifier("/Audio/Items/candle_blowing.ogg");
+
+    /// <summary>
+    /// Extinguishing chance
+    /// </summary>
+    [DataField, ViewVariables(VVAccess.ReadWrite)]
+    public float Probability = 0.9f;
+
+    /// <summary>
+    /// Number of fire stacks to be changed on successful interaction.
+    /// </summary>
+    // With positive values, the interaction will conversely fan the fire,
+    // which is useful for any blacksmithing mechs
+    [DataField, ViewVariables(VVAccess.ReadWrite)]
+    public float StackDelta = -5.0f;
+
+    [DataField]
+    public LocId ExtinguishFailed = "candle-extinguish-failed";
+}
index b69704ce696f702fc7e7160462d9d10768d570c5..cb945bd5cae681b091095f84299be28d426ba4ef 100644 (file)
@@ -66,4 +66,9 @@
 - files: ["bow_pull.ogg"]
   license: "CC-BY-3.0"
   copyright: "User jzdnvdoosj on freesound.org. Converted to ogg by mirrorcult"
-  source: "https://freesound.org/people/jzdnvdoosj/sounds/626262/"
\ No newline at end of file
+  source: "https://freesound.org/people/jzdnvdoosj/sounds/626262/"
+  
+- files: ["candle_blowing.ogg"]
+  license: "CC-BY-NC-3.0"
+  copyright: "Created by Bee09, converted to OGG, cropped and converted to mono by TheShuEd"
+  source: "https://freesound.org/people/Bee09/sounds/326561/"
\ No newline at end of file
diff --git a/Resources/Audio/Items/candle_blowing.ogg b/Resources/Audio/Items/candle_blowing.ogg
new file mode 100644 (file)
index 0000000..18d2332
Binary files /dev/null and b/Resources/Audio/Items/candle_blowing.ogg differ
diff --git a/Resources/Locale/en-US/candle/extinguish-on-interact-component.ftl b/Resources/Locale/en-US/candle/extinguish-on-interact-component.ftl
new file mode 100644 (file)
index 0000000..7db519c
--- /dev/null
@@ -0,0 +1 @@
+candle-extinguish-failed = The flame flickers, but it doesn't go out
\ No newline at end of file
index 7b68f5dc9087fbd9710e4404d0ba45e825fa2174..4cd07599b97720819fea4891fff9d1fd620818ad 100644 (file)
@@ -11,4 +11,4 @@ expendable-light-spent-red-glowstick-name = spent red glowstick
 expendable-light-spent-purple-glowstick-name = spent purple glowstick
 expendable-light-spent-yellow-glowstick-name = spent purple glowstick
 expendable-light-spent-blue-glowstick-name = spent blue glowstick
-expendable-light-spent-glowstick-desc = It looks like this glowstick has stopped glowing. How tragic.
+expendable-light-spent-glowstick-desc = It looks like this glowstick has stopped glowing. How tragic.
\ No newline at end of file
index f86ba191e66e61669bdeaed4ebdea13feb674da2..5daaf8d74818aa65d03fc41f1239cef52851e46c 100644 (file)
   - type: RadiationBlockingContainer
     resistance: 2
 
+- type: entity
+  name: candle box
+  parent: BoxCardboard
+  id: BoxCandle
+  components:
+  - type: Item
+    size: 30
+  - type: Sprite
+    layers:
+      - state: box
+      - state: candle
+  - type: Storage
+    maxTotalWeight: 30
+  - type: StorageFill
+    contents:
+      - id: Candle
+        amount: 3
+      - id: CandleBlue
+        amount: 3
+      - id: CandleRed
+        amount: 3
+      - id: CandleGreen
+        amount: 3
+      - id: CandlePurple
+        amount: 3
+        
+- type: entity
+  name: small candle box
+  parent: BoxCardboard
+  id: BoxCandleSmall
+  components:
+  - type: Item
+    size: 30
+  - type: Sprite
+    layers:
+      - state: box
+      - state: candle
+  - type: Storage
+    maxTotalWeight: 30
+  - type: StorageFill
+    contents:
+      - id: CandleSmall
+        amount: 5
+      - id: CandleBlueSmall
+        amount: 5
+      - id: CandleRedSmall
+        amount: 5
+      - id: CandleGreenSmall
+        amount: 5
+      - id: CandlePurpleSmall
+        amount: 5
+
 - type: entity
   name: darts box
   parent: BoxCardboard
index c90a5bce143b5eceb455e231cc1650683a6849de..aee153910da010ea2929773bb4e31c256a12e1ac 100644 (file)
@@ -16,6 +16,8 @@
     ClothingOuterPlagueSuit: 1
     ClothingMaskPlague: 1
     ClothingHeadsetService: 2
+    BoxCandle: 2
+    BoxCandleSmall: 2
   emaggedInventory:
     ClothingOuterArmorCult: 1
     ClothingHeadHelmetCult: 1
diff --git a/Resources/Prototypes/Entities/Objects/Misc/candles.yml b/Resources/Prototypes/Entities/Objects/Misc/candles.yml
new file mode 100644 (file)
index 0000000..d86b20c
--- /dev/null
@@ -0,0 +1,487 @@
+- type: entity
+  name: candle
+  parent: BaseItem
+  id: Candle
+  description: A thin wick threaded through fat.
+  components:
+    - type: Sprite
+      noRot: true
+      sprite: Objects/Misc/candles.rsi
+      layers:
+        - state: candle-big
+          color: "#decb8e"
+    - type: Item
+      size: 2
+    - type: Appearance
+    - type: Reactive
+      groups:
+        Flammable: [ Touch ]
+        Extinguish: [ Touch ]
+    - type: ExtinguishOnInteract
+      extinguishAttemptSound: 
+        path: /Audio/Items/candle_blowing.ogg
+        params:
+          variation: 0.05
+          volume: 10
+    - type: UseDelay
+    - type: Flammable
+      fireSpread: false
+      canResistFire: false
+      alwaysCombustible: true
+      canExtinguish: true 
+      firestacksOnIgnite: 3.0
+      firestackFade: -0.01 
+      damage:
+        types:
+          Heat: 0.1
+    - type: FireVisuals
+      sprite: Objects/Misc/candles.rsi
+      normalState: fire-big
+    - type: ToggleableLightVisuals
+      spriteLayer: null
+      inhandVisuals:
+        left:
+        - state: inhand-left-flame
+          shader: unshaded
+        right:
+        - state: inhand-right-flame
+          shader: unshaded
+    - type: Damageable
+      damageModifierSet: Wood
+    - type: Destructible
+      thresholds:
+      - trigger:
+          !type:DamageTrigger
+          damage: 100
+        behaviors:
+        - !type:DoActsBehavior
+          acts: [ "Destruction" ]
+          
+- type: entity
+  name: red candle
+  parent: Candle
+  id: CandleRed
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#a12349"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#a12349"
+      - state: inhand-left-flame
+      right:
+      - state: inhand-right
+        color: "#a12349"
+
+- type: entity
+  name: blue candle
+  parent: Candle
+  id: CandleBlue
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#425d7d"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#425d7d"
+      right:
+      - state: inhand-right
+        color: "#425d7d"
+
+- type: entity
+  name: black candle
+  parent: Candle
+  id: CandleBlack
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#1b1724"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#1b1724"
+      right:
+      - state: inhand-right
+        color: "#1b1724"
+
+- type: entity
+  name: green candle
+  parent: Candle
+  id: CandleGreen
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#5d997e"  
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#5d997e"
+      right:
+      - state: inhand-right
+        color: "#5d997e"
+
+- type: entity
+  name: purple candle
+  parent: Candle
+  id: CandlePurple
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#984aa1"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#984aa1"
+      right:
+      - state: inhand-right
+        color: "#984aa1"
+
+
+- type: entity 
+  name: small candle
+  parent: Candle
+  id: CandleSmall
+  components:
+    - type: Item
+      size: 1
+    - type: Sprite
+      layers:
+        - state: candle-small
+          color: "#e2ca90"
+    - type: FireVisuals
+      normalState: fire-small
+    - type: Flammable
+      firestacksOnIgnite: 2.0
+    - type: Destructible
+      thresholds:
+      - trigger:
+          !type:DamageTrigger
+          damage: 60
+        behaviors:
+        - !type:SpawnEntitiesBehavior
+        - !type:DoActsBehavior
+          acts: [ "Destruction" ]
+
+- type: entity
+  name: small red candle
+  parent: CandleSmall
+  id: CandleRedSmall
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#a12349"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#a12349"
+      right:
+      - state: inhand-right
+        color: "#a12349"
+
+- type: entity
+  name: small blue candle
+  parent: CandleSmall
+  id: CandleBlueSmall
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#425d7d"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#425d7d"
+      right:
+      - state: inhand-right
+        color: "#425d7d"
+
+- type: entity
+  name: small black candle
+  parent: CandleSmall
+  id: CandleBlackSmall
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#1b1724"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#1b1724"
+      right:
+      - state: inhand-right
+        color: "#1b1724"
+
+- type: entity
+  name: small green candle
+  parent: CandleSmall
+  id: CandleGreenSmall
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#5d997e"  
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#5d997e"
+      right:
+      - state: inhand-right
+        color: "#5d997e"
+
+- type: entity
+  name: small purple candle
+  parent: CandleSmall
+  id: CandlePurpleSmall
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#984aa1"
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#984aa1"
+      right:
+      - state: inhand-right
+        color: "#984aa1"
+
+#Purely decorative candles for mappers. Do not have any functionality.
+
+- type: entity 
+  name: magic candle 
+  description: It's either magic or high tech, but this candle never goes out. On the other hand, its flame is quite cold.
+  parent: BaseItem
+  suffix: Decorative
+  id: CandleInfinite
+  components:
+  - type: Sprite
+    noRot: true
+    sprite: Objects/Misc/candles.rsi
+    layers:
+      - state: candle-big
+        color: "#decb8e"
+      - state: fire-big
+        shader: unshaded
+  - type: PointLight
+    color: "#e39c40"
+    radius: 2.5
+    power: 10
+
+- type: entity
+  name: magic red candle
+  parent: CandleInfinite
+  id: CandleRedInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#a12349"
+      - state: fire-big
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#a12349"
+      right:
+      - state: inhand-right
+        color: "#a12349"
+
+- type: entity
+  name: magic blue candle
+  parent: CandleInfinite
+  id: CandleBlueInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#425d7d"
+      - state: fire-big
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#425d7d"
+      right:
+      - state: inhand-right
+        color: "#425d7d"
+
+- type: entity
+  name: magic black candle
+  parent: CandleInfinite
+  id: CandleBlackInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#1b1724"
+      - state: fire-big
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#1b1724"
+      right:
+      - state: inhand-right
+        color: "#1b1724"
+
+- type: entity
+  name: magic green candle
+  parent: CandleInfinite
+  id: CandleGreenInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#5d997e" 
+      - state: fire-big
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#5d997e"
+      right:
+      - state: inhand-right
+        color: "#5d997e"
+
+- type: entity
+  name: magic purple candle
+  parent: CandleInfinite
+  id: CandlePurpleInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-big
+        color: "#984aa1"
+      - state: fire-big
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#984aa1"
+      right:
+      - state: inhand-right
+        color: "#984aa1"
+
+- type: entity
+  name: small magic red candle
+  parent: CandleInfinite
+  id: CandleRedSmallInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#a12349"
+      - state: fire-small
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#a12349"
+      right:
+      - state: inhand-right
+        color: "#a12349"
+
+- type: entity
+  name: small magic blue candle
+  parent: CandleInfinite
+  id: CandleBlueSmallInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#425d7d"
+      - state: fire-small
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#425d7d"
+      right:
+      - state: inhand-right
+        color: "#425d7d"
+
+- type: entity
+  name: small magic black candle
+  parent: CandleInfinite
+  id: CandleBlackSmallInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#1b1724"
+      - state: fire-small
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#1b1724"
+      right:
+      - state: inhand-right
+        color: "#1b1724"    
+
+- type: entity
+  name: small magic green candle
+  parent: CandleInfinite
+  id: CandleGreenSmallInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#5d997e"
+      - state: fire-small
+        shader: unshaded        
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#5d997e"
+      right:
+      - state: inhand-right
+        color: "#5d997e"  
+
+- type: entity
+  name: small magic purple candle
+  parent: CandleInfinite
+  id: CandlePurpleSmallInfinite
+  components:
+  - type: Sprite
+    layers:
+      - state: candle-small
+        color: "#984aa1"
+      - state: fire-small
+        shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left
+        color: "#984aa1"
+      right:
+      - state: inhand-right
+        color: "#984aa1"  
index f408d0d289f660c29a2a5a34158d17c7c572dc2c..3ee1a7a4cdf599b24c0c9f529e5ee1d86f8edd48 100644 (file)
@@ -76,4 +76,4 @@
           endValue: 1.0
     - type: Tag
       tags:
-      - Torch
\ No newline at end of file
+      - Torch
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/candle-big.png b/Resources/Textures/Objects/Misc/candles.rsi/candle-big.png
new file mode 100644 (file)
index 0000000..56fbd86
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/candle-big.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/candle-small.png b/Resources/Textures/Objects/Misc/candles.rsi/candle-small.png
new file mode 100644 (file)
index 0000000..441bac1
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/candle-small.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/fire-big.png b/Resources/Textures/Objects/Misc/candles.rsi/fire-big.png
new file mode 100644 (file)
index 0000000..ead6179
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/fire-big.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/fire-small.png b/Resources/Textures/Objects/Misc/candles.rsi/fire-small.png
new file mode 100644 (file)
index 0000000..8d6e261
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/fire-small.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/inhand-left-flame.png b/Resources/Textures/Objects/Misc/candles.rsi/inhand-left-flame.png
new file mode 100644 (file)
index 0000000..b11db57
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/inhand-left-flame.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/inhand-left.png b/Resources/Textures/Objects/Misc/candles.rsi/inhand-left.png
new file mode 100644 (file)
index 0000000..4c9bacc
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/inhand-right-flame.png b/Resources/Textures/Objects/Misc/candles.rsi/inhand-right-flame.png
new file mode 100644 (file)
index 0000000..3703ab0
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/inhand-right-flame.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/inhand-right.png b/Resources/Textures/Objects/Misc/candles.rsi/inhand-right.png
new file mode 100644 (file)
index 0000000..4260bb4
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/meta.json b/Resources/Textures/Objects/Misc/candles.rsi/meta.json
new file mode 100644 (file)
index 0000000..9432ffa
--- /dev/null
@@ -0,0 +1,97 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "Created by TheShuEd (github) for ss14",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "stand-small"
+    },
+    {
+      "name": "stand-big"
+    },
+    {
+      "name": "candle-small"
+    },
+    {
+      "name": "candle-big"
+    },
+    {
+      "name": "inhand-left",
+      "directions": 4
+    },
+    {
+      "name": "inhand-right",
+      "directions": 4
+    },
+    {
+      "name": "fire-small",
+      "delays": [
+        [
+          0.15,
+          0.15,
+          0.15,
+          0.15
+        ]
+      ]
+    },
+    {
+      "name": "fire-big",
+      "delays": [
+        [
+          0.15,
+          0.15,
+          0.15,
+          0.15
+        ]
+      ]
+    },
+    {
+      "name": "inhand-left-flame",
+      "directions": 4,
+      "delays": [
+        [
+          0.2,
+          0.2
+        ],
+        [
+          0.2,
+          0.2
+        ],
+        [
+          0.2,
+          0.2
+        ],
+        [
+          0.2,
+          0.2
+        ]
+      ]
+    },
+    {
+      "name": "inhand-right-flame",
+      "directions": 4,
+      "delays": [
+        [
+          0.2,
+          0.2
+        ],
+        [
+          0.2,
+          0.2
+        ],
+        [
+          0.2,
+          0.2
+        ],
+        [
+          0.2,
+          0.2
+        ]
+      ]
+    }
+  ]
+}
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/stand-big.png b/Resources/Textures/Objects/Misc/candles.rsi/stand-big.png
new file mode 100644 (file)
index 0000000..486a180
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/stand-big.png differ
diff --git a/Resources/Textures/Objects/Misc/candles.rsi/stand-small.png b/Resources/Textures/Objects/Misc/candles.rsi/stand-small.png
new file mode 100644 (file)
index 0000000..28629a0
Binary files /dev/null and b/Resources/Textures/Objects/Misc/candles.rsi/stand-small.png differ
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/candle.png b/Resources/Textures/Objects/Storage/boxes.rsi/candle.png
new file mode 100644 (file)
index 0000000..05bb843
Binary files /dev/null and b/Resources/Textures/Objects/Storage/boxes.rsi/candle.png differ
index 1af32510df76b6aa4a1101efc1edf71d449d1972..07c91cafb5f786721d6b4f437f7daf481cb8d32b 100644 (file)
@@ -1,7 +1,7 @@
 {
   "version": 1,
   "license": "CC-BY-SA-3.0",
-  "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/cc65477c04f7403ca8a457bd5bae69a01abadbf0, encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, darts made by TheShuEd (github) for ss14",
+  "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/cc65477c04f7403ca8a457bd5bae69a01abadbf0, encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, candle and darts created by TheShuEd for ss14",
   "size": {
     "x": 32,
     "y": 32
         {
             "name": "ziptie"
         },
+        {
+            "name": "candle"
+        },
         {
             "name": "darts"
         }