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

[Balance] Surgery Balance Tweaks #941

Merged
merged 8 commits into from
Dec 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
}
}
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
Copy link
Contributor

@coderabbitai coderabbitai bot Nov 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Требуется обновление логики урона в системе лазания

В системе лазания обнаружены два места, требующие внимания:

  • В методе OnGlassClimbed для урона по столу (component.TableDamage) не указана целевая часть тела, что не соответствует новой логике спецификации урона
  • В FleshHeartSystem.cs урон типа "Slash" также применяется без указания целевой части тела

Рекомендуется:

  • Добавить соответствующую часть тела для урона по столу в OnGlassClimbed
  • Рассмотреть необходимость указания целевой части тела для урона в FleshHeartSystem
🔗 Analysis chain

Корректное указание целевой части тела при получении урона!

Добавление параметра targetPart: TargetBodyPart.FullLegs логично, так как при падении через стеклянный стол урон должен приходиться именно на ноги.

Давайте проверим другие методы нанесения урона при лазании:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Поиск других мест нанесения урона в системе лазания
# Ожидаем увидеть другие вызовы TryChangeDamage, которые могут потребовать указания targetPart

rg "TryChangeDamage.*Climb" --type cs

Length of output: 500


Script:

#!/bin/bash
# Let's check the context of these damage calls to understand their purpose

rg "TryChangeDamage.*Climb" --type cs -B 5 -A 5

Length of output: 2657

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Где находится OnGlassClimbed метод? В каком классе. И FleshHeartSystem.cs какой конкретно метод не указывает целевую часть тела

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TokenStyle: Метод OnGlassClimbed находится в классе ClimbSystem в файле Content.Shared/Climbing/Systems/ClimbSystem.cs.

В файле Content.Shared/Backmen/Corvax/HeartAttack/FleshHeartSystem.cs, метод OnHeartAttack вызывает TryChangeDamage без указания параметра targetPart.

🔗 Analysis chain
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Locate the 'OnGlassClimbed' method and identify its class and file
rg "void OnGlassClimbed" --type cs -n

# Find the specific method in 'FleshHeartSystem.cs' where 'TryChangeDamage' is called without specifying 'targetPart'
rg "TryChangeDamage(" Content.Shared/Backmen/Corvax/HeartAttack/FleshHeartSystem.cs -n -C 5

Length of output: 370

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@coderabbitai Где находится OnGlassClimbed метод? В каком классе. И FleshHeartSystem.cs какой конкретно метод не указывает целевую часть тела?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TokenStyle:

Метод OnGlassClimbed находится в классе ClimbSystem, который расположен в файле Content.Shared/Climbing/Systems/ClimbSystem.cs. Этот метод обрабатывает событие лазания на стеклянный стол. Вот сигнатура метода:

private void OnGlassClimbed(EntityUid uid, GlassTableComponent component, ref ClimbedOnEvent args)
{
    // ...
}

В файле Content.Shared/Backmen/Corvax/HeartAttack/FleshHeartSystem.cs метод OnHeartAttack не указывает целевую часть тела при вызове TryChangeDamage. Вот соответствующий участок кода:

private void OnHeartAttack(EntityUid uid, FleshHeartComponent component, HeartAttackEvent args)
{
    _damageableSystem.TryChangeDamage(uid, args.Damage, true, origin: uid);
    // ...
}

Рекомендуется добавить параметр targetPart в вызов TryChangeDamage, чтобы урон корректно применялся к целевой части тела согласно новой логике спецификации урона.

Надеюсь, это проясняет вопрос!

_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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Использование BodyMiddle для урона от дверей некорректно

Анализ кода показывает, что TargetBodyPart.BodyMiddle является составным флагом, включающим Torso | Groin | FullArms. Для урона от закрывающейся двери логичнее использовать более специфичную часть тела - Torso, так как:

  • Другие системы используют конкретные части тела (например, Head для оглушения, FullLegs для урона при падении)
  • Включение рук (FullArms) в целевую зону нелогично для урона от закрывающейся двери
  • В большинстве случаев дверь будет давить именно торс
🔗 Analysis chain

Подтвердите корректность таргетинга на BodyMiddle

Изменение корректно указывает часть тела для применения урона при закрытии двери. Убедитесь, что BodyMiddle является подходящей целью для всех типов существ, которые могут быть раздавлены дверью.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка использования TargetBodyPart.BodyMiddle в других системах

# Поиск других случаев использования BodyMiddle для проверки согласованности
ast-grep --pattern 'TargetBodyPart.BodyMiddle'

# Поиск определения перечисления для проверки всех доступных частей тела
rg -A 10 'enum TargetBodyPart'

Length of output: 248


Script:

#!/bin/bash
# Поиск определения TargetBodyPart с другим шаблоном
rg "enum\s+TargetBodyPart" -A 10

# Поиск использования TryChangeDamage для анализа других случаев таргетинга
ast-grep --pattern 'TryChangeDamage($$$, $$$, targetPart: $_)'

# Поиск файлов с определениями систем урона
fd "Damage.*System\.cs$"

Length of output: 2506


Script:

#!/bin/bash
# Поиск определения BodyMiddle в перечислении
rg "BodyMiddle" Content.Shared/Backmen/Targeting/TargetBodyPart.cs

# Поиск других случаев использования TryChangeDamage с таргетингом на конкретные части тела
rg -B 2 -A 2 "TryChangeDamage.*targetPart:"

# Поиск документации или комментариев по использованию частей тела
rg -l "body.*part|TargetBodyPart" Content.Shared/Damage/

Length of output: 5819


_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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Обнаружены различия в конфигурации урона для разных типов существ

Анализ показывает, что в других файлах сохраняется различие между Blunt и Slash уроном:

  • В skeleton.yml и shadowkin.yml режущий урон (Slash - 100) выше дробящего (Blunt - 75)
  • Только в обновленном base.yml значения уравнены до 120

Рекомендуется пересмотреть решение об уравнивании порогов урона, так как это может нарушить существующий баланс между различными типами существ и оружия.

🔗 Analysis chain

Проверьте баланс между типами урона

Увеличение порогов урона соответствует цели сделать части тела более устойчивыми к разрушению. Однако установка одинакового значения (120) для обоих типов урона (Blunt и Slash) может потребовать дополнительного рассмотрения:

  • Исторически, режущий урон (Slash) был эффективнее дробящего (Blunt)
  • Уравнивание порогов может повлиять на выбор оружия игроками

Давайте проверим использование этих типов урона в других файлах:

Also applies to: 39-39

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск других конфигураций с Blunt и Slash уроном для сравнения
rg -A 2 "damageType: (Blunt|Slash)" --type yaml

Length of output: 3188

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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Обнаружены несогласованные пороги урона в прототипах тел

Анализ показал несоответствие порогов урона между различными прототипами:

  • Vulpkanin (110 blunt/150 slash) использует старые значения
  • Base, Skeleton, Shadowkin и Harpy используют унифицированные значения (120/120)

Рекомендуется:

  • Обновить пороги урона в Resources/Prototypes/Corvax/Body/Parts/vulpkanin.yml до 120 для обоих типов для сохранения консистентности между всеми расами
🔗 Analysis chain

Унификация порогов урона для различных типов повреждений

Выравнивание порогов урона для ударного (blunt) и режущего (slash) типов до 120 делает механику более последовательной. Это соответствует цели PR - усложнить полное уничтожение частей тела.

Also applies to: 37-37

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка согласованности порогов урона в других файлах прототипов
rg -g "*.yml" "damageType: (Blunt|Slash)" -A 1

Length of output: 3435

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
Loading