public static void AddMinerals(GameLocation l) { List <Vector2> spots = new List <Vector2>(); for (int x = 0; x < l.map.Layers[0].LayerWidth; x++) { for (int y = 0; y < l.map.Layers[0].LayerHeight; y++) { Tile tile = l.map.GetLayer("Back").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null && l.map.GetLayer("Buildings").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size) == null && l.map.GetLayer("Front").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size) == null) { spots.Add(new Vector2(x, y)); } } } int n = spots.Count; while (n > 1) { n--; int k = Game1.random.Next(n + 1); var value = spots[k]; spots[k] = spots[n]; spots[n] = value; } int mineralNo = (int)Math.Round(Game1.random.Next(Config.MineralPerThousandMin, Config.MineralPerThousandMax) / 1000f * spots.Count); List <Vector2> mineralSpots = spots.Take(mineralNo).ToList(); foreach (Vector2 tile in mineralSpots) { double chance = Game1.random.NextDouble(); if (chance < 0.2 && !l.map.GetLayer("Back").Tiles[(int)tile.X, (int)tile.Y].Properties.ContainsKey("Treasure") && !l.map.GetLayer("Back").Tiles[(int)tile.X, (int)tile.Y].Properties.ContainsKey("Diggable")) { l.map.GetLayer("Back").Tiles[(int)tile.X, (int)tile.Y].TileIndex = 1299; l.map.GetLayer("Back").Tiles[(int)tile.X, (int)tile.Y].Properties.Add("Treasure", new PropertyValue("Object " + SwimUtils.CheckForBuriedItem(Game1.player))); l.map.GetLayer("Back").Tiles[(int)tile.X, (int)tile.Y].Properties.Add("Diggable", new PropertyValue("T")); } else if (chance < 0.4) { l.overlayObjects[tile] = new StardewValley.Object(tile, 751, "Stone", true, false, false, false) { MinutesUntilReady = 2 }; } else if (chance < 0.5) { l.overlayObjects[tile] = new StardewValley.Object(tile, 290, "Stone", true, false, false, false) { MinutesUntilReady = 4 }; } else if (chance < 0.55) { l.overlayObjects[tile] = new StardewValley.Object(tile, 764, "Stone", true, false, false, false) { MinutesUntilReady = 8 }; } else if (chance < 0.56) { l.overlayObjects[tile] = new StardewValley.Object(tile, 765, "Stone", true, false, false, false) { MinutesUntilReady = 16 }; } else if (chance < 0.65) { l.overlayObjects[tile] = new StardewValley.Object(tile, 80, "Stone", true, true, false, true); } else if (chance < 0.74) { l.overlayObjects[tile] = new StardewValley.Object(tile, 82, "Stone", true, true, false, true); } else if (chance < 0.83) { l.overlayObjects[tile] = new StardewValley.Object(tile, 84, "Stone", true, true, false, true); } else if (chance < 0.90) { l.overlayObjects[tile] = new StardewValley.Object(tile, 86, "Stone", true, true, false, true); } else { int[] gems = { 4, 6, 8, 10, 12, 14, 40 }; int whichGem = gems[Game1.random.Next(gems.Length)]; l.overlayObjects[tile] = new StardewValley.Object(tile, whichGem, "Stone", true, false, false, false) { MinutesUntilReady = 5 }; } } }