diff --git a/build_tools/build.sh b/build_tools/build.sh index 40032d071..7c91e25e9 100755 --- a/build_tools/build.sh +++ b/build_tools/build.sh @@ -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 diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua index 9ab02599b..477c822f8 100644 --- a/builtin/mainmenu/dlg_create_world.lua +++ b/builtin/mainmenu/dlg_create_world.lua @@ -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"), diff --git a/builtin/mainmenu/dlg_create_world_fm.lua b/builtin/mainmenu/dlg_create_world_fm.lua new file mode 100644 index 000000000..9e1c55f2f --- /dev/null +++ b/builtin/mainmenu/dlg_create_world_fm.lua @@ -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 } }', }, + } +} diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index abdc3e110..892f89adf 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -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 diff --git a/cmake/Modules/freeminer_src.cmake b/cmake/Modules/freeminer_src.cmake index a31c80981..937777105 100644 --- a/cmake/Modules/freeminer_src.cmake +++ b/cmake/Modules/freeminer_src.cmake @@ -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: diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4f0d29a77..64b405488 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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} diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index 96c617dc3..d82e65e30 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -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( diff --git a/src/mapgen/mapgen.h b/src/mapgen/mapgen.h index 1166b2748..afa369fe7 100644 --- a/src/mapgen/mapgen.h +++ b/src/mapgen/mapgen.h @@ -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, }; diff --git a/src/mapgen/mapgen_earth.cpp b/src/mapgen/mapgen_earth.cpp index f14e5bf98..8b7e537b7 100644 --- a/src/mapgen/mapgen_earth.cpp +++ b/src/mapgen/mapgen_earth.cpp @@ -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);