CVars for atmos (#2633)

* Monstermos is a word!

* Atmos CVars

* Cache CVars in AtmosphereSystem.

Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
This commit is contained in:
Víctor Aguilera Puerto
2020-11-27 16:49:12 +01:00
committed by GitHub
parent 8177be3061
commit 6bb1e9fa5d
6 changed files with 136 additions and 57 deletions

View File

@@ -636,7 +636,7 @@ namespace Content.Server.Atmos
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ProcessCell(int fireCount) public void ProcessCell(int fireCount, bool spaceWind = true)
{ {
// Can't process a tile without air // Can't process a tile without air
if (Air == null) if (Air == null)
@@ -708,14 +708,16 @@ namespace Content.Server.Atmos
{ {
var difference = Air.Share(enemyTile.Air, adjacentTileLength); var difference = Air.Share(enemyTile.Air, adjacentTileLength);
// Space wind! if (spaceWind)
if (difference > 0)
{ {
ConsiderPressureDifference(enemyTile, difference); if (difference > 0)
} {
else ConsiderPressureDifference(enemyTile, difference);
{ }
enemyTile.ConsiderPressureDifference(this, -difference); else
{
enemyTile.ConsiderPressureDifference(this, -difference);
}
} }
LastShareCheck(); LastShareCheck();

View File

@@ -9,6 +9,7 @@ using Content.Server.GameObjects.Components.Atmos.Piping;
using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups;
using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems;
using Content.Server.GameObjects.EntitySystems.Atmos; using Content.Server.GameObjects.EntitySystems.Atmos;
using Content.Shared;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Maps; using Content.Shared.Maps;
using Robust.Server.GameObjects.EntitySystems.TileLookup; using Robust.Server.GameObjects.EntitySystems.TileLookup;
@@ -16,10 +17,9 @@ using Robust.Server.Interfaces.GameObjects;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.ComponentDependencies; using Robust.Shared.GameObjects.ComponentDependencies;
using Robust.Shared.GameObjects.Components.Map; using Robust.Shared.GameObjects.Components.Map;
using Robust.Shared.GameObjects.Components.Transform;
using Robust.Shared.GameObjects.Systems; using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.Configuration;
using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Map;
using Robust.Shared.IoC;
using Robust.Shared.Log; using Robust.Shared.Log;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Maths; using Robust.Shared.Maths;
@@ -49,16 +49,6 @@ namespace Content.Server.GameObjects.Components.Atmos
/// </summary> /// </summary>
private const int LagCheckIterations = 30; private const int LagCheckIterations = 30;
/// <summary>
/// Max milliseconds allowed for atmos updates.
/// </summary>
private const float LagCheckMaxMilliseconds = 5f;
/// <summary>
/// How much time before atmos updates are ran.
/// </summary>
private const float AtmosTime = 1/26f;
public override string Name => "GridAtmosphere"; public override string Name => "GridAtmosphere";
private bool _paused = false; private bool _paused = false;
@@ -256,7 +246,12 @@ namespace Content.Server.GameObjects.Components.Atmos
tile.Air ??= new GasMixture(GetVolumeForCells(1), AtmosphereSystem){Temperature = Atmospherics.T20C}; tile.Air ??= new GasMixture(GetVolumeForCells(1), AtmosphereSystem){Temperature = Atmospherics.T20C};
} }
// By removing the active tile, we effectively remove its excited group, if any.
RemoveActiveTile(tile);
// Then we activate the tile again.
AddActiveTile(tile); AddActiveTile(tile);
tile.BlockedAirflow = GetBlockedDirections(indices); tile.BlockedAirflow = GetBlockedDirections(indices);
// TODO ATMOS: Query all the contents of this tile (like walls) and calculate the correct thermal conductivity // TODO ATMOS: Query all the contents of this tile (like walls) and calculate the correct thermal conductivity
@@ -478,20 +473,23 @@ namespace Content.Server.GameObjects.Components.Atmos
public virtual void Update(float frameTime) public virtual void Update(float frameTime)
{ {
_timer += frameTime; _timer += frameTime;
var atmosTime = 1f/AtmosphereSystem.AtmosTickRate;
if (_invalidatedCoords.Count != 0) if (_invalidatedCoords.Count != 0)
Revalidate(); Revalidate();
if (_timer < AtmosTime) if (_timer < atmosTime)
return; return;
// We subtract it so it takes lost time into account. // We subtract it so it takes lost time into account.
_timer -= AtmosTime; _timer -= atmosTime;
var maxProcessTime = AtmosphereSystem.AtmosMaxProcessTime;
switch (_state) switch (_state)
{ {
case ProcessState.TileEqualize: case ProcessState.TileEqualize:
if (!ProcessTileEqualize(_paused)) if (!ProcessTileEqualize(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
@@ -501,7 +499,7 @@ namespace Content.Server.GameObjects.Components.Atmos
_state = ProcessState.ActiveTiles; _state = ProcessState.ActiveTiles;
return; return;
case ProcessState.ActiveTiles: case ProcessState.ActiveTiles:
if (!ProcessActiveTiles(_paused)) if (!ProcessActiveTiles(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
@@ -511,7 +509,7 @@ namespace Content.Server.GameObjects.Components.Atmos
_state = ProcessState.ExcitedGroups; _state = ProcessState.ExcitedGroups;
return; return;
case ProcessState.ExcitedGroups: case ProcessState.ExcitedGroups:
if (!ProcessExcitedGroups(_paused)) if (!ProcessExcitedGroups(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
@@ -521,7 +519,7 @@ namespace Content.Server.GameObjects.Components.Atmos
_state = ProcessState.HighPressureDelta; _state = ProcessState.HighPressureDelta;
return; return;
case ProcessState.HighPressureDelta: case ProcessState.HighPressureDelta:
if (!ProcessHighPressureDelta(_paused)) if (!ProcessHighPressureDelta(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
@@ -531,7 +529,7 @@ namespace Content.Server.GameObjects.Components.Atmos
_state = ProcessState.Hotspots; _state = ProcessState.Hotspots;
break; break;
case ProcessState.Hotspots: case ProcessState.Hotspots:
if (!ProcessHotspots(_paused)) if (!ProcessHotspots(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
@@ -541,7 +539,7 @@ namespace Content.Server.GameObjects.Components.Atmos
_state = ProcessState.Superconductivity; _state = ProcessState.Superconductivity;
break; break;
case ProcessState.Superconductivity: case ProcessState.Superconductivity:
if (!ProcessSuperconductivity(_paused)) if (!ProcessSuperconductivity(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
@@ -551,7 +549,7 @@ namespace Content.Server.GameObjects.Components.Atmos
_state = ProcessState.PipeNet; _state = ProcessState.PipeNet;
break; break;
case ProcessState.PipeNet: case ProcessState.PipeNet:
if (!ProcessPipeNets(_paused)) if (!ProcessPipeNets(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
@@ -561,21 +559,24 @@ namespace Content.Server.GameObjects.Components.Atmos
_state = ProcessState.PipeNetDevices; _state = ProcessState.PipeNetDevices;
break; break;
case ProcessState.PipeNetDevices: case ProcessState.PipeNetDevices:
if (!ProcessPipeNetDevices(_paused)) if (!ProcessPipeNetDevices(_paused, maxProcessTime))
{ {
_paused = true; _paused = true;
return; return;
} }
_paused = false; _paused = false;
_state = ProcessState.TileEqualize; // Next state depends on whether monstermos equalization is enabled or not.
// Note: We do this here instead of on the tile equalization step to prevent ending it early.
// Therefore, a change to this CVar might only be applied after that step is over.
_state = AtmosphereSystem.MonstermosEqualization ? ProcessState.TileEqualize : ProcessState.ActiveTiles;
break; break;
} }
UpdateCounter++; UpdateCounter++;
} }
public virtual bool ProcessTileEqualize(bool resumed = false) public virtual bool ProcessTileEqualize(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
@@ -591,7 +592,7 @@ namespace Content.Server.GameObjects.Components.Atmos
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_tileEqualizeLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _tileEqualizeLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;
@@ -602,10 +603,12 @@ namespace Content.Server.GameObjects.Components.Atmos
return true; return true;
} }
public virtual bool ProcessActiveTiles(bool resumed = false) public virtual bool ProcessActiveTiles(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
var spaceWind = AtmosphereSystem.SpaceWind;
if(!resumed) if(!resumed)
_currentRunTiles = new Queue<TileAtmosphere>(_activeTiles); _currentRunTiles = new Queue<TileAtmosphere>(_activeTiles);
@@ -613,12 +616,12 @@ namespace Content.Server.GameObjects.Components.Atmos
while (_currentRunTiles.Count > 0) while (_currentRunTiles.Count > 0)
{ {
var tile = _currentRunTiles.Dequeue(); var tile = _currentRunTiles.Dequeue();
tile.ProcessCell(UpdateCounter); tile.ProcessCell(UpdateCounter, spaceWind);
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_activeTilesLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _activeTilesLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;
@@ -629,10 +632,12 @@ namespace Content.Server.GameObjects.Components.Atmos
return true; return true;
} }
public virtual bool ProcessExcitedGroups(bool resumed = false) public virtual bool ProcessExcitedGroups(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
var spaceIsAllConsuming = AtmosphereSystem.ExcitedGroupsSpaceIsAllConsuming;
if(!resumed) if(!resumed)
_currentRunExcitedGroups = new Queue<ExcitedGroup>(_excitedGroups); _currentRunExcitedGroups = new Queue<ExcitedGroup>(_excitedGroups);
@@ -644,7 +649,7 @@ namespace Content.Server.GameObjects.Components.Atmos
excitedGroup.DismantleCooldown++; excitedGroup.DismantleCooldown++;
if(excitedGroup.BreakdownCooldown > Atmospherics.ExcitedGroupBreakdownCycles) if(excitedGroup.BreakdownCooldown > Atmospherics.ExcitedGroupBreakdownCycles)
excitedGroup.SelfBreakdown(); excitedGroup.SelfBreakdown(spaceIsAllConsuming);
else if(excitedGroup.DismantleCooldown > Atmospherics.ExcitedGroupsDismantleCycles) else if(excitedGroup.DismantleCooldown > Atmospherics.ExcitedGroupsDismantleCycles)
excitedGroup.Dismantle(); excitedGroup.Dismantle();
@@ -652,7 +657,7 @@ namespace Content.Server.GameObjects.Components.Atmos
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_excitedGroupLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _excitedGroupLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;
@@ -663,7 +668,7 @@ namespace Content.Server.GameObjects.Components.Atmos
return true; return true;
} }
public virtual bool ProcessHighPressureDelta(bool resumed = false) public virtual bool ProcessHighPressureDelta(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
@@ -682,7 +687,7 @@ namespace Content.Server.GameObjects.Components.Atmos
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_highPressureDeltaLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _highPressureDeltaLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;
@@ -693,7 +698,7 @@ namespace Content.Server.GameObjects.Components.Atmos
return true; return true;
} }
protected virtual bool ProcessHotspots(bool resumed = false) protected virtual bool ProcessHotspots(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
@@ -709,7 +714,7 @@ namespace Content.Server.GameObjects.Components.Atmos
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_hotspotsLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _hotspotsLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;
@@ -720,7 +725,7 @@ namespace Content.Server.GameObjects.Components.Atmos
return true; return true;
} }
protected virtual bool ProcessSuperconductivity(bool resumed = false) protected virtual bool ProcessSuperconductivity(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
@@ -736,7 +741,7 @@ namespace Content.Server.GameObjects.Components.Atmos
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_superconductivityLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _superconductivityLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;
@@ -747,7 +752,7 @@ namespace Content.Server.GameObjects.Components.Atmos
return true; return true;
} }
protected virtual bool ProcessPipeNets(bool resumed = false) protected virtual bool ProcessPipeNets(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
@@ -763,7 +768,7 @@ namespace Content.Server.GameObjects.Components.Atmos
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_pipeNetLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _pipeNetLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;
@@ -774,7 +779,7 @@ namespace Content.Server.GameObjects.Components.Atmos
return true; return true;
} }
protected virtual bool ProcessPipeNetDevices(bool resumed = false) protected virtual bool ProcessPipeNetDevices(bool resumed = false, float lagCheck = 5f)
{ {
_stopwatch.Restart(); _stopwatch.Restart();
@@ -790,7 +795,7 @@ namespace Content.Server.GameObjects.Components.Atmos
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;
number = 0; number = 0;
// Process the rest next time. // Process the rest next time.
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
{ {
_pipeNetDevicesLastProcess = _stopwatch.Elapsed.TotalMilliseconds; _pipeNetDevicesLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
return false; return false;

View File

@@ -71,42 +71,42 @@ namespace Content.Server.GameObjects.Components.Atmos
public override void Update(float frameTime) { } public override void Update(float frameTime) { }
public override bool ProcessTileEqualize(bool resumed = false) public override bool ProcessTileEqualize(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }
public override bool ProcessActiveTiles(bool resumed = false) public override bool ProcessActiveTiles(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }
public override bool ProcessExcitedGroups(bool resumed = false) public override bool ProcessExcitedGroups(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }
public override bool ProcessHighPressureDelta(bool resumed = false) public override bool ProcessHighPressureDelta(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }
protected override bool ProcessHotspots(bool resumed = false) protected override bool ProcessHotspots(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }
protected override bool ProcessSuperconductivity(bool resumed = false) protected override bool ProcessSuperconductivity(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }
protected override bool ProcessPipeNets(bool resumed = false) protected override bool ProcessPipeNets(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }
protected override bool ProcessPipeNetDevices(bool resumed = false) protected override bool ProcessPipeNetDevices(bool resumed = false, float lagCheck = 5f)
{ {
return false; return false;
} }

View File

@@ -5,6 +5,7 @@ using System.Linq;
using Content.Server.Atmos; using Content.Server.Atmos;
using Content.Server.Atmos.Reactions; using Content.Server.Atmos.Reactions;
using Content.Server.GameObjects.Components.Atmos; using Content.Server.GameObjects.Components.Atmos;
using Content.Shared;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.GameObjects.EntitySystems.Atmos; using Content.Shared.GameObjects.EntitySystems.Atmos;
using Content.Shared.Maps; using Content.Shared.Maps;
@@ -15,6 +16,7 @@ using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Components.Map; using Robust.Shared.GameObjects.Components.Map;
using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Components.Transform;
using Robust.Shared.GameObjects.Systems; using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.Configuration;
using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Map;
using Robust.Shared.IoC; using Robust.Shared.IoC;
@@ -30,6 +32,7 @@ namespace Content.Server.GameObjects.EntitySystems
[Dependency] private readonly IPrototypeManager _protoMan = default!; [Dependency] private readonly IPrototypeManager _protoMan = default!;
[Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IPauseManager _pauseManager = default!; [Dependency] private readonly IPauseManager _pauseManager = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
private GasReactionPrototype[] _gasReactions = Array.Empty<GasReactionPrototype>(); private GasReactionPrototype[] _gasReactions = Array.Empty<GasReactionPrototype>();
@@ -68,6 +71,43 @@ namespace Content.Server.GameObjects.EntitySystems
// Required for airtight components. // Required for airtight components.
EntityManager.EventBus.SubscribeEvent<RotateEvent>(EventSource.Local, this, RotateEvent); EntityManager.EventBus.SubscribeEvent<RotateEvent>(EventSource.Local, this, RotateEvent);
_cfg.OnValueChanged(CCVars.SpaceWind, OnSpaceWindChanged, true);
_cfg.OnValueChanged(CCVars.MonstermosEqualization, OnMonstermosEqualizationChanged, true);
_cfg.OnValueChanged(CCVars.AtmosMaxProcessTime, OnAtmosMaxProcessTimeChanged, true);
_cfg.OnValueChanged(CCVars.AtmosTickRate, OnAtmosTickRateChanged, true);
_cfg.OnValueChanged(CCVars.ExcitedGroupsSpaceIsAllConsuming, OnExcitedGroupsSpaceIsAllConsumingChanged, true);
}
public bool SpaceWind { get; private set; }
public bool MonstermosEqualization { get; private set; }
public bool ExcitedGroupsSpaceIsAllConsuming { get; private set; }
public float AtmosMaxProcessTime { get; private set; }
public float AtmosTickRate { get; private set; }
private void OnExcitedGroupsSpaceIsAllConsumingChanged(bool obj)
{
ExcitedGroupsSpaceIsAllConsuming = obj;
}
private void OnAtmosTickRateChanged(float obj)
{
AtmosTickRate = obj;
}
private void OnAtmosMaxProcessTimeChanged(float obj)
{
AtmosMaxProcessTime = obj;
}
private void OnMonstermosEqualizationChanged(bool obj)
{
MonstermosEqualization = obj;
}
private void OnSpaceWindChanged(bool obj)
{
SpaceWind = obj;
} }
public override void Shutdown() public override void Shutdown()

View File

@@ -151,6 +151,36 @@ namespace Content.Shared
public static readonly CVarDef<bool> AdminAnnounceLogout = public static readonly CVarDef<bool> AdminAnnounceLogout =
CVarDef.Create("admin.announce_logout", true, CVar.SERVERONLY); CVarDef.Create("admin.announce_logout", true, CVar.SERVERONLY);
/*
* Atmos
*/
/// <summary>
/// Whether gas differences will move entities.
/// </summary>
public static readonly CVarDef<bool> SpaceWind =
CVarDef.Create("atmos.space_wind", true, CVar.SERVERONLY);
/// <summary>
/// Whether monstermos tile equalization is enabled.
/// </summary>
public static readonly CVarDef<bool> MonstermosEqualization =
CVarDef.Create("atmos.monstermos_equalization", true, CVar.SERVERONLY);
/// <summary>
/// Maximum time in milliseconds that atmos can take processing.
/// </summary>
public static readonly CVarDef<float> AtmosMaxProcessTime =
CVarDef.Create("atmos.max_process_time", 5f, CVar.SERVERONLY);
/// <summary>
/// Atmos tickrate in TPS. Atmos processing will happen every 1/TPS seconds.
/// </summary>
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);
/* /*
* Branding stuff * Branding stuff

View File

@@ -118,6 +118,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=lerping/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=lerping/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=metabolizable/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=metabolizable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=mommi/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=mommi/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Monstermos/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Noto/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Noto/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=occluder/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=occluder/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Occluders/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Occluders/@EntryIndexedValue">True</s:Boolean>
@@ -151,6 +152,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=Teleporter/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Teleporter/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thermite/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Thermite/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thonk/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Thonk/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=tickrate/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Transen/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Transen/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=unanchor/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=unanchor/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Uncuff/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Uncuff/@EntryIndexedValue">True</s:Boolean>