From 2c34befbcb7026998a39bef69109a99e669979ed Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Wed, 1 May 2024 19:55:48 +0300 Subject: [PATCH] Fireplace (#123) * bonfire! * fix * update torch * docs * add audio, fix errors * loc string + fix errors --- .../Atmos/Components/FlammableComponent.cs | 13 -- .../Atmos/EntitySystems/FlammableSystem.cs | 14 +- .../Temperature/Systems/EntityHeaterSystem.cs | 4 +- .../CP14FlammableEntityHeaterComponent.cs | 2 + .../Fireplace/CP14FireplaceComponent.cs | 51 +++++++ .../Fireplace/CP14FireplaceFuelComponent.cs | 20 +++ .../Fireplace/CP14FireplaceSystem.cs | 128 ++++++++++++++++++ .../_CP14/Temperature/FireplaceFuelVisuals.cs | 18 +++ Resources/Audio/_CP14/Items/attributions.yml | 7 +- .../Audio/_CP14/Items/campfire_whoosh.ogg | Bin 0 -> 20922 bytes .../_CP14/fireplace/fireplace-component.ftl | 1 + .../_CP14/fireplace/fireplace-component.ftl | 1 + .../Entities/Structures/Furniture/bonfire.yml | 38 ++++-- .../Structures/Furniture/wallmount_torch.yml | 19 ++- Resources/Prototypes/_CP14/Entities/base.yml | 2 - .../_CP14/Recipes/Construction/furniture.yml | 2 +- .../Structures/Furniture/bonfire.rsi/base.png | Bin 0 -> 647 bytes .../Furniture/bonfire.rsi/bonfire.png | Bin 936 -> 0 bytes .../bonfire.rsi/bonfire_extinguished.png | Bin 1245 -> 0 bytes .../Furniture/bonfire.rsi/burning.png | Bin 4635 -> 2808 bytes .../Furniture/bonfire.rsi/full1.png | Bin 0 -> 273 bytes .../Furniture/bonfire.rsi/full2.png | Bin 0 -> 335 bytes .../Furniture/bonfire.rsi/meta.json | 17 ++- 23 files changed, 283 insertions(+), 54 deletions(-) create mode 100644 Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceComponent.cs create mode 100644 Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceFuelComponent.cs create mode 100644 Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceSystem.cs create mode 100644 Content.Shared/_CP14/Temperature/FireplaceFuelVisuals.cs create mode 100644 Resources/Audio/_CP14/Items/campfire_whoosh.ogg create mode 100644 Resources/Locale/en-US/_CP14/fireplace/fireplace-component.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/fireplace/fireplace-component.ftl create mode 100644 Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/base.png delete mode 100644 Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/bonfire.png delete mode 100644 Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/bonfire_extinguished.png create mode 100644 Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/full1.png create mode 100644 Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/full2.png diff --git a/Content.Server/Atmos/Components/FlammableComponent.cs b/Content.Server/Atmos/Components/FlammableComponent.cs index 99ae5b1b5c..e00f5efbdc 100644 --- a/Content.Server/Atmos/Components/FlammableComponent.cs +++ b/Content.Server/Atmos/Components/FlammableComponent.cs @@ -77,18 +77,5 @@ namespace Content.Server.Atmos.Components /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float FirestackFade = -0.1f; - - /// - /// Set FirestackFade on Ingite to this value - /// - [DataField] - public float? FirestackFadeOnIgnite = null; - - /// - /// CrystallPunk moment - /// determines how extinction "FirestackFade" will fade out. it can be used to make "parabolas" of object ignition and decay. - /// - [DataField] - public float FirestackFadeFade = 0; } } diff --git a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs index 3448e5036f..30cdf053e4 100644 --- a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs +++ b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs @@ -334,18 +334,13 @@ namespace Content.Server.Atmos.EntitySystems _adminLogger.Add(LogType.Flammable, $"{ToPrettyString(uid):target} set on fire by {ToPrettyString(ignitionSource):actor}"); flammable.OnFire = true; - //CrystallPunk bonfire moment + //CrystallPunk fireplace moment var ev = new OnFireChangedEvent(flammable.OnFire); RaiseLocalEvent(uid, ref ev); - //CrystallPunk bonfire moment end + //CrystallPunk fireplace moment end } UpdateAppearance(uid, flammable); - - //CrystallPunk bonfire moment - if (flammable.FirestackFadeOnIgnite != null) - flammable.FirestackFade = flammable.FirestackFadeOnIgnite.Value; - //CrystallPunk bonfire moment end } private void OnDamageChanged(EntityUid uid, IgniteOnHeatDamageComponent component, DamageChangedEvent args) @@ -458,11 +453,6 @@ namespace Content.Server.Atmos.EntitySystems _damageableSystem.TryChangeDamage(uid, flammable.Damage * flammable.FireStacks, interruptsDoAfters: false); AdjustFireStacks(uid, flammable.FirestackFade * (flammable.Resisting ? 10f : 1f), flammable); - - //CrystallPunk bonfire moment - if (flammable.FirestackFadeFade != 0) - flammable.FirestackFade += flammable.FirestackFadeFade * frameTime; - //CrystallPunk bonfire moment end } else { diff --git a/Content.Server/Temperature/Systems/EntityHeaterSystem.cs b/Content.Server/Temperature/Systems/EntityHeaterSystem.cs index 48e3ce4f87..358c52bfe3 100644 --- a/Content.Server/Temperature/Systems/EntityHeaterSystem.cs +++ b/Content.Server/Temperature/Systems/EntityHeaterSystem.cs @@ -50,12 +50,12 @@ public sealed class EntityHeaterSystem : EntitySystem //CrystallPunk bonfire var flammbaleQuery = EntityQueryEnumerator(); - while (flammbaleQuery.MoveNext(out var uid, out _, out var placer, out var flammable)) + while (flammbaleQuery.MoveNext(out var uid, out var heater, out var placer, out var flammable)) { if (!flammable.OnFire) return; - var energy = flammable.FireStacks * deltaTime * 300; + var energy = flammable.FireStacks * deltaTime * heater.EnergyPerFireStack; foreach (var ent in placer.PlacedEntities) { _temperature.ChangeHeat(ent, energy); diff --git a/Content.Server/_CP14/Temperature/CP14FlammableEntityHeaterComponent.cs b/Content.Server/_CP14/Temperature/CP14FlammableEntityHeaterComponent.cs index 1fa92fda1d..0a455ad42f 100644 --- a/Content.Server/_CP14/Temperature/CP14FlammableEntityHeaterComponent.cs +++ b/Content.Server/_CP14/Temperature/CP14FlammableEntityHeaterComponent.cs @@ -8,4 +8,6 @@ namespace Content.Server._CP14.Temperature; [RegisterComponent, Access(typeof(EntityHeaterSystem))] public sealed partial class CP14FlammableEntityHeaterComponent : Component { + [DataField] + public float EnergyPerFireStack = 1000f; } diff --git a/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceComponent.cs b/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceComponent.cs new file mode 100644 index 0000000000..54cc47b8b1 --- /dev/null +++ b/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceComponent.cs @@ -0,0 +1,51 @@ +namespace Content.Server._CP14.Temperature.Fireplace; + +/// +/// component for player-controlled fire. Can be fueled. +/// + +[RegisterComponent, Access(typeof(CP14FireplaceSystem))] +public sealed partial class CP14FireplaceComponent : Component +{ + /// + /// The abstract amount of fuel that is used to keep a fire burning + /// + [DataField] + public float MaxFuelLimit = 100f; + + /// + /// how much the flame grows or dies out with the presence or absence of fuel + /// + [DataField] + public float FireFadeDelta = 0.2f; + + /// + /// current fuel quantity + /// + [DataField] + public float CurrentFuel; + + /// + /// how much fuel is wasted every "UpdateFrequency" + /// + [DataField] + public float FuelDrainingPerUpdate = 1f; + + [DataField] + public TimeSpan UpdateFrequency = TimeSpan.FromSeconds(2f); + + /// + /// whether fuel can be added by hand + /// + [DataField] + public bool CanInsertByHand = true; + + /// + /// whether the fuel can be supplied by contact + /// + [DataField] + public bool CanInsertByCollide = false; + + [DataField] + public TimeSpan NextUpdateTime = TimeSpan.Zero; +} diff --git a/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceFuelComponent.cs b/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceFuelComponent.cs new file mode 100644 index 0000000000..694eb46650 --- /dev/null +++ b/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceFuelComponent.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Audio; + +namespace Content.Server._CP14.Temperature.Fireplace; + +/// +/// Allows this object to be used as fuel for a fireplace +/// + +[RegisterComponent, Access(typeof(CP14FireplaceSystem))] +public sealed partial class CP14FireplaceFuelComponent : Component +{ + /// + /// How much fuel will be added in fireplace + /// + [DataField] + public float Fuel = 10f; + + [DataField] + public SoundSpecifier InsertFuelSound = new SoundPathSpecifier("/Audio/_CP14/Items/campfire_whoosh.ogg"); +} diff --git a/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceSystem.cs b/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceSystem.cs new file mode 100644 index 0000000000..5f3f57d7b1 --- /dev/null +++ b/Content.Server/_CP14/Temperature/Fireplace/CP14FireplaceSystem.cs @@ -0,0 +1,128 @@ +using Content.Server.Atmos.Components; +using Content.Server.Atmos.EntitySystems; +using Content.Server.Popups; +using Content.Shared._CP14.Temperature; +using Content.Shared.Interaction; +using Content.Shared.Throwing; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Physics.Events; +using Robust.Shared.Timing; + +namespace Content.Server._CP14.Temperature.Fireplace; + +public sealed partial class CP14FireplaceSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly FlammableSystem _flammable = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnFireChanged); + + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnCollide); + } + + private void OnFireChanged(Entity fireplace, ref OnFireChangedEvent args) + { + if (!TryComp(fireplace, out var flammable)) + return; + + if (args.OnFire) + flammable.FirestackFade = 0; + } + + private void OnInteractUsing(Entity fireplace, ref InteractUsingEvent args) + { + if (!fireplace.Comp.CanInsertByHand) + return; + + if (!TryComp(args.Used, out var fuel)) + return; + + TryInsertFuel(fireplace, args.Used, fuel); + } + + private void OnCollide(Entity fireplace, ref StartCollideEvent args) + { + if (!fireplace.Comp.CanInsertByCollide) + return; + + if (!TryComp(args.OtherEntity, out var fuel)) + return; + + TryInsertFuel(fireplace, args.OtherEntity, fuel); + } + + private bool TryInsertFuel(Entity fireplace, EntityUid fuelUid, CP14FireplaceFuelComponent fuel) + { + if (fireplace.Comp.CurrentFuel > fireplace.Comp.MaxFuelLimit) + { + _popupSystem.PopupEntity(Loc.GetString("cp14-fireplace-full", ("target", fireplace)), fireplace); + return false; + } + + if (!TryComp(fireplace, out var flammable)) + return false; + + fireplace.Comp.CurrentFuel += fuel.Fuel; + + if (flammable.OnFire) + _audio.PlayPvs(fuel.InsertFuelSound, fireplace); + + UpdateAppearance(fireplace, fireplace.Comp); + QueueDel(fuelUid); + return true; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = AllEntityQuery(); + while (query.MoveNext(out var uid, out var fireplace, out var flammable)) + { + if (!flammable.OnFire) + continue; + + if (_timing.CurTime <= fireplace.NextUpdateTime) + continue; + + fireplace.NextUpdateTime = _timing.CurTime + fireplace.UpdateFrequency; + + if (fireplace.CurrentFuel >= fireplace.FuelDrainingPerUpdate) + { + fireplace.CurrentFuel -= fireplace.FuelDrainingPerUpdate; + UpdateAppearance(uid, fireplace); + flammable.FirestackFade = fireplace.FireFadeDelta; + } + else + { + flammable.FirestackFade = -fireplace.FireFadeDelta; + } + } + } + + public void UpdateAppearance(EntityUid uid, CP14FireplaceComponent? fireplace = null, AppearanceComponent? appearance = null) + { + if (!Resolve(uid, ref fireplace, ref appearance)) + return; + + if (fireplace.CurrentFuel < fireplace.FuelDrainingPerUpdate) + { + _appearance.SetData(uid, FireplaceFuelVisuals.Status, FireplaceFuelStatus.Empty, appearance); + return; + } + + if (fireplace.CurrentFuel < fireplace.MaxFuelLimit / 2) + _appearance.SetData(uid, FireplaceFuelVisuals.Status, FireplaceFuelStatus.Medium, appearance); + else + _appearance.SetData(uid, FireplaceFuelVisuals.Status, FireplaceFuelStatus.Full, appearance); + } +} diff --git a/Content.Shared/_CP14/Temperature/FireplaceFuelVisuals.cs b/Content.Shared/_CP14/Temperature/FireplaceFuelVisuals.cs new file mode 100644 index 0000000000..24181aedef --- /dev/null +++ b/Content.Shared/_CP14/Temperature/FireplaceFuelVisuals.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Temperature; + +// Appearance Data key +[Serializable, NetSerializable] +public enum FireplaceFuelVisuals : byte +{ + Status, +} + +[Serializable, NetSerializable] +public enum FireplaceFuelStatus : byte +{ + Empty, + Medium, + Full +} diff --git a/Resources/Audio/_CP14/Items/attributions.yml b/Resources/Audio/_CP14/Items/attributions.yml index dbf1a4c548..542085c891 100644 --- a/Resources/Audio/_CP14/Items/attributions.yml +++ b/Resources/Audio/_CP14/Items/attributions.yml @@ -16,4 +16,9 @@ - files: ["sharpening_stone.ogg"] license: "CC-BY-4.0" copyright: 'by tim.kahn of Freesound.org. Cropped and mixed from stereo to mono.' - source: "https://freesound.org/people/tim.kahn/sounds/35827/" \ No newline at end of file + source: "https://freesound.org/people/tim.kahn/sounds/35827/" + +- files: ["campfire_whoosh.ogg"] + license: "CC0-1.0" + copyright: 'by GrimGrum of Freesound.org. Cropped and mixed from stereo to mono.' + source: "https://freesound.org/people/GrimGrum/sounds/412558/" \ No newline at end of file diff --git a/Resources/Audio/_CP14/Items/campfire_whoosh.ogg b/Resources/Audio/_CP14/Items/campfire_whoosh.ogg new file mode 100644 index 0000000000000000000000000000000000000000..22c65378a1da5134230af5deaf3e653ff3b2a072 GIT binary patch literal 20922 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 U^NR!T2{{G~6@K2z#N4C<9%k}22><{9 literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/_CP14/fireplace/fireplace-component.ftl b/Resources/Locale/en-US/_CP14/fireplace/fireplace-component.ftl new file mode 100644 index 0000000000..a34f452e8f --- /dev/null +++ b/Resources/Locale/en-US/_CP14/fireplace/fireplace-component.ftl @@ -0,0 +1 @@ +cp14-fireplace-full = There's no more room in {$target}! \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/fireplace/fireplace-component.ftl b/Resources/Locale/ru-RU/_CP14/fireplace/fireplace-component.ftl new file mode 100644 index 0000000000..dc3b303c6d --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/fireplace/fireplace-component.ftl @@ -0,0 +1 @@ +cp14-fireplace-full = В {$target} больше ничего не влезет! \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/bonfire.yml b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/bonfire.yml index 3db88853b5..1ef21166f2 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/bonfire.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/bonfire.yml @@ -8,7 +8,10 @@ noRot: true sprite: _CP14/Structures/Furniture/bonfire.rsi layers: - - state: bonfire + - state: base + - state: full1 + visible: false + map: ["fuel"] - type: Construction graph: CP14Bonfire node: CP14Bonfire @@ -20,9 +23,12 @@ bounds: "-0.45,-0.45,0.45,0.45" density: 55 mask: - - TableMask + - TabletopMachineMask layer: - - TableLayer + - Impassable + - MidImpassable + - LowImpassable + hard: false - type: Damageable damageContainer: Inorganic damageModifierSet: Wood @@ -49,29 +55,37 @@ sound: path: /Audio/Ambience/Objects/fireplace.ogg - type: Appearance + - type: GenericVisualizer + visuals: + enum.FireplaceFuelVisuals.Status: + fuel: + Empty: { visible: false } + Medium: { visible: true, state: full1 } + Full: { visible: true, state: full2 } - type: Reactive groups: Flammable: [ Touch ] Extinguish: [ Touch ] - type: Flammable - fireSpread: false + fireSpread: true canResistFire: false alwaysCombustible: true canExtinguish: true firestacksOnIgnite: 0.5 - firestackFade: 0.3 - firestackFadeOnIgnite: 0.3 - firestackFadeFade: -0.2 damage: types: - Heat: 0.01 + Heat: 0 - type: FireVisuals sprite: _CP14/Structures/Furniture/bonfire.rsi normalState: burning - type: ItemPlacer maxEntities: 4 - whitelist: - components: - - Temperature - type: CP14FlammableEntityHeater - - type: Climbable + - type: CP14Fireplace + +- type: entity + id: CP14Stick + parent: CP14Bucket + name: Stick!!! + components: + - type: CP14FireplaceFuel \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/wallmount_torch.yml b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/wallmount_torch.yml index 32407da9c7..78e9f5b40d 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/wallmount_torch.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/wallmount_torch.yml @@ -14,6 +14,7 @@ sprite: _CP14/Structures/Furniture/wallmount_torch.rsi layers: - state: base + map: ["fuel"] - type: Damageable damageContainer: Inorganic damageModifierSet: Wood @@ -39,7 +40,6 @@ range: 5 sound: path: /Audio/Ambience/Objects/fireplace.ogg - - type: Appearance - type: Reactive groups: Flammable: [ Touch ] @@ -50,15 +50,24 @@ alwaysCombustible: true canExtinguish: true firestacksOnIgnite: 0.5 - firestackFade: 0.3 - firestackFadeOnIgnite: 0.3 - firestackFadeFade: -0.2 damage: types: - Heat: 0.01 + Heat: 0 + - type: CP14Fireplace + maxFuelLimit: 150 + currentFuel: 150 + canInsertByHand: false - type: FireVisuals sprite: _CP14/Structures/Furniture/wallmount_torch.rsi normalState: fire + - type: Appearance + - type: GenericVisualizer + visuals: + enum.FireplaceFuelVisuals.Status: + fuel: + Empty: { state: burned } + Medium: { state: base } + Full: { state: base } - type: Construction graph: CP14WallmountTorch node: CP14WallmountTorch diff --git a/Resources/Prototypes/_CP14/Entities/base.yml b/Resources/Prototypes/_CP14/Entities/base.yml index 5dd1d8797a..cc2713932d 100644 --- a/Resources/Prototypes/_CP14/Entities/base.yml +++ b/Resources/Prototypes/_CP14/Entities/base.yml @@ -27,8 +27,6 @@ canExtinguish: true firestacksOnIgnite: 0.5 firestackFade: 0.3 - firestackFadeOnIgnite: 0.3 - firestackFadeFade: -0.2 damage: types: Heat: 0.5 diff --git a/Resources/Prototypes/_CP14/Recipes/Construction/furniture.yml b/Resources/Prototypes/_CP14/Recipes/Construction/furniture.yml index 2d2f3681ba..bf4c0890bb 100644 --- a/Resources/Prototypes/_CP14/Recipes/Construction/furniture.yml +++ b/Resources/Prototypes/_CP14/Recipes/Construction/furniture.yml @@ -45,7 +45,7 @@ category: construction-category-furniture icon: sprite: _CP14/Structures/Furniture/bonfire.rsi - state: bonfire + state: base objectType: Structure placementMode: SnapgridCenter canBuildInImpassable: false diff --git a/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/base.png b/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8128ded2ed423118305882baf4cd5b3f022ddb GIT binary patch literal 647 zcmV;20(kw2P)Px%K}keGR9J=Wl`&`&Q5?p9X@w9<+S` zP^+E_axLaG0W{MvG#I#G*_{b-Uhq`;?DPx&Vo5|nR9J=WR=;c8KotILiWZ?EgKXqL@S+a&KVUj#>=f*&q(eItVKNl*V=;zK zAx03AhGqysWbhIQ8Eiad^i&KT3IP{VFQ!l%`-Tj{ixziq-u2x{iM=-uj8CU`@B7~S z-rWg!wrBg_E!F9C7CIeOwq^jZcYc;y2I0G9@Y9$F@uaej8qOV`*?;2?>rWTQdT#9eZ$A*YN4>XSj|50O*e* zWh_aD)1_ok2=L7I&d*Xum91IrU=xAg1^{@~4cM710O0ztA;H%_ya51o8aE0NPC}1O zV<`b?4FEgd2?(43z3PS}0syC1`?&q_9f9A*I-tBGvn^8sKh_^lhH>RQ_mQ?~T|lAZ>xUmZfqYU$^&_W+S7Xpj`q0rE(sv=0N(qez^hw`1b1_ zKzs|wBp`6tF;FV!(d!N+c%hh+Rd5{xoyN_)tPg#{tx(LtdtZ?8h={(0(==&YCS1pm zSr&@9SWq%?cPl$z+}+~(u%Wzn9RscA0KM)|Ns9VG=>ZPjA4Rh40A%($pz%+tCL96q@JlBoSu8#p#Q!nTQlK}Os zc`O>!ox(|^f%z8UTaFG69*79)37iNI~klmM;fAhw9+iP&RRAwXUQ znxmMq2lyhYhTaR@k}ANTX)S55n+PL_FhY7hn99YZ6A|P6K|ysgWQAf*Sx+PZwPFD9 zD!1~l0wRp?b9gVE`5B1bl2)3nu>*+m0@ANrt zR0S?E$9wXlwEFJj%(e_Aqa-k$7|)){tphJbfJi*)u)vZ)x%~zEf@Q}K+Dxth0000< KMNUMnLSTYU?5kb? diff --git a/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/bonfire_extinguished.png b/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/bonfire_extinguished.png deleted file mode 100644 index 3a5d39a209b7b2d1861d228165b853023e56c370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1245 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/full2.png b/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/full2.png new file mode 100644 index 0000000000000000000000000000000000000000..57bae22feddb4b2580fb76c9034e86cb52a76c9e GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^Ts zKd1HEg3I?C%+UO7z|sBL@XZe2U6Cs4hsxqt|KC3Uf09MvL*B!;r_YzT7Qg#Q1;_|t z@p}QfiH}%3)ztn^_VIZzjV0^l-}zG?H6C)Gw%n5A$|YsXtBaX8onn-TsDCRI*;xVh fF_+uH1xyT;i&7K~uYU6bh7g0NtDnm{r-UW|jvta= literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/meta.json b/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/meta.json index 8da87ed9b8..909c2dfd3c 100644 --- a/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/meta.json +++ b/Resources/Textures/_CP14/Structures/Furniture/bonfire.rsi/meta.json @@ -1,25 +1,30 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at commit 28b476ab6d17014e6f9e18a748d7c96be28de9a1, recolor and edited by TheShuEd for CrystallPunk14", + "copyright": "Created by TheShuEd for CrystallPunk14", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "bonfire" + "name": "base" }, { - "name": "bonfire_extinguished" + "name": "full1" + }, + { + "name": "full2" }, { "name": "burning", "delays": [ [ - 0.3, - 0.3, - 0.3 + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 ] ] }