mapgen presets

This commit is contained in:
proller committed 2025-09-25 01:23:39 +02:00
1 parent 59fd60e430
commit 0ca69b3a5d
9 files changed
+89 -79

No files matched your search

+1 -1
View File
@@ -19,7 +19,7 @@ if [ -z "$NO_DEPS" ]; then
SUDO=${SUDO=$(which sudo ||:)}
if [ "$DIST" = "Debian" ] || [ "$DIST" = "Ubuntu" ]; then
${SUDO} apt update
${SUDO} env DEBIAN_FRONTEND=noninteractive apt install -y git subversion build-essential cmake ninja-build ccache libsdl2-dev libbz2-dev libzstd-dev libjpeg-dev libfreetype6-dev libxxf86vm-dev libxi-dev libsqlite3-dev libhiredis-dev libvorbis-dev libopenal-dev libcurl4-openssl-dev libssl-dev libluajit-5.1-dev libgettextpo0 libmsgpack-dev libboost-system-dev clang lld llvm libc++-dev libc++abi-dev
${SUDO} env DEBIAN_FRONTEND=noninteractive apt install -y git subversion build-essential cmake ninja-build ccache libsdl2-dev libbz2-dev libzstd-dev libjpeg-dev libfreetype6-dev libxxf86vm-dev libxi-dev libsqlite3-dev libhiredis-dev libvorbis-dev libopenal-dev libcurl4-openssl-dev libssl-dev libluajit-5.1-dev libgettextpo0 libmsgpack-dev libboost-system-dev clang lld llvm libc++-dev libc++abi-dev libosmium2-dev
for PACKAGE in libpng12-dev libpng-dev libgles1-mesa-dev libgles2-mesa-dev libgl1-mesa-dev ; do
${SUDO} apt install -y $PACKAGE ||:
done
+34
View File
@@ -2,6 +2,8 @@
-- Copyright (C) 2014 sapier
-- SPDX-License-Identifier: LGPL-2.1-or-later
dofile(core.get_mainmenu_path()..DIR_DELIM.."dlg_create_world_fm.lua")
local function table_to_flags(ftable)
-- Convert e.g. { jungles = true, caves = false } to "jungles,nocaves"
local str = {}
@@ -35,6 +37,10 @@ local flag_checkboxes = {
{ "floatlands", fgettext("Floatlands (experimental)"),
fgettext("Floating landmasses in the sky") },
},
earth = {
cb_caverns,
--{ "floatlands", fgettext("Floatlands (experimental)"), fgettext("Floating landmasses in the sky") },
},
v5 = {
cb_caverns,
@@ -230,6 +236,22 @@ local function create_world_formspec(dialogdata)
y = y + 0.5
end
-- fm:
y = y + 0.2
form = form .. "label[0,"..(y+0.1)..";" .. fgettext("Preset") .. "]"
y = y + 0.5
if mg_preset[mapgen] then
form = form .. "dropdown[0,"..y..";6.3;mg_preset;"
for preset, opt in pairs(mg_preset[mapgen]) do
form = form .. preset .. ","
for opt, val in pairs(mg_preset[mapgen][preset]) do
end
end
end
form = form .. ";" .. "]"
-- ===
if mapgen ~= "v6" then
-- No special treatment
return form, y
@@ -408,6 +430,15 @@ local function create_world_buttonhandler(this, fields)
mgvalleys_spflags = table_to_flags(this.data.flags.valleys),
mgflat_spflags = table_to_flags(this.data.flags.flat),
}
-- fm:
if fields["mg_preset"] then
for opt, val in pairs(mg_preset[settings.mg_name][fields["mg_preset"]]) do
settings[opt] = val;
end
end
-- ===
message = core.create_world(worldname, game.id, settings)
end
@@ -483,8 +514,11 @@ function create_create_world_dlg()
mg = core.settings:get("mg_name"),
flags = {
main = core.settings:get_flags("mg_flags"),
indev = core.settings:get_flags("mgindev_spflags"),
math = core.settings:get_flags("mgmath_spflags"),
earth = core.settings:get_flags("mgearth_spflags"),
v5 = core.settings:get_flags("mgv5_spflags"),
v6 = core.settings:get_flags("mgv6_spflags"),
v7 = core.settings:get_flags("mgv7_spflags"),
+37
View File
@@ -0,0 +1,37 @@
mg_preset = {
math = {
xenodreambuie1 = {
mg_math = '{"generator":"xenodreambuie", "N":12, "scale":0.003, "power":2, "julia_mode":1, "julia_a":-1.13}',
mg_float_islands = 0,
},
aexion = {
mg_math = '{"generator" : "aexion", "N" : 11,"cadd" : -1.0002,"size" : 30000 }',
water_level = -30000,
mg_float_islands = 0,
static_spawnpoint = '0, 2, 0',
},
hypercomplex = {
mg_math = '{"generator":"hypercomplex", "scale":0.0001, "N":12, "interior_mode": 1, "center":{"x":20000, "y":1, "z":0}}',
mg_float_islands = 0,
static_spawnpoint = '0, 2, 0',
},
xenodreambuie2 = {
mg_math = '{"generator":"xenodreambuie", "N":20, "scale":0.0000001, "power":2, "julia_mode":1, "julia_a": 0.999, "julia_b": 0.1, "julia_c": 1.01, "center":{"x":6021817,"z":-11938439,"y":-3601800}}',
mg_float_islands = 0,
},
rooms = {
mg_math = '{"generator":"rooms"}',
light_ambient = '1'
}
},
earth = {
hong_kong = { mg_earth = '{"center": {"z": 22.28422, "x": 114.15996, "y":0} }', },
new_york = { mg_earth = '{"center": {"z": 40.781137, "x": -73.966487, "y":0} }', },
everest = { mg_earth = '{"center": {"z": 27.9878279, "x": 86.923833, "y":0} }', },
big_canyon = { mg_earth = '{"center": {"z": 34.2139435, "x": -111.1582085, "y":0} }', },
dolomites = { mg_earth = '{"center": {"z": 46.4084595, "x": 11.8393018 } }', },
matterhorn = { mg_earth = '{"center": {"z": 45.976400, "x": 7.658600 } }', },
dubai = { mg_earth = '{"center": {"z": 25.19715, "x": 55.27288 } }', },
}
}
+1 -1
View File
@@ -1440,7 +1440,7 @@ fixed_map_seed (Fixed map seed) string
# Creating a world in the main menu will override this.
# Current mapgens in a highly unstable state:
# - The optional floatlands of v7 (disabled by default).
mg_name (Mapgen name) enum v7 indev,math,v7,valleys,carpathian,v5,flat,fractal,singlenode,v6
mg_name (Mapgen name) enum earth earth,indev,math,v7,valleys,carpathian,v5,flat,fractal,singlenode,v6
# Water surface level of the world.
water_level (Water level) int 1 -31000 31000
+1 -2
View File
@@ -110,7 +110,7 @@ if(ENABLE_OSMIUM AND (OSMIUM_INCLUDE_DIR OR EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/e
set(BUILD_EXAMPLES 0 CACHE INTERNAL "")
set(BUILD_BENCHMARKS 0 CACHE INTERNAL "")
if (NOT OSMIUM_INCLUDE_DIR)
if (NOT OSMIUM_INCLUDE_DIR AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/external/libosmium/CMakeLists.txt)
add_subdirectory(external/libosmium)
set(OSMIUM_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/libosmium/include)
include_directories(BEFORE SYSTEM ${OSMIUM_INCLUDE_DIR})
@@ -168,6 +168,5 @@ set(FMcommon_SRCS ${FMcommon_SRCS}
fm_abm.cpp
fm_clientiface.cpp
fm_serverenvironment.cpp
${DEBUG_SRCS}
)
# == end freeminer:
+4 -2
View File
@@ -1,5 +1,8 @@
project(freeminer)
include(freeminer_src)
INCLUDE(CheckTypeSize)
INCLUDE(CheckIncludeFiles)
INCLUDE(CheckLibraryExists)
@@ -445,8 +448,6 @@ add_subdirectory(script)
add_subdirectory(util)
add_subdirectory(server)
include(freeminer_src)
# Source files that are identical between server & client builds.
# This means they don't use or include anything that depends on the
# CHECK_CLIENT_BUILD() macro. If you wrongly add something here there will be
@@ -493,6 +494,7 @@ file(GLOB common_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
# /!\ Consider carefully before adding files here /!\
set(common_SRCS
${FMcommon_SRCS}
${DEBUG_SRCS}
${contrib_SRCS}
${common_HDRS}
+6 -4
View File
@@ -84,6 +84,12 @@ struct MapgenDesc {
// Of the remaining, v5 last due to age, v7 first due to being the default.
// The order of 'enum MapgenType' in mapgen.h must match this order.
static MapgenDesc g_reg_mapgens[] = {
// fm:
{"earth", true},
{"math", true},
{"indev", true},
// ===
{"v7", true},
{"valleys", true},
{"carpathian", true},
@@ -92,10 +98,6 @@ static MapgenDesc g_reg_mapgens[] = {
{"fractal", true},
{"singlenode", true},
{"v6", true},
{"indev", true},
{"math", true},
{"earth", true},
};
static_assert(
+5 -4
View File
@@ -102,6 +102,11 @@ private:
// Order must match the order of 'static MapgenDesc g_reg_mapgens[]' in mapgen.cpp
enum MapgenType {
MAPGEN_EARTH,
MAPGEN_INDEV,
MAPGEN_MATH,
MAPGEN_V7,
MAPGEN_VALLEYS,
MAPGEN_CARPATHIAN,
@@ -111,10 +116,6 @@ enum MapgenType {
MAPGEN_SINGLENODE,
MAPGEN_V6,
MAPGEN_INDEV,
MAPGEN_MATH,
MAPGEN_EARTH,
MAPGEN_INVALID,
};
-65
View File
@@ -280,71 +280,6 @@ int MapgenEarth::getGroundLevelAtPoint(v2pos_t p)
return get_height(p.X, p.Y); // + MGV6_AVERAGE_MUD_AMOUNT;
}
#if 0
// https://www.roguebasin.com/index.php?title=Bresenham%27s_Line_Algorithm
void MapgenEarth::bresenham(pos_t x1, pos_t y1, const pos_t x2, const pos_t y2, pos_t y,
pos_t h, const MapNode &n)
{
pos_t delta_x(x2 - x1);
// if x1 == x2, then it does not matter what we set here
const int8_t ix((delta_x > 0) - (delta_x < 0));
delta_x = std::abs(delta_x) << 1;
pos_t delta_y(y2 - y1);
// if y1 == y2, then it does not matter what we set here
const int8_t iy((delta_y > 0) - (delta_y < 0));
delta_y = std::abs(delta_y) << 1;
for (pos_t yi = y; yi <= y + h; ++yi) {
if (vm->exists({x1, yi, y1})) {
vm->setNode({x1, yi, y1}, n);
}
}
if (delta_x >= delta_y) {
// error may go below zero
pos_t error(delta_y - (delta_x >> 1));
while (x1 != x2) {
// reduce error, while taking into account the corner case of error == 0
if ((error > 0) || (!error && (ix > 0))) {
error -= delta_x;
y1 += iy;
}
error += delta_y;
x1 += ix;
for (pos_t yi = y; yi <= y + h; ++yi) {
if (vm->exists({x1, yi, y1})) {
vm->setNode({x1, yi, y1}, n);
}
}
}
} else {
// error may go below zero
int error(delta_x - (delta_y >> 1));
while (y1 != y2) {
// reduce error, while taking into account the corner case of error == 0
if ((error > 0) || (!error && (iy > 0))) {
error -= delta_y;
x1 += ix;
}
error += delta_x;
y1 += iy;
for (pos_t yi = y; yi <= y + h; ++yi) {
if (vm->exists({x1, yi, y1})) {
vm->setNode({x1, yi, y1}, n);
}
}
}
}
}
#endif
int MapgenEarth::generateTerrain()
{
MapNode n_ice(c_ice);