public void ScatterTiles(int tileX, int tileY, int radius, int scatterRadius) { int toX, toY, style = 0; Tile froTile; for (int i = tileX - radius; i <= tileX + radius; i++) { for (int j = tileY - radius; j <= tileY + radius; j++) { float xDist = i - tileX; float yDist = j - tileY; if ((xDist * xDist) + (yDist * yDist) > (radius * radius)) { continue; } // Crude froTile = Main.tile[i, j]; if (froTile == null) { continue; } if (!TileHelpers.IsSolid(froTile, true, true)) { continue; } if (TileHelpers.IsWire(froTile)) { continue; } if (froTile.lava()) { continue; } if (TileHelpers.IsNotVanillaBombable(i, j)) { continue; } var tileData = TileObjectData.GetTileData(froTile); if (tileData != null && (tileData.Width > 1 || tileData.Height > 1)) { continue; } if (!TileFinderHelpers.FindNearbyRandomMatch(TilePattern.NonSolid, tileX, tileY, scatterRadius, 100, false, out toX, out toY)) { break; } try { style = TileObjectData.GetTileStyle(froTile); } catch (Exception) { style = 0; } int oldType = froTile.type; WorldGen.KillTile(i, j, false, false, true); WorldGen.PlaceTile(toX, toY, oldType, true, true, this.projectile.owner, style); if (Main.netMode != 0) { NetMessage.SendData(MessageID.TileChange, -1, -1, null, 0, (float)i, (float)j, 0f, 0, 0, 0); NetMessage.SendData(MessageID.TileChange, -1, -1, null, 0, (float)toX, (float)toY, 0f, 0, 0, 0); } Dust.NewDust(new Vector2(i * 16, j * 16), 0, 0, 15, 0, 0, 150, Color.Cyan, 1f); Dust.NewDust(new Vector2(toX * 16, toY * 16), 0, 0, 15, 0, 0, 150, Color.Cyan, 1f); } } }