mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 13:37:47 +03:00
# Description This PR adds several new features for Space Wind to make it far less annoying to players. Notably, it now includes the first new Space Wind Visuals, whereby visual effects will periodically appear on top of space wind sources. They also visually move in the same direction that the wind is currently throwing at that source. <details><summary><h1>Media</h1></summary> <p> https://github.com/user-attachments/assets/858a3433-607a-4513-9acf-b60b4eb6e745 </p> </details> # Changelog 🆑 - add: Added visual effects to Space Wind, allowing players to see motes of dust being blown about by wind, which provides an early warning that space winds are in effect. - tweak: tweaked the default "aggression" values of space wind to make it half as angry and sensitive. - add: Added a new equation modeling character height and mass as a means of resisting being knocked down by space wind. The taller and heavier you are, the more resistant you are to being knocked down by air currents. This also means that air currents no longer automatically knock you down. - add: Harpies and Moths can now use their wings to fly around in air currents. - tweak: Tweaked the mass of various items and objects so that they are more or less resistant to space wind. Particularly tools, armor, lockers, and air canisters. - tweak: As a significant performance optimization, Space Wind no longer applies on Lavaland. --------- Signed-off-by: VMSolidus <evilexecutive@gmail.com> Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> (cherry picked from commit 97ef05f574b7f2e7d58df999e9b1c15d0353e725)
67 lines
4.2 KiB
C#
67 lines
4.2 KiB
C#
using Content.Shared.CCVar;
|
|
using Robust.Shared.Configuration;
|
|
|
|
namespace Content.Server.Atmos.EntitySystems
|
|
{
|
|
public sealed partial class AtmosphereSystem
|
|
{
|
|
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
|
|
|
public bool SpaceWind { get; private set; }
|
|
public float SpaceWindMaxForce { get; private set; }
|
|
public float SpaceWindMaxAngularVelocity { get; private set; }
|
|
public float SpaceWindStrengthMultiplier { get; private set; }
|
|
public float SpaceWindKnockdownTime { get; private set; }
|
|
public bool MonstermosEqualization { get; private set; }
|
|
public bool MonstermosDepressurization { get; private set; }
|
|
public bool MonstermosRipTiles { get; private set; }
|
|
public float MonstermosRipTilesMinimumPressure { get; private set; }
|
|
public bool GridImpulse { get; private set; }
|
|
public float SpacingMinGas { get; private set; }
|
|
public float SpacingMaxWind { get; private set; }
|
|
public bool Superconduction { get; private set; }
|
|
public bool ExcitedGroups { get; private set; }
|
|
public bool ExcitedGroupsSpaceIsAllConsuming { get; private set; }
|
|
public float AtmosMaxProcessTime { get; private set; }
|
|
public float AtmosTickRate { get; private set; }
|
|
public float Speedup { get; private set; }
|
|
public float HeatScale { get; private set; }
|
|
public float HumanoidThrowMultiplier { get; private set; }
|
|
public bool SpaceWindAllowKnockdown { get; private set; }
|
|
public bool SpaceWindVisuals { get; private set; }
|
|
|
|
/// <summary>
|
|
/// Time between each atmos sub-update. If you are writing an atmos device, use AtmosDeviceUpdateEvent.dt
|
|
/// instead of this value, because atmos devices do not update each are sub-update and sometimes are skipped to
|
|
/// meet the tick deadline.
|
|
/// </summary>
|
|
public float AtmosTime => 1f / AtmosTickRate;
|
|
|
|
private void InitializeCVars()
|
|
{
|
|
Subs.CVar(_cfg, CCVars.SpaceWind, value => SpaceWind = value, true);
|
|
Subs.CVar(_cfg, CCVars.SpaceWindMaxForce, value => SpaceWindMaxForce = value, true);
|
|
Subs.CVar(_cfg, CCVars.SpaceWindMaxAngularVelocity, value => SpaceWindMaxAngularVelocity = value, true);
|
|
Subs.CVar(_cfg, CCVars.SpaceWindStrengthMultiplier, value => SpaceWindStrengthMultiplier = value, true);
|
|
Subs.CVar(_cfg, CCVars.SpaceWindKnockdownTime, value => SpaceWindKnockdownTime = value, true);
|
|
Subs.CVar(_cfg, CCVars.MonstermosEqualization, value => MonstermosEqualization = value, true);
|
|
Subs.CVar(_cfg, CCVars.MonstermosDepressurization, value => MonstermosDepressurization = value, true);
|
|
Subs.CVar(_cfg, CCVars.MonstermosRipTiles, value => MonstermosRipTiles = value, true);
|
|
Subs.CVar(_cfg, CCVars.MonstermosRipTilesMinimumPressure, value => MonstermosRipTilesMinimumPressure = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosGridImpulse, value => GridImpulse = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosSpacingMinGas, value => SpacingMinGas = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosSpacingMaxWind, value => SpacingMaxWind = value, true);
|
|
Subs.CVar(_cfg, CCVars.Superconduction, value => Superconduction = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosMaxProcessTime, value => AtmosMaxProcessTime = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosTickRate, value => AtmosTickRate = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosSpeedup, value => Speedup = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosHeatScale, value => { HeatScale = value; InitializeGases(); }, true);
|
|
Subs.CVar(_cfg, CCVars.ExcitedGroups, value => ExcitedGroups = value, true);
|
|
Subs.CVar(_cfg, CCVars.ExcitedGroupsSpaceIsAllConsuming, value => ExcitedGroupsSpaceIsAllConsuming = value, true);
|
|
Subs.CVar(_cfg, CCVars.AtmosHumanoidThrowMultiplier, value => HumanoidThrowMultiplier = value, true);
|
|
Subs.CVar(_cfg, CCVars.SpaceWindAllowKnockdown, value => SpaceWindAllowKnockdown = value, true);
|
|
Subs.CVar(_cfg, CCVars.SpaceWindVisuals, value => SpaceWindVisuals = value, true);
|
|
}
|
|
}
|
|
}
|