Порт атмоса с ЕЕ + пара фиксво (#491)

* fix a lot of spaces in shuttle call reason

* fix tts fatal without api url

* Physics Based Air Throws (#342)

I've made it so that when a room is explosively depressurized(or when a
body of high pressure air flows into one of lower pressure air), that
entities inside are launched by the air pressure with effects according
to their mass. An entity's mass is now used as an innate resistance to
forced movement by airflow, and more massive entities are both less
likely to be launched, and will launch less far than others. While
lighter entities are launched far more easily, and will shoot off into
space quite quickly! Spacing departments has never been so exciting!
This can be made extraordinarily fun if more objects are given the
ability to injure people when colliding with them at high speeds.

As a note, Humans are very unlikely to be sucked into space at a typical
force generated from a 101kpa room venting into 0kpa, unless they
happened to be standing right next to the opening to space when it was
created. The same cannot be said for "Lighter-Than-Human" species such
as Felinids and Harpies. I guess that's just the price to pay for being
cute. :)

On a plus side, because the math behind this is simplified even further
than it was before, this actually runs more efficiently than the
previous system.

Nothing, this is basically done. I've spent a good 6 hours straight
finely tuning the system until I was satisfied that it reflects
something close to reality.

**Before the Space Wind Rework:**

https://github.com/Simple-Station/Einstein-Engines/assets/16548818/0bf56c50-58e6-4aef-97f8-027fbe62331e

**With this Rework:**

https://github.com/Simple-Station/Einstein-Engines/assets/16548818/6be507a9-e9de-4bb8-9d46-8b7c83ed5f1d

🆑 VMSolidus
- add: Atmospheric "Throws" are now calculated using object mass, and
behave accordingly. Tiny objects will shoot out of rooms quite fast!

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>

* fixes

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
This commit is contained in:
ThereDrD0
2024-07-24 22:40:38 +03:00
committed by GitHub
parent c4ed22638b
commit f56e97b122
11 changed files with 262 additions and 87 deletions

View File

@@ -12,9 +12,14 @@ namespace Content.Server.Atmos.EntitySystems
public float SpaceWindPressureForceDivisorPush { get; private set; } public float SpaceWindPressureForceDivisorPush { get; private set; }
public float SpaceWindMaxVelocity { get; private set; } public float SpaceWindMaxVelocity { get; private set; }
public float SpaceWindMaxPushForce { 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 MonstermosEqualization { get; private set; }
public bool MonstermosDepressurization { get; private set; } public bool MonstermosDepressurization { get; private set; }
public bool MonstermosRipTiles { 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 bool GridImpulse { get; private set; }
public float SpacingEscapeRatio { get; private set; } public float SpacingEscapeRatio { get; private set; }
public float SpacingMinGas { 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 AtmosTickRate { get; private set; }
public float Speedup { get; private set; } public float Speedup { get; private set; }
public float HeatScale { get; private set; } public float HeatScale { get; private set; }
public float HumanoidThrowMultiplier { get; private set; }
/// <summary> /// <summary>
/// Time between each atmos sub-update. If you are writing an atmos device, use AtmosDeviceUpdateEvent.dt /// 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.SpaceWindPressureForceDivisorPush, value => SpaceWindPressureForceDivisorPush = value, true);
Subs.CVar(_cfg, CCVars.SpaceWindMaxVelocity, value => SpaceWindMaxVelocity = value, true); Subs.CVar(_cfg, CCVars.SpaceWindMaxVelocity, value => SpaceWindMaxVelocity = value, true);
Subs.CVar(_cfg, CCVars.SpaceWindMaxPushForce, value => SpaceWindMaxPushForce = 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.MonstermosEqualization, value => MonstermosEqualization = value, true);
Subs.CVar(_cfg, CCVars.MonstermosDepressurization, value => MonstermosDepressurization = value, true); Subs.CVar(_cfg, CCVars.MonstermosDepressurization, value => MonstermosDepressurization = value, true);
Subs.CVar(_cfg, CCVars.MonstermosRipTiles, value => MonstermosRipTiles = 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.AtmosGridImpulse, value => GridImpulse = value, true);
Subs.CVar(_cfg, CCVars.AtmosSpacingEscapeRatio, value => SpacingEscapeRatio = value, true); Subs.CVar(_cfg, CCVars.AtmosSpacingEscapeRatio, value => SpacingEscapeRatio = value, true);
Subs.CVar(_cfg, CCVars.AtmosSpacingMinGas, value => SpacingMinGas = 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.AtmosHeatScale, value => { HeatScale = value; InitializeGases(); }, true);
Subs.CVar(_cfg, CCVars.ExcitedGroups, value => ExcitedGroups = value, true); Subs.CVar(_cfg, CCVars.ExcitedGroups, value => ExcitedGroups = value, true);
Subs.CVar(_cfg, CCVars.ExcitedGroupsSpaceIsAllConsuming, value => ExcitedGroupsSpaceIsAllConsuming = value, true); Subs.CVar(_cfg, CCVars.ExcitedGroupsSpaceIsAllConsuming, value => ExcitedGroupsSpaceIsAllConsuming = value, true);
Subs.CVar(_cfg, CCVars.AtmosHumanoidThrowMultiplier, value => HumanoidThrowMultiplier = value, true);
} }
} }
} }

View File

@@ -1,5 +1,6 @@
using Content.Server.Atmos.Components; using Content.Server.Atmos.Components;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Humanoid;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Physics; using Content.Shared.Physics;
using Robust.Shared.Audio; using Robust.Shared.Audio;
@@ -49,8 +50,7 @@ namespace Content.Server.Atmos.EntitySystems
comp.Accumulator = 0f; comp.Accumulator = 0f;
toRemove.Add(ent); toRemove.Add(ent);
if (HasComp<MobStateComponent>(uid) && if (TryComp<PhysicsComponent>(uid, out var body))
TryComp<PhysicsComponent>(uid, out var body))
{ {
_physics.SetBodyStatus(uid, body, BodyStatus.OnGround); _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<FixturesComponent>(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<GridAtmosphereComponent> gridAtmosphere, TileAtmosphere tile, EntityQuery<PhysicsComponent> bodies, EntityQuery<TransformComponent> xforms, EntityQuery<MovedByPressureComponent> pressureQuery, EntityQuery<MetaDataComponent> metas) private void HighPressureMovements(Entity<GridAtmosphereComponent> gridAtmosphere, TileAtmosphere tile, EntityQuery<PhysicsComponent> bodies, EntityQuery<TransformComponent> xforms, EntityQuery<MovedByPressureComponent> pressureQuery, EntityQuery<MetaDataComponent> metas)
{ {
if (tile.PressureDifference < SpaceWindMinimumCalculatedMass * SpaceWindMinimumCalculatedMass)
return;
// TODO ATMOS finish this // TODO ATMOS finish this
// Don't play the space wind sound on tiles that are on fire... // 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; var gridWorldRotation = xforms.GetComponent(gridAtmosphere).WorldRotation;
// If we're using monstermos, smooth out the yeet direction to follow the flow // 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. // 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. // 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), (entity, pressureMovements),
gridAtmosphere.Comp.UpdateCounter, gridAtmosphere.Comp.UpdateCounter,
tile.PressureDifference, tile.PressureDifference,
tile.PressureDirection, 0, tile.PressureDirection,
tile.PressureSpecificTarget != null ? _mapSystem.ToCenterCoordinates(tile.GridIndex, tile.PressureSpecificTarget.GridIndices) : EntityCoordinates.Invalid, tile.PressureSpecificTarget != null ? _mapSystem.ToCenterCoordinates(tile.GridIndex, tile.PressureSpecificTarget.GridIndices) : EntityCoordinates.Invalid,
gridWorldRotation, gridWorldRotation,
xforms.GetComponent(entity), xforms.GetComponent(entity),
@@ -181,12 +165,29 @@ namespace Content.Server.Atmos.EntitySystems
tile.PressureDirection = differenceDirection; 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.
/// <notes>
/// 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
/// </notes>
public void ExperiencePressureDifference( public void ExperiencePressureDifference(
Entity<MovedByPressureComponent> ent, Entity<MovedByPressureComponent> ent,
int cycle, int cycle,
float pressureDifference, float pressureDifference,
AtmosDirection direction, AtmosDirection direction,
float pressureResistanceProbDelta,
EntityCoordinates throwTarget, EntityCoordinates throwTarget,
Angle gridWorldRotation, Angle gridWorldRotation,
TransformComponent? xform = null, TransformComponent? xform = null,
@@ -199,50 +200,28 @@ namespace Content.Server.Atmos.EntitySystems
if (!Resolve(uid, ref xform)) if (!Resolve(uid, ref xform))
return; return;
// TODO ATMOS stuns?
var maxForce = MathF.Sqrt(pressureDifference) * 2.25f; if (physics.BodyType != BodyType.Static
var moveProb = 100f; && !float.IsPositiveInfinity(component.MoveResist))
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 (HasComp<MobStateComponent>(uid)) var moveForce = pressureDifference * MathF.Max(physics.InvMass, SpaceWindMaximumCalculatedInverseMass);
if (HasComp<HumanoidAppearanceComponent>(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 // Grid-rotation adjusted direction
var dirVec = (direction.ToAngle() + gridWorldRotation).ToWorldVec(); 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) if (throwTarget != EntityCoordinates.Invalid)
{ {
var pos = ((throwTarget.ToMap(EntityManager, _transformSystem).Position - xform.WorldPosition).Normalized() + dirVec).Normalized(); var pos = throwTarget.ToMap(EntityManager, _transformSystem).Position - xform.WorldPosition + dirVec;
_physics.ApplyLinearImpulse(uid, pos * moveForce, body: physics); _throwing.TryThrow(uid, pos.Normalized() * MathF.Min(moveForce, SpaceWindMaxVelocity), moveForce);
} }
else else
{ {
moveForce = MathF.Min(moveForce, SpaceWindMaxPushForce); _throwing.TryThrow(uid, dirVec.Normalized() * MathF.Min(moveForce, SpaceWindMaxVelocity), moveForce);
_physics.ApplyLinearImpulse(uid, dirVec * moveForce, body: physics);
} }
component.LastHighPressureMovementAirCycle = cycle; component.LastHighPressureMovementAirCycle = cycle;

View File

@@ -5,11 +5,13 @@ using Content.Server.Doors.Systems;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Atmos.Components; using Content.Shared.Atmos.Components;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Maps;
using Robust.Shared.Map;
using Robust.Shared.Map.Components; using Robust.Shared.Map.Components;
using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Random; using Robust.Shared.Random;
using Robust.Shared.Utility; using Robust.Shared.Utility;
namespace Content.Server.Atmos.EntitySystems namespace Content.Server.Atmos.EntitySystems
{ {
public sealed partial class AtmosphereSystem public sealed partial class AtmosphereSystem
@@ -137,7 +139,7 @@ namespace Content.Server.Atmos.EntitySystems
var logN = MathF.Log2(tileCount); 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) // 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. // Even if it fails, it will speed up the next part.
Array.Sort(_equalizeTiles, 0, tileCount, _monstermosComparer); Array.Sort(_equalizeTiles, 0, tileCount, _monstermosComparer);
@@ -550,7 +552,8 @@ namespace Content.Server.Atmos.EntitySystems
} }
InvalidateVisuals(ent, otherTile); InvalidateVisuals(ent, otherTile);
HandleDecompressionFloorRip(mapGrid, otherTile, otherTile.MonstermosInfo.CurrentTransferAmount); if (MonstermosRipTiles && otherTile.PressureDifference > MonstermosRipTilesMinimumPressure)
HandleDecompressionFloorRip(mapGrid, otherTile, otherTile.PressureDifference);
} }
if (GridImpulse && tileCount > 0) if (GridImpulse && tileCount > 0)
@@ -682,14 +685,14 @@ namespace Content.Server.Atmos.EntitySystems
adj.MonstermosInfo[idx.ToOppositeDir()] -= amount; 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; return;
var tileref = tileRef.Tile;
var chance = MathHelper.Clamp(0.01f + (sum / SpacingMaxWind) * 0.3f, 0.003f, 0.3f); var tileDef = (ContentTileDefinition) _tileDefinitionManager[tileref.TypeId];
if (!tileDef.Reinforced && tileDef.TileRipResistance < delta * MonstermosRipTilesPressureOffset)
if (sum > 20 && _robustRandom.Prob(chance))
PryTile(mapGrid, tile.GridIndices); PryTile(mapGrid, tile.GridIndices);
} }

View File

@@ -6,6 +6,7 @@ using Content.Server.NodeContainer.EntitySystems;
using Content.Shared.Atmos.EntitySystems; using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Doors.Components; using Content.Shared.Doors.Components;
using Content.Shared.Maps; using Content.Shared.Maps;
using Content.Shared.Throwing;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
@@ -37,6 +38,7 @@ public sealed partial class AtmosphereSystem : SharedAtmosphereSystem
[Dependency] private readonly TileSystem _tile = default!; [Dependency] private readonly TileSystem _tile = default!;
[Dependency] private readonly MapSystem _map = default!; [Dependency] private readonly MapSystem _map = default!;
[Dependency] public readonly PuddleSystem Puddle = default!; [Dependency] public readonly PuddleSystem Puddle = default!;
[Dependency] private readonly ThrowingSystem _throwing = default!;
private const float ExposedUpdateDelay = 1f; private const float ExposedUpdateDelay = 1f;
private float _exposedTimer = 0f; private float _exposedTimer = 0f;

View File

@@ -171,8 +171,9 @@ public sealed class TemperatureSystem : EntitySystem
{ {
return Atmospherics.MinimumHeatCapacity; return Atmospherics.MinimumHeatCapacity;
} }
if (physics.Mass < 1)
return comp.SpecificHeat * physics.FixturesMass; return comp.SpecificHeat;
else return comp.SpecificHeat * physics.FixturesMass;
} }
private void OnInit(EntityUid uid, InternalTemperatureComponent comp, MapInitEvent args) private void OnInit(EntityUid uid, InternalTemperatureComponent comp, MapInitEvent args)

View File

@@ -63,9 +63,10 @@ public sealed class TTSManager
{ {
var url = _cfg.GetCVar(WhiteCVars.TtsApiUrl); var url = _cfg.GetCVar(WhiteCVars.TtsApiUrl);
var maxCacheSize = _cfg.GetCVar(WhiteCVars.TtsMaxCacheSize); 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(); WantedCount.Inc();
@@ -193,4 +194,4 @@ public sealed class TTSManager
[JsonPropertyName("audio")] [JsonPropertyName("audio")]
public string Audio { get; set; } public string Audio { get; set; }
} }
} }

View File

@@ -1054,7 +1054,7 @@ namespace Content.Shared.CCVar
/// Useful to prevent clipping through objects. /// Useful to prevent clipping through objects.
/// </summary> /// </summary>
public static readonly CVarDef<float> SpaceWindMaxVelocity = public static readonly CVarDef<float> SpaceWindMaxVelocity =
CVarDef.Create("atmos.space_wind_max_velocity", 30f, CVar.SERVERONLY); CVarDef.Create("atmos.space_wind_max_velocity", 15f, CVar.SERVERONLY);
/// <summary> /// <summary>
/// The maximum force that may be applied to an object by pushing (i.e. not throwing) atmospheric pressure differences. /// 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<float> SpaceWindMaxPushForce = public static readonly CVarDef<float> SpaceWindMaxPushForce =
CVarDef.Create("atmos.space_wind_max_push_force", 20f, CVar.SERVERONLY); CVarDef.Create("atmos.space_wind_max_push_force", 20f, CVar.SERVERONLY);
/// <summary>
/// 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
/// </summary>
/// <remarks>
/// 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? :)
/// </remarks>
public static readonly CVarDef<float> SpaceWindMinimumCalculatedMass =
CVarDef.Create("atmos.space_wind_minimum_calculated_mass", 10f, CVar.SERVERONLY);
/// <summary>
/// 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.
/// </summary>
public static readonly CVarDef<float> SpaceWindMaximumCalculatedInverseMass =
CVarDef.Create("atmos.space_wind_maximum_calculated_inverse_mass", 0.04f, CVar.SERVERONLY);
/// <summary> /// <summary>
/// Whether monstermos tile equalization is enabled. /// Whether monstermos tile equalization is enabled.
/// </summary> /// </summary>
@@ -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. /// Also looks weird on slow spacing for unrelated reasons. If you do want to enable this, you should probably turn on instaspacing.
/// </summary> /// </summary>
public static readonly CVarDef<bool> MonstermosRipTiles = public static readonly CVarDef<bool> MonstermosRipTiles =
CVarDef.Create("atmos.monstermos_rip_tiles", false, CVar.SERVERONLY); CVarDef.Create("atmos.monstermos_rip_tiles", true, CVar.SERVERONLY);
/// <summary>
/// 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
/// </summary>
public static readonly CVarDef<float> MonstermosRipTilesMinimumPressure =
CVarDef.Create("atmos.monstermos_rip_tiles_min_pressure", 7500f, CVar.SERVERONLY);
/// <summary>
/// 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
/// </summary>
public static readonly CVarDef<float> MonstermosRipTilesPressureOffset =
CVarDef.Create("atmos.monstermos_rip_tiles_pressure_offset", 0.44f, CVar.SERVERONLY);
/// <summary> /// <summary>
/// Whether explosive depressurization will cause the grid to gain an impulse. /// Whether explosive depressurization will cause the grid to gain an impulse.
@@ -1115,6 +1147,13 @@ namespace Content.Shared.CCVar
public static readonly CVarDef<float> AtmosSpacingMaxWind = public static readonly CVarDef<float> AtmosSpacingMaxWind =
CVarDef.Create("atmos.mmos_max_wind", 500f, CVar.SERVERONLY); CVarDef.Create("atmos.mmos_max_wind", 500f, CVar.SERVERONLY);
/// <summary>
/// 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.
/// </summary>
public static readonly CVarDef<bool> MonstermosUseExpensiveAirflow =
CVarDef.Create("atmos.mmos_expensive_airflow", true, CVar.SERVERONLY);
/// <summary> /// <summary>
/// Whether atmos superconduction is enabled. /// Whether atmos superconduction is enabled.
/// </summary> /// </summary>
@@ -1171,6 +1210,13 @@ namespace Content.Shared.CCVar
public static readonly CVarDef<float> AtmosHeatScale = public static readonly CVarDef<float> AtmosHeatScale =
CVarDef.Create("atmos.heat_scale", 8f, CVar.SERVERONLY); CVarDef.Create("atmos.heat_scale", 8f, CVar.SERVERONLY);
/// <summary>
/// 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.
/// </summary>
public static readonly CVarDef<float> AtmosHumanoidThrowMultiplier =
CVarDef.Create("atmos.humanoid_throw_multiplier", 2f, CVar.SERVERONLY);
/* /*
* MIDI instruments * MIDI instruments
*/ */

View File

@@ -117,5 +117,11 @@ namespace Content.Shared.Maps
{ {
TileId = id; TileId = id;
} }
[DataField]
public bool Reinforced = false;
[DataField]
public float TileRipResistance = 125f;
} }
} }

View File

@@ -2,4 +2,4 @@
round-end-system-shuttle-called-announcement-reason = round-end-system-shuttle-called-announcement-reason =
Эвакуационный шаттл был вызван. Он прибудет через: {$time} {$units}. Эвакуационный шаттл был вызван. Он прибудет через: {$time} {$units}.
Причина: {$reason} Причина: {$reason}

View File

@@ -22,7 +22,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.25 radius: 0.25
density: 10 density: 0.8
mask: mask:
- FlyingMobMask - FlyingMobMask
layer: layer:
@@ -89,7 +89,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.1 radius: 0.1
density: 30 density: 0.1
mask: mask:
- FlyingMobMask - FlyingMobMask
layer: layer:
@@ -325,7 +325,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.2 radius: 0.2
density: 100 density: 0.0007
mask: mask:
- SmallMobMask - SmallMobMask
layer: layer:
@@ -428,7 +428,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.2 radius: 0.2
density: 120 density: 0.007
mask: mask:
- SmallMobMask - SmallMobMask
layer: layer:
@@ -1518,7 +1518,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.2 radius: 0.2
density: 100 density: 0.76
mask: mask:
- SmallMobMask - SmallMobMask
layer: layer:
@@ -2450,7 +2450,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.35 radius: 0.35
density: 50 #They actually are pretty light, I looked it up density: 16.66
mask: mask:
- MobMask - MobMask
layer: layer:
@@ -2527,7 +2527,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.35 radius: 0.35
density: 50 density: 25.5
mask: mask:
- MobMask - MobMask
layer: layer:
@@ -2676,7 +2676,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.35 radius: 0.35
density: 15 density: 9
mask: mask:
- MobMask - MobMask
layer: layer:
@@ -2822,6 +2822,17 @@
Base: caracal_flop Base: caracal_flop
Dead: Dead:
Base: caracal_dead Base: caracal_dead
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
density: 30
mask:
- MobMask
layer:
- MobLayer
- type: entity - type: entity
name: kitten name: kitten
@@ -2855,6 +2866,17 @@
thresholds: thresholds:
0: Alive 0: Alive
25: Dead 25: Dead
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
density: 2
mask:
- MobMask
layer:
- MobLayer
- type: entity - type: entity
name: sloth name: sloth
@@ -2935,7 +2957,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.35 radius: 0.35
density: 5 density: 4
mask: mask:
- MobMask - MobMask
layer: layer:
@@ -3012,7 +3034,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.2 radius: 0.2
density: 120 density: 0.8
mask: mask:
- SmallMobMask - SmallMobMask
layer: layer:
@@ -3134,7 +3156,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.35 radius: 0.35
density: 250 density: 750
mask: mask:
- MobMask - MobMask
layer: layer:
@@ -3219,7 +3241,7 @@
shape: shape:
!type:PhysShapeCircle !type:PhysShapeCircle
radius: 0.35 radius: 0.35
density: 100 # High, because wood is heavy. density: 15
mask: mask:
- MobMask - MobMask
layer: layer:

View File

@@ -15,6 +15,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelCheckerLight id: FloorSteelCheckerLight
@@ -33,6 +34,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteelCheckerLight itemDrop: FloorTileItemSteelCheckerLight
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelCheckerDark id: FloorSteelCheckerDark
@@ -51,6 +53,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteelCheckerDark itemDrop: FloorTileItemSteelCheckerDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelMini id: FloorSteelMini
@@ -69,6 +72,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelPavement id: FloorSteelPavement
@@ -87,6 +91,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelDiagonal id: FloorSteelDiagonal
@@ -105,6 +110,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelOffset id: FloorSteelOffset
@@ -117,6 +123,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelMono id: FloorSteelMono
@@ -135,6 +142,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelPavementVertical id: FloorSteelPavementVertical
@@ -153,6 +161,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelHerringbone id: FloorSteelHerringbone
@@ -171,6 +180,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorSteelDiagonalMini id: FloorSteelDiagonalMini
@@ -189,6 +199,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorBrassFilled id: FloorBrassFilled
@@ -201,7 +212,8 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemBrassFilled itemDrop: FloorTileItemBrassFilled
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 220
- type: tile - type: tile
id: FloorBrassReebe id: FloorBrassReebe
name: tiles-brass-floor-reebe name: tiles-brass-floor-reebe
@@ -213,6 +225,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemBrassReebe itemDrop: FloorTileItemBrassReebe
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 220
- type: tile - type: tile
id: FloorPlastic id: FloorPlastic
@@ -231,6 +244,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteel itemDrop: FloorTileItemSteel
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWood id: FloorWood
@@ -251,6 +265,7 @@
collection: BarestepWood collection: BarestepWood
itemDrop: FloorTileItemWood itemDrop: FloorTileItemWood
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhite id: FloorWhite
@@ -269,6 +284,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhiteMini id: FloorWhiteMini
@@ -287,6 +303,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhitePavement id: FloorWhitePavement
@@ -305,6 +322,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhiteDiagonal id: FloorWhiteDiagonal
@@ -323,6 +341,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhiteOffset id: FloorWhiteOffset
@@ -335,6 +354,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhiteMono id: FloorWhiteMono
@@ -353,6 +373,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhitePavementVertical id: FloorWhitePavementVertical
@@ -371,6 +392,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhiteHerringbone id: FloorWhiteHerringbone
@@ -389,6 +411,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhiteDiagonalMini id: FloorWhiteDiagonalMini
@@ -407,6 +430,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorWhitePlastic id: FloorWhitePlastic
@@ -425,6 +449,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemWhite itemDrop: FloorTileItemWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorDark id: FloorDark
@@ -443,6 +468,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkMini id: FloorDarkMini
@@ -461,6 +487,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkPavement id: FloorDarkPavement
@@ -479,6 +506,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkDiagonal id: FloorDarkDiagonal
@@ -497,6 +525,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkOffset id: FloorDarkOffset
@@ -509,6 +538,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkMono id: FloorDarkMono
@@ -527,6 +557,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkPavementVertical id: FloorDarkPavementVertical
@@ -545,6 +576,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkHerringbone id: FloorDarkHerringbone
@@ -563,6 +595,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkDiagonalMini id: FloorDarkDiagonalMini
@@ -581,6 +614,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorDarkPlastic id: FloorDarkPlastic
@@ -599,6 +633,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemDark itemDrop: FloorTileItemDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorTechMaint id: FloorTechMaint
@@ -611,6 +646,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemTechmaint itemDrop: FloorTileItemTechmaint
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 250
- type: tile - type: tile
id: FloorReinforced id: FloorReinforced
@@ -623,6 +659,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemReinforced itemDrop: FloorTileItemReinforced
heatCapacity: 10000 heatCapacity: 10000
reinforced: true
- type: tile - type: tile
id: FloorMono id: FloorMono
@@ -635,6 +672,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemMono itemDrop: FloorTileItemMono
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorLino id: FloorLino
@@ -647,6 +685,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemLino itemDrop: FloorTileItemLino
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorSteelDirty id: FloorSteelDirty
@@ -659,6 +698,7 @@
collection: FootstepPlating collection: FootstepPlating
itemDrop: FloorTileItemDirty itemDrop: FloorTileItemDirty
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorElevatorShaft id: FloorElevatorShaft
@@ -671,6 +711,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemElevatorShaft itemDrop: FloorTileItemElevatorShaft
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorMetalDiamond id: FloorMetalDiamond
@@ -683,6 +724,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemMetalDiamond itemDrop: FloorTileItemMetalDiamond
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorRockVault id: FloorRockVault
@@ -695,6 +737,7 @@
collection: FootstepAsteroid collection: FootstepAsteroid
itemDrop: FloorTileItemRockVault itemDrop: FloorTileItemRockVault
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 400
- type: tile - type: tile
id: FloorBlue id: FloorBlue
@@ -707,6 +750,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemBlue itemDrop: FloorTileItemBlue
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorSteelLime id: FloorSteelLime
@@ -725,6 +769,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemLime itemDrop: FloorTileItemLime
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorMining id: FloorMining
@@ -737,6 +782,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemMining itemDrop: FloorTileItemMining
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 250
- type: tile - type: tile
id: FloorMiningDark id: FloorMiningDark
@@ -749,6 +795,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemMiningDark itemDrop: FloorTileItemMiningDark
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 250
- type: tile - type: tile
id: FloorMiningLight id: FloorMiningLight
@@ -761,6 +808,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemMiningLight itemDrop: FloorTileItemMiningLight
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 250
# Departamental # Departamental
- type: tile - type: tile
@@ -774,6 +822,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemFreezer itemDrop: FloorTileItemFreezer
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorShowroom id: FloorShowroom
@@ -792,6 +841,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShowroom itemDrop: FloorTileItemShowroom
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorHydro id: FloorHydro
@@ -804,6 +854,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemHydro itemDrop: FloorTileItemHydro
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorBar id: FloorBar
@@ -822,6 +873,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemBar itemDrop: FloorTileItemBar
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100
- type: tile - type: tile
id: FloorClown id: FloorClown
@@ -834,6 +886,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemClown itemDrop: FloorTileItemClown
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorMime id: FloorMime
@@ -846,6 +899,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemMime itemDrop: FloorTileItemMime
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorKitchen id: FloorKitchen
@@ -858,6 +912,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemKitchen itemDrop: FloorTileItemKitchen
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorLaundry id: FloorLaundry
@@ -870,6 +925,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemLaundry itemDrop: FloorTileItemLaundry
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorSteelDamaged id: FloorSteelDamaged
@@ -889,6 +945,7 @@
collection: FootstepFloor 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. 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 heatCapacity: 10000
tileRipResistance: 175
- type: tile - type: tile
id: FloorSteelBurnt id: FloorSteelBurnt
@@ -905,6 +962,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemSteel #Same case as FloorSteelDamaged, make it null when possible itemDrop: FloorTileItemSteel #Same case as FloorSteelDamaged, make it null when possible
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 175
# Concrete # Concrete
@@ -926,6 +984,7 @@
itemDrop: FloorTileItemConcrete itemDrop: FloorTileItemConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorConcreteMono id: FloorConcreteMono
@@ -945,6 +1004,7 @@
itemDrop: FloorTileItemConcrete itemDrop: FloorTileItemConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorConcreteSmooth id: FloorConcreteSmooth
@@ -964,6 +1024,7 @@
itemDrop: FloorTileItemConcrete itemDrop: FloorTileItemConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorGrayConcrete id: FloorGrayConcrete
@@ -983,6 +1044,7 @@
itemDrop: FloorTileItemGrayConcrete itemDrop: FloorTileItemGrayConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorGrayConcreteMono id: FloorGrayConcreteMono
@@ -1002,6 +1064,7 @@
itemDrop: FloorTileItemGrayConcrete itemDrop: FloorTileItemGrayConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorGrayConcreteSmooth id: FloorGrayConcreteSmooth
@@ -1021,6 +1084,7 @@
itemDrop: FloorTileItemGrayConcrete itemDrop: FloorTileItemGrayConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorOldConcrete id: FloorOldConcrete
@@ -1040,6 +1104,7 @@
itemDrop: FloorTileItemOldConcrete itemDrop: FloorTileItemOldConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorOldConcreteMono id: FloorOldConcreteMono
@@ -1059,6 +1124,7 @@
itemDrop: FloorTileItemOldConcrete itemDrop: FloorTileItemOldConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
- type: tile - type: tile
id: FloorOldConcreteSmooth id: FloorOldConcreteSmooth
@@ -1078,6 +1144,7 @@
itemDrop: FloorTileItemOldConcrete itemDrop: FloorTileItemOldConcrete
heatCapacity: 10000 heatCapacity: 10000
weather: true weather: true
tileRipResistance: 300
# Carpets (non smoothing) # Carpets (non smoothing)
- type: tile - type: tile
@@ -1094,6 +1161,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemArcadeBlue itemDrop: FloorTileItemArcadeBlue
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 75
- type: tile - type: tile
id: FloorArcadeBlue2 id: FloorArcadeBlue2
@@ -1109,6 +1177,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemArcadeBlue2 itemDrop: FloorTileItemArcadeBlue2
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 75
- type: tile - type: tile
id: FloorArcadeRed id: FloorArcadeRed
@@ -1124,6 +1193,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemArcadeRed itemDrop: FloorTileItemArcadeRed
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 75
- type: tile - type: tile
id: FloorEighties id: FloorEighties
@@ -1139,6 +1209,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemEighties itemDrop: FloorTileItemEighties
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 75
- type: tile - type: tile
id: FloorCarpetClown id: FloorCarpetClown
@@ -1154,6 +1225,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemCarpetClown itemDrop: FloorTileItemCarpetClown
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 75
- type: tile - type: tile
id: FloorCarpetOffice id: FloorCarpetOffice
@@ -1169,6 +1241,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemCarpetOffice itemDrop: FloorTileItemCarpetOffice
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 75
- type: tile - type: tile
id: FloorBoxing id: FloorBoxing
@@ -1188,6 +1261,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemBoxing itemDrop: FloorTileItemBoxing
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorGym id: FloorGym
@@ -1207,6 +1281,7 @@
friction: 0.25 friction: 0.25
itemDrop: FloorTileItemGym itemDrop: FloorTileItemGym
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
# Shuttle # Shuttle
- type: tile - type: tile
@@ -1225,6 +1300,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShuttleWhite itemDrop: FloorTileItemShuttleWhite
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorShuttleGrey id: FloorShuttleGrey
@@ -1243,6 +1319,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShuttleGrey itemDrop: FloorTileItemShuttleGrey
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorShuttleBlack id: FloorShuttleBlack
@@ -1261,6 +1338,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShuttleBlack itemDrop: FloorTileItemShuttleBlack
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorShuttleBlue id: FloorShuttleBlue
@@ -1278,6 +1356,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShuttleBlue itemDrop: FloorTileItemShuttleBlue
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorShuttleOrange id: FloorShuttleOrange
@@ -1295,6 +1374,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShuttleOrange itemDrop: FloorTileItemShuttleOrange
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorShuttlePurple id: FloorShuttlePurple
@@ -1312,6 +1392,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShuttlePurple itemDrop: FloorTileItemShuttlePurple
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
- type: tile - type: tile
id: FloorShuttleRed id: FloorShuttleRed
@@ -1329,6 +1410,7 @@
collection: FootstepFloor collection: FootstepFloor
itemDrop: FloorTileItemShuttleRed itemDrop: FloorTileItemShuttleRed
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 4500
# Materials # Materials
@@ -1343,6 +1425,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemGold itemDrop: FloorTileItemGold
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 600
- type: tile - type: tile
id: FloorSilver id: FloorSilver
@@ -1355,6 +1438,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: FloorTileItemSilver itemDrop: FloorTileItemSilver
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 500
- type: tile - type: tile
id: FloorGlass id: FloorGlass
@@ -1367,6 +1451,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: SheetGlass1 itemDrop: SheetGlass1
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 150
- type: tile - type: tile
id: FloorRGlass id: FloorRGlass
@@ -1385,6 +1470,7 @@
collection: FootstepTile collection: FootstepTile
itemDrop: SheetRGlass1 itemDrop: SheetRGlass1
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 175
# Circuits # Circuits
- type: tile - type: tile
@@ -1398,6 +1484,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemGCircuit itemDrop: FloorTileItemGCircuit
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 225
- type: tile - type: tile
id: FloorBlueCircuit id: FloorBlueCircuit
@@ -1410,6 +1497,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemBCircuit itemDrop: FloorTileItemBCircuit
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 225
# Terrain # Terrain
- type: tile - type: tile
@@ -1695,6 +1783,7 @@
itemDrop: FloorTileItemFlesh itemDrop: FloorTileItemFlesh
friction: 0.05 #slippy friction: 0.05 #slippy
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 80
- type: tile - type: tile
id: FloorTechMaint2 id: FloorTechMaint2
@@ -1707,6 +1796,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemSteelMaint itemDrop: FloorTileItemSteelMaint
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 225
- type: tile - type: tile
id: FloorTechMaint3 id: FloorTechMaint3
@@ -1725,6 +1815,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemGratingMaint itemDrop: FloorTileItemGratingMaint
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 225
- type: tile - type: tile
id: FloorWoodTile id: FloorWoodTile
@@ -1745,6 +1836,7 @@
collection: BarestepWood collection: BarestepWood
itemDrop: FloorTileItemWoodPattern itemDrop: FloorTileItemWoodPattern
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 75
- type: tile - type: tile
id: FloorBrokenWood id: FloorBrokenWood
@@ -1768,6 +1860,7 @@
collection: BarestepWood collection: BarestepWood
itemDrop: MaterialWoodPlank1 itemDrop: MaterialWoodPlank1
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 60
- type: tile - type: tile
id: FloorWebTile id: FloorWebTile
@@ -1782,6 +1875,7 @@
collection: BarestepCarpet collection: BarestepCarpet
itemDrop: FloorTileItemWeb itemDrop: FloorTileItemWeb
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 30
- type: tile - type: tile
id: FloorChromite id: FloorChromite
@@ -1813,6 +1907,7 @@
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemSteel #probably should not be normally obtainable, but the game shits itself and dies when you try to put null here itemDrop: FloorTileItemSteel #probably should not be normally obtainable, but the game shits itself and dies when you try to put null here
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 500
- type: tile - type: tile
id: FloorHullReinforced id: FloorHullReinforced
@@ -1825,6 +1920,7 @@
itemDrop: FloorTileItemSteel 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 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 indestructible: true
reinforced: true
- type: tile - type: tile
id: FloorReinforcedHardened id: FloorReinforcedHardened
@@ -1835,6 +1931,7 @@
footstepSounds: footstepSounds:
collection: FootstepHull collection: FootstepHull
itemDrop: FloorTileItemReinforced #same case as FloorHull itemDrop: FloorTileItemReinforced #same case as FloorHull
reinforced: true
# Faux sci tiles # Faux sci tiles
@@ -1866,6 +1963,7 @@
collection: FootstepGrass collection: FootstepGrass
itemDrop: FloorTileItemAstroGrass itemDrop: FloorTileItemAstroGrass
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 50
- type: tile - type: tile
id: FloorMowedAstroGrass id: FloorMowedAstroGrass
@@ -1875,6 +1973,7 @@
isSubfloor: false isSubfloor: false
deconstructTools: [ Cutting ] deconstructTools: [ Cutting ]
itemDrop: FloorTileItemMowedAstroGrass itemDrop: FloorTileItemMowedAstroGrass
tileRipResistance: 50
- type: tile - type: tile
id: FloorJungleAstroGrass id: FloorJungleAstroGrass
@@ -1884,6 +1983,7 @@
isSubfloor: false isSubfloor: false
deconstructTools: [ Cutting ] deconstructTools: [ Cutting ]
itemDrop: FloorTileItemJungleAstroGrass itemDrop: FloorTileItemJungleAstroGrass
tileRipResistance: 50
# Ice # Ice
- type: tile - type: tile
@@ -1899,6 +1999,7 @@
mobFrictionNoInput: 0.05 mobFrictionNoInput: 0.05
mobAcceleration: 2 mobAcceleration: 2
itemDrop: FloorTileItemAstroIce itemDrop: FloorTileItemAstroIce
tileRipResistance: 50
- type: tile - type: tile
id: FloorAstroSnow id: FloorAstroSnow
@@ -1908,6 +2009,7 @@
isSubfloor: false isSubfloor: false
deconstructTools: [ Prying ] deconstructTools: [ Prying ]
itemDrop: FloorTileItemAstroSnow itemDrop: FloorTileItemAstroSnow
tileRipResistance: 50
- type: tile - type: tile
id: FloorWoodLarge id: FloorWoodLarge
@@ -1927,4 +2029,5 @@
barestepSounds: barestepSounds:
collection: BarestepWood collection: BarestepWood
itemDrop: FloorTileItemWoodLarge itemDrop: FloorTileItemWoodLarge
heatCapacity: 10000 heatCapacity: 10000
tileRipResistance: 100