Skip to content

Commit

Permalink
[Balance] Surgery Balance Tweaks (#941)
Browse files Browse the repository at this point in the history
* Fix Surgery

* Fix Surgery

* Fix damages for other species

* Healing is 10 times slower
  • Loading branch information
Roudenn authored Dec 6, 2024
1 parent 76712bf commit a9b3a2f
Show file tree
Hide file tree
Showing 20 changed files with 45 additions and 30 deletions.
4 changes: 2 additions & 2 deletions Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ public override void Update(float frameTime)
if (pressure <= Atmospherics.HazardLowPressure)
{
// Deal damage and ignore resistances. Resistance to pressure damage should be done via pressure protection gear.
_damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false, canSever: false); // backmen
_damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false, canSever: false, partMultiplier: 0.5f); // backmen
if (!barotrauma.TakingDamage)
{
barotrauma.TakingDamage = true;
Expand All @@ -252,7 +252,7 @@ public override void Update(float frameTime)
var damageScale = MathF.Min(((pressure / Atmospherics.HazardHighPressure) - 1) * Atmospherics.PressureDamageCoefficient, Atmospherics.MaxHighPressureDamage);

// Deal damage and ignore resistances. Resistance to pressure damage should be done via pressure protection gear.
_damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false); // backmen
_damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false, partMultiplier: 0.5f); // backmen
RaiseLocalEvent(uid, new MoodEffectEvent("MobHighPressure")); // backmen: mood

if (!barotrauma.TakingDamage)
Expand Down
3 changes: 2 additions & 1 deletion Content.Server/Medical/DefibrillatorSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Content.Server.PowerCell;
using Content.Server.Traits.Assorted;
using Content.Shared.Backmen.Chat;
using Content.Shared.Backmen.Targeting;
using Content.Shared.Damage;
using Content.Shared.DoAfter;
using Content.Shared.Interaction;
Expand Down Expand Up @@ -201,7 +202,7 @@ public void Zap(EntityUid uid, EntityUid target, EntityUid user, DefibrillatorCo
else
{
if (_mobState.IsDead(target, mob))
_damageable.TryChangeDamage(target, component.ZapHeal, true, origin: uid);
_damageable.TryChangeDamage(target, component.ZapHeal, true, origin: uid, targetPart: TargetBodyPart.Torso); // backmen: surgery

if (_mobThreshold.TryGetThresholdForState(target, MobState.Dead, out var threshold) &&
TryComp<DamageableComponent>(target, out var damageableComponent) &&
Expand Down
2 changes: 1 addition & 1 deletion Content.Server/Weapons/Ranged/Systems/GunSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ public override void Shoot(EntityUid gunUid, GunComponent gun, List<(EntityUid?

var hitName = ToPrettyString(hitEntity);
if (dmg != null)
dmg = Damageable.TryChangeDamage(hitEntity, dmg, origin: user);
dmg = Damageable.TryChangeDamage(hitEntity, dmg, origin: user, canEvade: true); // backmen: surgery

// check null again, as TryChangeDamage returns modified damage values
if (dmg != null)
Expand Down
3 changes: 2 additions & 1 deletion Content.Shared/Backmen/Magic/BkmMagicSystem.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Content.Shared.Backmen.Magic.Events;
using Content.Shared.Backmen.Targeting;
using Content.Shared.Body.Components;
using Content.Shared.Damage;

Expand All @@ -22,6 +23,6 @@ private void OnHealSpell(HealSpellEvent ev)
if (!HasComp<BodyComponent>(ev.Target))
return;

DamageableSystem.TryChangeDamage(ev.Target, ev.HealAmount, true, origin: ev.Target);
DamageableSystem.TryChangeDamage(ev.Target, ev.HealAmount, true, origin: ev.Target, targetPart: TargetBodyPart.All); // backmen: surgery
}
}
2 changes: 1 addition & 1 deletion Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ standingState.CurrentState is not StandingState.Lying ||
obj.Value,
uid,
PopupType.MediumCaution);
_damageable.TryChangeDamage(uid, new DamageSpecifier(){DamageDict = {{"Blunt", 5}}}, ignoreResistances: true, canEvade: true, targetPart: TargetBodyPart.Head);
_damageable.TryChangeDamage(uid, new DamageSpecifier(){DamageDict = {{"Blunt", 5}}}, ignoreResistances: true, canEvade: false, canSever: false, targetPart: TargetBodyPart.Head);
_stun.TryStun(uid, TimeSpan.FromSeconds(2), true);
_audioSystem.PlayPredicted(_bonkSound, uid, obj.Value);
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ private void OnTryChangePartDamage(Entity<BodyComponent> ent, ref TryChangePartD
else if (args.Origin.HasValue && _queryTargeting.TryComp(args.Origin.Value, out var targeter))
{
targetPart = targeter.Target;
// If the target is Torso then have a 33% chance to hit another part
// If the target is Torso then have a 33% chance to also hit another part
if (targetPart.Value == TargetBodyPart.Torso)
{
var additionalPart = GetRandomPartSpread(_random, 10);
Expand Down Expand Up @@ -259,12 +259,10 @@ private void OnDamageChanged(Entity<BodyPartComponent> partEnt, ref DamageChange
/// <summary>
/// Gets the random body part rolling a number between 1 and 9, and returns
/// Torso if the result is 9 or more. The higher torsoWeight is, the higher chance to return it.
/// By default, the chance to return Torso is 50%.
/// </summary>
private static TargetBodyPart GetRandomPartSpread(IRobustRandom random, ushort torsoWeight = 9)
{
const int targetPartsAmount = 9;
// 5 = amount of target parts except Torso
return random.Next(1, targetPartsAmount + torsoWeight) switch
{
1 => TargetBodyPart.Head,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public sealed partial class SurgeryDamageChangeEffectComponent : Component
public DamageSpecifier Damage = default!;

[DataField]
public float SleepModifier = 0.5f;
public float SleepModifier = 1.5f;

[DataField]
public bool IsConsumable;
Expand Down
4 changes: 2 additions & 2 deletions Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,14 +273,14 @@ private void OnTendWoundsStep(Entity<SurgeryTendWoundsEffectComponent> ent, ref
// Right now the bonus is based off the body's total damage, maybe we could make it based off each part in the future.
var bonus = ent.Comp.HealMultiplier * damageable.DamagePerGroup[ent.Comp.MainGroup];
if (_mobState.IsDead(args.Body))
bonus *= 0.2;
bonus *= 1.2;

var adjustedDamage = new DamageSpecifier(ent.Comp.Damage);

foreach (var type in group)
adjustedDamage.DamageDict[type] -= bonus;

var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, adjustedDamage, 0.5f);
var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, adjustedDamage, 1.5f);
RaiseLocalEvent(args.Body, ref ev);
}

Expand Down
11 changes: 11 additions & 0 deletions Content.Shared/Backmen/Targeting/TargetBodyPart.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,20 @@ public enum TargetBodyPart : ushort
RightLeg = 1 << 9,
RightFoot = 1 << 10,

LeftFullArm = LeftArm | LeftHand,
LeftFullLeg = LeftLeg | LeftFoot,
RightFullArm = RightArm | RightHand,
RightFullLeg = RightLeg | RightFoot,

Hands = LeftHand | RightHand,
Arms = LeftArm | RightArm,
Legs = LeftLeg | RightLeg,
Feet = LeftFoot | RightFoot,

FullArms = Arms | Hands,
FullLegs = Feet | Legs,

BodyMiddle = Torso | Groin | FullArms,

All = Head | Torso | Groin | LeftArm | LeftHand | RightArm | RightHand | LeftLeg | LeftFoot | RightLeg | RightFoot,
}
4 changes: 2 additions & 2 deletions Content.Shared/Body/Part/BodyPartComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent
/// Shitmed Change: How long it takes to run another self heal tick on the body part.
/// </summary>
[DataField]
public float HealingTime = 30;
public float HealingTime = 10;

/// <summary>
/// Shitmed Change: How long it has been since the last self heal tick on the body part.
Expand All @@ -89,7 +89,7 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent
/// Shitmed Change: How much health to heal on the body part per tick.
/// </summary>
[DataField]
public float SelfHealingAmount = 5;
public float SelfHealingAmount = 0.15f;

/// <summary>
/// Shitmed Change: The name of the container for this body part. Used in insertion surgeries.
Expand Down
5 changes: 3 additions & 2 deletions Content.Shared/Chat/SharedSuicideSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Content.Shared.Mobs.Components;
using Robust.Shared.Prototypes;
using System.Linq;
using Content.Shared.Backmen.Targeting;

namespace Content.Shared.Chat;

Expand Down Expand Up @@ -38,7 +39,7 @@ public void ApplyLethalDamage(Entity<DamageableComponent> target, DamageSpecifie
appliedDamageSpecifier.DamageDict[key] = Math.Ceiling((double) (value * lethalAmountOfDamage / totalDamage));
}

_damageableSystem.TryChangeDamage(target, appliedDamageSpecifier, true, origin: target);
_damageableSystem.TryChangeDamage(target, appliedDamageSpecifier, true, origin: target, targetPart: TargetBodyPart.Head); // backmen
}

/// <summary>
Expand All @@ -62,6 +63,6 @@ public void ApplyLethalDamage(Entity<DamageableComponent> target, ProtoId<Damage
}

var damage = new DamageSpecifier(damagePrototype, lethalAmountOfDamage);
_damageableSystem.TryChangeDamage(target, damage, true, origin: target);
_damageableSystem.TryChangeDamage(target, damage, true, origin: target, targetPart: TargetBodyPart.Head); // backmen
}
}
3 changes: 2 additions & 1 deletion Content.Shared/Climbing/Systems/ClimbSystem.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Content.Shared.ActionBlocker;
using Content.Shared.Backmen.Targeting;
using Content.Shared.Buckle.Components;
using Content.Shared.Climbing.Components;
using Content.Shared.Climbing.Events;
Expand Down Expand Up @@ -528,7 +529,7 @@ private void OnGlassClimbed(EntityUid uid, GlassTableComponent component, ref Cl
if (TryComp<PhysicsComponent>(args.Climber, out var physics) && physics.Mass <= component.MassLimit)
return;

_damageableSystem.TryChangeDamage(args.Climber, component.ClimberDamage, origin: args.Climber);
_damageableSystem.TryChangeDamage(args.Climber, component.ClimberDamage, origin: args.Climber, targetPart: TargetBodyPart.FullLegs); // backmen: surgery
_damageableSystem.TryChangeDamage(uid, component.TableDamage, origin: args.Climber);
_stunSystem.TryParalyze(args.Climber, TimeSpan.FromSeconds(component.StunTime), true);

Expand Down
3 changes: 2 additions & 1 deletion Content.Shared/Clumsy/ClumsySystem.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Content.Shared.Backmen.Targeting;
using Content.Shared.CCVar;
using Content.Shared.Chemistry.Hypospray.Events;
using Content.Shared.Climbing.Components;
Expand Down Expand Up @@ -137,7 +138,7 @@ public void HitHeadClumsy(Entity<ClumsyComponent> target, EntityUid table)
{
stunTime = bonkComp.BonkTime;
if (bonkComp.BonkDamage != null)
_damageable.TryChangeDamage(target, bonkComp.BonkDamage, true);
_damageable.TryChangeDamage(target, bonkComp.BonkDamage, true, targetPart: TargetBodyPart.Head);
}

_stun.TryParalyze(target, stunTime, true);
Expand Down
2 changes: 1 addition & 1 deletion Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ private void OnAttacked(Entity<DamageOnAttackedComponent> entity, ref AttackedEv
}
}

totalDamage = _damageableSystem.TryChangeDamage(args.User, totalDamage, entity.Comp.IgnoreResistances, origin: entity);
totalDamage = _damageableSystem.TryChangeDamage(args.User, totalDamage, entity.Comp.IgnoreResistances, origin: entity, canEvade: true);

if (totalDamage != null && totalDamage.AnyPositive())
{
Expand Down
4 changes: 2 additions & 2 deletions Content.Shared/Damage/Systems/DamageOnInteractSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ private void OnHandInteract(Entity<DamageOnInteractComponent> entity, ref Intera
{
targetPart = hands.ActiveHand.Location switch
{
HandLocation.Left => TargetBodyPart.LeftArm,
HandLocation.Right => TargetBodyPart.RightArm,
HandLocation.Left => TargetBodyPart.LeftFullArm,
HandLocation.Right => TargetBodyPart.RightFullArm,
_ => null
};
}
Expand Down
3 changes: 2 additions & 1 deletion Content.Shared/Doors/Systems/SharedDoorSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Content.Shared.Access.Components;
using Content.Shared.Access.Systems;
using Content.Shared.Administration.Logs;
using Content.Shared.Backmen.Targeting;
using Content.Shared.Damage;
using Content.Shared.Database;
using Content.Shared.Doors.Components;
Expand Down Expand Up @@ -542,7 +543,7 @@ public void Crush(EntityUid uid, DoorComponent? door = null, PhysicsComponent? p
{
door.CurrentlyCrushing.Add(entity);
if (door.CrushDamage != null)
_damageableSystem.TryChangeDamage(entity, door.CrushDamage, origin: uid);
_damageableSystem.TryChangeDamage(entity, door.CrushDamage, origin: uid, targetPart: TargetBodyPart.BodyMiddle); // backmen: surgery

_stunSystem.TryParalyze(entity, stunTime, true);
}
Expand Down
4 changes: 2 additions & 2 deletions Resources/Prototypes/Body/Parts/base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 75
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
!type:DamageTypeTrigger
damageType: Slash
damage: 100
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
Expand Down
4 changes: 2 additions & 2 deletions Resources/Prototypes/Body/Parts/skeleton.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 75
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
!type:DamageTypeTrigger
damageType: Slash
damage: 100
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
Expand Down
4 changes: 2 additions & 2 deletions Resources/Prototypes/_Backmen/Body/Parts/harpy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 110
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
!type:DamageTypeTrigger
damageType: Slash
damage: 150
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
Expand Down
4 changes: 2 additions & 2 deletions Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 75
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
!type:DamageTypeTrigger
damageType: Slash
damage: 100
damage: 120
behaviors:
- !type:GibPartBehavior { }
- trigger:
Expand Down

0 comments on commit a9b3a2f

Please sign in to comment.