- int grass_layer = grass_layer_middle + grass_layer_range * perlin(vec2((float)x / 64, (float)z / 64));
- for (int y = miny; y < maxy; y++) {
+ int uz = z + map_size;
+ int height = perlin(vec2((float)ux / 200, (float)uz / 200)) * 25 + 100;
+
+ bool is_mountain = false;
+ float mountain_factor = pow((perlin(vec2((float)ux / 1000.0f, (float)uz / 1000.0f)) - 0.3f) * 5.0f, 1.0f);
+ if (mountain_factor > 0) {
+ height = pow(height * pow(((perlin(vec2((float)ux / 50.0f, (float)uz / 50.0f)) + 1.0f) * 200.0f + 100.0f), mountain_factor), 1.0f / (mountain_factor + 1.0f));
+ is_mountain = true;
+ }
+
+ BlockDef *blockdef = nullptr;
+
+ for (int y = maxy - 1; y >= miny; y--) {