diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.CVars.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.CVars.cs
index 3aaa5429fb..4d50700738 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.CVars.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.CVars.cs
@@ -12,9 +12,14 @@ namespace Content.Server.Atmos.EntitySystems
public float SpaceWindPressureForceDivisorPush { get; private set; }
public float SpaceWindMaxVelocity { get; private set; }
public float SpaceWindMaxPushForce { get; private set; }
+ public float SpaceWindMinimumCalculatedMass { get; private set; }
+ public float SpaceWindMaximumCalculatedInverseMass { get; private set; }
+ public bool MonstermosUseExpensiveAirflow { get; private set; }
public bool MonstermosEqualization { get; private set; }
public bool MonstermosDepressurization { get; private set; }
public bool MonstermosRipTiles { get; private set; }
+ public float MonstermosRipTilesMinimumPressure { get; private set; }
+ public float MonstermosRipTilesPressureOffset { get; private set; }
public bool GridImpulse { get; private set; }
public float SpacingEscapeRatio { get; private set; }
public float SpacingMinGas { get; private set; }
@@ -26,6 +31,7 @@ namespace Content.Server.Atmos.EntitySystems
public float AtmosTickRate { get; private set; }
public float Speedup { get; private set; }
public float HeatScale { get; private set; }
+ public float HumanoidThrowMultiplier { get; private set; }
///
/// Time between each atmos sub-update. If you are writing an atmos device, use AtmosDeviceUpdateEvent.dt
@@ -41,9 +47,14 @@ namespace Content.Server.Atmos.EntitySystems
Subs.CVar(_cfg, CCVars.SpaceWindPressureForceDivisorPush, value => SpaceWindPressureForceDivisorPush = value, true);
Subs.CVar(_cfg, CCVars.SpaceWindMaxVelocity, value => SpaceWindMaxVelocity = value, true);
Subs.CVar(_cfg, CCVars.SpaceWindMaxPushForce, value => SpaceWindMaxPushForce = value, true);
+ Subs.CVar(_cfg, CCVars.SpaceWindMinimumCalculatedMass, value => SpaceWindMinimumCalculatedMass = value, true);
+ Subs.CVar(_cfg, CCVars.SpaceWindMaximumCalculatedInverseMass, value => SpaceWindMaximumCalculatedInverseMass = value, true);
+ Subs.CVar(_cfg, CCVars.MonstermosUseExpensiveAirflow, value => MonstermosUseExpensiveAirflow = value, true);
Subs.CVar(_cfg, CCVars.MonstermosEqualization, value => MonstermosEqualization = value, true);
Subs.CVar(_cfg, CCVars.MonstermosDepressurization, value => MonstermosDepressurization = value, true);
Subs.CVar(_cfg, CCVars.MonstermosRipTiles, value => MonstermosRipTiles = value, true);
+ Subs.CVar(_cfg, CCVars.MonstermosRipTilesMinimumPressure, value => MonstermosRipTilesMinimumPressure = value, true);
+ Subs.CVar(_cfg, CCVars.MonstermosRipTilesPressureOffset, value => MonstermosRipTilesPressureOffset = value, true);
Subs.CVar(_cfg, CCVars.AtmosGridImpulse, value => GridImpulse = value, true);
Subs.CVar(_cfg, CCVars.AtmosSpacingEscapeRatio, value => SpacingEscapeRatio = value, true);
Subs.CVar(_cfg, CCVars.AtmosSpacingMinGas, value => SpacingMinGas = value, true);
@@ -55,6 +66,7 @@ namespace Content.Server.Atmos.EntitySystems
Subs.CVar(_cfg, CCVars.AtmosHeatScale, value => { HeatScale = value; InitializeGases(); }, true);
Subs.CVar(_cfg, CCVars.ExcitedGroups, value => ExcitedGroups = value, true);
Subs.CVar(_cfg, CCVars.ExcitedGroupsSpaceIsAllConsuming, value => ExcitedGroupsSpaceIsAllConsuming = value, true);
+ Subs.CVar(_cfg, CCVars.AtmosHumanoidThrowMultiplier, value => HumanoidThrowMultiplier = value, true);
}
}
}
diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs
index cb50ff114e..461435f062 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs
@@ -1,5 +1,6 @@
using Content.Server.Atmos.Components;
using Content.Shared.Atmos;
+using Content.Shared.Humanoid;
using Content.Shared.Mobs.Components;
using Content.Shared.Physics;
using Robust.Shared.Audio;
@@ -49,8 +50,7 @@ namespace Content.Server.Atmos.EntitySystems
comp.Accumulator = 0f;
toRemove.Add(ent);
- if (HasComp(uid) &&
- TryComp(uid, out var body))
+ if (TryComp(uid, out var body))
{
_physics.SetBodyStatus(uid, body, BodyStatus.OnGround);
}
@@ -70,27 +70,10 @@ namespace Content.Server.Atmos.EntitySystems
}
}
- private void AddMobMovedByPressure(EntityUid uid, MovedByPressureComponent component, PhysicsComponent body)
- {
- if (!TryComp(uid, out var fixtures))
- return;
-
- _physics.SetBodyStatus(uid, body, BodyStatus.InAir);
-
- foreach (var (id, fixture) in fixtures.Fixtures)
- {
- _physics.RemoveCollisionMask(uid, id, fixture, (int) CollisionGroup.TableLayer, manager: fixtures);
- }
-
- // TODO: Make them dynamic type? Ehh but they still want movement so uhh make it non-predicted like weightless?
- // idk it's hard.
-
- component.Accumulator = 0f;
- _activePressures.Add((uid, component));
- }
-
private void HighPressureMovements(Entity gridAtmosphere, TileAtmosphere tile, EntityQuery bodies, EntityQuery xforms, EntityQuery pressureQuery, EntityQuery metas)
{
+ if (tile.PressureDifference < SpaceWindMinimumCalculatedMass * SpaceWindMinimumCalculatedMass)
+ return;
// TODO ATMOS finish this
// Don't play the space wind sound on tiles that are on fire...
@@ -120,7 +103,8 @@ namespace Content.Server.Atmos.EntitySystems
var gridWorldRotation = xforms.GetComponent(gridAtmosphere).WorldRotation;
// If we're using monstermos, smooth out the yeet direction to follow the flow
- if (MonstermosEqualization)
+ //TODO This is bad, don't run this. It just makes the throws worse by somehow rounding them to orthogonal
+ if (!MonstermosEqualization)
{
// We step through tiles according to the pressure direction on the current tile.
// The goal is to get a general direction of the airflow in the area.
@@ -160,7 +144,7 @@ namespace Content.Server.Atmos.EntitySystems
(entity, pressureMovements),
gridAtmosphere.Comp.UpdateCounter,
tile.PressureDifference,
- tile.PressureDirection, 0,
+ tile.PressureDirection,
tile.PressureSpecificTarget != null ? _mapSystem.ToCenterCoordinates(tile.GridIndex, tile.PressureSpecificTarget.GridIndices) : EntityCoordinates.Invalid,
gridWorldRotation,
xforms.GetComponent(entity),
@@ -181,12 +165,29 @@ namespace Content.Server.Atmos.EntitySystems
tile.PressureDirection = differenceDirection;
}
+ //INFO The EE version of this function drops pressureResistanceProbDelta, since it's not needed. If you are for whatever reason calling this function
+ //INFO And if it isn't working, you've probably still got the pressureResistanceProbDelta line included.
+ ///
+ /// EXPLANATION:
+ /// pressureDifference = Force of Air Flow on a given tile
+ /// physics.Mass = Mass of the object potentially being thrown
+ /// physics.InvMass = 1 divided by said Mass. More CPU efficient way to do division.
+ ///
+ /// Objects can only be thrown if the force of air flow is greater than the SQUARE of their mass or {SpaceWindMinimumCalculatedMass}, whichever is heavier
+ /// This means that the heavier an object is, the exponentially more force is required to move it
+ /// The force of a throw is equal to the force of air pressure, divided by an object's mass. So not only are heavier objects
+ /// less likely to be thrown, they are also harder to throw,
+ /// while lighter objects are yeeted easily, and from great distance.
+ ///
+ /// For a human sized entity with a standard weight of 80kg and a spacing between a hard vacuum and a room pressurized at 101kpa,
+ /// The human shall only be moved if he is either very close to the hole, or is standing in a region of high airflow
+ ///
+
public void ExperiencePressureDifference(
Entity ent,
int cycle,
float pressureDifference,
AtmosDirection direction,
- float pressureResistanceProbDelta,
EntityCoordinates throwTarget,
Angle gridWorldRotation,
TransformComponent? xform = null,
@@ -199,50 +200,28 @@ namespace Content.Server.Atmos.EntitySystems
if (!Resolve(uid, ref xform))
return;
- // TODO ATMOS stuns?
- var maxForce = MathF.Sqrt(pressureDifference) * 2.25f;
- var moveProb = 100f;
-
- if (component.PressureResistance > 0)
- moveProb = MathF.Abs((pressureDifference / component.PressureResistance * MovedByPressureComponent.ProbabilityBasePercent) -
- MovedByPressureComponent.ProbabilityOffset);
-
- // Can we yeet the thing (due to probability, strength, etc.)
- if (moveProb > MovedByPressureComponent.ProbabilityOffset && _robustRandom.Prob(MathF.Min(moveProb / 100f, 1f))
- && !float.IsPositiveInfinity(component.MoveResist)
- && (physics.BodyType != BodyType.Static
- && (maxForce >= (component.MoveResist * MovedByPressureComponent.MoveForcePushRatio)))
- || (physics.BodyType == BodyType.Static && (maxForce >= (component.MoveResist * MovedByPressureComponent.MoveForceForcePushRatio))))
+ if (physics.BodyType != BodyType.Static
+ && !float.IsPositiveInfinity(component.MoveResist))
{
- if (HasComp(uid))
+ var moveForce = pressureDifference * MathF.Max(physics.InvMass, SpaceWindMaximumCalculatedInverseMass);
+ if (HasComp(ent))
+ moveForce *= HumanoidThrowMultiplier;
+ if (moveForce > physics.Mass)
{
- AddMobMovedByPressure(uid, component, physics);
- }
-
- if (maxForce > MovedByPressureComponent.ThrowForce)
- {
- var moveForce = maxForce;
- moveForce /= (throwTarget != EntityCoordinates.Invalid) ? SpaceWindPressureForceDivisorThrow : SpaceWindPressureForceDivisorPush;
- moveForce *= MathHelper.Clamp(moveProb, 0, 100);
-
- // Apply a sanity clamp to prevent being thrown through objects.
- var maxSafeForceForObject = SpaceWindMaxVelocity * physics.Mass;
- moveForce = MathF.Min(moveForce, maxSafeForceForObject);
-
// Grid-rotation adjusted direction
var dirVec = (direction.ToAngle() + gridWorldRotation).ToWorldVec();
+ moveForce *= MathF.Max(physics.InvMass, SpaceWindMaximumCalculatedInverseMass);
- // TODO: Technically these directions won't be correct but uhh I'm just here for optimisations buddy not to fix my old bugs.
+ //TODO Consider replacing throw target with proper trigonometry angles.
if (throwTarget != EntityCoordinates.Invalid)
{
- var pos = ((throwTarget.ToMap(EntityManager, _transformSystem).Position - xform.WorldPosition).Normalized() + dirVec).Normalized();
- _physics.ApplyLinearImpulse(uid, pos * moveForce, body: physics);
+ var pos = throwTarget.ToMap(EntityManager, _transformSystem).Position - xform.WorldPosition + dirVec;
+ _throwing.TryThrow(uid, pos.Normalized() * MathF.Min(moveForce, SpaceWindMaxVelocity), moveForce);
}
else
{
- moveForce = MathF.Min(moveForce, SpaceWindMaxPushForce);
- _physics.ApplyLinearImpulse(uid, dirVec * moveForce, body: physics);
+ _throwing.TryThrow(uid, dirVec.Normalized() * MathF.Min(moveForce, SpaceWindMaxVelocity), moveForce);
}
component.LastHighPressureMovementAirCycle = cycle;
diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs
index 08193027d6..8bb34cc1c3 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs
@@ -5,11 +5,13 @@ using Content.Server.Doors.Systems;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Database;
+using Content.Shared.Maps;
+using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Physics.Components;
+using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Utility;
-
namespace Content.Server.Atmos.EntitySystems
{
public sealed partial class AtmosphereSystem
@@ -137,7 +139,7 @@ namespace Content.Server.Atmos.EntitySystems
var logN = MathF.Log2(tileCount);
// Optimization - try to spread gases using an O(n log n) algorithm that has a chance of not working first to avoid O(n^2)
- if (giverTilesLength > logN && takerTilesLength > logN)
+ if (!MonstermosUseExpensiveAirflow && giverTilesLength > logN && takerTilesLength > logN)
{
// Even if it fails, it will speed up the next part.
Array.Sort(_equalizeTiles, 0, tileCount, _monstermosComparer);
@@ -550,7 +552,8 @@ namespace Content.Server.Atmos.EntitySystems
}
InvalidateVisuals(ent, otherTile);
- HandleDecompressionFloorRip(mapGrid, otherTile, otherTile.MonstermosInfo.CurrentTransferAmount);
+ if (MonstermosRipTiles && otherTile.PressureDifference > MonstermosRipTilesMinimumPressure)
+ HandleDecompressionFloorRip(mapGrid, otherTile, otherTile.PressureDifference);
}
if (GridImpulse && tileCount > 0)
@@ -682,14 +685,14 @@ namespace Content.Server.Atmos.EntitySystems
adj.MonstermosInfo[idx.ToOppositeDir()] -= amount;
}
- private void HandleDecompressionFloorRip(MapGridComponent mapGrid, TileAtmosphere tile, float sum)
+ private void HandleDecompressionFloorRip(MapGridComponent mapGrid, TileAtmosphere tile, float delta)
{
- if (!MonstermosRipTiles)
+ if (!mapGrid.TryGetTileRef(tile.GridIndices, out var tileRef))
return;
+ var tileref = tileRef.Tile;
- var chance = MathHelper.Clamp(0.01f + (sum / SpacingMaxWind) * 0.3f, 0.003f, 0.3f);
-
- if (sum > 20 && _robustRandom.Prob(chance))
+ var tileDef = (ContentTileDefinition) _tileDefinitionManager[tileref.TypeId];
+ if (!tileDef.Reinforced && tileDef.TileRipResistance < delta * MonstermosRipTilesPressureOffset)
PryTile(mapGrid, tile.GridIndices);
}
diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs
index 44bfa4cc10..dbbe769bea 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs
@@ -6,6 +6,7 @@ using Content.Server.NodeContainer.EntitySystems;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Doors.Components;
using Content.Shared.Maps;
+using Content.Shared.Throwing;
using JetBrains.Annotations;
using Robust.Server.GameObjects;
using Robust.Shared.Audio.Systems;
@@ -37,6 +38,7 @@ public sealed partial class AtmosphereSystem : SharedAtmosphereSystem
[Dependency] private readonly TileSystem _tile = default!;
[Dependency] private readonly MapSystem _map = default!;
[Dependency] public readonly PuddleSystem Puddle = default!;
+ [Dependency] private readonly ThrowingSystem _throwing = default!;
private const float ExposedUpdateDelay = 1f;
private float _exposedTimer = 0f;
diff --git a/Content.Server/Temperature/Systems/TemperatureSystem.cs b/Content.Server/Temperature/Systems/TemperatureSystem.cs
index bc44304679..c082aade28 100644
--- a/Content.Server/Temperature/Systems/TemperatureSystem.cs
+++ b/Content.Server/Temperature/Systems/TemperatureSystem.cs
@@ -171,8 +171,9 @@ public sealed class TemperatureSystem : EntitySystem
{
return Atmospherics.MinimumHeatCapacity;
}
-
- return comp.SpecificHeat * physics.FixturesMass;
+ if (physics.Mass < 1)
+ return comp.SpecificHeat;
+ else return comp.SpecificHeat * physics.FixturesMass;
}
private void OnInit(EntityUid uid, InternalTemperatureComponent comp, MapInitEvent args)
diff --git a/Content.Server/_White/TTS/TTSManager.cs b/Content.Server/_White/TTS/TTSManager.cs
index 56b4a64633..c5fada91ec 100644
--- a/Content.Server/_White/TTS/TTSManager.cs
+++ b/Content.Server/_White/TTS/TTSManager.cs
@@ -63,9 +63,10 @@ public sealed class TTSManager
{
var url = _cfg.GetCVar(WhiteCVars.TtsApiUrl);
var maxCacheSize = _cfg.GetCVar(WhiteCVars.TtsMaxCacheSize);
- if (string.IsNullOrWhiteSpace(url))
+ if (string.IsNullOrWhiteSpace(url)) // zaebal padat
{
- throw new Exception("TTS Api url not specified");
+ _sawmill.Log(LogLevel.Error, nameof(TTSManager), "TTS Api url not specified");
+ return null;
}
WantedCount.Inc();
@@ -193,4 +194,4 @@ public sealed class TTSManager
[JsonPropertyName("audio")]
public string Audio { get; set; }
}
-}
\ No newline at end of file
+}
diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs
index dc97b0c07e..aa93121c3d 100644
--- a/Content.Shared/CCVar/CCVars.cs
+++ b/Content.Shared/CCVar/CCVars.cs
@@ -1054,7 +1054,7 @@ namespace Content.Shared.CCVar
/// Useful to prevent clipping through objects.
///
public static readonly CVarDef SpaceWindMaxVelocity =
- CVarDef.Create("atmos.space_wind_max_velocity", 30f, CVar.SERVERONLY);
+ CVarDef.Create("atmos.space_wind_max_velocity", 15f, CVar.SERVERONLY);
///
/// The maximum force that may be applied to an object by pushing (i.e. not throwing) atmospheric pressure differences.
@@ -1063,6 +1063,24 @@ namespace Content.Shared.CCVar
public static readonly CVarDef SpaceWindMaxPushForce =
CVarDef.Create("atmos.space_wind_max_push_force", 20f, CVar.SERVERONLY);
+ ///
+ /// If an object's mass is below this number, then this number is used in place of mass to determine whether air pressure can throw an object.
+ /// This has nothing to do with throwing force, only acting as a way of reducing the odds of tiny 5 gram objects from being yeeted by people's breath
+ ///
+ ///
+ /// If you are reading this because you want to change it, consider looking into why almost every item in the game weighs only 5 grams
+ /// And maybe do your part to fix that? :)
+ ///
+ public static readonly CVarDef SpaceWindMinimumCalculatedMass =
+ CVarDef.Create("atmos.space_wind_minimum_calculated_mass", 10f, CVar.SERVERONLY);
+
+ ///
+ /// Calculated as 1/Mass, where Mass is the physics.Mass of the desired threshold.
+ /// If an object's inverse mass is lower than this, it is capped at this. Basically, an upper limit to how heavy an object can be before it stops resisting space wind more.
+ ///
+ public static readonly CVarDef SpaceWindMaximumCalculatedInverseMass =
+ CVarDef.Create("atmos.space_wind_maximum_calculated_inverse_mass", 0.04f, CVar.SERVERONLY);
+
///
/// Whether monstermos tile equalization is enabled.
///
@@ -1084,7 +1102,21 @@ namespace Content.Shared.CCVar
/// Also looks weird on slow spacing for unrelated reasons. If you do want to enable this, you should probably turn on instaspacing.
///
public static readonly CVarDef MonstermosRipTiles =
- CVarDef.Create("atmos.monstermos_rip_tiles", false, CVar.SERVERONLY);
+ CVarDef.Create("atmos.monstermos_rip_tiles", true, CVar.SERVERONLY);
+
+ ///
+ /// Taken as the cube of a tile's mass, this acts as a minimum threshold of mass for which air pressure calculates whether or not to rip a tile from the floor
+ /// This should be set by default to the cube of the game's lowest mass tile as defined in their prototypes, but can be increased for server performance reasons
+ ///
+ public static readonly CVarDef MonstermosRipTilesMinimumPressure =
+ CVarDef.Create("atmos.monstermos_rip_tiles_min_pressure", 7500f, CVar.SERVERONLY);
+
+ ///
+ /// Taken after the minimum pressure is checked, the effective pressure is multiplied by this amount.
+ /// This allows server hosts to finely tune how likely floor tiles are to be ripped apart by air pressure
+ ///
+ public static readonly CVarDef MonstermosRipTilesPressureOffset =
+ CVarDef.Create("atmos.monstermos_rip_tiles_pressure_offset", 0.44f, CVar.SERVERONLY);
///
/// Whether explosive depressurization will cause the grid to gain an impulse.
@@ -1115,6 +1147,13 @@ namespace Content.Shared.CCVar
public static readonly CVarDef AtmosSpacingMaxWind =
CVarDef.Create("atmos.mmos_max_wind", 500f, CVar.SERVERONLY);
+ ///
+ /// Increases default airflow calculations to O(n^2) complexity, for use with heavy space wind optimizations. Potato servers BEWARE
+ /// This solves the problem of objects being trapped in an infinite loop of slamming into a wall repeatedly.
+ ///
+ public static readonly CVarDef MonstermosUseExpensiveAirflow =
+ CVarDef.Create("atmos.mmos_expensive_airflow", true, CVar.SERVERONLY);
+
///
/// Whether atmos superconduction is enabled.
///
@@ -1171,6 +1210,13 @@ namespace Content.Shared.CCVar
public static readonly CVarDef AtmosHeatScale =
CVarDef.Create("atmos.heat_scale", 8f, CVar.SERVERONLY);
+ ///
+ /// A multiplier on the amount of force applied to Humanoid entities, as tracked by HumanoidAppearanceComponent
+ /// This multiplier is added after all other checks are made, and applies to both throwing force, and how easy it is for an entity to be thrown.
+ ///
+ public static readonly CVarDef AtmosHumanoidThrowMultiplier =
+ CVarDef.Create("atmos.humanoid_throw_multiplier", 2f, CVar.SERVERONLY);
+
/*
* MIDI instruments
*/
diff --git a/Content.Shared/Maps/ContentTileDefinition.cs b/Content.Shared/Maps/ContentTileDefinition.cs
index 839d920df9..12885f20a4 100644
--- a/Content.Shared/Maps/ContentTileDefinition.cs
+++ b/Content.Shared/Maps/ContentTileDefinition.cs
@@ -117,5 +117,11 @@ namespace Content.Shared.Maps
{
TileId = id;
}
+
+ [DataField]
+ public bool Reinforced = false;
+
+ [DataField]
+ public float TileRipResistance = 125f;
}
}
diff --git a/Resources/Locale/ru-RU/_white/round-end/round-end-system.ftl b/Resources/Locale/ru-RU/_white/round-end/round-end-system.ftl
index 4023c05040..d9ddb5a4f8 100644
--- a/Resources/Locale/ru-RU/_white/round-end/round-end-system.ftl
+++ b/Resources/Locale/ru-RU/_white/round-end/round-end-system.ftl
@@ -2,4 +2,4 @@
round-end-system-shuttle-called-announcement-reason =
Эвакуационный шаттл был вызван. Он прибудет через: {$time} {$units}.
- Причина: {$reason}
+ Причина: {$reason}
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
index c8010eab34..852240fce4 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
@@ -22,7 +22,7 @@
shape:
!type:PhysShapeCircle
radius: 0.25
- density: 10
+ density: 0.8
mask:
- FlyingMobMask
layer:
@@ -89,7 +89,7 @@
shape:
!type:PhysShapeCircle
radius: 0.1
- density: 30
+ density: 0.1
mask:
- FlyingMobMask
layer:
@@ -325,7 +325,7 @@
shape:
!type:PhysShapeCircle
radius: 0.2
- density: 100
+ density: 0.0007
mask:
- SmallMobMask
layer:
@@ -428,7 +428,7 @@
shape:
!type:PhysShapeCircle
radius: 0.2
- density: 120
+ density: 0.007
mask:
- SmallMobMask
layer:
@@ -1518,7 +1518,7 @@
shape:
!type:PhysShapeCircle
radius: 0.2
- density: 100
+ density: 0.76
mask:
- SmallMobMask
layer:
@@ -2450,7 +2450,7 @@
shape:
!type:PhysShapeCircle
radius: 0.35
- density: 50 #They actually are pretty light, I looked it up
+ density: 16.66
mask:
- MobMask
layer:
@@ -2527,7 +2527,7 @@
shape:
!type:PhysShapeCircle
radius: 0.35
- density: 50
+ density: 25.5
mask:
- MobMask
layer:
@@ -2676,7 +2676,7 @@
shape:
!type:PhysShapeCircle
radius: 0.35
- density: 15
+ density: 9
mask:
- MobMask
layer:
@@ -2822,6 +2822,17 @@
Base: caracal_flop
Dead:
Base: caracal_dead
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeCircle
+ radius: 0.35
+ density: 30
+ mask:
+ - MobMask
+ layer:
+ - MobLayer
- type: entity
name: kitten
@@ -2855,6 +2866,17 @@
thresholds:
0: Alive
25: Dead
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeCircle
+ radius: 0.35
+ density: 2
+ mask:
+ - MobMask
+ layer:
+ - MobLayer
- type: entity
name: sloth
@@ -2935,7 +2957,7 @@
shape:
!type:PhysShapeCircle
radius: 0.35
- density: 5
+ density: 4
mask:
- MobMask
layer:
@@ -3012,7 +3034,7 @@
shape:
!type:PhysShapeCircle
radius: 0.2
- density: 120
+ density: 0.8
mask:
- SmallMobMask
layer:
@@ -3134,7 +3156,7 @@
shape:
!type:PhysShapeCircle
radius: 0.35
- density: 250
+ density: 750
mask:
- MobMask
layer:
@@ -3219,7 +3241,7 @@
shape:
!type:PhysShapeCircle
radius: 0.35
- density: 100 # High, because wood is heavy.
+ density: 15
mask:
- MobMask
layer:
diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml
index 9bfdd8117b..934b7059fd 100644
--- a/Resources/Prototypes/Tiles/floors.yml
+++ b/Resources/Prototypes/Tiles/floors.yml
@@ -15,6 +15,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelCheckerLight
@@ -33,6 +34,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteelCheckerLight
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelCheckerDark
@@ -51,6 +53,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteelCheckerDark
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelMini
@@ -69,6 +72,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelPavement
@@ -87,6 +91,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelDiagonal
@@ -105,6 +110,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelOffset
@@ -117,6 +123,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelMono
@@ -135,6 +142,7 @@
collection: FootstepTile
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelPavementVertical
@@ -153,6 +161,7 @@
collection: FootstepTile
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelHerringbone
@@ -171,6 +180,7 @@
collection: FootstepTile
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorSteelDiagonalMini
@@ -189,6 +199,7 @@
collection: FootstepTile
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorBrassFilled
@@ -201,7 +212,8 @@
collection: FootstepHull
itemDrop: FloorTileItemBrassFilled
heatCapacity: 10000
-
+ tileRipResistance: 220
+
- type: tile
id: FloorBrassReebe
name: tiles-brass-floor-reebe
@@ -213,6 +225,7 @@
collection: FootstepHull
itemDrop: FloorTileItemBrassReebe
heatCapacity: 10000
+ tileRipResistance: 220
- type: tile
id: FloorPlastic
@@ -231,6 +244,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWood
@@ -251,6 +265,7 @@
collection: BarestepWood
itemDrop: FloorTileItemWood
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhite
@@ -269,6 +284,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhiteMini
@@ -287,6 +303,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhitePavement
@@ -305,6 +322,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhiteDiagonal
@@ -323,6 +341,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhiteOffset
@@ -335,6 +354,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhiteMono
@@ -353,6 +373,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhitePavementVertical
@@ -371,6 +392,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhiteHerringbone
@@ -389,6 +411,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhiteDiagonalMini
@@ -407,6 +430,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorWhitePlastic
@@ -425,6 +449,7 @@
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorDark
@@ -443,6 +468,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkMini
@@ -461,6 +487,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkPavement
@@ -479,6 +506,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkDiagonal
@@ -497,6 +525,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkOffset
@@ -509,6 +538,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkMono
@@ -527,6 +557,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkPavementVertical
@@ -545,6 +576,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkHerringbone
@@ -563,6 +595,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkDiagonalMini
@@ -581,6 +614,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorDarkPlastic
@@ -599,6 +633,7 @@
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorTechMaint
@@ -611,6 +646,7 @@
collection: FootstepHull
itemDrop: FloorTileItemTechmaint
heatCapacity: 10000
+ tileRipResistance: 250
- type: tile
id: FloorReinforced
@@ -623,6 +659,7 @@
collection: FootstepHull
itemDrop: FloorTileItemReinforced
heatCapacity: 10000
+ reinforced: true
- type: tile
id: FloorMono
@@ -635,6 +672,7 @@
collection: FootstepTile
itemDrop: FloorTileItemMono
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorLino
@@ -647,6 +685,7 @@
collection: FootstepTile
itemDrop: FloorTileItemLino
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorSteelDirty
@@ -659,6 +698,7 @@
collection: FootstepPlating
itemDrop: FloorTileItemDirty
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorElevatorShaft
@@ -671,6 +711,7 @@
collection: FootstepHull
itemDrop: FloorTileItemElevatorShaft
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorMetalDiamond
@@ -683,6 +724,7 @@
collection: FootstepHull
itemDrop: FloorTileItemMetalDiamond
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorRockVault
@@ -695,6 +737,7 @@
collection: FootstepAsteroid
itemDrop: FloorTileItemRockVault
heatCapacity: 10000
+ tileRipResistance: 400
- type: tile
id: FloorBlue
@@ -707,6 +750,7 @@
collection: FootstepTile
itemDrop: FloorTileItemBlue
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorSteelLime
@@ -725,6 +769,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemLime
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorMining
@@ -737,6 +782,7 @@
collection: FootstepTile
itemDrop: FloorTileItemMining
heatCapacity: 10000
+ tileRipResistance: 250
- type: tile
id: FloorMiningDark
@@ -749,6 +795,7 @@
collection: FootstepTile
itemDrop: FloorTileItemMiningDark
heatCapacity: 10000
+ tileRipResistance: 250
- type: tile
id: FloorMiningLight
@@ -761,6 +808,7 @@
collection: FootstepTile
itemDrop: FloorTileItemMiningLight
heatCapacity: 10000
+ tileRipResistance: 250
# Departamental
- type: tile
@@ -774,6 +822,7 @@
collection: FootstepHull
itemDrop: FloorTileItemFreezer
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorShowroom
@@ -792,6 +841,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShowroom
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorHydro
@@ -804,6 +854,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemHydro
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorBar
@@ -822,6 +873,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemBar
heatCapacity: 10000
+ tileRipResistance: 100
- type: tile
id: FloorClown
@@ -834,6 +886,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemClown
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorMime
@@ -846,6 +899,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemMime
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorKitchen
@@ -858,6 +912,7 @@
collection: FootstepTile
itemDrop: FloorTileItemKitchen
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorLaundry
@@ -870,6 +925,7 @@
collection: FootstepTile
itemDrop: FloorTileItemLaundry
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorSteelDamaged
@@ -889,6 +945,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel #This should probably be made null when it becomes possible to make it such, in SS13 prying destroyed tiles wouldn't give you anything.
heatCapacity: 10000
+ tileRipResistance: 175
- type: tile
id: FloorSteelBurnt
@@ -905,6 +962,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemSteel #Same case as FloorSteelDamaged, make it null when possible
heatCapacity: 10000
+ tileRipResistance: 175
# Concrete
@@ -926,6 +984,7 @@
itemDrop: FloorTileItemConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorConcreteMono
@@ -945,6 +1004,7 @@
itemDrop: FloorTileItemConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorConcreteSmooth
@@ -964,6 +1024,7 @@
itemDrop: FloorTileItemConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorGrayConcrete
@@ -983,6 +1044,7 @@
itemDrop: FloorTileItemGrayConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorGrayConcreteMono
@@ -1002,6 +1064,7 @@
itemDrop: FloorTileItemGrayConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorGrayConcreteSmooth
@@ -1021,6 +1084,7 @@
itemDrop: FloorTileItemGrayConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorOldConcrete
@@ -1040,6 +1104,7 @@
itemDrop: FloorTileItemOldConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorOldConcreteMono
@@ -1059,6 +1124,7 @@
itemDrop: FloorTileItemOldConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
- type: tile
id: FloorOldConcreteSmooth
@@ -1078,6 +1144,7 @@
itemDrop: FloorTileItemOldConcrete
heatCapacity: 10000
weather: true
+ tileRipResistance: 300
# Carpets (non smoothing)
- type: tile
@@ -1094,6 +1161,7 @@
friction: 0.25
itemDrop: FloorTileItemArcadeBlue
heatCapacity: 10000
+ tileRipResistance: 75
- type: tile
id: FloorArcadeBlue2
@@ -1109,6 +1177,7 @@
friction: 0.25
itemDrop: FloorTileItemArcadeBlue2
heatCapacity: 10000
+ tileRipResistance: 75
- type: tile
id: FloorArcadeRed
@@ -1124,6 +1193,7 @@
friction: 0.25
itemDrop: FloorTileItemArcadeRed
heatCapacity: 10000
+ tileRipResistance: 75
- type: tile
id: FloorEighties
@@ -1139,6 +1209,7 @@
friction: 0.25
itemDrop: FloorTileItemEighties
heatCapacity: 10000
+ tileRipResistance: 75
- type: tile
id: FloorCarpetClown
@@ -1154,6 +1225,7 @@
friction: 0.25
itemDrop: FloorTileItemCarpetClown
heatCapacity: 10000
+ tileRipResistance: 75
- type: tile
id: FloorCarpetOffice
@@ -1169,6 +1241,7 @@
friction: 0.25
itemDrop: FloorTileItemCarpetOffice
heatCapacity: 10000
+ tileRipResistance: 75
- type: tile
id: FloorBoxing
@@ -1188,6 +1261,7 @@
friction: 0.25
itemDrop: FloorTileItemBoxing
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorGym
@@ -1207,6 +1281,7 @@
friction: 0.25
itemDrop: FloorTileItemGym
heatCapacity: 10000
+ tileRipResistance: 50
# Shuttle
- type: tile
@@ -1225,6 +1300,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShuttleWhite
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorShuttleGrey
@@ -1243,6 +1319,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShuttleGrey
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorShuttleBlack
@@ -1261,6 +1338,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShuttleBlack
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorShuttleBlue
@@ -1278,6 +1356,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShuttleBlue
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorShuttleOrange
@@ -1295,6 +1374,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShuttleOrange
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorShuttlePurple
@@ -1312,6 +1392,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShuttlePurple
heatCapacity: 10000
+ tileRipResistance: 4500
- type: tile
id: FloorShuttleRed
@@ -1329,6 +1410,7 @@
collection: FootstepFloor
itemDrop: FloorTileItemShuttleRed
heatCapacity: 10000
+ tileRipResistance: 4500
# Materials
@@ -1343,6 +1425,7 @@
collection: FootstepTile
itemDrop: FloorTileItemGold
heatCapacity: 10000
+ tileRipResistance: 600
- type: tile
id: FloorSilver
@@ -1355,6 +1438,7 @@
collection: FootstepTile
itemDrop: FloorTileItemSilver
heatCapacity: 10000
+ tileRipResistance: 500
- type: tile
id: FloorGlass
@@ -1367,6 +1451,7 @@
collection: FootstepTile
itemDrop: SheetGlass1
heatCapacity: 10000
+ tileRipResistance: 150
- type: tile
id: FloorRGlass
@@ -1385,6 +1470,7 @@
collection: FootstepTile
itemDrop: SheetRGlass1
heatCapacity: 10000
+ tileRipResistance: 175
# Circuits
- type: tile
@@ -1398,6 +1484,7 @@
collection: FootstepHull
itemDrop: FloorTileItemGCircuit
heatCapacity: 10000
+ tileRipResistance: 225
- type: tile
id: FloorBlueCircuit
@@ -1410,6 +1497,7 @@
collection: FootstepHull
itemDrop: FloorTileItemBCircuit
heatCapacity: 10000
+ tileRipResistance: 225
# Terrain
- type: tile
@@ -1695,6 +1783,7 @@
itemDrop: FloorTileItemFlesh
friction: 0.05 #slippy
heatCapacity: 10000
+ tileRipResistance: 80
- type: tile
id: FloorTechMaint2
@@ -1707,6 +1796,7 @@
collection: FootstepHull
itemDrop: FloorTileItemSteelMaint
heatCapacity: 10000
+ tileRipResistance: 225
- type: tile
id: FloorTechMaint3
@@ -1725,6 +1815,7 @@
collection: FootstepHull
itemDrop: FloorTileItemGratingMaint
heatCapacity: 10000
+ tileRipResistance: 225
- type: tile
id: FloorWoodTile
@@ -1745,6 +1836,7 @@
collection: BarestepWood
itemDrop: FloorTileItemWoodPattern
heatCapacity: 10000
+ tileRipResistance: 75
- type: tile
id: FloorBrokenWood
@@ -1768,6 +1860,7 @@
collection: BarestepWood
itemDrop: MaterialWoodPlank1
heatCapacity: 10000
+ tileRipResistance: 60
- type: tile
id: FloorWebTile
@@ -1782,6 +1875,7 @@
collection: BarestepCarpet
itemDrop: FloorTileItemWeb
heatCapacity: 10000
+ tileRipResistance: 30
- type: tile
id: FloorChromite
@@ -1813,6 +1907,7 @@
collection: FootstepHull
itemDrop: FloorTileItemSteel #probably should not be normally obtainable, but the game shits itself and dies when you try to put null here
heatCapacity: 10000
+ tileRipResistance: 500
- type: tile
id: FloorHullReinforced
@@ -1825,6 +1920,7 @@
itemDrop: FloorTileItemSteel
heatCapacity: 100000 #/tg/ has this set as "INFINITY." I don't know if that exists here so I've just added an extra 0
indestructible: true
+ reinforced: true
- type: tile
id: FloorReinforcedHardened
@@ -1835,6 +1931,7 @@
footstepSounds:
collection: FootstepHull
itemDrop: FloorTileItemReinforced #same case as FloorHull
+ reinforced: true
# Faux sci tiles
@@ -1866,6 +1963,7 @@
collection: FootstepGrass
itemDrop: FloorTileItemAstroGrass
heatCapacity: 10000
+ tileRipResistance: 50
- type: tile
id: FloorMowedAstroGrass
@@ -1875,6 +1973,7 @@
isSubfloor: false
deconstructTools: [ Cutting ]
itemDrop: FloorTileItemMowedAstroGrass
+ tileRipResistance: 50
- type: tile
id: FloorJungleAstroGrass
@@ -1884,6 +1983,7 @@
isSubfloor: false
deconstructTools: [ Cutting ]
itemDrop: FloorTileItemJungleAstroGrass
+ tileRipResistance: 50
# Ice
- type: tile
@@ -1899,6 +1999,7 @@
mobFrictionNoInput: 0.05
mobAcceleration: 2
itemDrop: FloorTileItemAstroIce
+ tileRipResistance: 50
- type: tile
id: FloorAstroSnow
@@ -1908,6 +2009,7 @@
isSubfloor: false
deconstructTools: [ Prying ]
itemDrop: FloorTileItemAstroSnow
+ tileRipResistance: 50
- type: tile
id: FloorWoodLarge
@@ -1927,4 +2029,5 @@
barestepSounds:
collection: BarestepWood
itemDrop: FloorTileItemWoodLarge
- heatCapacity: 10000
\ No newline at end of file
+ heatCapacity: 10000
+ tileRipResistance: 100