165    {
  166        if (Main.gamePaused)
  167        {
  168            return;
  169        }
  170        int sandTileCount = Main.SceneMetrics.SandTileCount;
  171        Player player = Main.player[Main.myPlayer];
 
  174        if (sandTileCount < 100 || (double)player.position.Y > Main.worldSurface * 16.0 || player.ZoneBeach)
  175        {
  176            return;
  177        }
  178        int maxValue = 1;
  179        if (!flag || Main.rand.Next(maxValue) != 0)
  180        {
  181            return;
  182        }
  183        int num = 
Math.
Sign(Main.windSpeedCurrent);
 
  184        float num2 = 
Math.
Abs(Main.windSpeedCurrent);
 
  185        if (num2 < 0.01f)
  186        {
  187            return;
  188        }
  190        float num4 = 2000f / (float)sandTileCount;
  191        float value = 3f / num4;
 
  193        int num5 = (int)num4;
  194        float num6 = (float)Main.screenWidth / (float)Main.maxScreenW;
  195        int num7 = (int)(1000f * num6);
  197        float num9 = (float)num7 * (Main.gfxQuality * 0.5f + 0.5f) + (float)num7 * 0.1f - (float)Dust.SandStormCount;
  198        if (num9 <= 0f)
  199        {
  200            return;
  201        }
  202        float num10 = (float)Main.screenWidth + 1000f;
  203        float num11 = Main.screenHeight;
  204        Vector2 vector = Main.screenPosition + player.velocity;
 
  206        weightedRandom.
Add(
new Color(200, 160, 20, 180), Main.SceneMetrics.GetTileCount(53) + Main.SceneMetrics.GetTileCount(396) + Main.SceneMetrics.GetTileCount(397));
 
  207        weightedRandom.
Add(
new Color(103, 98, 122, 180), Main.SceneMetrics.GetTileCount(112) + Main.SceneMetrics.GetTileCount(400) + Main.SceneMetrics.GetTileCount(398));
 
  208        weightedRandom.
Add(
new Color(135, 43, 34, 180), Main.SceneMetrics.GetTileCount(234) + Main.SceneMetrics.GetTileCount(401) + Main.SceneMetrics.GetTileCount(399));
 
  209        weightedRandom.
Add(
new Color(213, 196, 197, 180), Main.SceneMetrics.GetTileCount(116) + Main.SceneMetrics.GetTileCount(403) + Main.SceneMetrics.GetTileCount(402));
 
  212        float amount = (
value - 0.77f) / 0.23000002f;
 
  214        for (
int i = 0; (float)i < num8; 
i++)
 
  215        {
  216            if (Main.rand.Next(num5 / 4) != 0)
  217            {
  218                continue;
  219            }
  220            Vector2 position = 
new Vector2(Main.rand.NextFloat() * num10 - 500f, Main.rand.NextFloat() * -50f);
 
  221            if (Main.rand.Next(3) == 0 && num == 1)
  222            {
  223                position.X = Main.rand.Next(500) - 500;
  224            }
  225            else if (Main.rand.Next(3) == 0 && num == -1)
  226            {
  227                position.X = Main.rand.Next(500) + Main.screenWidth;
  228            }
  229            if (position.
X < 0f || position.
X > (
float)Main.screenWidth)
 
  230            {
  231                position.Y += Main.rand.NextFloat() * num11 * 0.9f;
  232            }
  233            position += vector;
  234            int num14 = (int)position.
X / 16;
 
  235            int num15 = (int)position.
Y / 16;
 
  236            if (!
WorldGen.InWorld(num14, num15, 10) || Main.tile[num14, num15] == 
null || Main.tile[num14, num15].wall != 0)
 
  237            {
  238                continue;
  239            }
  240            for (int j = 0; j < 1; j++)
  241            {
  242                Dust dust = Main.dust[Dust.NewDust(position, 10, 10, 268)];
  243                dust.velocity.Y = 2f + Main.rand.NextFloat() * 0.2f;
  244                dust.velocity.Y *= dust.scale;
  245                dust.velocity.Y *= 0.35f;
  246                dust.velocity.X = num3 * 5f + Main.rand.NextFloat() * 1f;
  247                dust.velocity.X += num3 * num13 * 20f;
  248                dust.fadeIn += num13 * 0.2f;
  249                dust.velocity *= 1f + num12 * 0.5f;
  250                dust.color = weightedRandom;
  251                dust.velocity *= 1f + num12;
  252                dust.velocity *= 
value;
 
  253                dust.scale = 0.9f;
  254                num9 -= 1f;
  255                if (num9 <= 0f)
  256                {
  257                    break;
  258                }
  259                if (Main.rand.Next(maxValue2) != 0)
  260                {
  261                    j--;
  262                    position += Utils.RandomVector2(Main.rand, -10f, 10f) + dust.velocity * -1.1f;
  263                    num14 = (int)position.
X / 16;
 
  264                    num15 = (int)position.
Y / 16;
 
  265                    if (
WorldGen.InWorld(num14, num15, 10) && Main.tile[num14, num15] != 
null)
 
  266                    {
  267                        _ = Main.tile[num14, num15].wall;
  268                    }
  269                }
  270            }
  271            if (num9 <= 0f)
  272            {
  273                break;
  274            }
  275        }
  276    }
static float Lerp(float value1, float value2, float amount)
 
static float Clamp(float value, float min, float max)
 
static double Abs(double value)
 
static int Sign(decimal value)
 
static bool ShouldSandstormDustPersist()
 
static void HandleEffectAndSky(bool toState)
 
void Add(T element, double weight=1.0)