CVar for explosive depressurization tile ripping.
This commit is contained in:
@@ -12,6 +12,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
public string? SpaceWindSound { get; private set; }
|
||||
public bool MonstermosEqualization { get; private set; }
|
||||
public bool MonstermosDepressurization { get; private set; }
|
||||
public bool MonstermosRipTiles { get; private set; }
|
||||
public bool Superconduction { get; private set; }
|
||||
public bool ExcitedGroupsSpaceIsAllConsuming { get; private set; }
|
||||
public float AtmosMaxProcessTime { get; private set; }
|
||||
@@ -24,6 +25,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
_cfg.OnValueChanged(CCVars.SpaceWindSound, value => SpaceWindSound = value, true);
|
||||
_cfg.OnValueChanged(CCVars.MonstermosEqualization, value => MonstermosEqualization = value, true);
|
||||
_cfg.OnValueChanged(CCVars.MonstermosDepressurization, value => MonstermosDepressurization = value, true);
|
||||
_cfg.OnValueChanged(CCVars.MonstermosRipTiles, value => MonstermosRipTiles = value, true);
|
||||
_cfg.OnValueChanged(CCVars.Superconduction, value => Superconduction = value, true);
|
||||
_cfg.OnValueChanged(CCVars.AtmosMaxProcessTime, value => AtmosMaxProcessTime = value, true);
|
||||
_cfg.OnValueChanged(CCVars.AtmosTickRate, value => AtmosTickRate = value, true);
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
excitedGroup.DismantleCooldown = 0;
|
||||
}
|
||||
|
||||
private void ExcitedGroupSelfBreakdown(GridAtmosphereComponent gridAtmosphere, ExcitedGroup excitedGroup, bool spaceIsAllConsuming = false)
|
||||
private void ExcitedGroupSelfBreakdown(GridAtmosphereComponent gridAtmosphere, ExcitedGroup excitedGroup)
|
||||
{
|
||||
DebugTools.Assert(!excitedGroup.Disposed, "Excited group is disposed!");
|
||||
DebugTools.Assert(gridAtmosphere.ExcitedGroups.Contains(excitedGroup), "Grid Atmosphere does not contain Excited Group!");
|
||||
@@ -87,7 +87,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
|
||||
Merge(combined, tile.Air);
|
||||
|
||||
if (!spaceIsAllConsuming || !tile.Air.Immutable)
|
||||
if (!ExcitedGroupsSpaceIsAllConsuming || !tile.Air.Immutable)
|
||||
continue;
|
||||
|
||||
combined.Clear();
|
||||
|
||||
@@ -353,25 +353,12 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
|
||||
#region Tile Pry
|
||||
|
||||
/// <summary>
|
||||
/// Pries a tile in a grid.
|
||||
/// </summary>
|
||||
/// <param name="grid">The grid in question.</param>
|
||||
/// <param name="tile">The indices of the tile.</param>
|
||||
public void PryTile(GridId grid, Vector2i tile)
|
||||
{
|
||||
if (!_mapManager.TryGetGrid(grid, out var mapGrid))
|
||||
return;
|
||||
|
||||
PryTile(mapGrid, tile);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pries a tile in a grid.
|
||||
/// </summary>
|
||||
/// <param name="mapGrid">The grid in question.</param>
|
||||
/// <param name="tile">The indices of the tile.</param>
|
||||
public void PryTile(IMapGrid mapGrid, Vector2i tile)
|
||||
private void PryTile(IMapGrid mapGrid, Vector2i tile)
|
||||
{
|
||||
if (!mapGrid.TryGetTileRef(tile, out var tileRef))
|
||||
return;
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
return;
|
||||
}
|
||||
|
||||
PerformHotspotExposure(gridAtmosphere, tile);
|
||||
PerformHotspotExposure(tile);
|
||||
|
||||
if (tile.Hotspot.Bypassing)
|
||||
{
|
||||
@@ -118,7 +118,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
}
|
||||
}
|
||||
|
||||
private void PerformHotspotExposure(GridAtmosphereComponent gridAtmosphere, TileAtmosphere tile)
|
||||
private void PerformHotspotExposure(TileAtmosphere tile)
|
||||
{
|
||||
if (tile.Air == null || !tile.Hotspot.Valid) return;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
{
|
||||
public partial class AtmosphereSystem
|
||||
{
|
||||
private void ProcessCell(GridAtmosphereComponent gridAtmosphere, TileAtmosphere tile, int fireCount, bool spaceWind = true)
|
||||
private void ProcessCell(GridAtmosphereComponent gridAtmosphere, TileAtmosphere tile, int fireCount)
|
||||
{
|
||||
// Can't process a tile without air
|
||||
if (tile.Air == null)
|
||||
@@ -79,7 +79,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
{
|
||||
var difference = Share(tile.Air!, enemyTile.Air!, adjacentTileLength);
|
||||
|
||||
if (spaceWind)
|
||||
if (SpaceWind)
|
||||
{
|
||||
if (difference > 0)
|
||||
{
|
||||
|
||||
@@ -554,6 +554,9 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
|
||||
private void HandleDecompressionFloorRip(IMapGrid mapGrid, TileAtmosphere tile, float sum)
|
||||
{
|
||||
if (!MonstermosRipTiles)
|
||||
return;
|
||||
|
||||
var chance = MathHelper.Clamp(sum / 500, 0.005f, 0.5f);
|
||||
|
||||
if (sum > 20 && _robustRandom.Prob(chance))
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
var number = 0;
|
||||
while (atmosphere.CurrentRunTiles.TryDequeue(out var tile))
|
||||
{
|
||||
ProcessCell(atmosphere, tile, atmosphere.UpdateCounter, SpaceWind);
|
||||
ProcessCell(atmosphere, tile, atmosphere.UpdateCounter);
|
||||
|
||||
if (number++ < LagCheckIterations) continue;
|
||||
number = 0;
|
||||
@@ -90,7 +90,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
excitedGroup.DismantleCooldown++;
|
||||
|
||||
if(excitedGroup.BreakdownCooldown > Atmospherics.ExcitedGroupBreakdownCycles)
|
||||
ExcitedGroupSelfBreakdown(gridAtmosphere, excitedGroup, ExcitedGroupsSpaceIsAllConsuming);
|
||||
ExcitedGroupSelfBreakdown(gridAtmosphere, excitedGroup);
|
||||
|
||||
else if(excitedGroup.DismantleCooldown > Atmospherics.ExcitedGroupsDismantleCycles)
|
||||
ExcitedGroupDismantle(gridAtmosphere, excitedGroup);
|
||||
|
||||
@@ -262,6 +262,13 @@ namespace Content.Shared.CCVar
|
||||
public static readonly CVarDef<bool> MonstermosDepressurization =
|
||||
CVarDef.Create<bool>("atmos.monstermos_depressurization", true, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Whether monstermos explosive depressurization will rip tiles..
|
||||
/// Needs <see cref="MonstermosEqualization"/> and <see cref="MonstermosDepressurization"/> to be enabled to work.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<bool> MonstermosRipTiles =
|
||||
CVarDef.Create<bool>("atmos.monstermos_rip_tiles", true, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Whether atmos superconduction is enabled.
|
||||
/// </summary>
|
||||
@@ -269,6 +276,14 @@ namespace Content.Shared.CCVar
|
||||
public static readonly CVarDef<bool> Superconduction =
|
||||
CVarDef.Create("atmos.superconduction", false, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Whether all tiles in an excited group will clear themselves once being exposed to space.
|
||||
/// Similar to <see cref="MonstermosDepressurization"/>, without none of the tile ripping or
|
||||
/// things being thrown around very violently.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<bool> ExcitedGroupsSpaceIsAllConsuming =
|
||||
CVarDef.Create("atmos.excited_groups_space_is_all_consuming", false, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Maximum time in milliseconds that atmos can take processing.
|
||||
/// </summary>
|
||||
@@ -281,9 +296,6 @@ namespace Content.Shared.CCVar
|
||||
public static readonly CVarDef<float> AtmosTickRate =
|
||||
CVarDef.Create("atmos.tickrate", 26f, CVar.SERVERONLY);
|
||||
|
||||
public static readonly CVarDef<bool> ExcitedGroupsSpaceIsAllConsuming =
|
||||
CVarDef.Create("atmos.excited_groups_space_is_all_consuming", false, CVar.SERVERONLY);
|
||||
|
||||
/*
|
||||
* MIDI instruments
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user