public override void Generate(Map map, GenStepParams parms) { MapDesignerSettings settings = MapDesignerMod.mod.settings; lakeSize = settings.lakeSize * map.Size.x / 2; lakeRoundness = settings.lakeRoundness; lakeBeachSize = settings.lakeBeachSize; if (map.Biome.defName.Contains("BiomesIsland")) { lakeSize *= 0.5f; } MapGenFloatGrid lakeGrid = MapGenerator.FloatGridNamed("ZMD_Lake"); IntVec3 mapCenter = map.Center; mapCenter.x += (int)(MapDesignerMod.mod.settings.lakeCenterDisp.x * map.Size.x); mapCenter.z += (int)(MapDesignerMod.mod.settings.lakeCenterDisp.z * map.Size.z); ModuleBase moduleBase = new Perlin(0.020999999716877937, 2.0, 0.5, 6, Rand.Range(0, 2147483647), QualityMode.High); foreach (IntVec3 current in map.AllCells) { float distance = HelperMethods.DistanceBetweenPoints(current, mapCenter); lakeGrid[current] = 0f + lakeRoundness * moduleBase.GetValue(current) + 0.1f * (lakeSize - distance); } float deepBelow = lakeGrid[mapCenter] * (1 - settings.lakeDepth); MapGenFloatGrid elevation = MapGenerator.Elevation; MapGenFloatGrid fertility = MapGenerator.Fertility; float deepWater = -2005; float shallowWater = -1025; if (settings.flagLakeSalty) { deepWater = -2015; shallowWater = -1035; } float beachValue = Feature_TerrainFrom.ValueFromTerrain(settings.lakeShore); foreach (IntVec3 current in map.AllCells) { if (elevation[current] < 0.65f) // leaves mountains & most surrounding gravel untouched { if (lakeGrid[current] > deepBelow) { fertility[current] = deepWater; } else { if (lakeGrid[current] > 0f) { fertility[current] = shallowWater; } else if (lakeGrid[current] > 0f - 0.1f * lakeBeachSize) { fertility[current] = beachValue; } } } } }