diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Grid.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Grid.cs
index 3ace7a1e96..bb2695edd6 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Grid.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Grid.cs
@@ -770,6 +770,65 @@ namespace Content.Server.Atmos.EntitySystems
#endregion
+ #region Tile Get Heat Capacity
+
+ ///
+ /// Get a tile's heat capacity, based on the tile type, tile contents and tile gas mixture.
+ ///
+ public float GetTileHeatCapacity(EntityCoordinates coordinates)
+ {
+ if (TryGetGridAndTile(coordinates, out var tuple))
+ return GetTileHeatCapacity(tuple.Value.Grid, tuple.Value.Tile);
+
+ return Atmospherics.MinimumHeatCapacity;
+ }
+
+ ///
+ /// Get a tile's heat capacity, based on the tile type, tile contents and tile gas mixture.
+ ///
+ public float GetTileHeatCapacity(GridId grid, Vector2i tile)
+ {
+ // Always return space gas mixtures for invalid grids (grid 0)
+ if (!grid.IsValid())
+ return Atmospherics.MinimumHeatCapacity;
+
+ if (!_mapManager.TryGetGrid(grid, out var mapGrid))
+ return Atmospherics.MinimumHeatCapacity;
+
+ if (EntityManager.TryGetComponent(mapGrid.GridEntityId, out GridAtmosphereComponent? gridAtmosphere))
+ {
+ return GetTileHeatCapacity(gridAtmosphere, tile);
+ }
+
+ if (EntityManager.TryGetComponent(mapGrid.GridEntityId, out SpaceAtmosphereComponent? _))
+ {
+ return Atmospherics.SpaceHeatCapacity;
+ }
+
+ return Atmospherics.MinimumHeatCapacity;
+ }
+
+ ///
+ /// Get a tile's heat capacity, based on the tile type, tile contents and tile gas mixture.
+ ///
+ public float GetTileHeatCapacity(GridAtmosphereComponent gridAtmosphere, Vector2i tile)
+ {
+ if (!gridAtmosphere.Tiles.TryGetValue(tile, out var tileAtmosphere))
+ return Atmospherics.MinimumHeatCapacity;
+
+ return GetTileHeatCapacity(tileAtmosphere);
+ }
+
+ ///
+ /// Get a tile's heat capacity, based on the tile type, tile contents and tile gas mixture.
+ ///
+ public float GetTileHeatCapacity(TileAtmosphere tile)
+ {
+ return tile.HeatCapacity + (tile.Air == null ? 0 : GetHeatCapacity(tile.Air));
+ }
+
+ #endregion
+
#region Adjacent Get Positions
///
diff --git a/Content.Server/Temperature/Systems/TemperatureSystem.cs b/Content.Server/Temperature/Systems/TemperatureSystem.cs
index 5e65955fe5..ea2cbc6a74 100644
--- a/Content.Server/Temperature/Systems/TemperatureSystem.cs
+++ b/Content.Server/Temperature/Systems/TemperatureSystem.cs
@@ -98,7 +98,7 @@ namespace Content.Server.Temperature.Systems
private void OnAtmosExposedUpdate(EntityUid uid, TemperatureComponent temperature, ref AtmosExposedUpdateEvent args)
{
var temperatureDelta = args.GasMixture.Temperature - temperature.CurrentTemperature;
- var tileHeatCapacity = _atmosphereSystem.GetHeatCapacity(args.GasMixture);
+ var tileHeatCapacity = _atmosphereSystem.GetTileHeatCapacity(args.Coordinates);
var heat = temperatureDelta * (tileHeatCapacity * temperature.HeatCapacity / (tileHeatCapacity + temperature.HeatCapacity));
ChangeHeat(uid, heat * temperature.AtmosTemperatureTransferEfficiency, temperature: temperature );
}