diff --git a/Content.Server/Repairable/RepairableComponent.cs b/Content.Server/Repairable/RepairableComponent.cs
index d47fa64155..7fffe47f63 100644
--- a/Content.Server/Repairable/RepairableComponent.cs
+++ b/Content.Server/Repairable/RepairableComponent.cs
@@ -1,3 +1,4 @@
+using Content.Shared.Damage;
using Content.Shared.Tools;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization.Manager.Attributes;
@@ -9,6 +10,16 @@ namespace Content.Server.Repairable
[RegisterComponent]
public sealed class RepairableComponent : Component
{
+ ///
+ /// All the damage to change information is stored in this .
+ ///
+ ///
+ /// If this data-field is specified, it will change damage by this amount instead of setting all damage to 0.
+ /// in order to heal/repair the damage values have to be negative.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)] [DataField("damage")]
+ public DamageSpecifier? Damage;
+
[ViewVariables(VVAccess.ReadWrite)] [DataField("fuelCost")]
public int FuelCost = 5;
diff --git a/Content.Server/Repairable/RepairableSystem.cs b/Content.Server/Repairable/RepairableSystem.cs
index eded66f5da..bb627487ff 100644
--- a/Content.Server/Repairable/RepairableSystem.cs
+++ b/Content.Server/Repairable/RepairableSystem.cs
@@ -34,9 +34,18 @@ namespace Content.Server.Repairable
if (!await _toolSystem.UseTool(args.Used, args.User, uid, component.FuelCost, component.DoAfterDelay, component.QualityNeeded))
return;
- // Repair all damage
- _damageableSystem.SetAllDamage(damageable, 0);
- _logSystem.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired ${ToPrettyString(uid):target} back to full health");
+ if (component.Damage != null)
+ {
+ var damageChanged = _damageableSystem.TryChangeDamage(uid, component.Damage, true, false);
+ _logSystem.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} by {damageChanged?.Total}");
+ }
+ else
+ {
+ // Repair all damage
+ _damageableSystem.SetAllDamage(damageable, 0);
+ _logSystem.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} back to full health");
+ }
+
component.Owner.PopupMessage(args.User,
Loc.GetString("comp-repairable-repair",