Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lower max firestacks to 10, refactor flammable #27159

Merged
merged 7 commits into from
Apr 23, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ private void AddSmiteVerbs(GetVerbsEvent<Verb> args)
Act = () =>
{
// Fuck you. Burn Forever.
flammable.FireStacks = FlammableSystem.MaximumFireStacks;
flammable.FireStacks = flammable.MaximumFireStacks;
_flammableSystem.Ignite(args.Target, args.User);
var xform = Transform(args.Target);
_popupSystem.PopupEntity(Loc.GetString("admin-smite-set-alight-self"), args.Target,
Expand Down
34 changes: 25 additions & 9 deletions Content.Server/Atmos/Components/FlammableComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,49 +11,65 @@ public sealed partial class FlammableComponent : Component

[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public bool OnFire { get; set; }
public bool OnFire;

[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public float FireStacks { get; set; }
public float FireStacks;

[ViewVariables(VVAccess.ReadWrite)]
[DataField("fireSpread")]
[DataField]
public float MaximumFireStacks = 10f;

[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public float MinimumFireStacks = -10f;

[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public string FlammableFixtureID = "flammable";

[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public float MinIgnitionTemperature = 373.15f;

[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public bool FireSpread { get; private set; } = false;

[ViewVariables(VVAccess.ReadWrite)]
[DataField("canResistFire")]
[DataField]
public bool CanResistFire { get; private set; } = false;

[DataField("damage", required: true)]
[DataField(required: true)]
[ViewVariables(VVAccess.ReadWrite)]
public DamageSpecifier Damage = new(); // Empty by default, we don't want any funny NREs.

/// <summary>
/// Used for the fixture created to handle passing firestacks when two flammable objects collide.
/// </summary>
[DataField("flammableCollisionShape")]
[DataField]
public IPhysShape FlammableCollisionShape = new PhysShapeCircle(0.35f);

/// <summary>
/// Should the component be set on fire by interactions with isHot entities
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
[DataField("alwaysCombustible")]
[DataField]
public bool AlwaysCombustible = false;

/// <summary>
/// Can the component anyhow lose its FireStacks?
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
[DataField("canExtinguish")]
[DataField]
public bool CanExtinguish = true;

/// <summary>
/// How many firestacks should be applied to component when being set on fire?
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
[DataField("firestacksOnIgnite")]
[DataField]
public float FirestacksOnIgnite = 2.0f;

/// <summary>
Expand Down
20 changes: 7 additions & 13 deletions Content.Server/Atmos/EntitySystems/FlammableSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,9 @@ public sealed class FlammableSystem : EntitySystem

private EntityQuery<PhysicsComponent> _physicsQuery;

public const float MinimumFireStacks = -10f;
public const float MaximumFireStacks = 20f;
// This should probably be moved to the component, requires a rewrite, all fires tick at the same time
private const float UpdateTime = 1f;

public const float MinIgnitionTemperature = 373.15f;
public const string FlammableFixtureID = "flammable";

private float _timer;

private readonly Dictionary<Entity<FlammableComponent>, float> _fireEvents = new();
Expand Down Expand Up @@ -134,7 +130,7 @@ private void OnMapInit(EntityUid uid, FlammableComponent component, MapInitEvent
if (!TryComp<PhysicsComponent>(uid, out var body))
return;

_fixture.TryCreateFixture(uid, component.FlammableCollisionShape, FlammableFixtureID, hard: false,
_fixture.TryCreateFixture(uid, component.FlammableCollisionShape, component.FlammableFixtureID, hard: false,
collisionMask: (int) CollisionGroup.FullTileLayer, body: body);
}

Expand Down Expand Up @@ -192,7 +188,7 @@ private void OnCollide(EntityUid uid, FlammableComponent flammable, ref StartCol

// Normal hard collisions, though this isn't generally possible since most flammable things are mobs
// which don't collide with one another, shouldn't work here.
if (args.OtherFixtureId != FlammableFixtureID && args.OurFixtureId != FlammableFixtureID)
if (args.OtherFixtureId != flammable.FlammableFixtureID && args.OurFixtureId != flammable.FlammableFixtureID)
return;

if (!flammable.FireSpread)
Expand Down Expand Up @@ -254,7 +250,7 @@ private void OnIsHot(EntityUid uid, FlammableComponent flammable, IsHotEvent arg

private void OnTileFire(Entity<FlammableComponent> ent, ref TileFireEvent args)
{
var tempDelta = args.Temperature - MinIgnitionTemperature;
var tempDelta = args.Temperature - ent.Comp.MinIgnitionTemperature;

_fireEvents.TryGetValue(ent, out var maxTemp);

Expand Down Expand Up @@ -287,7 +283,7 @@ public void AdjustFireStacks(EntityUid uid, float relativeFireStacks, FlammableC
if (!Resolve(uid, ref flammable))
return;

flammable.FireStacks = MathF.Min(MathF.Max(MinimumFireStacks, flammable.FireStacks + relativeFireStacks), MaximumFireStacks);
flammable.FireStacks = MathF.Min(MathF.Max(flammable.MinimumFireStacks, flammable.FireStacks + relativeFireStacks), flammable.MaximumFireStacks);

if (flammable.OnFire && flammable.FireStacks <= 0)
Extinguish(uid, flammable);
Expand Down Expand Up @@ -439,12 +435,10 @@ public override void Update(float frameTime)
EnsureComp<IgnitionSourceComponent>(uid);
_ignitionSourceSystem.SetIgnited(uid);

var damageScale = MathF.Min( flammable.FireStacks, 5);

if (TryComp(uid, out TemperatureComponent? temp))
_temperatureSystem.ChangeHeat(uid, 12500 * damageScale, false, temp);
_temperatureSystem.ChangeHeat(uid, 12500 * flammable.FireStacks, false, temp);

_damageableSystem.TryChangeDamage(uid, flammable.Damage * damageScale, interruptsDoAfters: false);
_damageableSystem.TryChangeDamage(uid, flammable.Damage * flammable.FireStacks, interruptsDoAfters: false);

AdjustFireStacks(uid, flammable.FirestackFade * (flammable.Resisting ? 10f : 1f), flammable);
}
Expand Down
2 changes: 1 addition & 1 deletion Resources/Prototypes/Entities/Mobs/base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@
canResistFire: true
damage: #per second, scales with number of fire 'stacks'
types:
Heat: 3
Heat: 1.5
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Generic_mob_burning
Expand Down
Loading