diff --git a/README.md b/README.md index 9e5e7e7c4..b1e3205b9 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@
-

Luanti (formerly Minetest)

+

Erbium

Build Status Translation status License

-Luanti is a free open-source voxel game engine with easy modding and game creation. +Erbium is a free and open-source fork of Luanti. Copyright (C) 2010-2025 Perttu Ahola and contributors (see source file comments and the version control log) diff --git a/builtin/mainmenu/game_theme.lua b/builtin/mainmenu/game_theme.lua index b9e7e1d4b..a2136a2cf 100644 --- a/builtin/mainmenu/game_theme.lua +++ b/builtin/mainmenu/game_theme.lua @@ -29,7 +29,14 @@ function mm_game_theme.set_engine(hide_decorations) mm_game_theme.clear_single("header") mm_game_theme.clear_single("footer") - core.set_clouds(false) + + if core.settings:get_bool("menu_dark_theme") then + core.set_clouds_color("#1c2a47") + core.set_sky_color("#090b1a") + else + core.set_clouds_color("#f0f0ff") + core.set_sky_color("#8cbafa") + end if not hide_decorations then mm_game_theme.set_engine_single("header") @@ -37,11 +44,7 @@ function mm_game_theme.set_engine(hide_decorations) end if not have_bg then - if core.settings:get_bool("menu_clouds") then - core.set_clouds(true) - else - mm_game_theme.set_dirt_bg() - end + core.set_clouds(core.settings:get_bool("menu_clouds")) end end @@ -71,12 +74,16 @@ function mm_game_theme.set_game(gamedetails) mm_game_theme.set_game_single("header", gamedetails) mm_game_theme.set_game_single("footer", gamedetails) + if core.settings:get_bool("menu_dark_theme") then + core.set_clouds_color("#1c2a47") + core.set_sky_color("#090b1a") + else + core.set_clouds_color("#f0f0ff") + core.set_sky_color("#8cbafa") + end + if not have_bg then - if core.settings:get_bool("menu_clouds") then - core.set_clouds(true) - else - mm_game_theme.set_dirt_bg() - end + core.set_clouds(core.settings:get_bool("menu_clouds")) end end @@ -156,20 +163,6 @@ function mm_game_theme.set_game_single(identifier, gamedetails) return false end --------------------------------------------------------------------------------- -function mm_game_theme.set_dirt_bg() - if mm_game_theme.texturepack ~= nil then - local path = mm_game_theme.texturepack .. DIR_DELIM .. "default_dirt.png" - if core.set_background("background", path, true, 128) then - return true - end - end - - -- Use universal fallback texture in textures/base/pack - local minimalpath = defaulttexturedir .. "menu_bg.png" - core.set_background("background", minimalpath, true, 128) -end - -------------------------------------------------------------------------------- function mm_game_theme.stop_music() if mm_game_theme.music_handle ~= nil then diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 001ef42e0..25d9d2f25 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -148,7 +148,7 @@ toggle_aux1_key (Toggle Aux1 key) bool false # the place button. # # Requires: keyboard_mouse -repeat_place_time (Place repetition interval) float 0.25 0.16 2.0 +repeat_place_time (Place repetition interval) float 0.25 0.001 2.0 # The minimum time in seconds it takes between digging nodes when holding # the dig button. @@ -885,6 +885,9 @@ tooltip_append_itemname (Append item name) bool false # Use a cloud animation for the main menu background. menu_clouds (Clouds in menu) bool true +# Use dark theme for the main menu background +menu_dark_theme (Menu dark theme) bool true + [**HUD] # Modifies the size of the HUD elements. diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index e01341be8..d0a8198ae 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -127,7 +127,7 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) g_menucloudsmgr = m_rendering_engine->get_scene_manager()->createNewSceneManager(); g_menuclouds = new Clouds(g_menucloudsmgr, ssrc.get(), -1, rand()); g_menuclouds->setHeight(100.0f); - g_menuclouds->update(v3f(0, 0, 0), video::SColor(255, 240, 240, 255)); + g_menuclouds->update(v3f(0, 0, 0), m_rendering_engine->getMenuCloudsColor()); scene::ICameraSceneNode* camera; camera = g_menucloudsmgr->addCameraSceneNode(NULL, v3f(0, 0, 0), v3f(0, 60, 100)); camera->setFarValue(10000); diff --git a/src/client/game.cpp b/src/client/game.cpp index 210b17a27..0ca5ed5fd 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -3697,7 +3697,7 @@ void Game::readSettings() m_cache_enable_fog = g_settings->getBool("enable_fog"); m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f); m_cache_joystick_frustum_sensitivity = std::max(g_settings->getFloat("joystick_frustum_sensitivity"), 0.001f); - m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.16f, 2.0f); + m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.001f, 2.0f); m_repeat_dig_time = g_settings->getFloat("repeat_dig_time", 0.0f, 2.0f); m_cache_enable_noclip = g_settings->getBool("noclip"); diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index dac81c7ca..f44bf684c 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -26,7 +26,6 @@ #include "irr_ptr.h" RenderingEngine *RenderingEngine::s_singleton = nullptr; -const video::SColor RenderingEngine::MENU_SKY_COLOR = video::SColor(255, 140, 186, 250); /* Helper classes */ @@ -310,8 +309,9 @@ void RenderingEngine::draw_load_screen(const std::wstring &text, auto *driver = get_video_driver(); - driver->setFog(RenderingEngine::MENU_SKY_COLOR); - driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR); + driver->setFog(getMenuSkyColor()); + driver->beginScene(true, true, getMenuSkyColor()); + if (g_settings->getBool("menu_clouds")) { g_menuclouds->step(dtime * 3); g_menucloudsmgr->drawAll(); @@ -402,6 +402,29 @@ void RenderingEngine::finalize() core.reset(); } +void RenderingEngine::setMenuSkyColor(video::SColor& color) +{ + m_menu_sky_color = video::SColor(color); +} + +void RenderingEngine::setMenuCloudsColor(video::SColor& color) +{ + m_menu_clouds_color = video::SColor(color); +} + + +const video::SColor RenderingEngine::getMenuSkyColor() +{ + return m_menu_sky_color; +} + +const video::SColor RenderingEngine::getMenuCloudsColor() +{ + return m_menu_clouds_color; +} + + + void RenderingEngine::draw_scene(video::SColor skycolor, bool show_hud, bool draw_wield_tool, bool draw_crosshair) { diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h index f71f16e95..64317103e 100644 --- a/src/client/renderingengine.h +++ b/src/client/renderingengine.h @@ -63,8 +63,6 @@ class FogShaderUniformSetterFactory : public IShaderUniformSetterFactory class RenderingEngine { public: - static const video::SColor MENU_SKY_COLOR; - RenderingEngine(MyEventReceiver *eventReceiver); ~RenderingEngine(); @@ -136,6 +134,12 @@ class RenderingEngine { return m_device->run(); } + + void setMenuSkyColor(video::SColor &color); + void setMenuCloudsColor(video::SColor &color); + const video::SColor getMenuSkyColor(); + const video::SColor getMenuCloudsColor(); + // FIXME: this is still global when it shouldn't be static ShadowRenderer *get_shadow_renderer() @@ -157,6 +161,8 @@ class RenderingEngine } private: + video::SColor m_menu_sky_color = video::SColor(255, 140, 186, 250); + video::SColor m_menu_clouds_color = video::SColor(255, 240, 240, 255); static void settingChangedCallback(const std::string &name, void *data); v2u32 _getWindowSize() const; diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 5d2cbb0d1..6cfca45b2 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -276,6 +276,7 @@ void set_default_settings() settings->setDefault("soft_clouds", "false"); settings->setDefault("cloud_radius", "12"); settings->setDefault("menu_clouds", "true"); + settings->setDefault("menu_dark_theme", "false"); settings->setDefault("translucent_liquids", "true"); settings->setDefault("console_height", "0.6"); settings->setDefault("console_color", "(0,0,0)"); diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp index e1517065b..834fc2a5a 100644 --- a/src/gui/guiEngine.cpp +++ b/src/gui/guiEngine.cpp @@ -310,7 +310,7 @@ void GUIEngine::run() driver->getFog(fog_color, fog_type, fog_start, fog_end, fog_density, fog_pixelfog, fog_rangefog); - driver->setFog(RenderingEngine::MENU_SKY_COLOR, fog_type, fog_start, + driver->setFog(m_rendering_engine->getMenuSkyColor(), fog_type, fog_start, fog_end, fog_density, fog_pixelfog, fog_rangefog); } @@ -347,9 +347,10 @@ void GUIEngine::run() m_script->handleMainMenuEvent("WindowInfoChange"); last_window_info = window_info; } - - driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR); - + + driver->beginScene(true, true, m_rendering_engine->getMenuSkyColor()); + driver->setFog(m_rendering_engine->getMenuSkyColor()); + if (m_clouds_enabled) { drawClouds(dtime); drawOverlay(driver); @@ -403,10 +404,25 @@ GUIEngine::~GUIEngine() /******************************************************************************/ void GUIEngine::drawClouds(float dtime) { + g_menuclouds->update(v3f(0, 0, 0), m_rendering_engine->getMenuCloudsColor()); g_menuclouds->step(dtime * 3); g_menucloudsmgr->drawAll(); } +/******************************************************************************/ +void GUIEngine::setMainMenuCloudsColor(video::SColor& color) +{ +m_rendering_engine->setMenuCloudsColor(color); +} + +/******************************************************************************/ +void GUIEngine::setMainMenuSkyColor(video::SColor& color) +{ + m_rendering_engine->setMenuSkyColor(color); +} + + + /******************************************************************************/ void GUIEngine::setFormspecPrepend(const std::string &fs) { @@ -425,7 +441,7 @@ void GUIEngine::drawBackground(video::IVideoDriver *driver) /* If no texture, draw background of solid color */ if(!texture){ - video::SColor color(255,80,58,37); + video::SColor color = m_rendering_engine->getMenuSkyColor(); core::rect rect(0, 0, screensize.X, screensize.Y); driver->draw2DRectangle(color, rect, NULL); return; diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h index da0700319..b63173a41 100644 --- a/src/gui/guiEngine.h +++ b/src/gui/guiEngine.h @@ -263,5 +263,8 @@ class GUIEngine { /** is drawing of clouds enabled atm */ bool m_clouds_enabled = true; + void setMainMenuCloudsColor(video::SColor& color); + void setMainMenuSkyColor(video::SColor& color); + static void fullscreenChangedCallback(const std::string &name, void *data); }; diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp index 584bd4f00..3ec775ae1 100644 --- a/src/script/lua_api/l_client.cpp +++ b/src/script/lua_api/l_client.cpp @@ -20,8 +20,7 @@ #include "util/string.h" #include "nodedef.h" -#define checkCSMRestrictionFlag(flag) \ - ( getClient(L)->checkCSMRestrictionFlag(CSMRestrictionFlags::flag) ) +#define checkCSMRestrictionFlag(flag) false // Not the same as FlagDesc, which contains an `u32 flag` struct CSMFlagDesc { diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index bde7172c6..a96544ccc 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -218,7 +218,36 @@ int ModApiMainMenu::l_set_clouds(lua_State *L) return 0; } +/******************************************************************************/ +int ModApiMainMenu::l_set_clouds_color(lua_State* L) +{ + GUIEngine* engine = getGuiEngine(L); + sanity_check(engine != NULL); + + std::string value = readParam(L, 1); + video::SColor color = video::SColor(); + parseColorString(value, color, false); + + engine->setMainMenuCloudsColor(color); + + return 0; +} + +/******************************************************************************/ +int ModApiMainMenu::l_set_sky_color(lua_State* L) +{ + GUIEngine* engine = getGuiEngine(L); + sanity_check(engine != NULL); + + std::string value = readParam(L, 1); + video::SColor color = video::SColor(); + parseColorString(value, color, false); + + engine->setMainMenuSkyColor(color); + + return 0; +} /******************************************************************************/ int ModApiMainMenu::l_get_textlist_index(lua_State *L) { @@ -1078,6 +1107,8 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(update_formspec); API_FCT(set_formspec_prepend); API_FCT(set_clouds); + API_FCT(set_sky_color); + API_FCT(set_clouds_color); API_FCT(get_textlist_index); API_FCT(get_table_index); API_FCT(get_worlds); diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index 48cc619dc..fdf00cda3 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -72,7 +72,11 @@ class ModApiMainMenu: public ModApiBase static int l_set_topleft_text(lua_State *L); - static int l_set_clouds(lua_State *L); + static int l_set_clouds(lua_State* L); + + static int l_set_clouds_color(lua_State* L); + + static int l_set_sky_color(lua_State* L); static int l_get_textlist_index(lua_State *L); diff --git a/src/server.cpp b/src/server.cpp index f585e7705..444460bb0 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -589,11 +589,12 @@ void Server::start() // ASCII art for the win! const char *art[] = { - R"( _ _ _ )", - R"(| |_ _ __ _ _ __ | |_(_))", - R"(| | | | |/ _` | '_ \| __| |)", - R"(| | |_| | (_| | | | | |_| |)", - R"(|_|\__,_|\__,_|_| |_|\__|_|)", + R"( ______ _ _ )", + R"(| ____| | | (_) )", + R"(| |__ _ __| |__ _ _ _ _ __ ___ )", + R"(| __| | '__| '_ \| | | | | '_ ` _ \ )", + R"(| |____| | | |_) | | |_| | | | | | |)", + R"(|______|_| |_.__/|_|\__,_|_| |_| |_|)", }; if (!m_admin_chat) { // we're not printing to rawstream to avoid it showing up in the logs. diff --git a/textures/base/pack/menu_bg.png b/textures/base/pack/menu_bg.png deleted file mode 100644 index 31aa93746..000000000 Binary files a/textures/base/pack/menu_bg.png and /dev/null differ