1
1
/*
2
2
Minetest
3
- Copyright (C) 2013-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
4
- Copyright (C) 2014-2018 paramat
3
+ Copyright (C) 2013-2019 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
4
+ Copyright (C) 2014-2019 paramat
5
5
6
6
This program is free software; you can redistribute it and/or modify
7
7
it under the terms of the GNU Lesser General Public License as published by
@@ -55,12 +55,8 @@ FlagDesc flagdesc_mapgen_v7[] = {
55
55
MapgenV7::MapgenV7 (MapgenV7Params *params, EmergeManager *emerge)
56
56
: MapgenBasic(MAPGEN_V7, params, emerge)
57
57
{
58
- spflags = params->spflags ;
59
- mount_zero_level = params->mount_zero_level ;
60
- float_mount_density = params->float_mount_density ;
61
- float_mount_exponent = params->float_mount_exponent ;
62
- floatland_level = params->floatland_level ;
63
- shadow_limit = params->shadow_limit ;
58
+ spflags = params->spflags ;
59
+ mount_zero_level = params->mount_zero_level ;
64
60
65
61
cave_width = params->cave_width ;
66
62
large_cave_depth = params->large_cave_depth ;
@@ -75,11 +71,6 @@ MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge)
75
71
dungeon_ymin = params->dungeon_ymin ;
76
72
dungeon_ymax = params->dungeon_ymax ;
77
73
78
- // This is to avoid a divide-by-zero.
79
- // Parameter will be saved to map_meta.txt in limited form.
80
- params->float_mount_height = std::fmax (params->float_mount_height , 1 .0f );
81
- float_mount_height = params->float_mount_height ;
82
-
83
74
// 2D noise
84
75
noise_terrain_base =
85
76
new Noise (¶ms->np_terrain_base , seed, csize.X , csize.Z );
@@ -92,34 +83,29 @@ MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge)
92
83
noise_filler_depth =
93
84
new Noise (¶ms->np_filler_depth , seed, csize.X , csize.Z );
94
85
95
- if (spflags & MGV7_MOUNTAINS)
86
+ if (spflags & MGV7_MOUNTAINS) {
87
+ // 2D noise
96
88
noise_mount_height =
97
- new Noise (¶ms->np_mount_height , seed, csize.X , csize.Z );
98
-
99
- if (spflags & MGV7_FLOATLANDS) {
100
- noise_floatland_base =
101
- new Noise (¶ms->np_floatland_base , seed, csize.X , csize.Z );
102
- noise_float_base_height =
103
- new Noise (¶ms->np_float_base_height , seed, csize.X , csize.Z );
89
+ new Noise (¶ms->np_mount_height , seed, csize.X , csize.Z );
90
+ // 3D noise, 1 up, 1 down overgeneration
91
+ noise_mountain =
92
+ new Noise (¶ms->np_mountain , seed, csize.X , csize.Y + 2 , csize.Z );
104
93
}
105
94
106
95
if (spflags & MGV7_RIDGES) {
96
+ // 2D noise
107
97
noise_ridge_uwater =
108
- new Noise (¶ms->np_ridge_uwater , seed, csize.X , csize.Z );
109
- // 3D noise, 1 up, 1 down overgeneration
98
+ new Noise (¶ms->np_ridge_uwater , seed, csize.X , csize.Z );
99
+ // 3D noise, 1 up, 1 down overgeneration
110
100
noise_ridge =
111
- new Noise (¶ms->np_ridge , seed, csize.X , csize.Y + 2 , csize.Z );
101
+ new Noise (¶ms->np_ridge , seed, csize.X , csize.Y + 2 , csize.Z );
112
102
}
113
103
114
- // 3D noise, 1 up, 1 down overgeneration
115
- if ((spflags & MGV7_MOUNTAINS) || (spflags & MGV7_FLOATLANDS))
116
- noise_mountain =
117
- new Noise (¶ms->np_mountain , seed, csize.X , csize.Y + 2 , csize.Z );
118
-
119
104
// 3D noise, 1 down overgeneration
120
105
MapgenBasic::np_cave1 = params->np_cave1 ;
121
106
MapgenBasic::np_cave2 = params->np_cave2 ;
122
107
MapgenBasic::np_cavern = params->np_cavern ;
108
+ // 3D noise
123
109
MapgenBasic::np_dungeons = params->np_dungeons ;
124
110
}
125
111
@@ -132,21 +118,15 @@ MapgenV7::~MapgenV7()
132
118
delete noise_height_select;
133
119
delete noise_filler_depth;
134
120
135
- if (spflags & MGV7_MOUNTAINS)
121
+ if (spflags & MGV7_MOUNTAINS) {
136
122
delete noise_mount_height;
137
-
138
- if (spflags & MGV7_FLOATLANDS) {
139
- delete noise_floatland_base;
140
- delete noise_float_base_height;
123
+ delete noise_mountain;
141
124
}
142
125
143
126
if (spflags & MGV7_RIDGES) {
144
127
delete noise_ridge_uwater;
145
128
delete noise_ridge;
146
129
}
147
-
148
- if ((spflags & MGV7_MOUNTAINS) || (spflags & MGV7_FLOATLANDS))
149
- delete noise_mountain;
150
130
}
151
131
152
132
@@ -158,8 +138,6 @@ MapgenV7Params::MapgenV7Params():
158
138
np_filler_depth (0.0 , 1.2 , v3f(150 , 150 , 150 ), 261, 3, 0.7, 2.0),
159
139
np_mount_height (256.0 , 112.0 , v3f(1000 , 1000 , 1000 ), 72449, 3, 0.6, 2.0),
160
140
np_ridge_uwater (0.0 , 1.0 , v3f(1000 , 1000 , 1000 ), 85039, 5, 0.6, 2.0),
161
- np_floatland_base (-0.6 , 1.5 , v3f(600 , 600 , 600 ), 114, 5, 0.6, 2.0),
162
- np_float_base_height (48.0 , 24.0 , v3f(300 , 300 , 300 ), 907, 4, 0.7, 2.0),
163
141
np_mountain (-0.6 , 1.0 , v3f(250 , 350 , 250 ), 5333, 5, 0.63, 2.0),
164
142
np_ridge (0.0 , 1.0 , v3f(100 , 100 , 100 ), 6467, 4, 0.75, 2.0),
165
143
np_cavern (0.0 , 1.0 , v3f(384 , 128 , 384 ), 723, 5, 0.63, 2.0),
@@ -181,72 +159,58 @@ void MapgenV7Params::readParams(const Settings *settings)
181
159
settings->getU16NoEx (" mgv7_large_cave_num_min" , large_cave_num_min);
182
160
settings->getU16NoEx (" mgv7_large_cave_num_max" , large_cave_num_max);
183
161
settings->getFloatNoEx (" mgv7_large_cave_flooded" , large_cave_flooded);
184
- settings->getFloatNoEx (" mgv7_float_mount_density" , float_mount_density);
185
- settings->getFloatNoEx (" mgv7_float_mount_height" , float_mount_height);
186
- settings->getFloatNoEx (" mgv7_float_mount_exponent" , float_mount_exponent);
187
- settings->getS16NoEx (" mgv7_floatland_level" , floatland_level);
188
- settings->getS16NoEx (" mgv7_shadow_limit" , shadow_limit);
189
162
settings->getS16NoEx (" mgv7_cavern_limit" , cavern_limit);
190
163
settings->getS16NoEx (" mgv7_cavern_taper" , cavern_taper);
191
164
settings->getFloatNoEx (" mgv7_cavern_threshold" , cavern_threshold);
192
165
settings->getS16NoEx (" mgv7_dungeon_ymin" , dungeon_ymin);
193
166
settings->getS16NoEx (" mgv7_dungeon_ymax" , dungeon_ymax);
194
167
195
- settings->getNoiseParams (" mgv7_np_terrain_base" , np_terrain_base);
196
- settings->getNoiseParams (" mgv7_np_terrain_alt" , np_terrain_alt);
197
- settings->getNoiseParams (" mgv7_np_terrain_persist" , np_terrain_persist);
198
- settings->getNoiseParams (" mgv7_np_height_select" , np_height_select);
199
- settings->getNoiseParams (" mgv7_np_filler_depth" , np_filler_depth);
200
- settings->getNoiseParams (" mgv7_np_mount_height" , np_mount_height);
201
- settings->getNoiseParams (" mgv7_np_ridge_uwater" , np_ridge_uwater);
202
- settings->getNoiseParams (" mgv7_np_floatland_base" , np_floatland_base);
203
- settings->getNoiseParams (" mgv7_np_float_base_height" , np_float_base_height);
204
- settings->getNoiseParams (" mgv7_np_mountain" , np_mountain);
205
- settings->getNoiseParams (" mgv7_np_ridge" , np_ridge);
206
- settings->getNoiseParams (" mgv7_np_cavern" , np_cavern);
207
- settings->getNoiseParams (" mgv7_np_cave1" , np_cave1);
208
- settings->getNoiseParams (" mgv7_np_cave2" , np_cave2);
209
- settings->getNoiseParams (" mgv7_np_dungeons" , np_dungeons);
168
+ settings->getNoiseParams (" mgv7_np_terrain_base" , np_terrain_base);
169
+ settings->getNoiseParams (" mgv7_np_terrain_alt" , np_terrain_alt);
170
+ settings->getNoiseParams (" mgv7_np_terrain_persist" , np_terrain_persist);
171
+ settings->getNoiseParams (" mgv7_np_height_select" , np_height_select);
172
+ settings->getNoiseParams (" mgv7_np_filler_depth" , np_filler_depth);
173
+ settings->getNoiseParams (" mgv7_np_mount_height" , np_mount_height);
174
+ settings->getNoiseParams (" mgv7_np_ridge_uwater" , np_ridge_uwater);
175
+ settings->getNoiseParams (" mgv7_np_mountain" , np_mountain);
176
+ settings->getNoiseParams (" mgv7_np_ridge" , np_ridge);
177
+ settings->getNoiseParams (" mgv7_np_cavern" , np_cavern);
178
+ settings->getNoiseParams (" mgv7_np_cave1" , np_cave1);
179
+ settings->getNoiseParams (" mgv7_np_cave2" , np_cave2);
180
+ settings->getNoiseParams (" mgv7_np_dungeons" , np_dungeons);
210
181
}
211
182
212
183
213
184
void MapgenV7Params::writeParams (Settings *settings) const
214
185
{
215
186
settings->setFlagStr (" mgv7_spflags" , spflags, flagdesc_mapgen_v7, U32_MAX);
216
- settings->setS16 (" mgv7_mount_zero_level" , mount_zero_level);
217
- settings->setFloat (" mgv7_cave_width" , cave_width);
218
- settings->setS16 (" mgv7_large_cave_depth" , large_cave_depth);
219
- settings->setU16 (" mgv7_small_cave_num_min" , small_cave_num_min);
220
- settings->setU16 (" mgv7_small_cave_num_max" , small_cave_num_max);
221
- settings->setU16 (" mgv7_large_cave_num_min" , large_cave_num_min);
222
- settings->setU16 (" mgv7_large_cave_num_max" , large_cave_num_max);
223
- settings->setFloat (" mgv7_large_cave_flooded" , large_cave_flooded);
224
- settings->setFloat (" mgv7_float_mount_density" , float_mount_density);
225
- settings->setFloat (" mgv7_float_mount_height" , float_mount_height);
226
- settings->setFloat (" mgv7_float_mount_exponent" , float_mount_exponent);
227
- settings->setS16 (" mgv7_floatland_level" , floatland_level);
228
- settings->setS16 (" mgv7_shadow_limit" , shadow_limit);
229
- settings->setS16 (" mgv7_cavern_limit" , cavern_limit);
230
- settings->setS16 (" mgv7_cavern_taper" , cavern_taper);
231
- settings->setFloat (" mgv7_cavern_threshold" , cavern_threshold);
232
- settings->setS16 (" mgv7_dungeon_ymin" , dungeon_ymin);
233
- settings->setS16 (" mgv7_dungeon_ymax" , dungeon_ymax);
234
-
235
- settings->setNoiseParams (" mgv7_np_terrain_base" , np_terrain_base);
236
- settings->setNoiseParams (" mgv7_np_terrain_alt" , np_terrain_alt);
237
- settings->setNoiseParams (" mgv7_np_terrain_persist" , np_terrain_persist);
238
- settings->setNoiseParams (" mgv7_np_height_select" , np_height_select);
239
- settings->setNoiseParams (" mgv7_np_filler_depth" , np_filler_depth);
240
- settings->setNoiseParams (" mgv7_np_mount_height" , np_mount_height);
241
- settings->setNoiseParams (" mgv7_np_ridge_uwater" , np_ridge_uwater);
242
- settings->setNoiseParams (" mgv7_np_floatland_base" , np_floatland_base);
243
- settings->setNoiseParams (" mgv7_np_float_base_height" , np_float_base_height);
244
- settings->setNoiseParams (" mgv7_np_mountain" , np_mountain);
245
- settings->setNoiseParams (" mgv7_np_ridge" , np_ridge);
246
- settings->setNoiseParams (" mgv7_np_cavern" , np_cavern);
247
- settings->setNoiseParams (" mgv7_np_cave1" , np_cave1);
248
- settings->setNoiseParams (" mgv7_np_cave2" , np_cave2);
249
- settings->setNoiseParams (" mgv7_np_dungeons" , np_dungeons);
187
+ settings->setS16 (" mgv7_mount_zero_level" , mount_zero_level);
188
+ settings->setFloat (" mgv7_cave_width" , cave_width);
189
+ settings->setS16 (" mgv7_large_cave_depth" , large_cave_depth);
190
+ settings->setU16 (" mgv7_small_cave_num_min" , small_cave_num_min);
191
+ settings->setU16 (" mgv7_small_cave_num_max" , small_cave_num_max);
192
+ settings->setU16 (" mgv7_large_cave_num_min" , large_cave_num_min);
193
+ settings->setU16 (" mgv7_large_cave_num_max" , large_cave_num_max);
194
+ settings->setFloat (" mgv7_large_cave_flooded" , large_cave_flooded);
195
+ settings->setS16 (" mgv7_cavern_limit" , cavern_limit);
196
+ settings->setS16 (" mgv7_cavern_taper" , cavern_taper);
197
+ settings->setFloat (" mgv7_cavern_threshold" , cavern_threshold);
198
+ settings->setS16 (" mgv7_dungeon_ymin" , dungeon_ymin);
199
+ settings->setS16 (" mgv7_dungeon_ymax" , dungeon_ymax);
200
+
201
+ settings->setNoiseParams (" mgv7_np_terrain_base" , np_terrain_base);
202
+ settings->setNoiseParams (" mgv7_np_terrain_alt" , np_terrain_alt);
203
+ settings->setNoiseParams (" mgv7_np_terrain_persist" , np_terrain_persist);
204
+ settings->setNoiseParams (" mgv7_np_height_select" , np_height_select);
205
+ settings->setNoiseParams (" mgv7_np_filler_depth" , np_filler_depth);
206
+ settings->setNoiseParams (" mgv7_np_mount_height" , np_mount_height);
207
+ settings->setNoiseParams (" mgv7_np_ridge_uwater" , np_ridge_uwater);
208
+ settings->setNoiseParams (" mgv7_np_mountain" , np_mountain);
209
+ settings->setNoiseParams (" mgv7_np_ridge" , np_ridge);
210
+ settings->setNoiseParams (" mgv7_np_cavern" , np_cavern);
211
+ settings->setNoiseParams (" mgv7_np_cave1" , np_cave1);
212
+ settings->setNoiseParams (" mgv7_np_cave2" , np_cave2);
213
+ settings->setNoiseParams (" mgv7_np_dungeons" , np_dungeons);
250
214
}
251
215
252
216
@@ -386,10 +350,9 @@ void MapgenV7::makeChunk(BlockMakeData *data)
386
350
// Update liquids
387
351
updateLiquid (&data->transforming_liquid , full_node_min, full_node_max);
388
352
389
- // Calculate lighting.
390
- // Limit floatland shadow.
391
- bool propagate_shadow = !((spflags & MGV7_FLOATLANDS) &&
392
- node_min.Y <= shadow_limit && node_max.Y >= shadow_limit);
353
+ // Calculate lighting
354
+ // TODO disable in and just below floatlands
355
+ bool propagate_shadow = true ;
393
356
394
357
if (flags & MG_LIGHT)
395
358
calcLighting (node_min - v3s16 (0 , 1 , 0 ), node_max + v3s16 (0 , 1 , 0 ),
@@ -458,53 +421,6 @@ bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y)
458
421
}
459
422
460
423
461
- bool MapgenV7::getFloatlandMountainFromMap (int idx_xyz, int idx_xz, s16 y)
462
- {
463
- // Make rim 2 nodes thick to match floatland base terrain
464
- float density_gradient = (y >= floatland_level) ?
465
- -std::pow ((float )(y - floatland_level) / float_mount_height,
466
- float_mount_exponent) :
467
- -std::pow ((float )(floatland_level - 1 - y) / float_mount_height,
468
- float_mount_exponent);
469
-
470
- float floatn = noise_mountain->result [idx_xyz] + float_mount_density;
471
-
472
- return floatn + density_gradient >= 0 .0f ;
473
- }
474
-
475
-
476
- void MapgenV7::floatBaseExtentFromMap (s16 *float_base_min, s16 *float_base_max,
477
- int idx_xz)
478
- {
479
- // '+1' to avoid a layer of stone at y = MAX_MAP_GENERATION_LIMIT
480
- s16 base_min = MAX_MAP_GENERATION_LIMIT + 1 ;
481
- s16 base_max = MAX_MAP_GENERATION_LIMIT;
482
-
483
- float n_base = noise_floatland_base->result [idx_xz];
484
- if (n_base > 0 .0f ) {
485
- float n_base_height =
486
- std::fmax (noise_float_base_height->result [idx_xz], 1 .0f );
487
- float amp = n_base * n_base_height;
488
- float ridge = n_base_height / 3 .0f ;
489
- base_min = floatland_level - amp / 1 .5f ;
490
-
491
- if (amp > ridge * 2 .0f ) {
492
- // Lake bed
493
- base_max = floatland_level - (amp - ridge * 2 .0f ) / 2 .0f ;
494
- } else {
495
- // Hills and ridges
496
- float diff = std::fabs (amp - ridge) / ridge;
497
- // Smooth ridges using the 'smoothstep function'
498
- float smooth_diff = diff * diff * (3 .0f - 2 .0f * diff);
499
- base_max = floatland_level + ridge - smooth_diff * ridge;
500
- }
501
- }
502
-
503
- *float_base_min = base_min;
504
- *float_base_max = base_max;
505
- }
506
-
507
-
508
424
int MapgenV7::generateTerrain ()
509
425
{
510
426
MapNode n_air (CONTENT_AIR);
@@ -519,17 +435,9 @@ int MapgenV7::generateTerrain()
519
435
noise_terrain_alt->perlinMap2D (node_min.X , node_min.Z , persistmap);
520
436
noise_height_select->perlinMap2D (node_min.X , node_min.Z );
521
437
522
- if ((spflags & MGV7_MOUNTAINS) || (spflags & MGV7_FLOATLANDS)) {
523
- noise_mountain->perlinMap3D (node_min.X , node_min.Y - 1 , node_min.Z );
524
- }
525
-
526
438
if (spflags & MGV7_MOUNTAINS) {
527
439
noise_mount_height->perlinMap2D (node_min.X , node_min.Z );
528
- }
529
-
530
- if (spflags & MGV7_FLOATLANDS) {
531
- noise_floatland_base->perlinMap2D (node_min.X , node_min.Z );
532
- noise_float_base_height->perlinMap2D (node_min.X , node_min.Z );
440
+ noise_mountain->perlinMap3D (node_min.X , node_min.Y - 1 , node_min.Z );
533
441
}
534
442
535
443
// // Place nodes
@@ -543,13 +451,6 @@ int MapgenV7::generateTerrain()
543
451
if (surface_y > stone_surface_max_y)
544
452
stone_surface_max_y = surface_y;
545
453
546
- // Get extent of floatland base terrain
547
- // '+1' to avoid a layer of stone at y = MAX_MAP_GENERATION_LIMIT
548
- s16 float_base_min = MAX_MAP_GENERATION_LIMIT + 1 ;
549
- s16 float_base_max = MAX_MAP_GENERATION_LIMIT;
550
- if (spflags & MGV7_FLOATLANDS)
551
- floatBaseExtentFromMap (&float_base_min, &float_base_max, index2d);
552
-
553
454
u32 vi = vm->m_area .index (x, node_min.Y - 1 , z);
554
455
u32 index3d = (z - node_min.Z ) * zstride_1u1d + (x - node_min.X );
555
456
@@ -567,16 +468,8 @@ int MapgenV7::generateTerrain()
567
468
vm->m_data [vi] = n_stone; // Mountain terrain
568
469
if (y > stone_surface_max_y)
569
470
stone_surface_max_y = y;
570
- } else if ((spflags & MGV7_FLOATLANDS) &&
571
- ((y >= float_base_min && y <= float_base_max) ||
572
- getFloatlandMountainFromMap (index3d, index2d, y))) {
573
- vm->m_data [vi] = n_stone; // Floatland terrain
574
- stone_surface_max_y = node_max.Y ;
575
471
} else if (y <= water_level) {
576
- vm->m_data [vi] = n_water; // Ground level water
577
- } else if ((spflags & MGV7_FLOATLANDS) &&
578
- (y >= float_base_max && y <= floatland_level)) {
579
- vm->m_data [vi] = n_water; // Floatland water
472
+ vm->m_data [vi] = n_water;
580
473
} else {
581
474
vm->m_data [vi] = n_air;
582
475
}
@@ -589,8 +482,8 @@ int MapgenV7::generateTerrain()
589
482
590
483
void MapgenV7::generateRidgeTerrain ()
591
484
{
592
- if (node_max. Y < water_level - 16 ||
593
- ((spflags & MGV7_FLOATLANDS) && node_max.Y > shadow_limit) )
485
+ // TODO disable river canyons in floatlands
486
+ if ( node_max.Y < water_level - 16 )
594
487
return ;
595
488
596
489
noise_ridge->perlinMap3D (node_min.X , node_min.Y - 1 , node_min.Z );
0 commit comments