Fix prototypes which lacked Injurable and add a test for Damageable Prototypes that can't take Damage. (#43767)

* test

* first line of fixes

* fixes

* review

* fix test fail before I merge

* fix for snails godo

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
This commit is contained in:
Princess Cheeseballs
2026-04-27 01:35:12 -07:00
committed by GitHub
parent 229e70fa20
commit b3bcebc07f
15 changed files with 78 additions and 1 deletions
@@ -0,0 +1,60 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Fixtures.Attributes;
using Content.IntegrationTests.Utility;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
using Content.Shared.Damage.Systems;
using Content.Shared.FixedPoint;
using Robust.Shared.Map;
namespace Content.IntegrationTests.Tests.Damageable;
[TestFixture]
[TestOf(typeof(DamageableComponent))]
[TestOf(typeof(DamageableSystem))]
public sealed class DamageAllPrototypesTest : GameTest
{
[SidedDependency(Side.Server)] private readonly DamageableSystem _damageableSystem = default!;
private static string[] _damageables = GameDataScrounger.EntitiesWithComponent("Damageable");
[Test]
[TestOf(typeof(DamageableSystem))]
[TestCaseSource(nameof(_damageables))]
[Description("Ensures all Entity Prototypes with damageable can be damaged.")]
public async Task TestDamageableComponents(string damageable)
{
var map = await Pair.CreateTestMap();
var entity = await SpawnAtPosition(damageable, map.GridCoords);
// Intentionally cannot take damage, ignore it.
if (SEntMan.HasComponent<GodmodeComponent>(entity))
return;
var canBeDamaged = false;
foreach (var type in SProtoMan.EnumeratePrototypes<DamageTypePrototype>())
{
if (!_damageableSystem.CanBeDamagedBy(entity, type))
continue;
canBeDamaged = true;
await Server.WaitPost(() =>
{
var damage = new DamageSpecifier(type, FixedPoint2.Epsilon);
var previousDamage = _damageableSystem.GetTotalDamage(entity);
_damageableSystem.ChangeDamage(entity, damage, ignoreResistances: true);
Assert.That(_damageableSystem.GetTotalDamage(entity) == FixedPoint2.Epsilon + previousDamage);
_damageableSystem.ClearAllDamage(entity);
});
}
// Ensure that this entity can actually be damaged.
Assert.That(canBeDamaged);
}
}
@@ -1451,6 +1451,7 @@
Heat: 1
- type: Damageable
damageModifierSet: Wood
- type: Injurable
- type: Appearance
- type: FireVisuals
sprite: Effects/fire.rsi
@@ -201,6 +201,7 @@
container: station_ai_mind_slot
- type: Damageable
damageModifierSet: StrongMetallic
- type: Injurable
- type: Repairable
doAfterDelay: 10
allowSelfRepair: false
@@ -385,6 +386,7 @@
density: 200
- type: Damageable
damageModifierSet: StrongMetallic
- type: Injurable
- type: Destructible
thresholds:
- trigger:
@@ -87,6 +87,7 @@
- type: InteractionOutline
- type: Clickable
- type: Damageable
- type: Injurable
- type: ChameleonDisguise
# actions
@@ -159,6 +159,7 @@
- type: InteractionOutline
- type: Physics
- type: Damageable
- type: Injurable
- type: DamageRandomPopup
popups:
- darts-popup-bullseye
@@ -52,6 +52,7 @@
shader: unshaded
- type: Damageable
damageModifierSet: Wood
- type: Injurable
- type: Destructible
thresholds:
- trigger:
@@ -36,6 +36,7 @@
- MidImpassable
- type: Damageable
damageModifierSet: Wood
- type: Injurable
- type: Destructible
thresholds:
- trigger:
@@ -47,6 +47,7 @@
- MidImpassable
- type: Damageable
damageModifierSet: Wood
- type: Injurable
- type: Destructible
thresholds:
- trigger:
@@ -206,6 +207,7 @@
layer:
- MidImpassable
- type: Damageable
- type: Injurable
- type: Destructible
thresholds:
- trigger:
@@ -25,6 +25,7 @@
normalState: fire
- type: Damageable
damageModifierSet: Wood
- type: Injurable
- type: Destructible
thresholds:
- trigger: # Excess damage, don't spawn entities
@@ -467,4 +468,5 @@
- !type:EmptyAllContainersBehaviour
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Injurable
- type: StationAiWhitelist
@@ -27,6 +27,7 @@
effectsTable: !type:NestedSelector
tableId: XenoArtifactEffectsDefaultTable
- type: Damageable
- type: Injurable
- type: Actions
- type: Physics
bodyType: KinematicController
@@ -29,6 +29,7 @@
ajar: ""
open: ""
- type: Damageable
- type: Injurable
- type: Destructible
thresholds:
- trigger:
@@ -37,6 +37,8 @@
mask:
- MobMask
- type: Damageable
- type: Injurable
damageContainer: Inorganic
- type: Destructible
thresholds:
- trigger: # Excess damage, don't spawn entities
@@ -37,7 +37,6 @@
sprite: Structures/Specific/anomaly.rsi
- type: InteractionOutline
- type: Clickable
- type: Damageable
- type: Appearance
- type: AnimationPlayer
- type: GuideHelp
@@ -177,6 +177,8 @@
- type: Climbable
- type: Damageable
damageModifierSet: Wood
- type: Injurable
damageContainer: StructuralInorganic
- type: Destructible
thresholds:
- trigger: # Excess damage, don't spawn entities
@@ -23,6 +23,7 @@
- type: Physics
- type: Damageable
damageModifierSet: Wood
- type: Injurable
- type: Temperature
- type: TemperatureDamage
heatDamage: