diff --git a/Content.Server/Atmos/Components/FlammableComponent.cs b/Content.Server/Atmos/Components/FlammableComponent.cs index c959d5d417..badd494cc3 100644 --- a/Content.Server/Atmos/Components/FlammableComponent.cs +++ b/Content.Server/Atmos/Components/FlammableComponent.cs @@ -35,5 +35,26 @@ namespace Content.Server.Atmos.Components /// [DataField("flammableCollisionShape")] public IPhysShape FlammableCollisionShape = new PhysShapeCircle(0.35f); + + /// + /// Should the component be set on fire by interactions with isHot entities + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("alwaysCombustible")] + public bool AlwaysCombustible = false; + + /// + /// Can the component anyhow lose its FireStacks? + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("canExtinguish")] + public bool CanExtinguish = true; + + /// + /// How many firestacks should be applied to component when being set on fire? + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("firestacksOnIgnite")] + public float FirestacksOnIgnite = 2.0f; } } diff --git a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs index 47f283c075..4c36807a35 100644 --- a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs +++ b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs @@ -148,15 +148,30 @@ namespace Content.Server.Atmos.EntitySystems { if (otherFlammable.OnFire) { - var fireSplit = (flammable.FireStacks + otherFlammable.FireStacks) / 2; - flammable.FireStacks = fireSplit; - otherFlammable.FireStacks = fireSplit; + if (flammable.CanExtinguish) + { + var fireSplit = (flammable.FireStacks + otherFlammable.FireStacks) / 2; + flammable.FireStacks = fireSplit; + otherFlammable.FireStacks = fireSplit; + } + else + { + otherFlammable.FireStacks = flammable.FireStacks / 2; + } } else { - flammable.FireStacks /= 2; - otherFlammable.FireStacks += flammable.FireStacks; - Ignite(otherUid, uid, otherFlammable); + if (!flammable.CanExtinguish) + { + otherFlammable.FireStacks += flammable.FireStacks / 2; + Ignite(otherUid, uid, otherFlammable); + } + else + { + flammable.FireStacks /= 2; + otherFlammable.FireStacks += flammable.FireStacks; + Ignite(otherUid, uid, otherFlammable); + } } } else if (otherFlammable.OnFire) @@ -215,7 +230,7 @@ namespace Content.Server.Atmos.EntitySystems if (!Resolve(uid, ref flammable)) return; - if (!flammable.OnFire) + if (!flammable.OnFire || !flammable.CanExtinguish) return; _adminLogger.Add(LogType.Flammable, $"{ToPrettyString(flammable.Owner):entity} stopped being on fire damage"); @@ -233,6 +248,11 @@ namespace Content.Server.Atmos.EntitySystems if (!Resolve(uid, ref flammable)) return; + if (flammable.AlwaysCombustible) + { + flammable.FireStacks = Math.Max(flammable.FirestacksOnIgnite, flammable.FireStacks); + } + if (flammable.FireStacks > 0 && !flammable.OnFire) { if (ignitionSourceUser != null) diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index d1fc0bb8e8..9050353d9d 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -30,6 +30,32 @@ - Trash - type: Appearance - type: PaperVisuals + - type: Flammable + fireSpread: true + canResistFire: false + alwaysCombustible: true + canExtinguish: false # Mwahaha! Let the world burn because of one piece of paper! + damage: + types: + Heat: 1 + - type: FireVisuals + sprite: Effects/fire.rsi + normalState: fire + - type: Damageable + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 15 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + Ash: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] - type: entity name: office paper