Skip to content

Commit 42b9748

Browse files
committed
Allow swapping lake terrains
For custom lake generations
1 parent 3dd1e0b commit 42b9748

File tree

4 files changed

+28
-9
lines changed

4 files changed

+28
-9
lines changed

doc/JSON/REGION_SETTINGS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ are interpreted.
242242
| `shore_extendable_overmap_terrain` | List of overmap terrains that can be extended to the shore if adjacent. |
243243
| `shore_extendable_overmap_terrain_aliases` | Overmap terrains to treat as different overmap terrain for extending shore. |
244244
| `invert_lakes` | Invert drawing of lakes. What would be a lake is land, what would be land is a lake. |
245+
| `shore_ter` | Overmap terrain id of shore terrain place on boundary with land. |
246+
| `surface_ter` | Overmap terrain id of surface terrain, placed on z = 0. |
247+
| `interior_ter` | Overmap terrain id of interior terrain, placed between surface terrain and bed terrain. |
248+
| `bed_ter` | Overmap terrain id of bed terrain, placed on bottom of the lake. |
245249

246250
### Example
247251

src/overmap_water.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,6 @@ void overmap::place_lakes( const std::vector<const overmap *> &neighbor_overmaps
272272
settings_lake.invert_lakes ^ omt_lake_noise_threshold( origin, p, noise_threshold );
273273
};
274274

275-
const oter_id lake_surface( "lake_surface" );
276-
const oter_id lake_shore( "lake_shore" );
277-
const oter_id lake_water_cube( "lake_water_cube" );
278-
const oter_id lake_bed( "lake_bed" );
279-
280275
// We'll keep track of our visited lake points so we don't repeat the work.
281276
std::unordered_set<point_om_omt> visited;
282277

@@ -357,14 +352,14 @@ void overmap::place_lakes( const std::vector<const overmap *> &neighbor_overmaps
357352
}
358353
}
359354

360-
ter_set( tripoint_om_omt( p, 0 ), shore ? lake_shore : lake_surface );
355+
ter_set( tripoint_om_omt( p, 0 ), shore ? settings_lake.shore : settings_lake.surface );
361356

362357
// If this is not a shore, we'll make our subsurface lake cubes and beds.
363358
if( !shore ) {
364359
for( int z = -1; z > lake_depth; z-- ) {
365-
ter_set( tripoint_om_omt( p, z ), lake_water_cube );
360+
ter_set( tripoint_om_omt( p, z ), settings_lake.interior );
366361
}
367-
ter_set( tripoint_om_omt( p, lake_depth ), lake_bed );
362+
ter_set( tripoint_om_omt( p, lake_depth ), settings_lake.bed );
368363
}
369364
}
370365
}

src/regional_settings.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@
2121

2222
class mapgendata;
2323

24+
static const oter_str_id oter_lake_bed( "lake_bed" );
25+
static const oter_str_id oter_lake_shore( "lake_shore" );
26+
static const oter_str_id oter_lake_surface( "lake_surface" );
27+
static const oter_str_id oter_lake_water_cube( "lake_water_cube" );
28+
2429
static const weighted_string_id_reader<overmap_special_id, int> building_bin_reader( 1 );
2530
static const weighted_string_id_reader<furn_id, int> furn_reader( 1 );
2631
static const weighted_string_id_reader<ter_id, int> ter_reader( 1 );
@@ -516,6 +521,13 @@ void region_settings_overmap_connection::deserialize( const JsonObject &jo )
516521
optional( jo, was_loaded, "inter_city_road_connection", inter_city_road_connection );
517522
}
518523

524+
region_settings_lake::region_settings_lake() :
525+
surface( oter_lake_surface ),
526+
shore( oter_lake_shore ),
527+
interior( oter_lake_water_cube ),
528+
bed( oter_lake_bed )
529+
{}
530+
519531
void region_settings_lake::load( const JsonObject &jo, std::string_view )
520532
{
521533
optional( jo, was_loaded, "noise_threshold_lake", noise_threshold_lake );
@@ -527,6 +539,10 @@ void region_settings_lake::load( const JsonObject &jo, std::string_view )
527539
optional( jo, was_loaded, "shore_extendable_overmap_terrain_aliases",
528540
shore_extendable_overmap_terrain_aliases );
529541
optional( jo, was_loaded, "invert_lakes", invert_lakes, false );
542+
optional( jo, was_loaded, "surface_ter", surface, oter_lake_surface );
543+
optional( jo, was_loaded, "shore_ter", shore, oter_lake_shore );
544+
optional( jo, was_loaded, "interior_ter", interior, oter_lake_water_cube );
545+
optional( jo, was_loaded, "bed_ter", bed, oter_lake_bed );
530546
}
531547

532548
void shore_extendable_overmap_terrain_alias::deserialize( const JsonObject &jo )

src/regional_settings.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,10 @@ struct region_settings_lake {
324324
double noise_threshold_lake = 0.25;
325325
int lake_size_min = 20;
326326
int lake_depth = -5;
327+
oter_str_id surface;
328+
oter_str_id shore;
329+
oter_str_id interior;
330+
oter_str_id bed;
327331
std::vector<oter_str_id> shore_extendable_overmap_terrain;
328332
std::vector<shore_extendable_overmap_terrain_alias> shore_extendable_overmap_terrain_aliases;
329333
bool invert_lakes = false;
@@ -334,7 +338,7 @@ struct region_settings_lake {
334338

335339
static void load_region_settings_lake( const JsonObject &jo, const std::string &src );
336340
static void reset();
337-
region_settings_lake() = default;
341+
region_settings_lake();
338342
};
339343

340344
struct region_settings_ocean {

0 commit comments

Comments
 (0)